From fcebffe1c5f0c3cc91b807d787a006dc7dd3f076 Mon Sep 17 00:00:00 2001 From: Kevin Cristiano <kcristiano@tadpole.cc> Date: Sun, 8 Apr 2018 10:12:21 -0400 Subject: [PATCH] civicrm: V5.0.0 --- README.md | 11 +- assets/templates/civicrm.shortcode.php | 4 +- civicrm.php | 7 +- civicrm/CONTRIBUTORS.txt | 30 + civicrm/CRM/ACL/API.php | 4 +- civicrm/CRM/ACL/BAO/ACL.php | 4 +- civicrm/CRM/ACL/BAO/Cache.php | 4 +- civicrm/CRM/ACL/BAO/EntityRole.php | 4 +- civicrm/CRM/ACL/DAO/ACL.php | 2 +- civicrm/CRM/ACL/DAO/Cache.php | 2 +- civicrm/CRM/ACL/DAO/EntityRole.php | 2 +- civicrm/CRM/ACL/Form/ACL.php | 4 +- civicrm/CRM/ACL/Form/ACLBasic.php | 4 +- civicrm/CRM/ACL/Form/EntityRole.php | 4 +- .../CRM/ACL/Form/WordPress/Permissions.php | 4 +- civicrm/CRM/ACL/Page/ACL.php | 4 +- civicrm/CRM/ACL/Page/ACLBasic.php | 4 +- civicrm/CRM/ACL/Page/EntityRole.php | 4 +- civicrm/CRM/Activity/ActionMapping.php | 4 +- civicrm/CRM/Activity/BAO/Activity.php | 8 +- .../CRM/Activity/BAO/ActivityAssignment.php | 4 +- civicrm/CRM/Activity/BAO/ActivityContact.php | 4 +- civicrm/CRM/Activity/BAO/ActivityTarget.php | 4 +- civicrm/CRM/Activity/BAO/ICalendar.php | 4 +- civicrm/CRM/Activity/BAO/Query.php | 4 +- civicrm/CRM/Activity/Controller/Search.php | 4 +- civicrm/CRM/Activity/DAO/Activity.php | 2 +- civicrm/CRM/Activity/DAO/ActivityContact.php | 2 +- civicrm/CRM/Activity/Form/Activity.php | 6 +- civicrm/CRM/Activity/Form/ActivityFilter.php | 4 +- civicrm/CRM/Activity/Form/ActivityLinks.php | 25 +- civicrm/CRM/Activity/Form/ActivityView.php | 4 +- civicrm/CRM/Activity/Form/Search.php | 8 +- civicrm/CRM/Activity/Form/Task.php | 4 +- civicrm/CRM/Activity/Form/Task/AddToTag.php | 4 +- civicrm/CRM/Activity/Form/Task/Batch.php | 4 +- civicrm/CRM/Activity/Form/Task/Delete.php | 4 +- civicrm/CRM/Activity/Form/Task/Email.php | 4 +- civicrm/CRM/Activity/Form/Task/FileOnCase.php | 4 +- civicrm/CRM/Activity/Form/Task/PickOption.php | 4 +- .../CRM/Activity/Form/Task/PickProfile.php | 4 +- civicrm/CRM/Activity/Form/Task/Print.php | 4 +- .../CRM/Activity/Form/Task/RemoveFromTag.php | 4 +- civicrm/CRM/Activity/Form/Task/SMS.php | 4 +- .../Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Activity/Import/Controller.php | 4 +- civicrm/CRM/Activity/Import/Field.php | 4 +- .../CRM/Activity/Import/Form/DataSource.php | 4 +- civicrm/CRM/Activity/Import/Form/MapField.php | 4 +- civicrm/CRM/Activity/Import/Form/Preview.php | 4 +- civicrm/CRM/Activity/Import/Form/Summary.php | 4 +- civicrm/CRM/Activity/Import/Parser.php | 4 +- .../CRM/Activity/Import/Parser/Activity.php | 4 +- civicrm/CRM/Activity/Page/AJAX.php | 4 +- civicrm/CRM/Activity/Page/Tab.php | 4 +- civicrm/CRM/Activity/Page/UserDashboard.php | 4 +- civicrm/CRM/Activity/Selector/Activity.php | 4 +- civicrm/CRM/Activity/Selector/Search.php | 4 +- civicrm/CRM/Activity/StateMachine/Search.php | 4 +- civicrm/CRM/Activity/Task.php | 80 +- civicrm/CRM/Activity/Tokens.php | 4 +- civicrm/CRM/Admin/Form.php | 4 +- civicrm/CRM/Admin/Form/CMSUser.php | 4 +- civicrm/CRM/Admin/Form/ContactType.php | 4 +- civicrm/CRM/Admin/Form/Extensions.php | 4 +- civicrm/CRM/Admin/Form/Job.php | 4 +- civicrm/CRM/Admin/Form/LabelFormats.php | 2 +- civicrm/CRM/Admin/Form/LocationType.php | 4 +- civicrm/CRM/Admin/Form/MailSettings.php | 4 +- civicrm/CRM/Admin/Form/Mapping.php | 4 +- civicrm/CRM/Admin/Form/MessageTemplates.php | 4 +- civicrm/CRM/Admin/Form/Navigation.php | 4 +- civicrm/CRM/Admin/Form/OptionGroup.php | 4 +- civicrm/CRM/Admin/Form/Options.php | 4 +- .../CRM/Admin/Form/ParticipantStatusType.php | 4 +- civicrm/CRM/Admin/Form/PaymentProcessor.php | 4 +- .../CRM/Admin/Form/PaymentProcessorType.php | 4 +- civicrm/CRM/Admin/Form/PdfFormats.php | 2 +- civicrm/CRM/Admin/Form/Persistent.php | 4 +- civicrm/CRM/Admin/Form/Preferences.php | 4 +- .../CRM/Admin/Form/Preferences/Address.php | 4 +- .../CRM/Admin/Form/Preferences/Campaign.php | 4 +- .../CRM/Admin/Form/Preferences/Contribute.php | 4 +- .../CRM/Admin/Form/Preferences/Display.php | 4 +- civicrm/CRM/Admin/Form/Preferences/Event.php | 4 +- .../CRM/Admin/Form/Preferences/Mailing.php | 4 +- civicrm/CRM/Admin/Form/Preferences/Member.php | 4 +- .../CRM/Admin/Form/Preferences/Multisite.php | 4 +- civicrm/CRM/Admin/Form/PreferencesDate.php | 4 +- civicrm/CRM/Admin/Form/RelationshipType.php | 4 +- civicrm/CRM/Admin/Form/ScheduleReminders.php | 4 +- civicrm/CRM/Admin/Form/Setting.php | 12 +- civicrm/CRM/Admin/Form/Setting/Case.php | 4 +- civicrm/CRM/Admin/Form/Setting/Component.php | 4 +- civicrm/CRM/Admin/Form/Setting/Date.php | 4 +- civicrm/CRM/Admin/Form/Setting/Debugging.php | 4 +- .../CRM/Admin/Form/Setting/Localization.php | 4 +- civicrm/CRM/Admin/Form/Setting/Mail.php | 4 +- civicrm/CRM/Admin/Form/Setting/Mapping.php | 4 +- .../CRM/Admin/Form/Setting/Miscellaneous.php | 4 +- civicrm/CRM/Admin/Form/Setting/Path.php | 4 +- civicrm/CRM/Admin/Form/Setting/Search.php | 4 +- civicrm/CRM/Admin/Form/Setting/Smtp.php | 4 +- civicrm/CRM/Admin/Form/Setting/UF.php | 4 +- .../Form/Setting/UpdateConfigBackend.php | 4 +- civicrm/CRM/Admin/Form/Setting/Url.php | 4 +- civicrm/CRM/Admin/Form/WordReplacements.php | 4 +- civicrm/CRM/Admin/Page/AJAX.php | 4 +- civicrm/CRM/Admin/Page/APIExplorer.php | 4 +- civicrm/CRM/Admin/Page/Access.php | 4 +- civicrm/CRM/Admin/Page/Admin.php | 4 +- civicrm/CRM/Admin/Page/CKEditorConfig.php | 24 +- civicrm/CRM/Admin/Page/ConfigTaskList.php | 4 +- civicrm/CRM/Admin/Page/ContactType.php | 4 +- civicrm/CRM/Admin/Page/EventTemplate.php | 4 +- civicrm/CRM/Admin/Page/Extensions.php | 4 +- civicrm/CRM/Admin/Page/Job.php | 4 +- civicrm/CRM/Admin/Page/JobLog.php | 4 +- civicrm/CRM/Admin/Page/LabelFormats.php | 2 +- civicrm/CRM/Admin/Page/LocationType.php | 4 +- civicrm/CRM/Admin/Page/MailSettings.php | 4 +- civicrm/CRM/Admin/Page/Mapping.php | 4 +- civicrm/CRM/Admin/Page/MessageTemplates.php | 4 +- civicrm/CRM/Admin/Page/Navigation.php | 4 +- civicrm/CRM/Admin/Page/Options.php | 5 +- .../CRM/Admin/Page/ParticipantStatusType.php | 4 +- civicrm/CRM/Admin/Page/PaymentProcessor.php | 4 +- .../CRM/Admin/Page/PaymentProcessorType.php | 4 +- civicrm/CRM/Admin/Page/PdfFormats.php | 2 +- civicrm/CRM/Admin/Page/Persistent.php | 4 +- civicrm/CRM/Admin/Page/PreferencesDate.php | 4 +- civicrm/CRM/Admin/Page/RelationshipType.php | 4 +- civicrm/CRM/Admin/Page/ScheduleReminders.php | 4 +- civicrm/CRM/Admin/Page/Setting.php | 4 +- civicrm/CRM/Badge/BAO/Badge.php | 2 +- civicrm/CRM/Badge/BAO/Layout.php | 4 +- civicrm/CRM/Badge/Form/Layout.php | 4 +- civicrm/CRM/Badge/Page/AJAX.php | 4 +- civicrm/CRM/Badge/Page/Layout.php | 4 +- civicrm/CRM/Batch/BAO/Batch.php | 4 +- civicrm/CRM/Batch/BAO/EntityBatch.php | 4 +- civicrm/CRM/Batch/DAO/Batch.php | 2 +- civicrm/CRM/Batch/DAO/EntityBatch.php | 2 +- civicrm/CRM/Batch/Form/Batch.php | 2 +- civicrm/CRM/Batch/Form/Entry.php | 4 +- civicrm/CRM/Batch/Form/Search.php | 4 +- civicrm/CRM/Batch/Page/AJAX.php | 4 +- civicrm/CRM/Batch/Page/Batch.php | 4 +- civicrm/CRM/Bridge/OG/CiviCRM.php | 4 +- civicrm/CRM/Bridge/OG/Drupal.php | 4 +- civicrm/CRM/Bridge/OG/Utils.php | 4 +- civicrm/CRM/Campaign/BAO/Campaign.php | 4 +- civicrm/CRM/Campaign/BAO/Petition.php | 4 +- civicrm/CRM/Campaign/BAO/Query.php | 4 +- civicrm/CRM/Campaign/BAO/Survey.php | 25 +- civicrm/CRM/Campaign/Controller/Search.php | 4 +- civicrm/CRM/Campaign/DAO/Campaign.php | 2 +- civicrm/CRM/Campaign/DAO/CampaignGroup.php | 2 +- civicrm/CRM/Campaign/DAO/Survey.php | 2 +- civicrm/CRM/Campaign/Form/Campaign.php | 4 +- civicrm/CRM/Campaign/Form/Gotv.php | 4 +- civicrm/CRM/Campaign/Form/Petition.php | 4 +- .../CRM/Campaign/Form/Petition/Signature.php | 4 +- civicrm/CRM/Campaign/Form/Search.php | 13 +- civicrm/CRM/Campaign/Form/Search/Campaign.php | 4 +- civicrm/CRM/Campaign/Form/Search/Petition.php | 4 +- civicrm/CRM/Campaign/Form/Search/Survey.php | 4 +- civicrm/CRM/Campaign/Form/Survey.php | 4 +- civicrm/CRM/Campaign/Form/Survey/Delete.php | 4 +- civicrm/CRM/Campaign/Form/Survey/Main.php | 4 +- .../CRM/Campaign/Form/Survey/Questions.php | 4 +- civicrm/CRM/Campaign/Form/Survey/Results.php | 4 +- .../CRM/Campaign/Form/Survey/TabHeader.php | 4 +- civicrm/CRM/Campaign/Form/SurveyType.php | 4 +- civicrm/CRM/Campaign/Form/Task.php | 4 +- civicrm/CRM/Campaign/Form/Task/Interview.php | 4 +- civicrm/CRM/Campaign/Form/Task/Print.php | 4 +- civicrm/CRM/Campaign/Form/Task/Release.php | 4 +- civicrm/CRM/Campaign/Form/Task/Reserve.php | 4 +- civicrm/CRM/Campaign/Form/Task/Result.php | 4 +- civicrm/CRM/Campaign/Info.php | 4 +- civicrm/CRM/Campaign/Page/AJAX.php | 4 +- civicrm/CRM/Campaign/Page/DashBoard.php | 4 +- civicrm/CRM/Campaign/Page/Petition.php | 4 +- .../CRM/Campaign/Page/Petition/Confirm.php | 4 +- .../CRM/Campaign/Page/Petition/ThankYou.php | 4 +- civicrm/CRM/Campaign/Page/SurveyType.php | 4 +- civicrm/CRM/Campaign/Page/Vote.php | 4 +- civicrm/CRM/Campaign/PseudoConstant.php | 4 +- civicrm/CRM/Campaign/Selector/Search.php | 4 +- civicrm/CRM/Campaign/StateMachine/Search.php | 4 +- civicrm/CRM/Campaign/Task.php | 63 +- civicrm/CRM/Case/BAO/Case.php | 4 +- civicrm/CRM/Case/BAO/CaseContact.php | 4 +- civicrm/CRM/Case/BAO/CaseType.php | 4 +- civicrm/CRM/Case/BAO/Query.php | 4 +- civicrm/CRM/Case/Controller/Search.php | 4 +- civicrm/CRM/Case/DAO/Case.php | 2 +- civicrm/CRM/Case/DAO/CaseActivity.php | 2 +- civicrm/CRM/Case/DAO/CaseContact.php | 2 +- civicrm/CRM/Case/DAO/CaseType.php | 2 +- civicrm/CRM/Case/Form/Activity.php | 4 +- .../Form/Activity/ChangeCaseStartDate.php | 4 +- .../Case/Form/Activity/ChangeCaseStatus.php | 4 +- .../CRM/Case/Form/Activity/ChangeCaseType.php | 4 +- civicrm/CRM/Case/Form/Activity/LinkCases.php | 4 +- civicrm/CRM/Case/Form/Activity/OpenCase.php | 4 +- civicrm/CRM/Case/Form/ActivityToCase.php | 4 +- civicrm/CRM/Case/Form/ActivityView.php | 4 +- civicrm/CRM/Case/Form/Case.php | 4 +- civicrm/CRM/Case/Form/CaseView.php | 4 +- civicrm/CRM/Case/Form/CustomData.php | 4 +- civicrm/CRM/Case/Form/EditClient.php | 4 +- civicrm/CRM/Case/Form/Report.php | 4 +- civicrm/CRM/Case/Form/Search.php | 12 +- civicrm/CRM/Case/Form/Task.php | 74 +- civicrm/CRM/Case/Form/Task/Batch.php | 118 + civicrm/CRM/Case/Form/Task/Delete.php | 4 +- civicrm/CRM/Case/Form/Task/PDF.php | 6 +- civicrm/CRM/Case/Form/Task/PickProfile.php | 52 + civicrm/CRM/Case/Form/Task/Print.php | 4 +- civicrm/CRM/Case/Form/Task/Restore.php | 4 +- civicrm/CRM/Case/Form/Task/Result.php | 4 +- .../Case/Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Case/Info.php | 4 +- civicrm/CRM/Case/Page/AJAX.php | 4 +- civicrm/CRM/Case/Page/CaseDetails.php | 4 +- civicrm/CRM/Case/Page/DashBoard.php | 4 +- civicrm/CRM/Case/Page/Tab.php | 4 +- civicrm/CRM/Case/PseudoConstant.php | 4 +- civicrm/CRM/Case/Selector/Search.php | 4 +- civicrm/CRM/Case/StateMachine/Search.php | 4 +- civicrm/CRM/Case/Task.php | 86 +- civicrm/CRM/Case/XMLProcessor.php | 4 +- civicrm/CRM/Case/XMLProcessor/Process.php | 4 +- civicrm/CRM/Case/XMLProcessor/Report.php | 4 +- civicrm/CRM/Case/XMLProcessor/Settings.php | 4 +- civicrm/CRM/Case/XMLRepository.php | 4 +- civicrm/CRM/Contact/ActionMapping.php | 2 +- civicrm/CRM/Contact/BAO/Contact.php | 9 +- civicrm/CRM/Contact/BAO/Contact/Location.php | 6 +- .../CRM/Contact/BAO/Contact/Permission.php | 4 +- civicrm/CRM/Contact/BAO/Contact/Utils.php | 15 +- civicrm/CRM/Contact/BAO/ContactType.php | 7 +- civicrm/CRM/Contact/BAO/DashboardContact.php | 4 +- civicrm/CRM/Contact/BAO/Group.php | 4 +- civicrm/CRM/Contact/BAO/GroupContact.php | 4 +- civicrm/CRM/Contact/BAO/GroupContactCache.php | 4 +- civicrm/CRM/Contact/BAO/GroupNesting.php | 22 + civicrm/CRM/Contact/BAO/GroupNestingCache.php | 4 +- civicrm/CRM/Contact/BAO/GroupOrganization.php | 45 +- civicrm/CRM/Contact/BAO/Household.php | 4 +- civicrm/CRM/Contact/BAO/Individual.php | 4 +- civicrm/CRM/Contact/BAO/ProximityQuery.php | 4 +- civicrm/CRM/Contact/BAO/Query.php | 79 +- civicrm/CRM/Contact/BAO/Query/Hook.php | 4 +- civicrm/CRM/Contact/BAO/Query/Interface.php | 4 +- civicrm/CRM/Contact/BAO/Relationship.php | 2 +- civicrm/CRM/Contact/BAO/RelationshipType.php | 11 +- civicrm/CRM/Contact/BAO/SavedSearch.php | 4 +- civicrm/CRM/Contact/BAO/SearchCustom.php | 4 +- .../CRM/Contact/BAO/SubscriptionHistory.php | 4 +- civicrm/CRM/Contact/Controller/Search.php | 4 +- civicrm/CRM/Contact/DAO/ACLContactCache.php | 2 +- civicrm/CRM/Contact/DAO/Contact.php | 2 +- civicrm/CRM/Contact/DAO/ContactType.php | 2 +- civicrm/CRM/Contact/DAO/DashboardContact.php | 2 +- civicrm/CRM/Contact/DAO/Group.php | 2 +- civicrm/CRM/Contact/DAO/GroupContact.php | 2 +- civicrm/CRM/Contact/DAO/GroupContactCache.php | 2 +- civicrm/CRM/Contact/DAO/GroupNesting.php | 2 +- civicrm/CRM/Contact/DAO/GroupOrganization.php | 2 +- civicrm/CRM/Contact/DAO/Relationship.php | 2 +- civicrm/CRM/Contact/DAO/RelationshipType.php | 2 +- civicrm/CRM/Contact/DAO/SavedSearch.php | 2 +- .../CRM/Contact/DAO/SubscriptionHistory.php | 2 +- civicrm/CRM/Contact/Form/Contact.php | 4 +- civicrm/CRM/Contact/Form/CustomData.php | 4 +- civicrm/CRM/Contact/Form/DedupeFind.php | 9 +- civicrm/CRM/Contact/Form/DedupeRules.php | 4 +- civicrm/CRM/Contact/Form/Domain.php | 4 +- civicrm/CRM/Contact/Form/Edit/Address.php | 4 +- .../Form/Edit/CommunicationPreferences.php | 4 +- civicrm/CRM/Contact/Form/Edit/CustomData.php | 4 +- .../CRM/Contact/Form/Edit/Demographics.php | 4 +- civicrm/CRM/Contact/Form/Edit/Email.php | 4 +- civicrm/CRM/Contact/Form/Edit/Household.php | 4 +- civicrm/CRM/Contact/Form/Edit/IM.php | 4 +- civicrm/CRM/Contact/Form/Edit/Individual.php | 4 +- civicrm/CRM/Contact/Form/Edit/Lock.php | 4 +- civicrm/CRM/Contact/Form/Edit/Notes.php | 4 +- civicrm/CRM/Contact/Form/Edit/OpenID.php | 4 +- .../CRM/Contact/Form/Edit/Organization.php | 4 +- civicrm/CRM/Contact/Form/Edit/Phone.php | 4 +- .../CRM/Contact/Form/Edit/TagsAndGroups.php | 4 +- civicrm/CRM/Contact/Form/Edit/Website.php | 4 +- civicrm/CRM/Contact/Form/GroupContact.php | 4 +- civicrm/CRM/Contact/Form/Inline.php | 4 +- civicrm/CRM/Contact/Form/Inline/Address.php | 4 +- .../Form/Inline/CommunicationPreferences.php | 4 +- .../CRM/Contact/Form/Inline/ContactInfo.php | 4 +- .../CRM/Contact/Form/Inline/ContactName.php | 4 +- .../CRM/Contact/Form/Inline/CustomData.php | 4 +- .../CRM/Contact/Form/Inline/Demographics.php | 4 +- civicrm/CRM/Contact/Form/Inline/Email.php | 4 +- civicrm/CRM/Contact/Form/Inline/IM.php | 4 +- civicrm/CRM/Contact/Form/Inline/Lock.php | 4 +- civicrm/CRM/Contact/Form/Inline/OpenID.php | 4 +- civicrm/CRM/Contact/Form/Inline/Phone.php | 4 +- civicrm/CRM/Contact/Form/Inline/Website.php | 6 +- civicrm/CRM/Contact/Form/Location.php | 4 +- civicrm/CRM/Contact/Form/Merge.php | 51 +- civicrm/CRM/Contact/Form/RelatedContact.php | 4 +- civicrm/CRM/Contact/Form/Relationship.php | 2 +- civicrm/CRM/Contact/Form/Search.php | 103 +- civicrm/CRM/Contact/Form/Search/Advanced.php | 6 +- civicrm/CRM/Contact/Form/Search/Basic.php | 6 +- civicrm/CRM/Contact/Form/Search/Builder.php | 4 +- civicrm/CRM/Contact/Form/Search/Criteria.php | 38 +- civicrm/CRM/Contact/Form/Search/Custom.php | 4 +- .../Form/Search/Custom/ActivitySearch.php | 4 +- .../CRM/Contact/Form/Search/Custom/Base.php | 4 +- .../CRM/Contact/Form/Search/Custom/Basic.php | 4 +- .../Form/Search/Custom/ContribSYBNT.php | 4 +- .../Search/Custom/ContributionAggregate.php | 4 +- .../Contact/Form/Search/Custom/DateAdded.php | 4 +- .../Form/Search/Custom/EventAggregate.php | 4 +- .../Contact/Form/Search/Custom/FullText.php | 4 +- .../Custom/FullText/AbstractPartialQuery.php | 4 +- .../Form/Search/Custom/FullText/Activity.php | 4 +- .../Form/Search/Custom/FullText/Case.php | 4 +- .../Form/Search/Custom/FullText/Contact.php | 4 +- .../Search/Custom/FullText/Contribution.php | 4 +- .../Search/Custom/FullText/Membership.php | 4 +- .../Search/Custom/FullText/Participant.php | 4 +- .../CRM/Contact/Form/Search/Custom/Group.php | 4 +- .../Form/Search/Custom/MultipleValues.php | 4 +- .../Form/Search/Custom/PostalMailing.php | 4 +- .../Contact/Form/Search/Custom/PriceSet.php | 4 +- .../Contact/Form/Search/Custom/Proximity.php | 4 +- .../Form/Search/Custom/RandomSegment.php | 4 +- .../CRM/Contact/Form/Search/Custom/Sample.php | 4 +- .../Form/Search/Custom/TagContributions.php | 4 +- .../Form/Search/Custom/ZipCodeRange.php | 4 +- civicrm/CRM/Contact/Form/Search/Interface.php | 4 +- civicrm/CRM/Contact/Form/Task.php | 6 +- civicrm/CRM/Contact/Form/Task/AddToGroup.php | 4 +- .../CRM/Contact/Form/Task/AddToHousehold.php | 2 +- .../CRM/Contact/Form/Task/AddToIndividual.php | 4 +- .../Contact/Form/Task/AddToOrganization.php | 4 +- .../Contact/Form/Task/AddToParentClass.php | 2 +- civicrm/CRM/Contact/Form/Task/AddToTag.php | 4 +- .../Contact/Form/Task/AlterPreferences.php | 4 +- civicrm/CRM/Contact/Form/Task/Batch.php | 4 +- civicrm/CRM/Contact/Form/Task/Delete.php | 4 +- civicrm/CRM/Contact/Form/Task/Email.php | 4 +- civicrm/CRM/Contact/Form/Task/EmailCommon.php | 4 +- civicrm/CRM/Contact/Form/Task/HookSample.php | 4 +- civicrm/CRM/Contact/Form/Task/Label.php | 4 +- civicrm/CRM/Contact/Form/Task/LabelCommon.php | 4 +- civicrm/CRM/Contact/Form/Task/Map.php | 4 +- civicrm/CRM/Contact/Form/Task/Map/Event.php | 8 +- civicrm/CRM/Contact/Form/Task/Merge.php | 4 +- civicrm/CRM/Contact/Form/Task/PDF.php | 4 +- .../CRM/Contact/Form/Task/PDFLetterCommon.php | 4 +- civicrm/CRM/Contact/Form/Task/PickProfile.php | 4 +- civicrm/CRM/Contact/Form/Task/Print.php | 4 +- .../CRM/Contact/Form/Task/ProximityCommon.php | 4 +- .../CRM/Contact/Form/Task/RemoveFromGroup.php | 4 +- .../CRM/Contact/Form/Task/RemoveFromTag.php | 4 +- civicrm/CRM/Contact/Form/Task/Result.php | 4 +- civicrm/CRM/Contact/Form/Task/SMS.php | 4 +- civicrm/CRM/Contact/Form/Task/SMSCommon.php | 4 +- civicrm/CRM/Contact/Form/Task/SaveSearch.php | 18 +- .../Contact/Form/Task/SaveSearch/Update.php | 4 +- civicrm/CRM/Contact/Form/Task/Useradd.php | 2 +- civicrm/CRM/Contact/Import/Controller.php | 4 +- civicrm/CRM/Contact/Import/Field.php | 2 +- .../CRM/Contact/Import/Form/DataSource.php | 4 +- civicrm/CRM/Contact/Import/Form/MapField.php | 4 +- civicrm/CRM/Contact/Import/Form/Preview.php | 4 +- civicrm/CRM/Contact/Import/Form/Summary.php | 4 +- civicrm/CRM/Contact/Import/ImportJob.php | 4 +- civicrm/CRM/Contact/Import/Importer.php | 4 +- civicrm/CRM/Contact/Import/Page/AJAX.php | 4 +- civicrm/CRM/Contact/Import/Parser.php | 4 +- civicrm/CRM/Contact/Import/Parser/Contact.php | 4 +- civicrm/CRM/Contact/Page/AJAX.php | 15 +- civicrm/CRM/Contact/Page/CustomSearch.php | 4 +- civicrm/CRM/Contact/Page/DashBoard.php | 4 +- civicrm/CRM/Contact/Page/Dashlet.php | 4 +- civicrm/CRM/Contact/Page/DedupeException.php | 4 +- civicrm/CRM/Contact/Page/DedupeFind.php | 6 +- civicrm/CRM/Contact/Page/DedupeMerge.php | 4 +- civicrm/CRM/Contact/Page/DedupeRules.php | 4 +- civicrm/CRM/Contact/Page/ImageFile.php | 4 +- civicrm/CRM/Contact/Page/Inline/Actions.php | 4 +- civicrm/CRM/Contact/Page/Inline/Address.php | 4 +- .../Page/Inline/CommunicationPreferences.php | 4 +- .../CRM/Contact/Page/Inline/ContactInfo.php | 4 +- .../CRM/Contact/Page/Inline/ContactName.php | 4 +- .../CRM/Contact/Page/Inline/CustomData.php | 4 +- .../CRM/Contact/Page/Inline/Demographics.php | 4 +- civicrm/CRM/Contact/Page/Inline/Email.php | 4 +- civicrm/CRM/Contact/Page/Inline/IM.php | 4 +- civicrm/CRM/Contact/Page/Inline/OpenID.php | 4 +- civicrm/CRM/Contact/Page/Inline/Phone.php | 4 +- civicrm/CRM/Contact/Page/Inline/Website.php | 4 +- civicrm/CRM/Contact/Page/SavedSearch.php | 4 +- civicrm/CRM/Contact/Page/Task.php | 4 +- civicrm/CRM/Contact/Page/View.php | 6 +- .../Contact/Page/View/ContactSmartGroup.php | 4 +- civicrm/CRM/Contact/Page/View/CustomData.php | 4 +- .../CRM/Contact/Page/View/GroupContact.php | 4 +- civicrm/CRM/Contact/Page/View/Log.php | 4 +- civicrm/CRM/Contact/Page/View/Note.php | 4 +- civicrm/CRM/Contact/Page/View/Print.php | 4 +- .../CRM/Contact/Page/View/Relationship.php | 4 +- civicrm/CRM/Contact/Page/View/Summary.php | 4 +- civicrm/CRM/Contact/Page/View/Tag.php | 4 +- .../CRM/Contact/Page/View/UserDashBoard.php | 4 +- .../Page/View/UserDashBoard/GroupContact.php | 4 +- civicrm/CRM/Contact/Page/View/Useradd.php | 2 +- civicrm/CRM/Contact/Page/View/Vcard.php | 4 +- civicrm/CRM/Contact/Selector.php | 29 +- civicrm/CRM/Contact/Selector/Controller.php | 4 +- civicrm/CRM/Contact/Selector/Custom.php | 4 +- civicrm/CRM/Contact/StateMachine/Search.php | 17 +- civicrm/CRM/Contact/Task.php | 196 +- .../CRM/Contribute/ActionMapping/ByPage.php | 2 +- .../CRM/Contribute/ActionMapping/ByType.php | 2 +- civicrm/CRM/Contribute/BAO/Contribution.php | 31 +- .../CRM/Contribute/BAO/Contribution/Utils.php | 4 +- .../CRM/Contribute/BAO/ContributionPage.php | 4 +- .../CRM/Contribute/BAO/ContributionRecur.php | 4 +- .../CRM/Contribute/BAO/ContributionSoft.php | 4 +- civicrm/CRM/Contribute/BAO/ManagePremiums.php | 4 +- civicrm/CRM/Contribute/BAO/Premium.php | 4 +- civicrm/CRM/Contribute/BAO/Query.php | 4 +- civicrm/CRM/Contribute/BAO/Widget.php | 4 +- .../Contribute/Controller/Contribution.php | 4 +- .../Controller/ContributionPage.php | 4 +- civicrm/CRM/Contribute/Controller/Search.php | 4 +- civicrm/CRM/Contribute/DAO/Contribution.php | 2 +- .../CRM/Contribute/DAO/ContributionPage.php | 2 +- .../Contribute/DAO/ContributionProduct.php | 2 +- .../CRM/Contribute/DAO/ContributionRecur.php | 2 +- .../CRM/Contribute/DAO/ContributionSoft.php | 2 +- civicrm/CRM/Contribute/DAO/Premium.php | 2 +- .../CRM/Contribute/DAO/PremiumsProduct.php | 2 +- civicrm/CRM/Contribute/DAO/Product.php | 2 +- civicrm/CRM/Contribute/DAO/Widget.php | 2 +- civicrm/CRM/Contribute/Form.php | 4 +- .../Contribute/Form/AbstractEditPayment.php | 11 +- .../CRM/Contribute/Form/AdditionalInfo.php | 4 +- .../CRM/Contribute/Form/AdditionalPayment.php | 11 +- .../Contribute/Form/CancelSubscription.php | 4 +- civicrm/CRM/Contribute/Form/Contribution.php | 36 +- .../Contribute/Form/Contribution/Confirm.php | 41 +- .../CRM/Contribute/Form/Contribution/Main.php | 4 +- .../Contribute/Form/Contribution/ThankYou.php | 4 +- .../CRM/Contribute/Form/ContributionBase.php | 4 +- .../Contribute/Form/ContributionCharts.php | 4 +- .../CRM/Contribute/Form/ContributionPage.php | 4 +- .../Form/ContributionPage/AddProduct.php | 4 +- .../Form/ContributionPage/Amount.php | 4 +- .../Form/ContributionPage/Custom.php | 4 +- .../Form/ContributionPage/Delete.php | 4 +- .../Form/ContributionPage/Premium.php | 4 +- .../Form/ContributionPage/Settings.php | 4 +- .../Form/ContributionPage/TabHeader.php | 4 +- .../Form/ContributionPage/ThankYou.php | 4 +- .../Form/ContributionPage/Widget.php | 4 +- .../CRM/Contribute/Form/ContributionView.php | 4 +- .../CRM/Contribute/Form/ManagePremiums.php | 4 +- civicrm/CRM/Contribute/Form/Search.php | 10 +- .../Contribute/Form/SearchContribution.php | 4 +- civicrm/CRM/Contribute/Form/SoftCredit.php | 4 +- civicrm/CRM/Contribute/Form/Task.php | 4 +- civicrm/CRM/Contribute/Form/Task/Batch.php | 4 +- civicrm/CRM/Contribute/Form/Task/Delete.php | 4 +- civicrm/CRM/Contribute/Form/Task/Email.php | 4 +- civicrm/CRM/Contribute/Form/Task/Invoice.php | 8 +- civicrm/CRM/Contribute/Form/Task/PDF.php | 4 +- .../CRM/Contribute/Form/Task/PDFLetter.php | 4 +- .../CRM/Contribute/Form/Task/PickProfile.php | 4 +- civicrm/CRM/Contribute/Form/Task/Print.php | 4 +- civicrm/CRM/Contribute/Form/Task/Result.php | 4 +- .../Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Contribute/Form/Task/Status.php | 4 +- civicrm/CRM/Contribute/Form/UpdateBilling.php | 4 +- .../Contribute/Form/UpdateSubscription.php | 4 +- civicrm/CRM/Contribute/Import/Controller.php | 4 +- civicrm/CRM/Contribute/Import/Field.php | 4 +- .../CRM/Contribute/Import/Form/DataSource.php | 4 +- .../CRM/Contribute/Import/Form/MapField.php | 4 +- .../CRM/Contribute/Import/Form/Preview.php | 4 +- .../CRM/Contribute/Import/Form/Summary.php | 4 +- civicrm/CRM/Contribute/Import/Parser.php | 4 +- .../Contribute/Import/Parser/Contribution.php | 4 +- civicrm/CRM/Contribute/Info.php | 4 +- civicrm/CRM/Contribute/Page/AJAX.php | 4 +- .../CRM/Contribute/Page/ContributionPage.php | 4 +- .../CRM/Contribute/Page/ContributionRecur.php | 4 +- civicrm/CRM/Contribute/Page/DashBoard.php | 4 +- .../CRM/Contribute/Page/ManagePremiums.php | 4 +- civicrm/CRM/Contribute/Page/PaymentInfo.php | 4 +- civicrm/CRM/Contribute/Page/Premium.php | 4 +- .../Contribute/Page/SubscriptionStatus.php | 4 +- civicrm/CRM/Contribute/Page/Tab.php | 4 +- civicrm/CRM/Contribute/Page/UserDashboard.php | 4 +- civicrm/CRM/Contribute/PseudoConstant.php | 4 +- civicrm/CRM/Contribute/Selector/Search.php | 4 +- .../Contribute/StateMachine/Contribution.php | 4 +- .../StateMachine/ContributionPage.php | 4 +- .../CRM/Contribute/StateMachine/Search.php | 4 +- civicrm/CRM/Contribute/Task.php | 104 +- civicrm/CRM/Contribute/Tokens.php | 2 +- civicrm/CRM/Core/Action.php | 4 +- civicrm/CRM/Core/BAO/ActionLog.php | 4 +- civicrm/CRM/Core/BAO/ActionSchedule.php | 4 +- civicrm/CRM/Core/BAO/Address.php | 4 +- civicrm/CRM/Core/BAO/Block.php | 4 +- civicrm/CRM/Core/BAO/CMSUser.php | 4 +- civicrm/CRM/Core/BAO/Cache.php | 2 +- civicrm/CRM/Core/BAO/ConfigSetting.php | 4 +- civicrm/CRM/Core/BAO/Country.php | 4 +- civicrm/CRM/Core/BAO/CustomField.php | 4 +- civicrm/CRM/Core/BAO/CustomGroup.php | 4 +- civicrm/CRM/Core/BAO/CustomOption.php | 4 +- civicrm/CRM/Core/BAO/CustomQuery.php | 4 +- civicrm/CRM/Core/BAO/CustomValue.php | 4 +- civicrm/CRM/Core/BAO/CustomValueTable.php | 4 +- civicrm/CRM/Core/BAO/Dashboard.php | 4 +- civicrm/CRM/Core/BAO/Discount.php | 4 +- civicrm/CRM/Core/BAO/Domain.php | 6 +- civicrm/CRM/Core/BAO/Email.php | 9 +- civicrm/CRM/Core/BAO/EntityTag.php | 4 +- civicrm/CRM/Core/BAO/Extension.php | 4 +- civicrm/CRM/Core/BAO/File.php | 4 +- civicrm/CRM/Core/BAO/FinancialTrxn.php | 4 +- civicrm/CRM/Core/BAO/IM.php | 4 +- civicrm/CRM/Core/BAO/Job.php | 4 +- civicrm/CRM/Core/BAO/LabelFormat.php | 2 +- civicrm/CRM/Core/BAO/Location.php | 4 +- civicrm/CRM/Core/BAO/LocationType.php | 4 +- civicrm/CRM/Core/BAO/Log.php | 4 +- civicrm/CRM/Core/BAO/MailSettings.php | 4 +- civicrm/CRM/Core/BAO/Mapping.php | 4 +- civicrm/CRM/Core/BAO/MessageTemplate.php | 4 +- civicrm/CRM/Core/BAO/Navigation.php | 4 +- civicrm/CRM/Core/BAO/Note.php | 19 +- civicrm/CRM/Core/BAO/OpenID.php | 4 +- civicrm/CRM/Core/BAO/OptionGroup.php | 4 +- civicrm/CRM/Core/BAO/OptionValue.php | 4 +- civicrm/CRM/Core/BAO/PaperSize.php | 2 +- civicrm/CRM/Core/BAO/PdfFormat.php | 2 +- civicrm/CRM/Core/BAO/Persistent.php | 4 +- civicrm/CRM/Core/BAO/Phone.php | 4 +- civicrm/CRM/Core/BAO/PreferencesDate.php | 4 +- civicrm/CRM/Core/BAO/PrevNextCache.php | 4 +- civicrm/CRM/Core/BAO/Query.php | 4 +- civicrm/CRM/Core/BAO/RecurringEntity.php | 42 +- civicrm/CRM/Core/BAO/SchemaHandler.php | 4 +- civicrm/CRM/Core/BAO/Setting.php | 4 +- civicrm/CRM/Core/BAO/StatusPreference.php | 4 +- civicrm/CRM/Core/BAO/Tag.php | 4 +- civicrm/CRM/Core/BAO/UFField.php | 8 +- civicrm/CRM/Core/BAO/UFGroup.php | 36 +- civicrm/CRM/Core/BAO/UFJoin.php | 4 +- civicrm/CRM/Core/BAO/UFMatch.php | 4 +- civicrm/CRM/Core/BAO/Website.php | 38 +- civicrm/CRM/Core/BAO/WordReplacement.php | 4 +- civicrm/CRM/Core/Base.php | 4 +- civicrm/CRM/Core/Block.php | 4 +- civicrm/CRM/Core/ClassLoader.php | 4 +- civicrm/CRM/Core/CodeGen/Specification.php | 16 +- civicrm/CRM/Core/CodeGen/Version.php | 2 - civicrm/CRM/Core/CommunityMessages.php | 2 +- civicrm/CRM/Core/Component.php | 19 +- civicrm/CRM/Core/Component/Info.php | 4 +- civicrm/CRM/Core/Config.php | 4 +- civicrm/CRM/Core/Config/MagicMerge.php | 2 +- civicrm/CRM/Core/Config/Runtime.php | 2 +- civicrm/CRM/Core/Controller.php | 4 +- civicrm/CRM/Core/Controller/Simple.php | 4 +- civicrm/CRM/Core/DAO.php | 10 +- civicrm/CRM/Core/DAO/ActionLog.php | 2 +- civicrm/CRM/Core/DAO/ActionMapping.php | 2 +- civicrm/CRM/Core/DAO/ActionSchedule.php | 2 +- civicrm/CRM/Core/DAO/Address.php | 2 +- civicrm/CRM/Core/DAO/AddressFormat.php | 2 +- civicrm/CRM/Core/DAO/AllCoreTables.data.php | 2 +- civicrm/CRM/Core/DAO/AllCoreTables.php | 4 +- civicrm/CRM/Core/DAO/Cache.php | 2 +- civicrm/CRM/Core/DAO/Component.php | 2 +- civicrm/CRM/Core/DAO/Country.php | 2 +- civicrm/CRM/Core/DAO/County.php | 2 +- civicrm/CRM/Core/DAO/CustomField.php | 2 +- civicrm/CRM/Core/DAO/CustomGroup.php | 2 +- civicrm/CRM/Core/DAO/Dashboard.php | 2 +- civicrm/CRM/Core/DAO/Discount.php | 2 +- civicrm/CRM/Core/DAO/Domain.php | 2 +- civicrm/CRM/Core/DAO/Email.php | 2 +- civicrm/CRM/Core/DAO/EntityFile.php | 2 +- civicrm/CRM/Core/DAO/EntityTag.php | 2 +- civicrm/CRM/Core/DAO/Extension.php | 2 +- civicrm/CRM/Core/DAO/File.php | 2 +- civicrm/CRM/Core/DAO/IM.php | 2 +- civicrm/CRM/Core/DAO/Job.php | 2 +- civicrm/CRM/Core/DAO/JobLog.php | 2 +- civicrm/CRM/Core/DAO/LocBlock.php | 2 +- civicrm/CRM/Core/DAO/LocationType.php | 2 +- civicrm/CRM/Core/DAO/Log.php | 2 +- civicrm/CRM/Core/DAO/MailSettings.php | 2 +- civicrm/CRM/Core/DAO/Managed.php | 2 +- civicrm/CRM/Core/DAO/Mapping.php | 2 +- civicrm/CRM/Core/DAO/MappingField.php | 2 +- civicrm/CRM/Core/DAO/Menu.php | 2 +- civicrm/CRM/Core/DAO/MessageTemplate.php | 2 +- civicrm/CRM/Core/DAO/Navigation.php | 2 +- civicrm/CRM/Core/DAO/Note.php | 2 +- civicrm/CRM/Core/DAO/OpenID.php | 2 +- civicrm/CRM/Core/DAO/OptionGroup.php | 2 +- civicrm/CRM/Core/DAO/OptionValue.php | 2 +- civicrm/CRM/Core/DAO/Persistent.php | 2 +- civicrm/CRM/Core/DAO/Phone.php | 2 +- civicrm/CRM/Core/DAO/PreferencesDate.php | 2 +- civicrm/CRM/Core/DAO/PrevNextCache.php | 2 +- civicrm/CRM/Core/DAO/PrintLabel.php | 2 +- civicrm/CRM/Core/DAO/RecurringEntity.php | 2 +- civicrm/CRM/Core/DAO/Setting.php | 2 +- civicrm/CRM/Core/DAO/StateProvince.php | 2 +- civicrm/CRM/Core/DAO/StatusPreference.php | 2 +- civicrm/CRM/Core/DAO/SystemLog.php | 2 +- civicrm/CRM/Core/DAO/Tag.php | 2 +- civicrm/CRM/Core/DAO/Timezone.php | 2 +- civicrm/CRM/Core/DAO/UFField.php | 2 +- civicrm/CRM/Core/DAO/UFGroup.php | 2 +- civicrm/CRM/Core/DAO/UFJoin.php | 2 +- civicrm/CRM/Core/DAO/UFMatch.php | 2 +- civicrm/CRM/Core/DAO/Website.php | 2 +- civicrm/CRM/Core/DAO/WordReplacement.php | 2 +- civicrm/CRM/Core/DAO/Worldregion.php | 2 +- civicrm/CRM/Core/DAO/permissions.php | 2 +- civicrm/CRM/Core/Error.php | 4 +- civicrm/CRM/Core/Error/Log.php | 2 +- civicrm/CRM/Core/Exception.php | 2 +- civicrm/CRM/Core/Form.php | 8 +- civicrm/CRM/Core/Form/Date.php | 4 +- civicrm/CRM/Core/Form/RecurringEntity.php | 4 +- civicrm/CRM/Core/Form/Renderer.php | 4 +- civicrm/CRM/Core/Form/Search.php | 2 +- civicrm/CRM/Core/Form/ShortCode.php | 4 +- civicrm/CRM/Core/Form/Tag.php | 4 +- civicrm/CRM/Core/Form/Task.php | 180 + civicrm/CRM/Core/Form/Task/Batch.php | 212 + civicrm/CRM/Core/Form/Task/PickProfile.php | 170 + civicrm/CRM/Core/HTMLInputCoder.php | 2 +- civicrm/CRM/Core/I18n.php | 60 +- civicrm/CRM/Core/I18n/Form.php | 4 +- civicrm/CRM/Core/I18n/NativeGettext.php | 4 +- civicrm/CRM/Core/I18n/PseudoConstant.php | 4 +- civicrm/CRM/Core/I18n/Schema.php | 4 +- civicrm/CRM/Core/I18n/SchemaStructure.php | 4 +- .../CRM/Core/I18n/SchemaStructure_2_2_0.php | 4 +- .../Core/I18n/SchemaStructure_3_0_alpha1.php | 4 +- .../Core/I18n/SchemaStructure_3_0_beta1.php | 4 +- .../Core/I18n/SchemaStructure_3_0_beta4.php | 4 +- .../Core/I18n/SchemaStructure_3_1_alpha1.php | 4 +- .../Core/I18n/SchemaStructure_3_1_beta2.php | 4 +- .../Core/I18n/SchemaStructure_3_2_beta4.php | 4 +- .../Core/I18n/SchemaStructure_3_3_beta1.php | 4 +- .../CRM/Core/I18n/SchemaStructure_3_4_0.php | 4 +- .../Core/I18n/SchemaStructure_3_4_beta2.php | 4 +- .../Core/I18n/SchemaStructure_3_4_beta3.php | 4 +- .../CRM/Core/I18n/SchemaStructure_4_1_0.php | 4 +- .../Core/I18n/SchemaStructure_4_1_alpha1.php | 4 +- .../Core/I18n/SchemaStructure_4_2_alpha1.php | 4 +- .../CRM/Core/I18n/SchemaStructure_4_3_1.php | 4 +- .../Core/I18n/SchemaStructure_4_5_alpha1.php | 4 +- .../Core/I18n/SchemaStructure_4_5_beta2.php | 4 +- .../Core/I18n/SchemaStructure_4_7_alpha1.php | 4 +- civicrm/CRM/Core/IDS.php | 4 +- civicrm/CRM/Core/InnoDBIndexer.php | 2 +- civicrm/CRM/Core/Invoke.php | 4 +- civicrm/CRM/Core/JobManager.php | 4 +- civicrm/CRM/Core/Joomla.php | 4 +- civicrm/CRM/Core/Key.php | 4 +- civicrm/CRM/Core/Lock.php | 4 +- civicrm/CRM/Core/Menu.php | 26 +- civicrm/CRM/Core/Module.php | 4 +- civicrm/CRM/Core/OptionGroup.php | 4 +- civicrm/CRM/Core/OptionValue.php | 4 +- civicrm/CRM/Core/Page.php | 4 +- civicrm/CRM/Core/Page/AJAX.php | 4 +- civicrm/CRM/Core/Page/AJAX/Attachment.php | 2 +- civicrm/CRM/Core/Page/AJAX/Location.php | 4 +- .../CRM/Core/Page/AJAX/RecurringEntity.php | 13 +- civicrm/CRM/Core/Page/Basic.php | 4 +- civicrm/CRM/Core/Page/File.php | 4 +- civicrm/CRM/Core/Page/Inline/Help.php | 4 +- .../CRM/Core/Page/RecurringEntityPreview.php | 4 +- civicrm/CRM/Core/Payment.php | 6 +- civicrm/CRM/Core/Payment/AuthorizeNetIPN.php | 5 +- civicrm/CRM/Core/Payment/BaseIPN.php | 2 +- civicrm/CRM/Core/Payment/Form.php | 4 +- civicrm/CRM/Core/Payment/Manual.php | 4 +- civicrm/CRM/Core/Payment/PayPalIPN.php | 4 +- civicrm/CRM/Core/Payment/PayPalImpl.php | 36 +- civicrm/CRM/Core/Payment/PayPalProIPN.php | 4 +- civicrm/CRM/Core/Payment/ProcessorForm.php | 4 +- civicrm/CRM/Core/Permission.php | 8 +- civicrm/CRM/Core/Permission/Backdrop.php | 4 +- civicrm/CRM/Core/Permission/Base.php | 4 +- civicrm/CRM/Core/Permission/Drupal.php | 4 +- civicrm/CRM/Core/Permission/Drupal6.php | 4 +- civicrm/CRM/Core/Permission/Drupal8.php | 4 +- civicrm/CRM/Core/Permission/DrupalBase.php | 4 +- civicrm/CRM/Core/Permission/Joomla.php | 4 +- civicrm/CRM/Core/Permission/Soap.php | 4 +- civicrm/CRM/Core/Permission/Temp.php | 4 +- civicrm/CRM/Core/Permission/UnitTests.php | 4 +- civicrm/CRM/Core/Permission/WordPress.php | 4 +- civicrm/CRM/Core/PseudoConstant.php | 4 +- civicrm/CRM/Core/QuickForm/Action.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Back.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Cancel.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Display.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Done.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Jump.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Next.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Process.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Refresh.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Reload.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Submit.php | 4 +- civicrm/CRM/Core/QuickForm/Action/Upload.php | 4 +- civicrm/CRM/Core/Report/Excel.php | 2 +- civicrm/CRM/Core/Resources.php | 4 +- civicrm/CRM/Core/Resources/Strings.php | 4 +- civicrm/CRM/Core/ScheduledJob.php | 4 +- civicrm/CRM/Core/SelectValues.php | 4 +- civicrm/CRM/Core/Selector/API.php | 4 +- civicrm/CRM/Core/Selector/Base.php | 4 +- civicrm/CRM/Core/Selector/Controller.php | 4 +- civicrm/CRM/Core/Session.php | 2 +- civicrm/CRM/Core/ShowHideBlocks.php | 4 +- civicrm/CRM/Core/Smarty.php | 4 +- .../Core/Smarty/plugins/block.crmButton.php | 4 +- .../CRM/Core/Smarty/plugins/block.edit.php | 4 +- .../CRM/Core/Smarty/plugins/block.htxt.php | 4 +- .../Core/Smarty/plugins/block.localize.php | 4 +- .../Core/Smarty/plugins/block.serialize.php | 4 +- civicrm/CRM/Core/Smarty/plugins/block.ts.php | 4 +- .../Core/Smarty/plugins/function.crmAPI.php | 2 +- .../Smarty/plugins/function.crmAttributes.php | 2 +- .../Smarty/plugins/function.crmCrudLink.php | 2 +- .../Core/Smarty/plugins/function.crmDBTpl.php | 2 +- .../plugins/function.crmGetAttribute.php | 2 +- .../Core/Smarty/plugins/function.crmKey.php | 4 +- .../plugins/function.crmNavigationMenu.php | 4 +- .../Smarty/plugins/function.crmResPath.php | 2 +- .../Smarty/plugins/function.crmResURL.php | 2 +- .../Smarty/plugins/function.crmScript.php | 2 +- .../Smarty/plugins/function.crmSetting.php | 2 +- .../Smarty/plugins/function.crmSigner.php | 2 +- .../Core/Smarty/plugins/function.crmStyle.php | 2 +- .../Smarty/plugins/function.crmVersion.php | 2 +- .../Core/Smarty/plugins/function.docURL.php | 4 +- .../CRM/Core/Smarty/plugins/function.help.php | 4 +- .../Smarty/plugins/function.isValueChange.php | 4 +- .../Smarty/plugins/function.sectionTotal.php | 4 +- .../Smarty/plugins/modifier.colorContrast.php | 4 +- .../Smarty/plugins/modifier.crmAddClass.php | 4 +- .../Smarty/plugins/modifier.crmBtnType.php | 4 +- .../Core/Smarty/plugins/modifier.crmDate.php | 4 +- .../Smarty/plugins/modifier.crmDelete.php | 4 +- .../Smarty/plugins/modifier.crmFirstWord.php | 4 +- .../Smarty/plugins/modifier.crmICalDate.php | 4 +- .../Smarty/plugins/modifier.crmICalText.php | 4 +- .../Smarty/plugins/modifier.crmInsert.php | 4 +- .../Core/Smarty/plugins/modifier.crmMoney.php | 4 +- .../plugins/modifier.crmNumberFormat.php | 4 +- .../Smarty/plugins/modifier.crmReplace.php | 4 +- .../plugins/modifier.crmStripAlternatives.php | 4 +- .../Core/Smarty/plugins/modifier.htmlize.php | 4 +- .../CRM/Core/Smarty/plugins/modifier.json.php | 4 +- .../Smarty/plugins/modifier.mb_truncate.php | 4 +- .../Smarty/plugins/modifier.substring.php | 4 +- civicrm/CRM/Core/Smarty/resources/String.php | 4 +- civicrm/CRM/Core/State.php | 4 +- civicrm/CRM/Core/StateMachine.php | 4 +- civicrm/CRM/Core/TableHierarchy.php | 4 +- civicrm/CRM/Core/Task.php | 16 +- civicrm/CRM/Core/Transaction.php | 4 +- civicrm/CRM/Core/xml/Menu/Admin.xml | 2 +- civicrm/CRM/Core/xml/Menu/Contact.xml | 1 + civicrm/CRM/Custom/Form/ChangeFieldType.php | 4 +- civicrm/CRM/Custom/Form/CustomData.php | 4 +- civicrm/CRM/Custom/Form/CustomDataByType.php | 4 +- civicrm/CRM/Custom/Form/DeleteField.php | 4 +- civicrm/CRM/Custom/Form/DeleteGroup.php | 4 +- civicrm/CRM/Custom/Form/Field.php | 4 +- civicrm/CRM/Custom/Form/Group.php | 4 +- civicrm/CRM/Custom/Form/MoveField.php | 4 +- civicrm/CRM/Custom/Form/Option.php | 4 +- civicrm/CRM/Custom/Form/Preview.php | 4 +- civicrm/CRM/Custom/Import/Field.php | 2 +- civicrm/CRM/Custom/Import/Form/DataSource.php | 4 +- civicrm/CRM/Custom/Import/Parser.php | 4 +- civicrm/CRM/Custom/Page/AJAX.php | 4 +- civicrm/CRM/Custom/Page/Field.php | 4 +- civicrm/CRM/Custom/Page/Group.php | 4 +- civicrm/CRM/Custom/Page/Option.php | 4 +- civicrm/CRM/Cxn/ApiRouter.php | 2 +- civicrm/CRM/Cxn/BAO/Cxn.php | 4 +- civicrm/CRM/Cxn/DAO/Cxn.php | 2 +- civicrm/CRM/Dashlet/Page/Activity.php | 4 +- civicrm/CRM/Dashlet/Page/AllCases.php | 4 +- civicrm/CRM/Dashlet/Page/Blog.php | 4 +- civicrm/CRM/Dashlet/Page/CaseDashboard.php | 4 +- civicrm/CRM/Dashlet/Page/GettingStarted.php | 4 +- civicrm/CRM/Dashlet/Page/MyCases.php | 4 +- .../QueryBuilder/IndividualUnsupervised.php | 2 +- civicrm/CRM/Dedupe/BAO/Rule.php | 4 +- civicrm/CRM/Dedupe/BAO/RuleGroup.php | 4 +- civicrm/CRM/Dedupe/DAO/Exception.php | 2 +- civicrm/CRM/Dedupe/DAO/Rule.php | 2 +- civicrm/CRM/Dedupe/DAO/RuleGroup.php | 2 +- civicrm/CRM/Dedupe/Finder.php | 4 +- civicrm/CRM/Dedupe/Merger.php | 102 +- civicrm/CRM/Event/ActionMapping.php | 2 +- civicrm/CRM/Event/BAO/Event.php | 4 +- civicrm/CRM/Event/BAO/Participant.php | 6 +- civicrm/CRM/Event/BAO/ParticipantPayment.php | 26 +- .../CRM/Event/BAO/ParticipantStatusType.php | 4 +- civicrm/CRM/Event/BAO/Query.php | 4 +- civicrm/CRM/Event/Badge.php | 2 +- civicrm/CRM/Event/Badge/NameTent.php | 2 +- civicrm/CRM/Event/Badge/Simple.php | 2 +- civicrm/CRM/Event/Cart/BAO/MerParticipant.php | 2 +- civicrm/CRM/Event/Cart/DAO/Cart.php | 2 +- civicrm/CRM/Event/Cart/DAO/EventInCart.php | 2 +- .../CRM/Event/Cart/Form/Checkout/Payment.php | 8 +- civicrm/CRM/Event/Controller/Registration.php | 4 +- civicrm/CRM/Event/Controller/Search.php | 4 +- civicrm/CRM/Event/DAO/Event.php | 2 +- civicrm/CRM/Event/DAO/Participant.php | 2 +- civicrm/CRM/Event/DAO/ParticipantPayment.php | 2 +- .../CRM/Event/DAO/ParticipantStatusType.php | 2 +- civicrm/CRM/Event/Form/EventFees.php | 4 +- civicrm/CRM/Event/Form/ManageEvent.php | 4 +- .../CRM/Event/Form/ManageEvent/Conference.php | 4 +- civicrm/CRM/Event/Form/ManageEvent/Delete.php | 4 +- .../CRM/Event/Form/ManageEvent/EventInfo.php | 4 +- civicrm/CRM/Event/Form/ManageEvent/Fee.php | 4 +- .../CRM/Event/Form/ManageEvent/Location.php | 4 +- .../Event/Form/ManageEvent/Registration.php | 4 +- .../Form/ManageEvent/ScheduleReminders.php | 4 +- .../CRM/Event/Form/ManageEvent/TabHeader.php | 4 +- civicrm/CRM/Event/Form/Participant.php | 7 +- .../Event/Form/ParticipantFeeSelection.php | 4 +- civicrm/CRM/Event/Form/ParticipantView.php | 4 +- civicrm/CRM/Event/Form/Registration.php | 7 +- .../Registration/AdditionalParticipant.php | 4 +- .../CRM/Event/Form/Registration/Confirm.php | 4 +- .../Form/Registration/ParticipantConfirm.php | 4 +- .../CRM/Event/Form/Registration/Register.php | 4 +- .../CRM/Event/Form/Registration/ThankYou.php | 4 +- civicrm/CRM/Event/Form/Search.php | 4 +- civicrm/CRM/Event/Form/SearchEvent.php | 4 +- civicrm/CRM/Event/Form/SelfSvcTransfer.php | 4 +- civicrm/CRM/Event/Form/SelfSvcUpdate.php | 4 +- civicrm/CRM/Event/Form/Task.php | 4 +- civicrm/CRM/Event/Form/Task/AddToGroup.php | 4 +- civicrm/CRM/Event/Form/Task/Badge.php | 4 +- civicrm/CRM/Event/Form/Task/Batch.php | 4 +- civicrm/CRM/Event/Form/Task/Cancel.php | 4 +- civicrm/CRM/Event/Form/Task/Delete.php | 4 +- civicrm/CRM/Event/Form/Task/Email.php | 4 +- civicrm/CRM/Event/Form/Task/PDF.php | 4 +- .../CRM/Event/Form/Task/ParticipantStatus.php | 4 +- civicrm/CRM/Event/Form/Task/PickProfile.php | 4 +- civicrm/CRM/Event/Form/Task/Print.php | 4 +- civicrm/CRM/Event/Form/Task/Result.php | 4 +- civicrm/CRM/Event/Form/Task/SaveSearch.php | 4 +- .../CRM/Event/Form/Task/SaveSearch/Update.php | 4 +- .../Event/Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Event/Import/Controller.php | 4 +- civicrm/CRM/Event/Import/Field.php | 2 +- civicrm/CRM/Event/Import/Form/DataSource.php | 4 +- civicrm/CRM/Event/Import/Form/MapField.php | 4 +- civicrm/CRM/Event/Import/Form/Preview.php | 4 +- civicrm/CRM/Event/Import/Form/Summary.php | 4 +- civicrm/CRM/Event/Import/Parser.php | 4 +- .../CRM/Event/Import/Parser/Participant.php | 4 +- civicrm/CRM/Event/Info.php | 4 +- civicrm/CRM/Event/Page/AJAX.php | 4 +- civicrm/CRM/Event/Page/DashBoard.php | 4 +- civicrm/CRM/Event/Page/EventInfo.php | 8 +- civicrm/CRM/Event/Page/ICalendar.php | 4 +- civicrm/CRM/Event/Page/ManageEvent.php | 4 +- civicrm/CRM/Event/Page/ParticipantListing.php | 4 +- .../Event/Page/ParticipantListing/Name.php | 4 +- .../Page/ParticipantListing/NameAndEmail.php | 4 +- .../ParticipantListing/NameStatusAndDate.php | 4 +- .../Event/Page/ParticipantListing/Simple.php | 4 +- civicrm/CRM/Event/Page/Tab.php | 4 +- civicrm/CRM/Event/Page/UserDashboard.php | 4 +- civicrm/CRM/Event/PseudoConstant.php | 4 +- civicrm/CRM/Event/Selector/Search.php | 4 +- .../CRM/Event/StateMachine/Registration.php | 4 +- civicrm/CRM/Event/StateMachine/Search.php | 4 +- civicrm/CRM/Event/Task.php | 4 +- civicrm/CRM/Event/Tokens.php | 2 +- civicrm/CRM/Export/BAO/Export.php | 4 +- civicrm/CRM/Export/Controller/Standalone.php | 2 +- civicrm/CRM/Export/Form/Map.php | 4 +- civicrm/CRM/Export/Form/Select.php | 58 +- .../CRM/Export/StateMachine/Standalone.php | 4 +- civicrm/CRM/Extension/Browser.php | 4 +- civicrm/CRM/Extension/ClassLoader.php | 4 +- civicrm/CRM/Extension/Container/Basic.php | 4 +- .../CRM/Extension/Container/Collection.php | 4 +- civicrm/CRM/Extension/Container/Default.php | 4 +- civicrm/CRM/Extension/Container/Interface.php | 4 +- civicrm/CRM/Extension/Container/Static.php | 4 +- civicrm/CRM/Extension/Downloader.php | 4 +- civicrm/CRM/Extension/Exception.php | 4 +- .../Exception/DependencyException.php | 4 +- .../Extension/Exception/MissingException.php | 4 +- .../Extension/Exception/ParseException.php | 4 +- civicrm/CRM/Extension/Info.php | 4 +- civicrm/CRM/Extension/Manager.php | 4 +- civicrm/CRM/Extension/Manager/Base.php | 4 +- civicrm/CRM/Extension/Manager/Interface.php | 4 +- civicrm/CRM/Extension/Manager/Module.php | 4 +- civicrm/CRM/Extension/Manager/Payment.php | 4 +- civicrm/CRM/Extension/Manager/Report.php | 4 +- civicrm/CRM/Extension/Manager/Search.php | 4 +- civicrm/CRM/Extension/Mapper.php | 4 +- civicrm/CRM/Extension/System.php | 4 +- civicrm/CRM/Extension/Upgrades.php | 4 +- civicrm/CRM/Financial/BAO/ExportFormat.php | 4 +- .../CRM/Financial/BAO/ExportFormat/CSV.php | 4 +- .../CRM/Financial/BAO/ExportFormat/IIF.php | 4 +- .../CRM/Financial/BAO/FinancialAccount.php | 4 +- civicrm/CRM/Financial/BAO/FinancialItem.php | 4 +- civicrm/CRM/Financial/BAO/FinancialType.php | 4 +- .../Financial/BAO/FinancialTypeAccount.php | 4 +- .../CRM/Financial/BAO/PaymentProcessor.php | 6 +- .../Financial/BAO/PaymentProcessorType.php | 4 +- civicrm/CRM/Financial/DAO/Currency.php | 2 +- .../Financial/DAO/EntityFinancialAccount.php | 2 +- .../CRM/Financial/DAO/EntityFinancialTrxn.php | 2 +- .../CRM/Financial/DAO/FinancialAccount.php | 2 +- civicrm/CRM/Financial/DAO/FinancialItem.php | 2 +- civicrm/CRM/Financial/DAO/FinancialTrxn.php | 2 +- civicrm/CRM/Financial/DAO/FinancialType.php | 2 +- .../CRM/Financial/DAO/PaymentProcessor.php | 2 +- .../Financial/DAO/PaymentProcessorType.php | 2 +- civicrm/CRM/Financial/DAO/PaymentToken.php | 2 +- .../CRM/Financial/Form/BatchTransaction.php | 4 +- civicrm/CRM/Financial/Form/Export.php | 4 +- .../CRM/Financial/Form/FinancialAccount.php | 4 +- civicrm/CRM/Financial/Form/FinancialBatch.php | 4 +- civicrm/CRM/Financial/Form/FinancialType.php | 4 +- .../Financial/Form/FinancialTypeAccount.php | 4 +- civicrm/CRM/Financial/Form/Payment.php | 4 +- civicrm/CRM/Financial/Form/PaymentEdit.php | 6 +- civicrm/CRM/Financial/Form/Search.php | 4 +- civicrm/CRM/Financial/Page/AJAX.php | 4 +- civicrm/CRM/Financial/Page/Batch.php | 4 +- .../CRM/Financial/Page/BatchTransaction.php | 4 +- .../CRM/Financial/Page/FinancialAccount.php | 4 +- civicrm/CRM/Financial/Page/FinancialBatch.php | 4 +- civicrm/CRM/Financial/Page/FinancialType.php | 4 +- .../Financial/Page/FinancialTypeAccount.php | 4 +- civicrm/CRM/Friend/BAO/Friend.php | 4 +- civicrm/CRM/Friend/DAO/Friend.php | 2 +- civicrm/CRM/Friend/Form.php | 4 +- civicrm/CRM/Friend/Form/Contribute.php | 4 +- civicrm/CRM/Friend/Form/Event.php | 4 +- civicrm/CRM/Grant/BAO/Grant.php | 4 +- civicrm/CRM/Grant/BAO/Query.php | 12 +- civicrm/CRM/Grant/Controller/Search.php | 4 +- civicrm/CRM/Grant/DAO/Grant.php | 2 +- civicrm/CRM/Grant/Form/Grant.php | 4 +- civicrm/CRM/Grant/Form/GrantView.php | 4 +- civicrm/CRM/Grant/Form/Search.php | 8 +- civicrm/CRM/Grant/Form/Task.php | 11 +- civicrm/CRM/Grant/Form/Task/Delete.php | 4 +- civicrm/CRM/Grant/Form/Task/Print.php | 4 +- civicrm/CRM/Grant/Form/Task/Result.php | 4 +- .../Grant/Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Grant/Form/Task/Update.php | 4 +- civicrm/CRM/Grant/Info.php | 4 +- civicrm/CRM/Grant/Page/DashBoard.php | 4 +- civicrm/CRM/Grant/Page/Tab.php | 4 +- civicrm/CRM/Grant/Selector/Search.php | 4 +- civicrm/CRM/Grant/StateMachine/Search.php | 4 +- civicrm/CRM/Grant/Task.php | 75 +- civicrm/CRM/Group/Controller.php | 4 +- civicrm/CRM/Group/Form/Edit.php | 4 +- civicrm/CRM/Group/Form/Search.php | 4 +- civicrm/CRM/Group/Page/AJAX.php | 4 +- civicrm/CRM/Group/Page/Group.php | 4 +- civicrm/CRM/Group/StateMachine.php | 4 +- civicrm/CRM/Import/DataSource.php | 4 +- civicrm/CRM/Import/DataSource/CSV.php | 4 +- civicrm/CRM/Import/DataSource/SQL.php | 4 +- civicrm/CRM/Import/Form/DataSource.php | 4 +- civicrm/CRM/Import/Form/MapField.php | 4 +- civicrm/CRM/Import/Form/Preview.php | 4 +- civicrm/CRM/Import/Form/Summary.php | 4 +- civicrm/CRM/Import/Parser.php | 4 +- civicrm/CRM/Import/StateMachine.php | 4 +- civicrm/CRM/Logging/Differ.php | 4 +- civicrm/CRM/Logging/ReportDetail.php | 4 +- civicrm/CRM/Logging/ReportSummary.php | 4 +- civicrm/CRM/Logging/Reverter.php | 4 +- civicrm/CRM/Logging/Schema.php | 4 +- civicrm/CRM/Mailing/ActionTokens.php | 2 +- civicrm/CRM/Mailing/BAO/BouncePattern.php | 4 +- civicrm/CRM/Mailing/BAO/Component.php | 4 +- civicrm/CRM/Mailing/BAO/Mailing.php | 48 +- civicrm/CRM/Mailing/BAO/MailingAB.php | 4 +- civicrm/CRM/Mailing/BAO/MailingJob.php | 4 +- civicrm/CRM/Mailing/BAO/Query.php | 4 +- civicrm/CRM/Mailing/BAO/Recipients.php | 4 +- civicrm/CRM/Mailing/BAO/Spool.php | 4 +- civicrm/CRM/Mailing/BAO/TrackableURL.php | 4 +- civicrm/CRM/Mailing/Config.php | 4 +- civicrm/CRM/Mailing/Controller/Send.php | 4 +- civicrm/CRM/Mailing/DAO/BouncePattern.php | 2 +- civicrm/CRM/Mailing/DAO/BounceType.php | 2 +- civicrm/CRM/Mailing/DAO/Component.php | 2 +- civicrm/CRM/Mailing/DAO/Mailing.php | 2 +- civicrm/CRM/Mailing/DAO/MailingAB.php | 2 +- civicrm/CRM/Mailing/DAO/MailingGroup.php | 2 +- civicrm/CRM/Mailing/DAO/MailingJob.php | 2 +- civicrm/CRM/Mailing/DAO/Recipients.php | 2 +- civicrm/CRM/Mailing/DAO/Spool.php | 2 +- civicrm/CRM/Mailing/DAO/TrackableURL.php | 2 +- civicrm/CRM/Mailing/Event/BAO/Bounce.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Confirm.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Delivered.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Forward.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Opened.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Queue.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Reply.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Resubscribe.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Subscribe.php | 4 +- .../Mailing/Event/BAO/TrackableURLOpen.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php | 4 +- civicrm/CRM/Mailing/Event/DAO/Bounce.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Confirm.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Delivered.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Forward.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Opened.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Queue.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Reply.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Subscribe.php | 2 +- .../Mailing/Event/DAO/TrackableURLOpen.php | 2 +- civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php | 2 +- civicrm/CRM/Mailing/Form/Approve.php | 4 +- civicrm/CRM/Mailing/Form/Browse.php | 4 +- civicrm/CRM/Mailing/Form/Component.php | 4 +- civicrm/CRM/Mailing/Form/ForwardMailing.php | 4 +- civicrm/CRM/Mailing/Form/Optout.php | 4 +- civicrm/CRM/Mailing/Form/Search.php | 4 +- civicrm/CRM/Mailing/Form/Subscribe.php | 4 +- civicrm/CRM/Mailing/Form/Task.php | 4 +- .../CRM/Mailing/Form/Task/AdhocMailing.php | 4 +- civicrm/CRM/Mailing/Form/Task/Print.php | 4 +- civicrm/CRM/Mailing/Form/Unsubscribe.php | 4 +- civicrm/CRM/Mailing/Info.php | 4 +- civicrm/CRM/Mailing/MailStore.php | 4 +- civicrm/CRM/Mailing/MailStore/Imap.php | 4 +- civicrm/CRM/Mailing/MailStore/Localdir.php | 4 +- civicrm/CRM/Mailing/MailStore/Maildir.php | 4 +- civicrm/CRM/Mailing/MailStore/Mbox.php | 4 +- civicrm/CRM/Mailing/MailStore/Pop3.php | 4 +- civicrm/CRM/Mailing/Page/AJAX.php | 4 +- civicrm/CRM/Mailing/Page/Browse.php | 20 +- civicrm/CRM/Mailing/Page/Common.php | 4 +- civicrm/CRM/Mailing/Page/Component.php | 4 +- civicrm/CRM/Mailing/Page/Confirm.php | 4 +- civicrm/CRM/Mailing/Page/Event.php | 4 +- civicrm/CRM/Mailing/Page/Optout.php | 4 +- civicrm/CRM/Mailing/Page/Preview.php | 4 +- civicrm/CRM/Mailing/Page/Report.php | 4 +- civicrm/CRM/Mailing/Page/Resubscribe.php | 4 +- civicrm/CRM/Mailing/Page/Tab.php | 4 +- civicrm/CRM/Mailing/Page/Unsubscribe.php | 4 +- civicrm/CRM/Mailing/Page/View.php | 4 +- civicrm/CRM/Mailing/PseudoConstant.php | 4 +- civicrm/CRM/Mailing/Selector/Browse.php | 4 +- civicrm/CRM/Mailing/Selector/Event.php | 4 +- civicrm/CRM/Mailing/Selector/Search.php | 4 +- civicrm/CRM/Mailing/Task.php | 49 +- civicrm/CRM/Mailing/Tokens.php | 2 +- civicrm/CRM/Mailing/xml/Menu/Mailing.xml | 4 +- civicrm/CRM/Member/ActionMapping.php | 2 +- civicrm/CRM/Member/BAO/Membership.php | 39 +- civicrm/CRM/Member/BAO/MembershipBlock.php | 4 +- civicrm/CRM/Member/BAO/MembershipLog.php | 4 +- civicrm/CRM/Member/BAO/MembershipPayment.php | 4 +- civicrm/CRM/Member/BAO/MembershipStatus.php | 4 +- civicrm/CRM/Member/BAO/MembershipType.php | 4 +- civicrm/CRM/Member/BAO/Query.php | 4 +- civicrm/CRM/Member/Controller/Search.php | 4 +- civicrm/CRM/Member/DAO/Membership.php | 30 +- civicrm/CRM/Member/DAO/MembershipBlock.php | 2 +- civicrm/CRM/Member/DAO/MembershipLog.php | 2 +- civicrm/CRM/Member/DAO/MembershipPayment.php | 2 +- civicrm/CRM/Member/DAO/MembershipStatus.php | 2 +- civicrm/CRM/Member/DAO/MembershipType.php | 2 +- civicrm/CRM/Member/Form.php | 11 +- civicrm/CRM/Member/Form/Membership.php | 63 +- civicrm/CRM/Member/Form/MembershipBlock.php | 4 +- civicrm/CRM/Member/Form/MembershipConfig.php | 4 +- civicrm/CRM/Member/Form/MembershipRenewal.php | 7 +- civicrm/CRM/Member/Form/MembershipStatus.php | 4 +- civicrm/CRM/Member/Form/MembershipType.php | 4 +- civicrm/CRM/Member/Form/MembershipView.php | 4 +- civicrm/CRM/Member/Form/Search.php | 8 +- civicrm/CRM/Member/Form/Task.php | 11 +- civicrm/CRM/Member/Form/Task/Batch.php | 4 +- civicrm/CRM/Member/Form/Task/Delete.php | 4 +- civicrm/CRM/Member/Form/Task/Email.php | 4 +- civicrm/CRM/Member/Form/Task/Label.php | 4 +- civicrm/CRM/Member/Form/Task/PDFLetter.php | 4 +- civicrm/CRM/Member/Form/Task/PickProfile.php | 4 +- civicrm/CRM/Member/Form/Task/Print.php | 4 +- civicrm/CRM/Member/Form/Task/Result.php | 4 +- .../Member/Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Member/Import/Controller.php | 4 +- civicrm/CRM/Member/Import/Field.php | 4 +- civicrm/CRM/Member/Import/Form/DataSource.php | 4 +- civicrm/CRM/Member/Import/Form/MapField.php | 4 +- civicrm/CRM/Member/Import/Form/Preview.php | 4 +- civicrm/CRM/Member/Import/Form/Summary.php | 4 +- civicrm/CRM/Member/Import/Parser.php | 4 +- .../CRM/Member/Import/Parser/Membership.php | 15 +- civicrm/CRM/Member/Info.php | 4 +- civicrm/CRM/Member/Page/AJAX.php | 4 +- civicrm/CRM/Member/Page/DashBoard.php | 4 +- civicrm/CRM/Member/Page/MembershipStatus.php | 4 +- civicrm/CRM/Member/Page/MembershipType.php | 4 +- civicrm/CRM/Member/Page/Tab.php | 4 +- civicrm/CRM/Member/Page/UserDashboard.php | 4 +- civicrm/CRM/Member/PseudoConstant.php | 4 +- civicrm/CRM/Member/Selector/Search.php | 4 +- civicrm/CRM/Member/StateMachine/Search.php | 4 +- civicrm/CRM/Member/StatusOverrideTypes.php | 116 + civicrm/CRM/Member/Task.php | 79 +- civicrm/CRM/Member/Tokens.php | 2 +- civicrm/CRM/Note/Form/Note.php | 4 +- civicrm/CRM/PCP/BAO/PCP.php | 4 +- civicrm/CRM/PCP/BAO/PCPBlock.php | 4 +- civicrm/CRM/PCP/Controller/PCP.php | 4 +- civicrm/CRM/PCP/DAO/PCP.php | 2 +- civicrm/CRM/PCP/DAO/PCPBlock.php | 2 +- civicrm/CRM/PCP/Form/Campaign.php | 4 +- civicrm/CRM/PCP/Form/Contribute.php | 4 +- civicrm/CRM/PCP/Form/Event.php | 10 +- civicrm/CRM/PCP/Form/PCP.php | 4 +- civicrm/CRM/PCP/Form/PCPAccount.php | 4 +- civicrm/CRM/PCP/Page/PCP.php | 4 +- civicrm/CRM/PCP/Page/PCPInfo.php | 4 +- civicrm/CRM/PCP/StateMachine/PCP.php | 4 +- civicrm/CRM/Pledge/BAO/Pledge.php | 4 +- civicrm/CRM/Pledge/BAO/PledgeBlock.php | 4 +- civicrm/CRM/Pledge/BAO/PledgePayment.php | 4 +- civicrm/CRM/Pledge/BAO/Query.php | 4 +- civicrm/CRM/Pledge/Controller/Search.php | 4 +- civicrm/CRM/Pledge/DAO/Pledge.php | 2 +- civicrm/CRM/Pledge/DAO/PledgeBlock.php | 2 +- civicrm/CRM/Pledge/DAO/PledgePayment.php | 2 +- civicrm/CRM/Pledge/Form/Payment.php | 4 +- civicrm/CRM/Pledge/Form/Pledge.php | 4 +- civicrm/CRM/Pledge/Form/PledgeView.php | 4 +- civicrm/CRM/Pledge/Form/Search.php | 8 +- civicrm/CRM/Pledge/Form/Task.php | 4 +- civicrm/CRM/Pledge/Form/Task/Delete.php | 4 +- civicrm/CRM/Pledge/Form/Task/Print.php | 4 +- civicrm/CRM/Pledge/Form/Task/Result.php | 4 +- .../Pledge/Form/Task/SearchTaskHookSample.php | 4 +- civicrm/CRM/Pledge/Info.php | 4 +- civicrm/CRM/Pledge/Page/AJAX.php | 4 +- civicrm/CRM/Pledge/Page/DashBoard.php | 4 +- civicrm/CRM/Pledge/Page/Payment.php | 4 +- civicrm/CRM/Pledge/Page/Tab.php | 4 +- civicrm/CRM/Pledge/Page/UserDashboard.php | 4 +- civicrm/CRM/Pledge/Selector/Search.php | 4 +- civicrm/CRM/Pledge/StateMachine/Search.php | 4 +- civicrm/CRM/Pledge/Task.php | 82 +- civicrm/CRM/Price/BAO/LineItem.php | 4 +- civicrm/CRM/Price/BAO/PriceField.php | 4 +- civicrm/CRM/Price/BAO/PriceFieldValue.php | 4 +- civicrm/CRM/Price/BAO/PriceSet.php | 4 +- civicrm/CRM/Price/DAO/LineItem.php | 2 +- civicrm/CRM/Price/DAO/PriceField.php | 2 +- civicrm/CRM/Price/DAO/PriceFieldValue.php | 2 +- civicrm/CRM/Price/DAO/PriceSet.php | 2 +- civicrm/CRM/Price/DAO/PriceSetEntity.php | 2 +- civicrm/CRM/Price/Form/DeleteField.php | 4 +- civicrm/CRM/Price/Form/DeleteSet.php | 4 +- civicrm/CRM/Price/Form/Field.php | 4 +- civicrm/CRM/Price/Form/Option.php | 4 +- civicrm/CRM/Price/Form/Preview.php | 4 +- civicrm/CRM/Price/Form/Set.php | 4 +- civicrm/CRM/Price/Page/Field.php | 4 +- civicrm/CRM/Price/Page/Option.php | 4 +- civicrm/CRM/Price/Page/Set.php | 4 +- civicrm/CRM/Profile/Form.php | 4 +- civicrm/CRM/Profile/Form/Dynamic.php | 4 +- civicrm/CRM/Profile/Form/Edit.php | 4 +- civicrm/CRM/Profile/Form/Search.php | 4 +- civicrm/CRM/Profile/Page/Dynamic.php | 4 +- civicrm/CRM/Profile/Page/Listings.php | 4 +- .../Page/MultipleRecordFieldsListing.php | 4 +- civicrm/CRM/Profile/Page/Router.php | 4 +- civicrm/CRM/Profile/Page/View.php | 4 +- civicrm/CRM/Profile/Selector/Listings.php | 4 +- civicrm/CRM/Queue/BAO/QueueItem.php | 4 +- civicrm/CRM/Queue/DAO/QueueItem.php | 2 +- civicrm/CRM/Queue/ErrorPolicy.php | 2 +- civicrm/CRM/Queue/Menu.php | 4 +- civicrm/CRM/Queue/Page/AJAX.php | 2 +- civicrm/CRM/Queue/Page/Runner.php | 2 +- civicrm/CRM/Queue/Queue.php | 2 +- civicrm/CRM/Queue/Queue/Memory.php | 2 +- civicrm/CRM/Queue/Queue/Sql.php | 2 +- civicrm/CRM/Queue/Runner.php | 2 +- civicrm/CRM/Queue/Service.php | 2 +- civicrm/CRM/Queue/Task.php | 2 +- civicrm/CRM/Queue/TaskContext.php | 2 +- civicrm/CRM/Report/BAO/Hook.php | 4 +- civicrm/CRM/Report/BAO/HookInterface.php | 4 +- civicrm/CRM/Report/BAO/ReportInstance.php | 4 +- civicrm/CRM/Report/DAO/ReportInstance.php | 2 +- civicrm/CRM/Report/Form.php | 64 +- civicrm/CRM/Report/Form/Activity.php | 8 +- civicrm/CRM/Report/Form/ActivitySummary.php | 4 +- .../Report/Form/Campaign/SurveyDetails.php | 4 +- civicrm/CRM/Report/Form/Case/Demographics.php | 4 +- civicrm/CRM/Report/Form/Case/Detail.php | 4 +- civicrm/CRM/Report/Form/Case/Summary.php | 4 +- civicrm/CRM/Report/Form/Case/TimeSpent.php | 4 +- .../Report/Form/Contact/CurrentEmployer.php | 4 +- civicrm/CRM/Report/Form/Contact/Detail.php | 4 +- civicrm/CRM/Report/Form/Contact/Log.php | 4 +- .../CRM/Report/Form/Contact/LoggingDetail.php | 4 +- .../Report/Form/Contact/LoggingSummary.php | 4 +- .../CRM/Report/Form/Contact/Relationship.php | 4 +- civicrm/CRM/Report/Form/Contact/Summary.php | 4 +- .../Report/Form/Contribute/Bookkeeping.php | 4 +- .../Form/Contribute/DeferredRevenue.php | 4 +- civicrm/CRM/Report/Form/Contribute/Detail.php | 24 +- .../CRM/Report/Form/Contribute/History.php | 4 +- .../Form/Contribute/HouseholdSummary.php | 4 +- civicrm/CRM/Report/Form/Contribute/Lybunt.php | 4 +- .../Form/Contribute/OrganizationSummary.php | 4 +- civicrm/CRM/Report/Form/Contribute/PCP.php | 4 +- civicrm/CRM/Report/Form/Contribute/Recur.php | 4 +- .../Report/Form/Contribute/RecurSummary.php | 4 +- civicrm/CRM/Report/Form/Contribute/Repeat.php | 4 +- .../CRM/Report/Form/Contribute/SoftCredit.php | 4 +- .../CRM/Report/Form/Contribute/Summary.php | 4 +- civicrm/CRM/Report/Form/Contribute/Sybunt.php | 4 +- .../CRM/Report/Form/Contribute/TopDonor.php | 25 +- civicrm/CRM/Report/Form/Event.php | 4 +- civicrm/CRM/Report/Form/Event/Income.php | 4 +- .../Report/Form/Event/IncomeCountSummary.php | 4 +- .../Form/Event/ParticipantListCount.php | 4 +- .../Report/Form/Event/ParticipantListing.php | 4 +- civicrm/CRM/Report/Form/Event/Summary.php | 4 +- civicrm/CRM/Report/Form/Extended.php | 4 +- civicrm/CRM/Report/Form/Grant/Detail.php | 4 +- civicrm/CRM/Report/Form/Grant/Statistics.php | 4 +- civicrm/CRM/Report/Form/Instance.php | 2 +- civicrm/CRM/Report/Form/Mailing/Bounce.php | 4 +- civicrm/CRM/Report/Form/Mailing/Clicks.php | 4 +- civicrm/CRM/Report/Form/Mailing/Detail.php | 4 +- civicrm/CRM/Report/Form/Mailing/Opened.php | 4 +- civicrm/CRM/Report/Form/Mailing/Summary.php | 4 +- .../Report/Form/Member/ContributionDetail.php | 4 +- civicrm/CRM/Report/Form/Member/Detail.php | 4 +- civicrm/CRM/Report/Form/Member/Lapse.php | 4 +- civicrm/CRM/Report/Form/Member/Summary.php | 4 +- .../CRM/Report/Form/Membership/Summary.php | 4 +- civicrm/CRM/Report/Form/Pledge/Detail.php | 4 +- civicrm/CRM/Report/Form/Pledge/Pbnp.php | 4 +- civicrm/CRM/Report/Form/Pledge/Summary.php | 4 +- civicrm/CRM/Report/Form/Register.php | 4 +- civicrm/CRM/Report/Form/Walklist/Walklist.php | 4 +- civicrm/CRM/Report/Info.php | 4 +- civicrm/CRM/Report/Interface.php | 4 +- civicrm/CRM/Report/Page/Instance.php | 4 +- civicrm/CRM/Report/Page/InstanceList.php | 4 +- civicrm/CRM/Report/Page/Options.php | 4 +- civicrm/CRM/Report/Page/Report.php | 4 +- civicrm/CRM/Report/Page/TemplateList.php | 4 +- civicrm/CRM/Report/Utils/Get.php | 4 +- civicrm/CRM/Report/Utils/Report.php | 4 +- civicrm/CRM/SMS/BAO/Provider.php | 4 +- civicrm/CRM/SMS/Controller/Send.php | 4 +- civicrm/CRM/SMS/DAO/Provider.php | 2 +- civicrm/CRM/SMS/Form/Group.php | 4 +- civicrm/CRM/SMS/Form/Provider.php | 4 +- civicrm/CRM/SMS/Form/Schedule.php | 4 +- civicrm/CRM/SMS/Form/Upload.php | 4 +- civicrm/CRM/SMS/Message.php | 2 +- civicrm/CRM/SMS/Page/Callback.php | 4 +- civicrm/CRM/SMS/Page/Provider.php | 4 +- civicrm/CRM/SMS/Provider.php | 4 +- civicrm/CRM/SMS/StateMachine/Send.php | 4 +- civicrm/CRM/Tag/Form/Edit.php | 4 +- civicrm/CRM/Tag/Form/Merge.php | 4 +- civicrm/CRM/Tag/Form/Tag.php | 4 +- civicrm/CRM/Tag/Page/Tag.php | 4 +- civicrm/CRM/UF/Form/AbstractPreview.php | 4 +- civicrm/CRM/UF/Form/AdvanceSetting.php | 4 +- civicrm/CRM/UF/Form/Field.php | 4 +- civicrm/CRM/UF/Form/Group.php | 4 +- civicrm/CRM/UF/Form/Inline/Preview.php | 4 +- civicrm/CRM/UF/Form/Inline/PreviewById.php | 4 +- civicrm/CRM/UF/Form/Preview.php | 4 +- civicrm/CRM/UF/Page/AJAX.php | 4 +- civicrm/CRM/UF/Page/Field.php | 4 +- civicrm/CRM/UF/Page/Group.php | 4 +- civicrm/CRM/Upgrade/Controller.php | 4 +- civicrm/CRM/Upgrade/Form.php | 26 +- civicrm/CRM/Upgrade/Headless.php | 2 +- civicrm/CRM/Upgrade/Incremental/Base.php | 2 +- civicrm/CRM/Upgrade/Incremental/General.php | 6 +- .../CRM/Upgrade/Incremental/php/FiveZero.php | 97 + .../CRM/Upgrade/Incremental/php/FourFive.php | 2 +- .../CRM/Upgrade/Incremental/php/FourFour.php | 2 +- .../CRM/Upgrade/Incremental/php/FourOne.php | 4 +- .../CRM/Upgrade/Incremental/php/FourSeven.php | 17 +- .../CRM/Upgrade/Incremental/php/FourSix.php | 2 +- .../CRM/Upgrade/Incremental/php/FourThree.php | 2 +- .../CRM/Upgrade/Incremental/php/FourTwo.php | 2 +- .../CRM/Upgrade/Incremental/php/Template.php | 93 + .../Upgrade/Incremental/sql/4.7.19.mysql.tpl | 6 + .../Upgrade/Incremental/sql/4.7.28.mysql.tpl | 4 +- .../Upgrade/Incremental/sql/4.7.32.mysql.tpl | 14 + .../Upgrade/Incremental/sql/5.0.0.mysql.tpl | 1 + .../Incremental/sql/5.0.beta1.mysql.tpl | 1 + .../CRM/Upgrade/Incremental/sql/README.txt | 2 +- civicrm/CRM/Upgrade/Page/Cleanup.php | 2 +- civicrm/CRM/Upgrade/Page/Upgrade.php | 5 +- .../Upgrade/Snapshot/V4p2/Price/BAO/Field.php | 4 +- .../Snapshot/V4p2/Price/BAO/FieldValue.php | 4 +- .../Snapshot/V4p2/Price/BAO/LineItem.php | 4 +- .../Upgrade/Snapshot/V4p2/Price/BAO/Set.php | 4 +- .../Upgrade/Snapshot/V4p2/Price/DAO/Field.php | 4 +- .../Snapshot/V4p2/Price/DAO/FieldValue.php | 4 +- .../Snapshot/V4p2/Price/DAO/LineItem.php | 4 +- .../Upgrade/Snapshot/V4p2/Price/DAO/Set.php | 4 +- .../Snapshot/V4p2/Price/DAO/SetEntity.php | 4 +- civicrm/CRM/Upgrade/StateMachine.php | 4 +- civicrm/CRM/Utils/API/AbstractFieldCoder.php | 4 +- civicrm/CRM/Utils/API/HTMLInputCoder.php | 4 +- civicrm/CRM/Utils/API/MatchOption.php | 4 +- civicrm/CRM/Utils/API/NullOutputCoder.php | 4 +- civicrm/CRM/Utils/API/ReloadOption.php | 4 +- civicrm/CRM/Utils/Address.php | 10 +- civicrm/CRM/Utils/Address/BatchUpdate.php | 4 +- civicrm/CRM/Utils/Address/USPS.php | 4 +- civicrm/CRM/Utils/Array.php | 4 +- civicrm/CRM/Utils/AutoClean.php | 4 +- civicrm/CRM/Utils/Cache.php | 4 +- civicrm/CRM/Utils/Cache/APCcache.php | 4 +- civicrm/CRM/Utils/Cache/ArrayCache.php | 4 +- civicrm/CRM/Utils/Cache/Interface.php | 4 +- civicrm/CRM/Utils/Cache/Memcache.php | 4 +- civicrm/CRM/Utils/Cache/Memcached.php | 4 +- civicrm/CRM/Utils/Cache/NoCache.php | 4 +- civicrm/CRM/Utils/Cache/Redis.php | 4 +- civicrm/CRM/Utils/Cache/SerializeCache.php | 4 +- civicrm/CRM/Utils/Cache/SqlGroup.php | 4 +- civicrm/CRM/Utils/Check.php | 4 +- civicrm/CRM/Utils/Check/Component.php | 4 +- civicrm/CRM/Utils/Check/Component/Case.php | 4 +- civicrm/CRM/Utils/Check/Component/Env.php | 21 +- .../Check/Component/FinancialTypeAcls.php | 4 +- .../Utils/Check/Component/OptionGroups.php | 4 +- .../CRM/Utils/Check/Component/PriceFields.php | 4 +- civicrm/CRM/Utils/Check/Component/Schema.php | 4 +- .../CRM/Utils/Check/Component/Security.php | 4 +- civicrm/CRM/Utils/Check/Component/Source.php | 5 +- .../CRM/Utils/Check/Component/Timestamps.php | 4 +- civicrm/CRM/Utils/Check/Message.php | 4 +- civicrm/CRM/Utils/Color.php | 4 +- civicrm/CRM/Utils/ConsoleTee.php | 2 +- civicrm/CRM/Utils/Constant.php | 4 +- civicrm/CRM/Utils/Crypt.php | 4 +- civicrm/CRM/Utils/Date.php | 4 +- civicrm/CRM/Utils/DeprecatedUtils.php | 4 +- civicrm/CRM/Utils/EnglishNumber.php | 143 + civicrm/CRM/Utils/FakeObject.php | 4 +- civicrm/CRM/Utils/File.php | 14 +- civicrm/CRM/Utils/Geocode.php | 4 +- civicrm/CRM/Utils/Geocode/Google.php | 4 +- civicrm/CRM/Utils/GeocodeProvider.php | 4 +- civicrm/CRM/Utils/GlobalStack.php | 4 +- civicrm/CRM/Utils/Hook.php | 26 +- civicrm/CRM/Utils/Hook/Backdrop.php | 4 +- civicrm/CRM/Utils/Hook/Drupal.php | 4 +- civicrm/CRM/Utils/Hook/Drupal6.php | 4 +- civicrm/CRM/Utils/Hook/Drupal8.php | 4 +- civicrm/CRM/Utils/Hook/DrupalBase.php | 4 +- civicrm/CRM/Utils/Hook/Joomla.php | 4 +- civicrm/CRM/Utils/Hook/Soap.php | 4 +- civicrm/CRM/Utils/Hook/UnitTests.php | 4 +- civicrm/CRM/Utils/Hook/WordPress.php | 4 +- civicrm/CRM/Utils/Http.php | 4 +- civicrm/CRM/Utils/HttpClient.php | 4 +- civicrm/CRM/Utils/ICalendar.php | 4 +- civicrm/CRM/Utils/JS.php | 4 +- civicrm/CRM/Utils/JSON.php | 4 +- civicrm/CRM/Utils/Mail.php | 4 +- civicrm/CRM/Utils/Mail/EmailProcessor.php | 4 +- civicrm/CRM/Utils/Mail/Incoming.php | 4 +- civicrm/CRM/Utils/Migrate/Export.php | 4 +- civicrm/CRM/Utils/Migrate/ExportJSON.php | 4 +- civicrm/CRM/Utils/Migrate/Import.php | 4 +- civicrm/CRM/Utils/Migrate/ImportJSON.php | 4 +- civicrm/CRM/Utils/Money.php | 4 +- civicrm/CRM/Utils/Network.php | 4 +- civicrm/CRM/Utils/Number.php | 4 +- civicrm/CRM/Utils/OpenFlashChart.php | 4 +- civicrm/CRM/Utils/OptionBag.php | 4 +- civicrm/CRM/Utils/PDF/Document.php | 4 +- civicrm/CRM/Utils/PDF/Label.php | 4 +- civicrm/CRM/Utils/PDF/Utils.php | 4 +- civicrm/CRM/Utils/Pager.php | 4 +- civicrm/CRM/Utils/PagerAToZ.php | 4 +- civicrm/CRM/Utils/PseudoConstant.php | 4 +- civicrm/CRM/Utils/QueryFormatter.php | 4 +- civicrm/CRM/Utils/REST.php | 4 +- civicrm/CRM/Utils/ReCAPTCHA.php | 4 +- civicrm/CRM/Utils/Recent.php | 4 +- civicrm/CRM/Utils/Request.php | 4 +- civicrm/CRM/Utils/Rule.php | 4 +- civicrm/CRM/Utils/SQL.php | 4 +- civicrm/CRM/Utils/SQL/Select.php | 4 +- civicrm/CRM/Utils/Signer.php | 4 +- civicrm/CRM/Utils/SoapServer.php | 4 +- civicrm/CRM/Utils/Sort.php | 4 +- civicrm/CRM/Utils/String.php | 4 +- civicrm/CRM/Utils/System.php | 37 +- civicrm/CRM/Utils/System/Backdrop.php | 4 +- civicrm/CRM/Utils/System/Drupal.php | 12 +- civicrm/CRM/Utils/System/Drupal6.php | 6 +- civicrm/CRM/Utils/System/Drupal8.php | 4 +- civicrm/CRM/Utils/System/DrupalBase.php | 4 +- civicrm/CRM/Utils/System/Joomla.php | 4 +- civicrm/CRM/Utils/System/Soap.php | 4 +- civicrm/CRM/Utils/System/UnitTests.php | 4 +- civicrm/CRM/Utils/System/WordPress.php | 4 +- civicrm/CRM/Utils/SystemLogger.php | 4 +- civicrm/CRM/Utils/Time.php | 4 +- civicrm/CRM/Utils/Token.php | 4 +- civicrm/CRM/Utils/Type.php | 4 +- civicrm/CRM/Utils/Url.php | 55 + civicrm/CRM/Utils/Verp.php | 4 +- civicrm/CRM/Utils/VersionCheck.php | 4 +- civicrm/CRM/Utils/VisualBundle.php | 4 +- civicrm/CRM/Utils/Weight.php | 2 +- civicrm/CRM/Utils/Wrapper.php | 4 +- civicrm/CRM/Utils/XML.php | 4 +- civicrm/CRM/Utils/Zip.php | 4 +- civicrm/Civi/API/Api3SelectQuery.php | 2 +- civicrm/Civi/API/Event/AuthorizeEvent.php | 2 +- civicrm/Civi/API/Event/Event.php | 2 +- civicrm/Civi/API/Event/ExceptionEvent.php | 2 +- civicrm/Civi/API/Event/PrepareEvent.php | 2 +- civicrm/Civi/API/Event/ResolveEvent.php | 2 +- civicrm/Civi/API/Event/RespondEvent.php | 2 +- civicrm/Civi/API/Events.php | 2 +- civicrm/Civi/API/Kernel.php | 4 +- civicrm/Civi/API/Provider/AdhocProvider.php | 2 +- .../API/Provider/MagicFunctionProvider.php | 2 +- .../Civi/API/Provider/ProviderInterface.php | 2 +- .../Civi/API/Provider/ReflectionProvider.php | 2 +- civicrm/Civi/API/Provider/StaticProvider.php | 2 +- civicrm/Civi/API/Request.php | 2 +- civicrm/Civi/API/SelectQuery.php | 2 +- .../API/Subscriber/APIv3SchemaAdapter.php | 2 +- .../Civi/API/Subscriber/ChainSubscriber.php | 2 +- .../API/Subscriber/DynamicFKAuthorization.php | 2 +- .../Civi/API/Subscriber/I18nSubscriber.php | 2 +- .../Civi/API/Subscriber/PermissionCheck.php | 2 +- .../API/Subscriber/TransactionSubscriber.php | 2 +- .../API/Subscriber/WhitelistSubscriber.php | 4 +- .../Civi/API/Subscriber/WrapperAdapter.php | 2 +- .../Civi/API/Subscriber/XDebugSubscriber.php | 2 +- civicrm/Civi/API/WhitelistRule.php | 2 +- civicrm/Civi/ActionSchedule/Mapping.php | 2 +- .../Civi/ActionSchedule/MappingInterface.php | 2 +- .../Civi/ActionSchedule/RecipientBuilder.php | 2 +- civicrm/Civi/CCase/Analyzer.php | 2 +- civicrm/Civi/CCase/CaseChangeListener.php | 2 +- civicrm/Civi/CCase/Event/CaseChangeEvent.php | 2 +- civicrm/Civi/CCase/Events.php | 2 +- civicrm/Civi/Core/DAO/Event/PostDelete.php | 2 +- civicrm/Civi/Core/DAO/Event/PostUpdate.php | 2 +- civicrm/Civi/Core/DAO/Event/PreDelete.php | 2 +- civicrm/Civi/Core/DatabaseInitializer.php | 2 +- civicrm/Civi/Core/Event/GenericHookEvent.php | 2 +- civicrm/Civi/Core/Event/PostEvent.php | 2 +- civicrm/Civi/Core/Event/PreEvent.php | 2 +- .../Civi/Core/Event/SystemInstallEvent.php | 2 +- .../Core/Event/UnhandledExceptionEvent.php | 2 +- civicrm/Civi/Core/InstallationCanary.php | 2 +- civicrm/Civi/Core/LocalizationInitializer.php | 2 +- civicrm/Civi/Core/Lock/LockInterface.php | 2 +- civicrm/Civi/Core/Lock/LockManager.php | 2 +- civicrm/Civi/Core/Lock/NullLock.php | 4 +- civicrm/Civi/Core/SettingsBag.php | 2 +- civicrm/Civi/Core/SettingsManager.php | 2 +- civicrm/Civi/Core/SettingsMetadata.php | 2 +- .../Civi/Core/SqlTrigger/StaticTriggers.php | 4 +- .../Core/SqlTrigger/TimestampTriggers.php | 4 +- civicrm/Civi/Core/SqlTriggers.php | 2 +- civicrm/Civi/Core/Transaction/Frame.php | 4 +- civicrm/Civi/Core/Transaction/Manager.php | 4 +- .../Civi/Token/AbstractTokenSubscriber.php | 2 +- civicrm/ang/crmMailing/BlockReview.html | 2 +- civicrm/ang/crmMailing/services.js | 3 + civicrm/ang/crmUi.js | 14 + civicrm/api/v3/AclRole.php | 2 +- civicrm/api/v3/Batch.php | 2 +- civicrm/api/v3/CaseContact.php | 2 +- civicrm/api/v3/ContactType.php | 1 - civicrm/api/v3/Contribution.php | 7 + civicrm/api/v3/ContributionProduct.php | 2 +- civicrm/api/v3/ContributionSoft.php | 2 +- civicrm/api/v3/Country.php | 2 +- civicrm/api/v3/Dashboard.php | 6 +- civicrm/api/v3/DashboardContact.php | 2 +- civicrm/api/v3/EntityBatch.php | 2 +- civicrm/api/v3/EntityFinancialTrxn.php | 2 +- civicrm/api/v3/Extension.php | 14 +- civicrm/api/v3/FinancialItem.php | 2 +- civicrm/api/v3/GroupNesting.php | 9 +- civicrm/api/v3/GroupOrganization.php | 9 +- civicrm/api/v3/Im.php | 2 +- civicrm/api/v3/Job.php | 2 +- civicrm/api/v3/JobLog.php | 24 + civicrm/api/v3/LocationType.php | 2 +- civicrm/api/v3/MailSettings.php | 2 +- civicrm/api/v3/Mailing.php | 2 +- civicrm/api/v3/MailingAB.php | 2 +- civicrm/api/v3/MailingComponent.php | 2 +- civicrm/api/v3/MailingEventQueue.php | 2 +- civicrm/api/v3/MappingField.php | 2 +- civicrm/api/v3/MembershipLog.php | 2 +- civicrm/api/v3/MembershipPayment.php | 2 +- civicrm/api/v3/MembershipType.php | 2 +- civicrm/api/v3/MessageTemplate.php | 2 +- civicrm/api/v3/Navigation.php | 2 +- civicrm/api/v3/Note.php | 2 +- civicrm/api/v3/OpenID.php | 2 +- civicrm/api/v3/OptionGroup.php | 2 +- civicrm/api/v3/OptionValue.php | 2 +- civicrm/api/v3/ParticipantPayment.php | 12 +- civicrm/api/v3/ParticipantStatusType.php | 2 +- civicrm/api/v3/PaymentProcessorType.php | 12 +- civicrm/api/v3/Premium.php | 2 +- civicrm/api/v3/PrintLabel.php | 2 +- civicrm/api/v3/Product.php | 2 +- civicrm/api/v3/RelationshipType.php | 23 +- civicrm/api/v3/ReportInstance.php | 2 +- civicrm/api/v3/RuleGroup.php | 2 +- civicrm/api/v3/SavedSearch.php | 2 +- civicrm/api/v3/SmsProvider.php | 2 +- civicrm/api/v3/StateProvince.php | 2 +- civicrm/api/v3/StatusPreference.php | 2 +- civicrm/api/v3/Tag.php | 2 +- civicrm/api/v3/Website.php | 8 +- civicrm/api/v3/WordReplacement.php | 2 +- civicrm/api/v3/utils.php | 6 +- .../bower_components/crossfilter2/.bower.json | 20 +- civicrm/bower_components/crossfilter2/AUTHORS | 20 + .../crossfilter2/CONTRIBUTING.md | 14 +- civicrm/bower_components/crossfilter2/LICENSE | 4 +- civicrm/bower_components/crossfilter2/NOTICE | 28 + .../bower_components/crossfilter2/README.md | 20 +- .../bower_components/crossfilter2/bower.json | 10 +- .../crossfilter2/crossfilter.js | 4010 +++++-- .../crossfilter2/crossfilter.min.js | 2 +- .../bower_components/crossfilter2/index.d.ts | 145 + civicrm/bower_components/dc-2.1.x/.bower.json | 10 +- civicrm/bower_components/dc-2.1.x/bower.json | 2 +- civicrm/bower_components/dc-2.1.x/dc.js | 6 +- civicrm/bower_components/dc-2.1.x/dc.js.map | 2 +- civicrm/bower_components/dc-2.1.x/dc.min.css | 2 +- civicrm/bower_components/dc-2.1.x/dc.min.js | 4 +- .../bower_components/dc-2.1.x/dc.min.js.map | 2 +- .../bower_components/jquery-ui/.bower.json | 2 +- civicrm/civicrm-version.php | 2 +- civicrm/composer.json | 11 +- civicrm/composer.lock | 296 +- civicrm/css/civicrm.css | 4 + civicrm/install/langs.php | 0 .../js/wysiwyg/admin.ckeditor-configurator.js | 29 +- civicrm/release-notes.md | 11 + civicrm/release-notes/5.0.0.md | 783 ++ civicrm/sql/civicrm.mysql | 5 +- civicrm/sql/civicrm_acl.mysql | 4 +- civicrm/sql/civicrm_data.mysql | 35 +- civicrm/sql/civicrm_drop.mysql | 2 +- civicrm/sql/civicrm_generated.mysql | 4 +- civicrm/sql/civicrm_navigation.mysql | 10 +- civicrm/sql/civicrm_sample.mysql | 6 +- civicrm/templates/CRM/ACL/Form/ACL.tpl | 2 +- civicrm/templates/CRM/ACL/Form/ACLBasic.tpl | 2 +- civicrm/templates/CRM/ACL/Form/EntityRole.tpl | 2 +- .../CRM/ACL/Form/WordPress/Permissions.tpl | 2 +- civicrm/templates/CRM/ACL/Header.tpl | 2 +- civicrm/templates/CRM/ACL/Page/ACL.tpl | 2 +- civicrm/templates/CRM/ACL/Page/ACLBasic.tpl | 2 +- civicrm/templates/CRM/ACL/Page/EntityRole.tpl | 2 +- .../templates/CRM/Activity/Calendar/ICal.tpl | 2 +- .../templates/CRM/Activity/Form/Activity.hlp | 2 +- .../templates/CRM/Activity/Form/Activity.tpl | 2 +- .../CRM/Activity/Form/ActivityJs.tpl | 2 +- .../CRM/Activity/Form/ActivityLinks.tpl | 2 +- .../CRM/Activity/Form/ActivityView.tpl | 2 +- .../templates/CRM/Activity/Form/Search.tpl | 2 +- .../CRM/Activity/Form/Search/Common.tpl | 2 +- .../CRM/Activity/Form/Search/EmptyResults.tpl | 2 +- .../templates/CRM/Activity/Form/Selector.tpl | 2 +- civicrm/templates/CRM/Activity/Form/Task.tpl | 2 +- .../CRM/Activity/Form/Task/AddToTag.tpl | 2 +- .../CRM/Activity/Form/Task/Batch.tpl | 2 +- .../CRM/Activity/Form/Task/Delete.tpl | 2 +- .../CRM/Activity/Form/Task/Email.tpl | 2 +- .../CRM/Activity/Form/Task/FileOnCase.tpl | 2 +- .../CRM/Activity/Form/Task/PickOption.tpl | 2 +- .../CRM/Activity/Form/Task/PickProfile.tpl | 2 +- .../CRM/Activity/Form/Task/Print.tpl | 2 +- .../CRM/Activity/Form/Task/RemoveFromTag.tpl | 2 +- .../templates/CRM/Activity/Form/Task/SMS.tpl | 2 +- .../Form/Task/SearchTaskHookSample.tpl | 2 +- .../CRM/Activity/Import/Form/DataSource.hlp | 2 +- .../CRM/Activity/Import/Form/DataSource.tpl | 2 +- .../CRM/Activity/Import/Form/MapField.tpl | 2 +- .../CRM/Activity/Import/Form/MapTable.tpl | 2 +- .../CRM/Activity/Import/Form/Preview.tpl | 2 +- .../CRM/Activity/Import/Form/Summary.tpl | 2 +- civicrm/templates/CRM/Activity/Page/Tab.tpl | 2 +- .../CRM/Activity/Page/UserDashboard.tpl | 2 +- .../CRM/Activity/Selector/Activity.tpl | 2 +- .../CRM/Activity/Selector/Selector.tpl | 2 +- civicrm/templates/CRM/Admin/Form/CMSUser.tpl | 2 +- .../templates/CRM/Admin/Form/ContactType.tpl | 2 +- .../templates/CRM/Admin/Form/Extensions.tpl | 2 +- civicrm/templates/CRM/Admin/Form/Job.tpl | 2 +- .../templates/CRM/Admin/Form/LocationType.tpl | 2 +- .../templates/CRM/Admin/Form/MailSettings.tpl | 2 +- civicrm/templates/CRM/Admin/Form/Mapping.tpl | 2 +- .../CRM/Admin/Form/MessageTemplates.tpl | 4 +- .../templates/CRM/Admin/Form/Navigation.hlp | 2 +- .../templates/CRM/Admin/Form/Navigation.tpl | 2 +- .../templates/CRM/Admin/Form/OptionGroup.tpl | 2 +- civicrm/templates/CRM/Admin/Form/Options.tpl | 2 +- .../CRM/Admin/Form/ParticipantStatusType.tpl | 2 +- .../CRM/Admin/Form/PaymentProcessor.tpl | 2 +- .../CRM/Admin/Form/PaymentProcessorType.tpl | 2 +- .../CRM/Admin/Form/Preferences/Address.hlp | 2 +- .../CRM/Admin/Form/Preferences/Address.tpl | 2 +- .../CRM/Admin/Form/Preferences/Campaign.tpl | 2 +- .../CRM/Admin/Form/Preferences/Contribute.hlp | 2 +- .../CRM/Admin/Form/Preferences/Contribute.tpl | 2 +- .../CRM/Admin/Form/Preferences/Display.hlp | 2 +- .../CRM/Admin/Form/Preferences/Display.tpl | 2 +- .../CRM/Admin/Form/Preferences/Event.tpl | 2 +- .../CRM/Admin/Form/Preferences/Mailing.tpl | 2 +- .../CRM/Admin/Form/Preferences/Member.tpl | 2 +- .../CRM/Admin/Form/Preferences/Multisite.tpl | 2 +- .../CRM/Admin/Form/PreferencesDate.tpl | 2 +- .../CRM/Admin/Form/RelationshipType.tpl | 2 +- .../CRM/Admin/Form/ScheduleReminders.tpl | 2 +- .../templates/CRM/Admin/Form/Setting/Case.tpl | 2 +- .../CRM/Admin/Form/Setting/Component.hlp | 2 +- .../CRM/Admin/Form/Setting/Component.tpl | 4 +- .../templates/CRM/Admin/Form/Setting/Date.hlp | 2 +- .../templates/CRM/Admin/Form/Setting/Date.tpl | 4 +- .../CRM/Admin/Form/Setting/Debugging.hlp | 2 +- .../CRM/Admin/Form/Setting/Debugging.tpl | 4 +- .../CRM/Admin/Form/Setting/Event.tpl | 2 +- .../CRM/Admin/Form/Setting/Localization.hlp | 2 +- .../CRM/Admin/Form/Setting/Localization.tpl | 16 +- .../templates/CRM/Admin/Form/Setting/Mail.tpl | 2 +- .../CRM/Admin/Form/Setting/Mapping.hlp | 2 +- .../CRM/Admin/Form/Setting/Mapping.tpl | 4 +- .../CRM/Admin/Form/Setting/Miscellaneous.tpl | 2 +- .../templates/CRM/Admin/Form/Setting/Path.tpl | 9 +- .../CRM/Admin/Form/Setting/Search.tpl | 2 +- .../CRM/Admin/Form/Setting/SettingForm.tpl | 2 +- .../templates/CRM/Admin/Form/Setting/Smtp.hlp | 2 +- .../templates/CRM/Admin/Form/Setting/Smtp.tpl | 2 +- .../templates/CRM/Admin/Form/Setting/UF.tpl | 4 +- .../Form/Setting/UpdateConfigBackend.tpl | 4 +- .../templates/CRM/Admin/Form/Setting/Url.hlp | 2 +- .../templates/CRM/Admin/Form/Setting/Url.tpl | 5 +- .../CRM/Admin/Form/WordReplacements.hlp | 2 +- .../CRM/Admin/Form/WordReplacements.tpl | 8 +- .../templates/CRM/Admin/Page/APIExplorer.hlp | 2 +- .../templates/CRM/Admin/Page/APIExplorer.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Access.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Admin.tpl | 2 +- .../CRM/Admin/Page/CKEditorConfig.tpl | 8 +- .../CRM/Admin/Page/ConfigTaskList.tpl | 4 +- .../templates/CRM/Admin/Page/ContactType.hlp | 2 +- .../templates/CRM/Admin/Page/ContactType.tpl | 2 +- .../CRM/Admin/Page/EventTemplate.tpl | 2 +- .../templates/CRM/Admin/Page/Extensions.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Job.tpl | 2 +- civicrm/templates/CRM/Admin/Page/JobLog.tpl | 2 +- .../templates/CRM/Admin/Page/LocationType.tpl | 2 +- .../templates/CRM/Admin/Page/MailSettings.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Mapping.tpl | 3 +- .../CRM/Admin/Page/MessageTemplates.hlp | 2 +- .../CRM/Admin/Page/MessageTemplates.tpl | 4 +- .../templates/CRM/Admin/Page/Navigation.hlp | 2 +- .../templates/CRM/Admin/Page/Navigation.tpl | 2 +- .../templates/CRM/Admin/Page/OptionGroup.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Options.hlp | 2 +- civicrm/templates/CRM/Admin/Page/Options.tpl | 8 +- .../CRM/Admin/Page/ParticipantStatusType.hlp | 2 +- .../CRM/Admin/Page/ParticipantStatusType.tpl | 2 +- .../CRM/Admin/Page/PaymentProcessor.hlp | 2 +- .../CRM/Admin/Page/PaymentProcessor.tpl | 2 +- .../CRM/Admin/Page/PaymentProcessorType.tpl | 2 +- .../CRM/Admin/Page/PreferencesDate.tpl | 2 +- .../CRM/Admin/Page/RelationshipType.hlp | 2 +- .../CRM/Admin/Page/RelationshipType.tpl | 2 +- .../templates/CRM/Admin/Page/Reminders.tpl | 2 +- .../CRM/Admin/Page/ScheduleReminders.hlp | 2 +- .../CRM/Admin/Page/ScheduleReminders.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Setting.tpl | 2 +- civicrm/templates/CRM/Badge/Form/Layout.tpl | 4 +- civicrm/templates/CRM/Badge/Page/Layout.hlp | 2 +- civicrm/templates/CRM/Badge/Page/Layout.tpl | 2 +- civicrm/templates/CRM/Batch/Form/Batch.tpl | 2 +- civicrm/templates/CRM/Batch/Form/Entry.tpl | 6 +- civicrm/templates/CRM/Batch/Form/Search.tpl | 4 +- civicrm/templates/CRM/Batch/Page/Batch.tpl | 2 +- civicrm/templates/CRM/Block/Add.tpl | 2 +- civicrm/templates/CRM/Block/Dashboard.tpl | 2 +- civicrm/templates/CRM/Block/Event.tpl | 2 +- .../templates/CRM/Block/FullTextSearch.tpl | 2 +- civicrm/templates/CRM/Block/LangSwitch.tpl | 2 +- civicrm/templates/CRM/Block/Mail.tpl | 2 +- .../templates/CRM/Block/RecentlyViewed.tpl | 2 +- civicrm/templates/CRM/Block/Subject.tpl | 2 +- civicrm/templates/CRM/Block/blocks.tpl | 2 +- .../templates/CRM/Campaign/Form/Campaign.tpl | 2 +- civicrm/templates/CRM/Campaign/Form/Gotv.tpl | 2 +- .../templates/CRM/Campaign/Form/Petition.tpl | 2 +- .../CRM/Campaign/Form/Petition/Signature.tpl | 2 +- .../CRM/Campaign/Form/ResultOptions.tpl | 2 +- .../templates/CRM/Campaign/Form/Search.tpl | 2 +- .../CRM/Campaign/Form/Search/Campaign.tpl | 2 +- .../CRM/Campaign/Form/Search/Common.tpl | 17 +- .../CRM/Campaign/Form/Search/EmptyResults.tpl | 2 +- .../CRM/Campaign/Form/Search/Petition.tpl | 2 +- .../CRM/Campaign/Form/Search/Survey.tpl | 2 +- .../templates/CRM/Campaign/Form/Selector.tpl | 2 +- .../CRM/Campaign/Form/Survey/Delete.tpl | 2 +- .../CRM/Campaign/Form/Survey/Main.tpl | 2 +- .../CRM/Campaign/Form/Survey/Questions.tpl | 2 +- .../CRM/Campaign/Form/Survey/Results.tpl | 6 +- .../CRM/Campaign/Form/Survey/Tab.tpl | 2 +- .../CRM/Campaign/Form/Task/Interview.tpl | 2 +- .../CRM/Campaign/Form/Task/Print.tpl | 2 +- .../CRM/Campaign/Form/Task/Release.tpl | 2 +- .../CRM/Campaign/Form/Task/Reserve.tpl | 2 +- .../CRM/Campaign/Form/Task/Result.tpl | 2 +- .../Campaign/Form/addCampaignToComponent.hlp | 2 +- .../templates/CRM/Campaign/Page/DashBoard.tpl | 2 +- .../templates/CRM/Campaign/Page/Petition.tpl | 2 +- .../CRM/Campaign/Page/Petition/Confirm.tpl | 2 +- .../CRM/Campaign/Page/Petition/ThankYou.tpl | 2 +- civicrm/templates/CRM/Campaign/Page/Vote.tpl | 2 +- civicrm/templates/CRM/Case/Audit/Audit.tpl | 2 +- civicrm/templates/CRM/Case/Audit/Report.tpl | 2 +- civicrm/templates/CRM/Case/Form/Activity.tpl | 2 +- .../Form/Activity/ChangeCaseStartDate.tpl | 2 +- .../Case/Form/Activity/ChangeCaseStatus.tpl | 2 +- .../CRM/Case/Form/Activity/ChangeCaseType.tpl | 2 +- .../CRM/Case/Form/Activity/LinkCases.tpl | 2 +- .../CRM/Case/Form/Activity/OpenCase.tpl | 2 +- .../templates/CRM/Case/Form/ActivityTab.tpl | 2 +- .../CRM/Case/Form/ActivityToCase.tpl | 2 +- .../templates/CRM/Case/Form/ActivityView.tpl | 2 +- civicrm/templates/CRM/Case/Form/Case.hlp | 2 +- civicrm/templates/CRM/Case/Form/Case.tpl | 2 +- .../templates/CRM/Case/Form/CaseFilter.tpl | 2 +- civicrm/templates/CRM/Case/Form/CaseView.tpl | 2 +- .../templates/CRM/Case/Form/CustomData.tpl | 2 +- .../templates/CRM/Case/Form/EditClient.tpl | 2 +- civicrm/templates/CRM/Case/Form/Report.tpl | 2 +- civicrm/templates/CRM/Case/Form/Search.tpl | 2 +- .../Case/Form/Search/AdvancedSearchPane.tpl | 2 +- .../templates/CRM/Case/Form/Search/Common.tpl | 2 +- .../CRM/Case/Form/Search/EmptyResults.tpl | 2 +- civicrm/templates/CRM/Case/Form/Selector.tpl | 2 +- civicrm/templates/CRM/Case/Form/Task.tpl | 2 +- .../templates/CRM/Case/Form/Task/Batch.tpl | 26 + .../templates/CRM/Case/Form/Task/Delete.tpl | 2 +- civicrm/templates/CRM/Case/Form/Task/PDF.tpl | 2 +- .../CRM/Case/Form/Task/PickProfile.tpl | 26 + .../templates/CRM/Case/Form/Task/Print.tpl | 2 +- .../templates/CRM/Case/Form/Task/Restore.tpl | 2 +- .../CRM/Case/Form/ViewRelatedCases.tpl | 2 +- .../templates/CRM/Case/Page/CaseDetails.tpl | 2 +- .../CRM/Case/Page/ConfigureError.tpl | 2 +- .../CRM/Case/Page/CustomDataView.tpl | 2 +- civicrm/templates/CRM/Case/Page/DashBoard.tpl | 2 +- .../CRM/Case/Page/DashboardSelector.tpl | 2 +- civicrm/templates/CRM/Case/Page/Tab.tpl | 2 +- .../CRM/Case/XMLProcessor/Report.tpl | 2 +- .../templates/CRM/Contact/Form/Contact.hlp | 2 +- .../templates/CRM/Contact/Form/Contact.tpl | 2 +- .../templates/CRM/Contact/Form/CustomData.tpl | 2 +- .../templates/CRM/Contact/Form/DedupeFind.tpl | 2 +- .../CRM/Contact/Form/DedupeRules.tpl | 2 +- civicrm/templates/CRM/Contact/Form/Domain.hlp | 2 +- civicrm/templates/CRM/Contact/Form/Domain.tpl | 2 +- .../CRM/Contact/Form/Edit/Address.tpl | 2 +- .../Contact/Form/Edit/Address/CustomData.tpl | 2 +- .../Contact/Form/Edit/Address/CustomField.tpl | 2 +- .../Form/Edit/Address/address_name.tpl | 2 +- .../Form/Edit/Address/city_postal_code.tpl | 2 +- .../Edit/Address/country_state_province.tpl | 2 +- .../CRM/Contact/Form/Edit/Address/county.tpl | 2 +- .../Contact/Form/Edit/Address/geo_code.tpl | 2 +- .../Form/Edit/Address/street_address.tpl | 2 +- .../Edit/Address/supplemental_address_1.tpl | 2 +- .../Edit/Address/supplemental_address_2.tpl | 2 +- .../Edit/Address/supplemental_address_3.tpl | 2 +- .../Form/Edit/CommunicationPreferences.js.tpl | 2 +- .../Form/Edit/CommunicationPreferences.tpl | 2 +- .../CRM/Contact/Form/Edit/CustomData.tpl | 2 +- .../CRM/Contact/Form/Edit/Demographics.tpl | 2 +- .../templates/CRM/Contact/Form/Edit/Email.tpl | 2 +- .../CRM/Contact/Form/Edit/Household.tpl | 2 +- .../templates/CRM/Contact/Form/Edit/IM.tpl | 2 +- .../CRM/Contact/Form/Edit/Individual.tpl | 2 +- .../templates/CRM/Contact/Form/Edit/Notes.tpl | 2 +- .../CRM/Contact/Form/Edit/OpenID.tpl | 2 +- .../CRM/Contact/Form/Edit/Organization.tpl | 2 +- .../templates/CRM/Contact/Form/Edit/Phone.tpl | 4 +- .../CRM/Contact/Form/Edit/TagsAndGroups.tpl | 2 +- .../CRM/Contact/Form/Edit/Tagtree.tpl | 2 +- .../CRM/Contact/Form/Edit/Website.tpl | 2 +- .../CRM/Contact/Form/GroupContact.tpl | 2 +- .../CRM/Contact/Form/Inline/Address.tpl | 2 +- .../Form/Inline/CommunicationPreferences.tpl | 2 +- .../CRM/Contact/Form/Inline/ContactInfo.tpl | 2 +- .../CRM/Contact/Form/Inline/ContactName.tpl | 2 +- .../CRM/Contact/Form/Inline/CustomData.tpl | 2 +- .../CRM/Contact/Form/Inline/Demographics.tpl | 2 +- .../CRM/Contact/Form/Inline/Email.tpl | 2 +- .../templates/CRM/Contact/Form/Inline/IM.tpl | 2 +- .../CRM/Contact/Form/Inline/OpenID.tpl | 2 +- .../CRM/Contact/Form/Inline/Phone.tpl | 2 +- .../CRM/Contact/Form/Inline/Website.tpl | 2 +- civicrm/templates/CRM/Contact/Form/Merge.hlp | 2 +- civicrm/templates/CRM/Contact/Form/Merge.tpl | 2 +- .../templates/CRM/Contact/Form/OnBehalfOf.tpl | 2 +- .../CRM/Contact/Form/RelatedContact.tpl | 2 +- .../CRM/Contact/Form/Relationship.tpl | 2 +- .../CRM/Contact/Form/Search/Advanced.hlp | 2 +- .../CRM/Contact/Form/Search/Advanced.tpl | 2 +- .../Contact/Form/Search/AdvancedCriteria.tpl | 2 +- .../CRM/Contact/Form/Search/Basic.hlp | 2 +- .../CRM/Contact/Form/Search/Basic.tpl | 2 +- .../CRM/Contact/Form/Search/BasicCriteria.tpl | 2 +- .../CRM/Contact/Form/Search/Builder.hlp | 2 +- .../CRM/Contact/Form/Search/Builder.tpl | 4 +- .../Form/Search/ContactSearchFields.tpl | 18 +- .../Contact/Form/Search/Criteria/Activity.tpl | 2 +- .../Contact/Form/Search/Criteria/Basic.tpl | 2 +- .../Form/Search/Criteria/ChangeLog.tpl | 18 +- .../Contact/Form/Search/Criteria/Custom.tpl | 2 +- .../Form/Search/Criteria/Demographics.tpl | 2 +- .../Contact/Form/Search/Criteria/Location.hlp | 2 +- .../Contact/Form/Search/Criteria/Location.tpl | 2 +- .../Contact/Form/Search/Criteria/Notes.tpl | 2 +- .../Form/Search/Criteria/Relationship.tpl | 2 +- .../CRM/Contact/Form/Search/Criteria/Task.tpl | 2 +- .../CRM/Contact/Form/Search/Custom.tpl | 2 +- .../Form/Search/Custom/ActivitySearch.tpl | 2 +- .../Form/Search/Custom/ContribSYBNT.tpl | 2 +- .../Search/Custom/ContributionAggregate.tpl | 2 +- .../Form/Search/Custom/EmptyResults.tpl | 2 +- .../Form/Search/Custom/EventDetails.tpl | 2 +- .../Contact/Form/Search/Custom/FullText.hlp | 2 +- .../Contact/Form/Search/Custom/FullText.tpl | 2 +- .../Form/Search/Custom/MultipleValues.tpl | 2 +- .../Search/Custom/MultipleValuesCriteria.tpl | 2 +- .../Contact/Form/Search/Custom/Proximity.tpl | 2 +- .../CRM/Contact/Form/Search/Custom/Sample.tpl | 2 +- .../CRM/Contact/Form/Search/EmptyResults.tpl | 2 +- .../CRM/Contact/Form/Search/Intro.tpl | 2 +- .../CRM/Contact/Form/Search/ResultTasks.tpl | 2 +- .../CRM/Contact/Form/Search/table.tpl | 2 +- .../templates/CRM/Contact/Form/Selector.tpl | 2 +- .../CRM/Contact/Form/ShareAddress.tpl | 2 +- civicrm/templates/CRM/Contact/Form/Task.tpl | 2 +- .../CRM/Contact/Form/Task/AddToGroup.tpl | 2 +- .../CRM/Contact/Form/Task/AddToHousehold.tpl | 2 +- .../CRM/Contact/Form/Task/AddToIndividual.tpl | 2 +- .../Contact/Form/Task/AddToOrganization.tpl | 2 +- .../Contact/Form/Task/AddToParentClass.tpl | 2 +- .../CRM/Contact/Form/Task/AddToTag.tpl | 2 +- .../Contact/Form/Task/AlterPreferences.tpl | 2 +- .../templates/CRM/Contact/Form/Task/Batch.tpl | 2 +- .../CRM/Contact/Form/Task/Delete.tpl | 2 +- .../templates/CRM/Contact/Form/Task/Email.hlp | 16 +- .../templates/CRM/Contact/Form/Task/Email.tpl | 5 +- .../CRM/Contact/Form/Task/EmailCommon.tpl | 2 +- .../CRM/Contact/Form/Task/GMapsInput.tpl | 2 +- .../CRM/Contact/Form/Task/HookSample.tpl | 2 +- .../templates/CRM/Contact/Form/Task/Label.tpl | 2 +- .../templates/CRM/Contact/Form/Task/Map.tpl | 2 +- .../CRM/Contact/Form/Task/Map/Google.tpl | 2 +- .../Contact/Form/Task/Map/OpenStreetMaps.tpl | 2 +- .../templates/CRM/Contact/Form/Task/PDF.tpl | 2 +- .../CRM/Contact/Form/Task/PDFLetterCommon.tpl | 2 +- .../CRM/Contact/Form/Task/PickProfile.tpl | 2 +- .../templates/CRM/Contact/Form/Task/Print.tpl | 2 +- .../CRM/Contact/Form/Task/ProximityCommon.tpl | 2 +- .../CRM/Contact/Form/Task/RemoveFromGroup.tpl | 2 +- .../CRM/Contact/Form/Task/RemoveFromTag.tpl | 2 +- .../CRM/Contact/Form/Task/Result.tpl | 2 +- .../templates/CRM/Contact/Form/Task/SMS.hlp | 2 +- .../templates/CRM/Contact/Form/Task/SMS.tpl | 2 +- .../CRM/Contact/Form/Task/SMSCommon.tpl | 2 +- .../CRM/Contact/Form/Task/SaveSearch.tpl | 2 +- .../Contact/Form/Task/SaveSearch/Update.tpl | 2 +- .../CRM/Contact/Form/Task/Unhold.tpl | 2 +- .../templates/CRM/Contact/Import/Form/CSV.tpl | 2 +- .../CRM/Contact/Import/Form/DataSource.hlp | 4 +- .../CRM/Contact/Import/Form/DataSource.tpl | 2 +- .../CRM/Contact/Import/Form/MapField.tpl | 2 +- .../CRM/Contact/Import/Form/MapTable.tpl | 2 +- .../CRM/Contact/Import/Form/Mapper.tpl | 2 +- .../CRM/Contact/Import/Form/Preview.tpl | 2 +- .../templates/CRM/Contact/Import/Form/SQL.tpl | 2 +- .../CRM/Contact/Import/Form/Summary.tpl | 2 +- .../CRM/Contact/Page/ContactImage.tpl | 2 +- .../CRM/Contact/Page/CustomSearch.hlp | 2 +- .../CRM/Contact/Page/CustomSearch.tpl | 2 +- .../templates/CRM/Contact/Page/DashBoard.tpl | 2 +- .../CRM/Contact/Page/DashBoardDashlet.tpl | 2 +- .../templates/CRM/Contact/Page/Dashboard.hlp | 2 +- .../templates/CRM/Contact/Page/Dashlet.tpl | 2 +- .../CRM/Contact/Page/DedupeException.tpl | 2 +- .../templates/CRM/Contact/Page/DedupeFind.tpl | 2 +- .../CRM/Contact/Page/DedupeMerge.tpl | 2 +- .../CRM/Contact/Page/DedupeRules.hlp | 2 +- .../CRM/Contact/Page/DedupeRules.tpl | 2 +- .../CRM/Contact/Page/Inline/Actions.tpl | 2 +- .../CRM/Contact/Page/Inline/Address.tpl | 2 +- .../Page/Inline/CommunicationPreferences.tpl | 2 +- .../CRM/Contact/Page/Inline/ContactInfo.tpl | 2 +- .../CRM/Contact/Page/Inline/ContactName.tpl | 2 +- .../CRM/Contact/Page/Inline/CustomData.tpl | 2 +- .../CRM/Contact/Page/Inline/Demographics.tpl | 2 +- .../CRM/Contact/Page/Inline/Email.tpl | 2 +- .../templates/CRM/Contact/Page/Inline/IM.tpl | 2 +- .../CRM/Contact/Page/Inline/OpenID.tpl | 2 +- .../CRM/Contact/Page/Inline/Phone.tpl | 2 +- .../CRM/Contact/Page/Inline/Website.tpl | 2 +- .../CRM/Contact/Page/SavedSearch.tpl | 2 +- .../Contact/Page/View/ContactSmartGroup.tpl | 2 +- .../CRM/Contact/Page/View/CustomData.tpl | 2 +- .../Contact/Page/View/CustomDataFieldView.tpl | 2 +- .../CRM/Contact/Page/View/CustomDataView.tpl | 2 +- .../CRM/Contact/Page/View/Delete.tpl | 2 +- .../templates/CRM/Contact/Page/View/Email.tpl | 2 +- .../templates/CRM/Contact/Page/View/Group.tpl | 2 +- .../CRM/Contact/Page/View/GroupContact.tpl | 2 +- .../templates/CRM/Contact/Page/View/Log.tpl | 2 +- .../templates/CRM/Contact/Page/View/Note.tpl | 2 +- .../templates/CRM/Contact/Page/View/Print.tpl | 2 +- .../CRM/Contact/Page/View/Relationship.tpl | 2 +- .../Page/View/RelationshipSelector.tpl | 2 +- .../templates/CRM/Contact/Page/View/SMS.tpl | 2 +- .../CRM/Contact/Page/View/Summary.hlp | 2 +- .../CRM/Contact/Page/View/Summary.tpl | 2 +- .../CRM/Contact/Page/View/SummaryHook.tpl | 2 +- .../templates/CRM/Contact/Page/View/Tag.tpl | 2 +- .../CRM/Contact/Page/View/UserDashBoard.tpl | 2 +- .../Page/View/UserDashBoard/GroupContact.tpl | 2 +- .../CRM/Contact/Page/View/Useradd.tpl | 2 +- civicrm/templates/CRM/Contact/Selector.tpl | 2 +- .../CRM/Contribute/Form/AcceptCreditCard.tpl | 2 +- .../Form/AdditionalInfo/AdditionalDetail.tpl | 2 +- .../Form/AdditionalInfo/CreditCard.tpl | 2 +- .../Form/AdditionalInfo/DirectDebit.tpl | 2 +- .../Form/AdditionalInfo/PaymentReminders.tpl | 2 +- .../Form/AdditionalInfo/Premium.tpl | 2 +- .../CRM/Contribute/Form/AdditionalPayment.hlp | 2 +- .../CRM/Contribute/Form/AdditionalPayment.tpl | 2 +- .../Contribute/Form/CancelSubscription.tpl | 2 +- .../CRM/Contribute/Form/Contribution.tpl | 15 +- .../Form/Contribution/AuthorizeNetARB.tpl | 2 +- .../Contribute/Form/Contribution/Confirm.tpl | 2 +- .../CRM/Contribute/Form/Contribution/Main.tpl | 6 +- .../Form/Contribution/MembershipBlock.tpl | 2 +- .../Form/Contribution/OnBehalfOf.tpl | 2 +- .../Form/Contribution/PremiumBlock.tpl | 2 +- .../Form/Contribution/PreviewHeader.tpl | 2 +- .../Contribute/Form/Contribution/ThankYou.tpl | 2 +- .../Contribute/Form/ContributionCharts.tpl | 2 +- .../Form/ContributionPage/AddProduct.hlp | 2 +- .../Form/ContributionPage/AddProduct.tpl | 2 +- .../Form/ContributionPage/Amount.tpl | 2 +- .../Form/ContributionPage/Custom.hlp | 2 +- .../Form/ContributionPage/Custom.tpl | 2 +- .../Form/ContributionPage/Delete.tpl | 2 +- .../Contribute/Form/ContributionPage/PCP.hlp | 2 +- .../Form/ContributionPage/Premium.tpl | 2 +- .../Form/ContributionPage/Settings.hlp | 2 +- .../Form/ContributionPage/Settings.tpl | 2 +- .../Contribute/Form/ContributionPage/Tab.hlp | 2 +- .../Contribute/Form/ContributionPage/Tab.tpl | 2 +- .../Form/ContributionPage/ThankYou.hlp | 2 +- .../Form/ContributionPage/ThankYou.tpl | 2 +- .../Form/ContributionPage/Widget.hlp | 2 +- .../Form/ContributionPage/Widget.tpl | 2 +- .../CRM/Contribute/Form/ContributionView.tpl | 2 +- .../CRM/Contribute/Form/ManagePremiums.tpl | 2 +- .../templates/CRM/Contribute/Form/PCP.js.tpl | 2 +- .../CRM/Contribute/Form/PCP/Campaign.tpl | 2 +- .../CRM/Contribute/Form/PCP/Delete.tpl | 2 +- .../templates/CRM/Contribute/Form/PCP/PCP.tpl | 2 +- .../CRM/Contribute/Form/PCP/PCPAccount.tpl | 2 +- .../CRM/Contribute/Form/PaymentInfoBlock.tpl | 2 +- .../CRM/Contribute/Form/PaymentInstrument.tpl | 2 +- .../templates/CRM/Contribute/Form/Preview.tpl | 2 +- .../templates/CRM/Contribute/Form/Search.tpl | 2 +- .../Form/Search/AdvancedSearchPane.tpl | 2 +- .../CRM/Contribute/Form/Search/Common.tpl | 2 +- .../Form/Search/ContributionRecur.tpl | 2 +- .../Contribute/Form/Search/EmptyResults.tpl | 2 +- .../Contribute/Form/SearchContribution.tpl | 2 +- .../CRM/Contribute/Form/Selector.tpl | 2 +- .../CRM/Contribute/Form/SoftCredit.tpl | 2 +- .../templates/CRM/Contribute/Form/Task.tpl | 2 +- .../CRM/Contribute/Form/Task/Batch.tpl | 2 +- .../CRM/Contribute/Form/Task/Delete.tpl | 2 +- .../CRM/Contribute/Form/Task/Email.tpl | 2 +- .../CRM/Contribute/Form/Task/Invoice.hlp | 2 +- .../CRM/Contribute/Form/Task/Invoice.tpl | 2 +- .../CRM/Contribute/Form/Task/PDF.tpl | 2 +- .../CRM/Contribute/Form/Task/PDFLetter.hlp | 2 +- .../CRM/Contribute/Form/Task/PDFLetter.tpl | 2 +- .../CRM/Contribute/Form/Task/PickProfile.tpl | 2 +- .../CRM/Contribute/Form/Task/Print.tpl | 2 +- .../CRM/Contribute/Form/Task/Result.tpl | 2 +- .../CRM/Contribute/Form/Task/Status.tpl | 2 +- .../CRM/Contribute/Form/UpdateBilling.tpl | 2 +- .../Contribute/Form/UpdateSubscription.tpl | 2 +- .../CRM/Contribute/Import/Form/DataSource.hlp | 2 +- .../CRM/Contribute/Import/Form/DataSource.tpl | 2 +- .../CRM/Contribute/Import/Form/MapField.tpl | 2 +- .../CRM/Contribute/Import/Form/MapTable.tpl | 2 +- .../CRM/Contribute/Import/Form/Preview.tpl | 2 +- .../CRM/Contribute/Import/Form/Summary.tpl | 2 +- .../CRM/Contribute/Page/ContributionPage.hlp | 2 +- .../CRM/Contribute/Page/ContributionPage.tpl | 2 +- .../CRM/Contribute/Page/ContributionRecur.tpl | 2 +- .../CRM/Contribute/Page/ContributionSoft.tpl | 2 +- .../Contribute/Page/ContributionTotals.tpl | 2 +- .../CRM/Contribute/Page/ContributionType.tpl | 2 +- .../CRM/Contribute/Page/DashBoard.hlp | 2 +- .../CRM/Contribute/Page/DashBoard.tpl | 2 +- .../CRM/Contribute/Page/ManagePremiums.tpl | 2 +- .../CRM/Contribute/Page/PaymentInfo.tpl | 2 +- .../CRM/Contribute/Page/PcpUserDashboard.tpl | 2 +- .../templates/CRM/Contribute/Page/Premium.tpl | 2 +- .../Contribute/Page/SubscriptionStatus.tpl | 2 +- civicrm/templates/CRM/Contribute/Page/Tab.hlp | 11 +- civicrm/templates/CRM/Contribute/Page/Tab.tpl | 2 +- .../CRM/Contribute/Page/UserDashboard.tpl | 2 +- civicrm/templates/CRM/Core/AgeRange.tpl | 2 +- civicrm/templates/CRM/Core/BillingBlock.tpl | 2 +- .../CRM/Core/BillingBlockWrapper.tpl | 2 +- civicrm/templates/CRM/Core/Calendar/GData.tpl | 2 +- civicrm/templates/CRM/Core/Calendar/ICal.tpl | 2 +- civicrm/templates/CRM/Core/Calendar/Rss.tpl | 2 +- civicrm/templates/CRM/Core/Date.tpl | 2 +- civicrm/templates/CRM/Core/DateRange.tpl | 2 +- .../CRM/Core/Form/RecurringEntity.hlp | 2 +- .../CRM/Core/Form/RecurringEntity.tpl | 2 +- civicrm/templates/CRM/Core/Form/ShortCode.tpl | 2 +- .../templates/CRM/Core/Form/Task/Batch.tpl | 66 + .../CRM/Core/Form/Task/PickProfile.tpl | 40 + civicrm/templates/CRM/Core/I18n/Dialog.tpl | 2 +- civicrm/templates/CRM/Core/I18n/Form.tpl | 2 +- .../CRM/Core/Page/RecurringEntityPreview.tpl | 2 +- .../CRM/Custom/Form/ChangeFieldType.tpl | 2 +- .../CRM/Custom/Form/ContactReference.tpl | 2 +- .../templates/CRM/Custom/Form/CustomData.tpl | 2 +- .../templates/CRM/Custom/Form/CustomField.hlp | 2 +- .../templates/CRM/Custom/Form/CustomField.tpl | 2 +- .../templates/CRM/Custom/Form/DeleteField.tpl | 2 +- .../templates/CRM/Custom/Form/DeleteFile.tpl | 2 +- .../templates/CRM/Custom/Form/DeleteGroup.tpl | 2 +- civicrm/templates/CRM/Custom/Form/Field.hlp | 2 +- civicrm/templates/CRM/Custom/Form/Field.tpl | 2 +- civicrm/templates/CRM/Custom/Form/Group.tpl | 2 +- .../templates/CRM/Custom/Form/MoveField.tpl | 2 +- .../CRM/Custom/Form/MultiValueSearch.js.tpl | 2 +- civicrm/templates/CRM/Custom/Form/Option.tpl | 2 +- .../CRM/Custom/Form/Optionfields.tpl | 2 +- civicrm/templates/CRM/Custom/Form/Preview.tpl | 2 +- civicrm/templates/CRM/Custom/Form/Search.tpl | 2 +- .../CRM/Custom/Import/Form/DataSource.hlp | 2 +- .../CRM/Custom/Import/Form/DataSource.tpl | 2 +- .../CRM/Custom/Import/Form/MapField.tpl | 2 +- .../CRM/Custom/Import/Form/Preview.tpl | 2 +- .../CRM/Custom/Import/Form/Summary.tpl | 2 +- .../CRM/Custom/Page/CustomDataView.tpl | 2 +- civicrm/templates/CRM/Custom/Page/Field.tpl | 2 +- civicrm/templates/CRM/Custom/Page/Group.hlp | 2 +- civicrm/templates/CRM/Custom/Page/Group.tpl | 2 +- civicrm/templates/CRM/Custom/Page/Option.tpl | 2 +- .../templates/CRM/Dashlet/Page/Activity.tpl | 2 +- .../templates/CRM/Dashlet/Page/AllCases.tpl | 2 +- civicrm/templates/CRM/Dashlet/Page/Blog.tpl | 2 +- .../CRM/Dashlet/Page/CaseDashboard.tpl | 2 +- .../CRM/Dashlet/Page/GettingStarted.tpl | 2 +- .../templates/CRM/Dashlet/Page/MyCases.tpl | 2 +- .../templates/CRM/Event/Form/EventFees.tpl | 2 +- .../CRM/Event/Form/ManageEvent/Conference.tpl | 2 +- .../Form/ManageEvent/ConfirmRepeatMode.tpl | 2 +- .../CRM/Event/Form/ManageEvent/Delete.tpl | 2 +- .../CRM/Event/Form/ManageEvent/EventInfo.hlp | 2 +- .../CRM/Event/Form/ManageEvent/EventInfo.tpl | 2 +- .../CRM/Event/Form/ManageEvent/Fee.tpl | 14 +- .../CRM/Event/Form/ManageEvent/Location.tpl | 6 +- .../Event/Form/ManageEvent/Registration.hlp | 2 +- .../Event/Form/ManageEvent/Registration.tpl | 2 +- .../CRM/Event/Form/ManageEvent/Repeat.tpl | 2 +- .../CRM/Event/Form/ManageEvent/Tab.hlp | 2 +- .../CRM/Event/Form/ManageEvent/Tab.tpl | 2 +- .../templates/CRM/Event/Form/Participant.tpl | 2 +- .../Event/Form/ParticipantFeeSelection.tpl | 2 +- .../CRM/Event/Form/ParticipantView.tpl | 2 +- .../Registration/AdditionalParticipant.tpl | 4 +- .../CRM/Event/Form/Registration/Confirm.tpl | 2 +- .../Form/Registration/DisplayProfile.tpl | 2 +- .../Form/Registration/EventInfoBlock.tpl | 2 +- .../Form/Registration/ParticipantConfirm.tpl | 4 +- .../Event/Form/Registration/PreviewHeader.tpl | 2 +- .../CRM/Event/Form/Registration/Register.tpl | 2 +- .../CRM/Event/Form/Registration/ThankYou.tpl | 2 +- civicrm/templates/CRM/Event/Form/Search.tpl | 2 +- .../Event/Form/Search/AdvancedSearchPane.tpl | 2 +- .../CRM/Event/Form/Search/Common.tpl | 12 +- .../CRM/Event/Form/Search/EmptyResults.tpl | 2 +- .../CRM/Event/Form/Search/Results.hlp | 2 +- .../templates/CRM/Event/Form/SearchEvent.tpl | 2 +- civicrm/templates/CRM/Event/Form/Selector.tpl | 2 +- .../CRM/Event/Form/SelfSvcTransfer.tpl | 2 +- .../CRM/Event/Form/SelfSvcUpdate.tpl | 2 +- civicrm/templates/CRM/Event/Form/Task.tpl | 2 +- .../CRM/Event/Form/Task/AddToGroup.tpl | 2 +- .../templates/CRM/Event/Form/Task/Badge.tpl | 2 +- .../templates/CRM/Event/Form/Task/Batch.tpl | 2 +- .../templates/CRM/Event/Form/Task/Cancel.tpl | 2 +- .../templates/CRM/Event/Form/Task/Delete.tpl | 2 +- .../templates/CRM/Event/Form/Task/Email.tpl | 2 +- civicrm/templates/CRM/Event/Form/Task/PDF.tpl | 2 +- .../CRM/Event/Form/Task/ParticipantStatus.hlp | 2 +- .../CRM/Event/Form/Task/ParticipantStatus.tpl | 2 +- .../CRM/Event/Form/Task/PickProfile.tpl | 2 +- .../templates/CRM/Event/Form/Task/Print.tpl | 2 +- .../templates/CRM/Event/Form/Task/Result.tpl | 2 +- .../CRM/Event/Form/Task/SaveSearch.tpl | 2 +- .../CRM/Event/Form/Task/SaveSearch/Update.tpl | 2 +- .../CRM/Event/Import/Form/DataSource.hlp | 2 +- .../CRM/Event/Import/Form/DataSource.tpl | 2 +- .../CRM/Event/Import/Form/MapField.tpl | 6 +- .../CRM/Event/Import/Form/MapTable.tpl | 2 +- .../CRM/Event/Import/Form/Preview.tpl | 2 +- .../CRM/Event/Import/Form/Summary.tpl | 2 +- .../templates/CRM/Event/Page/DashBoard.hlp | 2 +- .../templates/CRM/Event/Page/DashBoard.tpl | 2 +- .../templates/CRM/Event/Page/EventInfo.tpl | 2 +- .../templates/CRM/Event/Page/ICalendar.tpl | 2 +- .../templates/CRM/Event/Page/ManageEvent.hlp | 2 +- .../templates/CRM/Event/Page/ManageEvent.tpl | 2 +- .../Event/Page/ParticipantListing/Name.tpl | 2 +- .../Page/ParticipantListing/NameAndEmail.tpl | 2 +- .../ParticipantListing/NameStatusAndDate.tpl | 2 +- civicrm/templates/CRM/Event/Page/Tab.tpl | 2 +- .../CRM/Event/Page/UserDashboard.tpl | 2 +- .../templates/CRM/Event/Page/iCalLinks.tpl | 2 +- civicrm/templates/CRM/Export/Form/Map.tpl | 5 +- civicrm/templates/CRM/Export/Form/Select.tpl | 6 +- civicrm/templates/CRM/Export/Form/table.tpl | 2 +- .../CRM/Financial/ExportFormat/IIF.tpl | 2 +- .../CRM/Financial/Form/BatchTransaction.tpl | 12 +- .../templates/CRM/Financial/Form/Export.tpl | 2 +- .../CRM/Financial/Form/FinancialAccount.hlp | 2 +- .../CRM/Financial/Form/FinancialAccount.tpl | 2 +- .../CRM/Financial/Form/FinancialBatch.tpl | 2 +- .../CRM/Financial/Form/FinancialType.tpl | 4 +- .../Financial/Form/FinancialTypeAccount.tpl | 2 +- .../templates/CRM/Financial/Form/Payment.tpl | 2 +- .../CRM/Financial/Form/PaymentEdit.tpl | 2 +- .../CRM/Financial/Form/PaypalExpress.tpl | 2 +- .../CRM/Financial/Form/PaypalPro.tpl | 2 +- .../templates/CRM/Financial/Form/Search.tpl | 4 +- .../templates/CRM/Financial/Page/Batch.tpl | 2 +- .../CRM/Financial/Page/BatchTransaction.tpl | 2 +- .../CRM/Financial/Page/FinancialAccount.tpl | 2 +- .../CRM/Financial/Page/FinancialBatch.hlp | 2 +- .../CRM/Financial/Page/FinancialBatch.tpl | 2 +- .../CRM/Financial/Page/FinancialType.tpl | 2 +- .../Financial/Page/FinancialTypeAccount.tpl | 2 +- civicrm/templates/CRM/Form/attachment.tpl | 2 +- civicrm/templates/CRM/Form/basicForm.tpl | 2 +- civicrm/templates/CRM/Form/body.tpl | 2 +- civicrm/templates/CRM/Form/default.tpl | 2 +- civicrm/templates/CRM/Form/element.tpl | 2 +- civicrm/templates/CRM/Form/error.tpl | 2 +- civicrm/templates/CRM/Form/label.tpl | 2 +- civicrm/templates/CRM/Form/validate.tpl | 2 +- civicrm/templates/CRM/Friend/Form.tpl | 2 +- .../templates/CRM/Friend/Form/Contribute.tpl | 2 +- civicrm/templates/CRM/Friend/Form/Event.tpl | 2 +- civicrm/templates/CRM/Friend/Form/Friend.tpl | 2 +- civicrm/templates/CRM/Friend/Form/Pledge.tpl | 2 +- civicrm/templates/CRM/Grant/Form/Grant.tpl | 4 +- .../templates/CRM/Grant/Form/GrantView.tpl | 2 +- civicrm/templates/CRM/Grant/Form/Search.tpl | 2 +- .../Grant/Form/Search/AdvancedSearchPane.tpl | 2 +- .../CRM/Grant/Form/Search/Common.tpl | 10 +- .../CRM/Grant/Form/Search/EmptyResults.tpl | 2 +- civicrm/templates/CRM/Grant/Form/Selector.tpl | 4 +- civicrm/templates/CRM/Grant/Form/Task.tpl | 2 +- .../templates/CRM/Grant/Form/Task/Delete.tpl | 14 +- .../templates/CRM/Grant/Form/Task/Print.tpl | 2 +- .../templates/CRM/Grant/Form/Task/Update.tpl | 2 +- .../templates/CRM/Grant/Page/DashBoard.tpl | 4 +- civicrm/templates/CRM/Grant/Page/Tab.tpl | 2 +- civicrm/templates/CRM/Group/Form/Delete.tpl | 2 +- civicrm/templates/CRM/Group/Form/Edit.tpl | 2 +- .../templates/CRM/Group/Form/GroupsCommon.tpl | 2 +- civicrm/templates/CRM/Group/Form/Search.tpl | 2 +- civicrm/templates/CRM/Group/Page/Group.hlp | 2 +- civicrm/templates/CRM/Group/Page/Group.tpl | 2 +- .../templates/CRM/Group/Page/GroupRows.tpl | 2 +- .../templates/CRM/Logging/ReportDetail.tpl | 2 +- .../templates/CRM/Logging/ReportSummary.tpl | 2 +- .../templates/CRM/Mailing/Form/Approve.tpl | 2 +- .../templates/CRM/Mailing/Form/Component.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Count.tpl | 2 +- .../CRM/Mailing/Form/ForwardMailing.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Group.hlp | 2 +- civicrm/templates/CRM/Mailing/Form/Group.tpl | 2 +- .../CRM/Mailing/Form/InsertTokens.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Optout.tpl | 2 +- .../templates/CRM/Mailing/Form/Schedule.hlp | 2 +- .../templates/CRM/Mailing/Form/Schedule.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Search.tpl | 2 +- .../templates/CRM/Mailing/Form/Selector.tpl | 2 +- .../templates/CRM/Mailing/Form/Settings.hlp | 2 +- .../templates/CRM/Mailing/Form/Settings.tpl | 2 +- .../templates/CRM/Mailing/Form/Subscribe.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Task.tpl | 2 +- .../templates/CRM/Mailing/Form/Task/Print.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Test.hlp | 2 +- civicrm/templates/CRM/Mailing/Form/Test.tpl | 2 +- .../CRM/Mailing/Form/Unsubscribe.tpl | 2 +- civicrm/templates/CRM/Mailing/Form/Upload.hlp | 2 +- civicrm/templates/CRM/Mailing/Form/Upload.tpl | 2 +- civicrm/templates/CRM/Mailing/MailingUI.hlp | 2 +- civicrm/templates/CRM/Mailing/Page/Browse.hlp | 2 +- civicrm/templates/CRM/Mailing/Page/Browse.tpl | 2 +- .../templates/CRM/Mailing/Page/Component.tpl | 2 +- .../templates/CRM/Mailing/Page/Confirm.tpl | 2 +- civicrm/templates/CRM/Mailing/Page/Event.tpl | 2 +- civicrm/templates/CRM/Mailing/Page/Report.tpl | 2 +- .../CRM/Mailing/Page/Resubscribe.tpl | 2 +- civicrm/templates/CRM/Mailing/Page/Tab.tpl | 2 +- .../templates/CRM/Member/Form/Membership.hlp | 2 +- .../templates/CRM/Member/Form/Membership.tpl | 45 +- .../CRM/Member/Form/MembershipBlock.hlp | 2 +- .../CRM/Member/Form/MembershipBlock.tpl | 2 +- .../CRM/Member/Form/MembershipRelated.tpl | 2 +- .../CRM/Member/Form/MembershipRenewal.tpl | 2 +- .../CRM/Member/Form/MembershipStatus.tpl | 2 +- .../CRM/Member/Form/MembershipType.tpl | 4 +- .../CRM/Member/Form/MembershipView.tpl | 2 +- civicrm/templates/CRM/Member/Form/Search.hlp | 2 +- civicrm/templates/CRM/Member/Form/Search.tpl | 2 +- .../Member/Form/Search/AdvancedSearchPane.tpl | 2 +- .../CRM/Member/Form/Search/Common.tpl | 2 +- .../CRM/Member/Form/Search/EmptyResults.tpl | 2 +- .../templates/CRM/Member/Form/Selector.tpl | 6 +- civicrm/templates/CRM/Member/Form/Task.tpl | 2 +- .../templates/CRM/Member/Form/Task/Batch.tpl | 2 +- .../templates/CRM/Member/Form/Task/Delete.tpl | 2 +- .../templates/CRM/Member/Form/Task/Email.tpl | 2 +- .../templates/CRM/Member/Form/Task/Label.tpl | 2 +- .../CRM/Member/Form/Task/PDFLetter.tpl | 2 +- .../CRM/Member/Form/Task/PickProfile.tpl | 2 +- .../templates/CRM/Member/Form/Task/Print.tpl | 2 +- .../templates/CRM/Member/Form/Task/Result.tpl | 2 +- .../CRM/Member/Import/Form/DataSource.hlp | 2 +- .../CRM/Member/Import/Form/DataSource.tpl | 2 +- .../CRM/Member/Import/Form/MapField.tpl | 2 +- .../CRM/Member/Import/Form/MapTable.tpl | 2 +- .../CRM/Member/Import/Form/Preview.tpl | 2 +- .../CRM/Member/Import/Form/Summary.tpl | 2 +- .../templates/CRM/Member/Page/DashBoard.hlp | 2 +- .../templates/CRM/Member/Page/DashBoard.tpl | 2 +- .../CRM/Member/Page/MembershipStatus.tpl | 2 +- .../CRM/Member/Page/MembershipType.hlp | 2 +- .../CRM/Member/Page/MembershipType.tpl | 2 +- civicrm/templates/CRM/Member/Page/Tab.hlp | 6 +- civicrm/templates/CRM/Member/Page/Tab.tpl | 10 +- .../CRM/Member/Page/UserDashboard.tpl | 2 +- civicrm/templates/CRM/Note/Form/Note.tpl | 2 +- civicrm/templates/CRM/PCP/Form/Campaign.tpl | 2 +- civicrm/templates/CRM/PCP/Form/Contribute.hlp | 2 +- civicrm/templates/CRM/PCP/Form/Contribute.tpl | 2 +- civicrm/templates/CRM/PCP/Form/Event.hlp | 2 +- civicrm/templates/CRM/PCP/Form/Event.tpl | 2 +- civicrm/templates/CRM/PCP/Form/PCP.tpl | 2 +- civicrm/templates/CRM/PCP/Form/PCP/Delete.tpl | 2 +- civicrm/templates/CRM/PCP/Form/PCP/PCP.tpl | 2 +- civicrm/templates/CRM/PCP/Form/PCPAccount.tpl | 2 +- civicrm/templates/CRM/PCP/Page/Contribute.tpl | 2 +- civicrm/templates/CRM/PCP/Page/Event.tpl | 2 +- civicrm/templates/CRM/PCP/Page/PCP.hlp | 2 +- civicrm/templates/CRM/PCP/Page/PCP.tpl | 2 +- civicrm/templates/CRM/PCP/Page/PCPInfo.tpl | 2 +- civicrm/templates/CRM/Pledge/Form/Payment.tpl | 2 +- civicrm/templates/CRM/Pledge/Form/Pledge.tpl | 157 +- .../templates/CRM/Pledge/Form/PledgeView.tpl | 2 +- civicrm/templates/CRM/Pledge/Form/Search.tpl | 2 +- .../Pledge/Form/Search/AdvancedSearchPane.tpl | 2 +- .../CRM/Pledge/Form/Search/Common.tpl | 27 +- .../CRM/Pledge/Form/Search/EmptyResults.tpl | 2 +- .../templates/CRM/Pledge/Form/Selector.tpl | 2 +- civicrm/templates/CRM/Pledge/Form/Task.tpl | 2 +- .../templates/CRM/Pledge/Form/Task/Delete.tpl | 2 +- .../templates/CRM/Pledge/Form/Task/Print.tpl | 2 +- .../templates/CRM/Pledge/Form/Task/Result.tpl | 2 +- .../CRM/Pledge/Form/Task/SaveSearch.tpl | 2 +- .../Pledge/Form/Task/SaveSearch/Update.tpl | 2 +- .../templates/CRM/Pledge/Page/DashBoard.tpl | 2 +- civicrm/templates/CRM/Pledge/Page/Payment.hlp | 2 +- civicrm/templates/CRM/Pledge/Page/Payment.tpl | 2 +- civicrm/templates/CRM/Pledge/Page/Tab.hlp | 2 +- civicrm/templates/CRM/Pledge/Page/Tab.tpl | 2 +- .../CRM/Pledge/Page/UserDashboard.tpl | 2 +- .../templates/CRM/Price/Form/Calculate.tpl | 2 +- .../templates/CRM/Price/Form/DeleteField.tpl | 2 +- .../templates/CRM/Price/Form/DeleteSet.tpl | 2 +- civicrm/templates/CRM/Price/Form/Field.tpl | 2 +- civicrm/templates/CRM/Price/Form/LineItem.tpl | 2 +- civicrm/templates/CRM/Price/Form/Option.tpl | 2 +- .../templates/CRM/Price/Form/OptionFields.tpl | 2 +- .../CRM/Price/Form/ParticipantCount.tpl | 2 +- civicrm/templates/CRM/Price/Form/Preview.tpl | 2 +- civicrm/templates/CRM/Price/Form/PriceSet.tpl | 2 +- civicrm/templates/CRM/Price/Form/Set.tpl | 2 +- civicrm/templates/CRM/Price/Page/Field.hlp | 2 +- civicrm/templates/CRM/Price/Page/Field.tpl | 2 +- civicrm/templates/CRM/Price/Page/LineItem.tpl | 2 +- civicrm/templates/CRM/Price/Page/Option.tpl | 2 +- civicrm/templates/CRM/Price/Page/Set.tpl | 2 +- civicrm/templates/CRM/Price/Page/table.tpl | 2 +- .../templates/CRM/Profile/Form/Dynamic.tpl | 2 +- civicrm/templates/CRM/Profile/Form/Edit.tpl | 2 +- .../CRM/Profile/Form/GreetingType.tpl | 2 +- civicrm/templates/CRM/Profile/Form/Search.tpl | 2 +- .../templates/CRM/Profile/Page/Dynamic.tpl | 2 +- .../templates/CRM/Profile/Page/Listings.tpl | 2 +- .../Page/MultipleRecordFieldsListing.tpl | 2 +- .../templates/CRM/Profile/Page/Overlay.tpl | 57 +- civicrm/templates/CRM/Profile/Page/View.tpl | 2 +- civicrm/templates/CRM/Report/Form.tpl | 2 +- civicrm/templates/CRM/Report/Form/Actions.tpl | 2 +- .../templates/CRM/Report/Form/Activity.tpl | 2 +- .../CRM/Report/Form/ActivitySummary.tpl | 2 +- .../Report/Form/Campaign/SurveyCoverSheet.tpl | 2 +- .../Report/Form/Campaign/SurveyDetails.tpl | 2 +- .../CRM/Report/Form/Case/Demographics.tpl | 2 +- .../templates/CRM/Report/Form/Case/Detail.tpl | 2 +- .../CRM/Report/Form/Case/Summary.tpl | 2 +- .../CRM/Report/Form/Case/TimeSpent.tpl | 2 +- .../Report/Form/Contact/CurrentEmployer.tpl | 2 +- .../CRM/Report/Form/Contact/Detail.tpl | 2 +- .../templates/CRM/Report/Form/Contact/Log.tpl | 2 +- .../CRM/Report/Form/Contact/LoggingDetail.tpl | 2 +- .../Report/Form/Contact/LoggingSummary.tpl | 2 +- .../CRM/Report/Form/Contact/Relationship.tpl | 2 +- .../CRM/Report/Form/Contact/Summary.tpl | 2 +- .../Report/Form/Contribute/Bookkeeping.tpl | 2 +- .../Form/Contribute/DeferredRevenue.tpl | 2 +- .../CRM/Report/Form/Contribute/Detail.tpl | 2 +- .../CRM/Report/Form/Contribute/History.tpl | 2 +- .../Form/Contribute/HouseholdSummary.tpl | 2 +- .../Report/Form/Contribute/LoggingDetail.tpl | 2 +- .../Report/Form/Contribute/LoggingSummary.tpl | 2 +- .../CRM/Report/Form/Contribute/Lybunt.tpl | 2 +- .../Form/Contribute/OrganizationSummary.tpl | 2 +- .../CRM/Report/Form/Contribute/PCP.tpl | 2 +- .../Report/Form/Contribute/RecurSummary.tpl | 2 +- .../CRM/Report/Form/Contribute/Repeat.tpl | 2 +- .../CRM/Report/Form/Contribute/SoftCredit.tpl | 2 +- .../CRM/Report/Form/Contribute/Summary.tpl | 2 +- .../CRM/Report/Form/Contribute/Sybunt.tpl | 2 +- .../CRM/Report/Form/Contribute/TopDonor.tpl | 2 +- .../templates/CRM/Report/Form/Criteria.tpl | 2 +- .../CRM/Report/Form/ErrorMessage.tpl | 2 +- .../CRM/Report/Form/Event/Income.tpl | 2 +- .../Report/Form/Event/IncomeCountSummary.tpl | 2 +- .../Form/Event/ParticipantListCount.tpl | 2 +- .../Report/Form/Event/ParticipantListing.tpl | 2 +- .../CRM/Report/Form/Event/Summary.tpl | 2 +- civicrm/templates/CRM/Report/Form/Fields.tpl | 2 +- .../CRM/Report/Form/Grant/Detail.tpl | 2 +- .../CRM/Report/Form/Grant/Statistics.tpl | 2 +- .../CRM/Report/Form/Layout/Graph.tpl | 2 +- .../CRM/Report/Form/Layout/Overlay.tpl | 2 +- .../CRM/Report/Form/Layout/Table.tpl | 2 +- .../CRM/Report/Form/Mailing/Bounce.tpl | 2 +- .../CRM/Report/Form/Mailing/Clicks.tpl | 2 +- .../CRM/Report/Form/Mailing/Detail.tpl | 2 +- .../CRM/Report/Form/Mailing/Opened.tpl | 2 +- .../CRM/Report/Form/Mailing/Summary.tpl | 2 +- .../Report/Form/Member/ContributionDetail.tpl | 2 +- .../CRM/Report/Form/Member/Detail.tpl | 2 +- .../CRM/Report/Form/Member/Lapse.tpl | 2 +- .../CRM/Report/Form/Member/Summary.tpl | 2 +- .../CRM/Report/Form/Membership/Summary.tpl | 2 +- .../CRM/Report/Form/Pledge/Detail.tpl | 2 +- .../templates/CRM/Report/Form/Pledge/Pbnp.tpl | 2 +- .../CRM/Report/Form/Pledge/Summary.tpl | 2 +- .../templates/CRM/Report/Form/Register.tpl | 2 +- .../templates/CRM/Report/Form/Statistics.tpl | 2 +- .../CRM/Report/Form/Tabs/FieldSelection.tpl | 2 +- .../CRM/Report/Form/Tabs/Filters.tpl | 2 +- .../CRM/Report/Form/Tabs/GroupBy.tpl | 2 +- .../CRM/Report/Form/Tabs/Instance.tpl | 2 +- .../CRM/Report/Form/Tabs/OrderBy.tpl | 2 +- .../CRM/Report/Form/Tabs/ReportOptions.tpl | 2 +- .../CRM/Report/Form/Tabs/Settings.hlp | 2 +- .../CRM/Report/Form/Walklist/Walklist.tpl | 2 +- .../CRM/Report/Page/InstanceList.tpl | 2 +- civicrm/templates/CRM/Report/Page/Options.tpl | 2 +- .../CRM/Report/Page/TemplateList.tpl | 2 +- civicrm/templates/CRM/SMS/Form/Group.hlp | 2 +- civicrm/templates/CRM/SMS/Form/Group.tpl | 2 +- civicrm/templates/CRM/SMS/Form/Provider.tpl | 2 +- civicrm/templates/CRM/SMS/Form/Schedule.hlp | 2 +- civicrm/templates/CRM/SMS/Form/Schedule.tpl | 2 +- civicrm/templates/CRM/SMS/Form/Task/SMS.tpl | 2 +- civicrm/templates/CRM/SMS/Form/Upload.hlp | 2 +- civicrm/templates/CRM/SMS/Form/Upload.tpl | 2 +- civicrm/templates/CRM/SMS/Page/Provider.tpl | 2 +- civicrm/templates/CRM/Tag/Form/Edit.tpl | 2 +- civicrm/templates/CRM/Tag/Form/Merge.tpl | 2 +- civicrm/templates/CRM/Tag/Form/Tag.tpl | 2 +- civicrm/templates/CRM/Tag/Form/Tagtree.tpl | 2 +- civicrm/templates/CRM/Tag/Page/Tag.tpl | 2 +- .../templates/CRM/UF/Form/AdvanceSetting.tpl | 2 +- civicrm/templates/CRM/UF/Form/Block.tpl | 2 +- civicrm/templates/CRM/UF/Form/Field.tpl | 2 +- civicrm/templates/CRM/UF/Form/Group.hlp | 2 +- civicrm/templates/CRM/UF/Form/Group.tpl | 2 +- civicrm/templates/CRM/UF/Form/Preview.tpl | 2 +- civicrm/templates/CRM/UF/Page/Field.tpl | 2 +- civicrm/templates/CRM/UF/Page/Group.hlp | 2 +- civicrm/templates/CRM/UF/Page/Group.tpl | 2 +- civicrm/templates/CRM/Upgrade/Base.tpl | 2 +- civicrm/templates/CRM/Widget/widget.tpl | 2 +- civicrm/templates/CRM/common/CMSUser.tpl | 2 +- civicrm/templates/CRM/common/ReCAPTCHA.tpl | 2 +- civicrm/templates/CRM/common/SectionNav.tpl | 2 +- .../templates/CRM/common/SocialNetwork.tpl | 2 +- civicrm/templates/CRM/common/TabHeader.tpl | 2 +- civicrm/templates/CRM/common/Tagset.tpl | 2 +- .../templates/CRM/common/TrackingFields.tpl | 2 +- civicrm/templates/CRM/common/WizardHeader.tpl | 2 +- civicrm/templates/CRM/common/accesskeys.hlp | 2 +- civicrm/templates/CRM/common/accesskeys.tpl | 2 +- .../templates/CRM/common/additionalBlocks.tpl | 2 +- civicrm/templates/CRM/common/backdrop.tpl | 2 +- civicrm/templates/CRM/common/batchCopy.tpl | 2 +- .../CRM/common/checkUsernameAvailable.tpl | 2 +- .../CRM/common/civicrm.settings.php.template | 2 +- .../templates/CRM/common/contactFooter.tpl | 2 +- civicrm/templates/CRM/common/customData.tpl | 2 +- civicrm/templates/CRM/common/dashboard.tpl | 2 +- civicrm/templates/CRM/common/debug.tpl | 2 +- .../CRM/common/deferredFinancialType.tpl | 2 +- .../CRM/common/displaySearchCriteria.tpl | 2 +- civicrm/templates/CRM/common/drupal.tpl | 2 +- civicrm/templates/CRM/common/drupal6.tpl | 2 +- civicrm/templates/CRM/common/drupal8.tpl | 2 +- .../templates/CRM/common/enableDisableApi.tpl | 2 +- civicrm/templates/CRM/common/fatal.tpl | 2 +- civicrm/templates/CRM/common/footer.tpl | 2 +- civicrm/templates/CRM/common/formButtons.tpl | 2 +- .../templates/CRM/common/highLightImport.tpl | 2 +- .../templates/CRM/common/importProgress.tpl | 2 +- civicrm/templates/CRM/common/info.tpl | 2 +- civicrm/templates/CRM/common/jcalendar.tpl | 2 +- civicrm/templates/CRM/common/joomla.tpl | 2 +- civicrm/templates/CRM/common/jsortable.tpl | 2 +- civicrm/templates/CRM/common/l10n.js.tpl | 2 +- civicrm/templates/CRM/common/localNav.tpl | 2 +- civicrm/templates/CRM/common/logButton.tpl | 2 +- .../templates/CRM/common/navigation.js.tpl | 2 +- .../templates/CRM/common/openFlashChart.tpl | 2 +- civicrm/templates/CRM/common/pager.tpl | 2 +- civicrm/templates/CRM/common/pagerAToZ.tpl | 2 +- civicrm/templates/CRM/common/paymentBlock.tpl | 2 +- civicrm/templates/CRM/common/print.tpl | 3 +- civicrm/templates/CRM/common/printBody.tpl | 2 +- civicrm/templates/CRM/common/publicFooter.tpl | 2 +- .../templates/CRM/common/recentlyViewed.tpl | 2 +- .../CRM/common/searchResultTasks.tpl | 2 +- civicrm/templates/CRM/common/showHide.tpl | 2 +- .../CRM/common/showHideByFieldValue.tpl | 2 +- civicrm/templates/CRM/common/snippet.tpl | 2 +- civicrm/templates/CRM/common/status.tpl | 2 +- civicrm/templates/CRM/common/success.tpl | 4 +- civicrm/templates/CRM/common/unittests.tpl | 2 +- .../templates/CRM/common/upgradeCleanup.tpl | 2 +- civicrm/templates/CRM/common/version.tpl | 1 - civicrm/templates/CRM/common/wordpress.tpl | 2 +- civicrm/vendor/autoload.php | 4 +- civicrm/vendor/composer/ClassLoader.php | 48 +- civicrm/vendor/composer/LICENSE | 2 +- civicrm/vendor/composer/autoload_files.php | 3 + civicrm/vendor/composer/autoload_psr4.php | 4 + civicrm/vendor/composer/autoload_real.php | 20 +- civicrm/vendor/composer/autoload_static.php | 36 +- civicrm/vendor/composer/installed.json | 1543 +-- .../vendor/electrolinux/phpquery/.idea/.name | 1 - .../electrolinux/phpquery/.idea/compiler.xml | 21 - .../.idea/copyright/profiles_settings.xml | 5 - .../electrolinux/phpquery/.idea/encodings.xml | 5 - .../inspectionProfiles/Project_Default.xml | 7 - .../inspectionProfiles/profiles_settings.xml | 7 - .../electrolinux/phpquery/.idea/misc.xml | 339 - .../electrolinux/phpquery/.idea/modules.xml | 9 - .../electrolinux/phpquery/.idea/php.xml | 16 - .../phpquery/.idea/phpquery-git.iml | 22 - .../electrolinux/phpquery/.idea/vcs.xml | 7 - civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md | 1264 +++ civicrm/vendor/guzzlehttp/guzzle/LICENSE | 19 + civicrm/vendor/guzzlehttp/guzzle/README.md | 89 + civicrm/vendor/guzzlehttp/guzzle/UPGRADING.md | 1203 +++ .../vendor/guzzlehttp/guzzle/composer.json | 44 + .../vendor/guzzlehttp/guzzle/src/Client.php | 414 + .../guzzlehttp/guzzle/src/ClientInterface.php | 84 + .../guzzle/src/Cookie/CookieJar.php | 314 + .../guzzle/src/Cookie/CookieJarInterface.php | 84 + .../guzzle/src/Cookie/FileCookieJar.php | 90 + .../guzzle/src/Cookie/SessionCookieJar.php | 71 + .../guzzle/src/Cookie/SetCookie.php | 404 + .../src/Exception/BadResponseException.php | 27 + .../guzzle/src/Exception/ClientException.php | 7 + .../guzzle/src/Exception/ConnectException.php | 37 + .../guzzle/src/Exception/GuzzleException.php | 4 + .../guzzle/src/Exception/RequestException.php | 217 + .../guzzle/src/Exception/SeekException.php | 27 + .../guzzle/src/Exception/ServerException.php | 7 + .../Exception/TooManyRedirectsException.php | 4 + .../src/Exception/TransferException.php | 4 + .../guzzle/src/Handler/CurlFactory.php | 559 + .../src/Handler/CurlFactoryInterface.php | 27 + .../guzzle/src/Handler/CurlHandler.php | 45 + .../guzzle/src/Handler/CurlMultiHandler.php | 197 + .../guzzle/src/Handler/EasyHandle.php | 92 + .../guzzle/src/Handler/MockHandler.php | 189 + .../guzzlehttp/guzzle/src/Handler/Proxy.php | 55 + .../guzzle/src/Handler/StreamHandler.php | 533 + .../guzzlehttp/guzzle/src/HandlerStack.php | 273 + .../guzzle/src/MessageFormatter.php | 182 + .../guzzlehttp/guzzle/src/Middleware.php | 254 + civicrm/vendor/guzzlehttp/guzzle/src/Pool.php | 123 + .../guzzle/src/PrepareBodyMiddleware.php | 106 + .../guzzle/src/RedirectMiddleware.php | 237 + .../guzzlehttp/guzzle/src/RequestOptions.php | 255 + .../guzzlehttp/guzzle/src/RetryMiddleware.php | 112 + .../guzzlehttp/guzzle/src/TransferStats.php | 126 + .../guzzlehttp/guzzle/src/UriTemplate.php | 241 + .../guzzlehttp/guzzle/src/functions.php | 331 + .../guzzle/src/functions_include.php | 6 + .../vendor/guzzlehttp/promises/CHANGELOG.md | 65 + civicrm/vendor/guzzlehttp/promises/LICENSE | 19 + civicrm/vendor/guzzlehttp/promises/Makefile | 13 + civicrm/vendor/guzzlehttp/promises/README.md | 504 + .../vendor/guzzlehttp/promises/composer.json | 34 + .../promises/src/AggregateException.php | 16 + .../promises/src/CancellationException.php | 9 + .../guzzlehttp/promises/src/Coroutine.php | 151 + .../guzzlehttp/promises/src/EachPromise.php | 229 + .../promises/src/FulfilledPromise.php | 82 + .../guzzlehttp/promises/src/Promise.php | 280 + .../promises/src/PromiseInterface.php | 93 + .../promises/src/PromisorInterface.php | 15 + .../promises/src/RejectedPromise.php | 87 + .../promises/src/RejectionException.php | 47 + .../guzzlehttp/promises/src/TaskQueue.php | 66 + .../promises/src/TaskQueueInterface.php | 25 + .../guzzlehttp/promises/src/functions.php | 457 + .../promises/src/functions_include.php | 6 + civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md | 110 + civicrm/vendor/guzzlehttp/psr7/LICENSE | 19 + civicrm/vendor/guzzlehttp/psr7/README.md | 739 ++ civicrm/vendor/guzzlehttp/psr7/composer.json | 39 + .../guzzlehttp/psr7/src/AppendStream.php | 233 + .../guzzlehttp/psr7/src/BufferStream.php | 137 + .../guzzlehttp/psr7/src/CachingStream.php | 138 + .../guzzlehttp/psr7/src/DroppingStream.php | 42 + .../vendor/guzzlehttp/psr7/src/FnStream.php | 149 + .../guzzlehttp/psr7/src/InflateStream.php | 52 + .../guzzlehttp/psr7/src/LazyOpenStream.php | 39 + .../guzzlehttp/psr7/src/LimitStream.php | 155 + .../guzzlehttp/psr7/src/MessageTrait.php | 183 + .../guzzlehttp/psr7/src/MultipartStream.php | 153 + .../guzzlehttp/psr7/src/NoSeekStream.php | 22 + .../vendor/guzzlehttp/psr7/src/PumpStream.php | 165 + .../vendor/guzzlehttp/psr7/src/Request.php | 142 + .../vendor/guzzlehttp/psr7/src/Response.php | 132 + .../guzzlehttp/psr7/src/ServerRequest.php | 358 + civicrm/vendor/guzzlehttp/psr7/src/Stream.php | 257 + .../psr7/src/StreamDecoratorTrait.php | 149 + .../guzzlehttp/psr7/src/StreamWrapper.php | 121 + .../guzzlehttp/psr7/src/UploadedFile.php | 316 + civicrm/vendor/guzzlehttp/psr7/src/Uri.php | 702 ++ .../guzzlehttp/psr7/src/UriNormalizer.php | 216 + .../guzzlehttp/psr7/src/UriResolver.php | 219 + .../vendor/guzzlehttp/psr7/src/functions.php | 828 ++ .../guzzlehttp/psr7/src/functions_include.php | 6 + civicrm/vendor/marcj/topsort/README.md | 119 +- civicrm/vendor/marcj/topsort/bin/test.php | 44 + civicrm/vendor/marcj/topsort/composer.json | 2 +- civicrm/vendor/marcj/topsort/composer.lock | 4 +- .../topsort/src/Command/BenchmarkCommand.php | 67 +- .../topsort/src/GroupedTopSortInterface.php | 39 +- .../src/Implementations/GroupedArraySort.php | 57 +- .../Implementations/GroupedFixedArraySort.php | 87 - .../src/Implementations/GroupedStringSort.php | 7 + civicrm/vendor/phpoffice/phpword/.gitignore | 6 +- civicrm/vendor/phpoffice/phpword/.php_cs.dist | 146 + .../vendor/phpoffice/phpword/.scrutinizer.yml | 2 +- civicrm/vendor/phpoffice/phpword/.travis.yml | 34 +- .../phpword/.travis_shell_after_success.sh | 2 +- civicrm/vendor/phpoffice/phpword/CHANGELOG.md | 48 + civicrm/vendor/phpoffice/phpword/README.md | 19 +- .../vendor/phpoffice/phpword/bootstrap.php | 4 +- .../vendor/phpoffice/phpword/composer.json | 36 +- civicrm/vendor/phpoffice/phpword/phpstan.neon | 13 + .../PhpWord/Collection/AbstractCollection.php | 9 +- .../src/PhpWord/Collection/Bookmarks.php | 4 +- .../phpword/src/PhpWord/Collection/Charts.php | 4 +- .../src/PhpWord/Collection/Comments.php | 27 + .../src/PhpWord/Collection/Endnotes.php | 4 +- .../src/PhpWord/Collection/Footnotes.php | 4 +- .../phpword/src/PhpWord/Collection/Titles.php | 4 +- .../ComplexType/FootnoteProperties.php | 181 + .../src/PhpWord/ComplexType/ProofState.php | 106 + .../PhpWord/ComplexType/TrackChangesView.php | 166 + .../src/PhpWord/Element/AbstractContainer.php | 37 +- .../src/PhpWord/Element/AbstractElement.php | 94 +- .../phpword/src/PhpWord/Element/Bookmark.php | 6 +- .../phpword/src/PhpWord/Element/Cell.php | 4 +- .../phpword/src/PhpWord/Element/Chart.php | 6 +- .../phpword/src/PhpWord/Element/CheckBox.php | 5 +- .../phpword/src/PhpWord/Element/Comment.php | 122 + .../phpword/src/PhpWord/Element/Endnote.php | 8 +- .../phpword/src/PhpWord/Element/Field.php | 105 +- .../phpword/src/PhpWord/Element/Footer.php | 11 +- .../phpword/src/PhpWord/Element/Footnote.php | 9 +- .../phpword/src/PhpWord/Element/FormField.php | 10 +- .../phpword/src/PhpWord/Element/Header.php | 4 +- .../phpword/src/PhpWord/Element/Image.php | 111 +- .../phpword/src/PhpWord/Element/Line.php | 4 +- .../phpword/src/PhpWord/Element/Link.php | 6 +- .../phpword/src/PhpWord/Element/ListItem.php | 4 +- .../src/PhpWord/Element/ListItemRun.php | 13 +- .../phpword/src/PhpWord/Element/Object.php | 9 +- .../phpword/src/PhpWord/Element/PageBreak.php | 4 +- .../src/PhpWord/Element/PreserveText.php | 6 +- .../phpword/src/PhpWord/Element/Row.php | 4 +- .../phpword/src/PhpWord/Element/SDT.php | 66 +- .../phpword/src/PhpWord/Element/Section.php | 62 +- .../phpword/src/PhpWord/Element/Shape.php | 4 +- .../phpword/src/PhpWord/Element/TOC.php | 15 +- .../phpword/src/PhpWord/Element/Table.php | 5 +- .../phpword/src/PhpWord/Element/Text.php | 8 +- .../phpword/src/PhpWord/Element/TextBox.php | 4 +- .../phpword/src/PhpWord/Element/TextBreak.php | 8 +- .../phpword/src/PhpWord/Element/TextRun.php | 28 +- .../phpword/src/PhpWord/Element/Title.php | 6 +- .../src/PhpWord/Element/TrackChange.php | 76 + .../src/PhpWord/Escaper/AbstractEscaper.php | 6 +- .../src/PhpWord/Escaper/EscaperInterface.php | 6 +- .../phpword/src/PhpWord/Escaper/RegExp.php | 6 +- .../phpword/src/PhpWord/Escaper/Rtf.php | 15 +- .../phpword/src/PhpWord/Escaper/Xml.php | 6 +- .../PhpWord/Exception/CopyFileException.php | 12 +- .../CreateTemporaryFileException.php | 8 +- .../src/PhpWord/Exception/Exception.php | 4 +- .../Exception/InvalidImageException.php | 4 +- .../Exception/InvalidObjectException.php | 4 +- .../Exception/InvalidStyleException.php | 4 +- .../UnsupportedImageTypeException.php | 4 +- .../phpword/src/PhpWord/IOFactory.php | 23 +- .../phpoffice/phpword/src/PhpWord/Media.php | 58 +- .../src/PhpWord/Metadata/Compatibility.php | 8 +- .../phpword/src/PhpWord/Metadata/DocInfo.php | 43 +- .../src/PhpWord/Metadata/Protection.php | 146 +- .../phpword/src/PhpWord/Metadata/Settings.php | 390 + .../phpoffice/phpword/src/PhpWord/PhpWord.php | 46 +- .../src/PhpWord/Reader/AbstractReader.php | 13 +- .../phpword/src/PhpWord/Reader/HTML.php | 4 +- .../phpword/src/PhpWord/Reader/MsDoc.php | 138 +- .../phpword/src/PhpWord/Reader/ODText.php | 7 +- .../PhpWord/Reader/ODText/AbstractPart.php | 4 +- .../src/PhpWord/Reader/ODText/Content.php | 8 +- .../src/PhpWord/Reader/ODText/Meta.php | 8 +- .../phpword/src/PhpWord/Reader/RTF.php | 4 +- .../src/PhpWord/Reader/RTF/Document.php | 49 +- .../src/PhpWord/Reader/ReaderInterface.php | 6 +- .../phpword/src/PhpWord/Reader/Word2007.php | 12 +- .../PhpWord/Reader/Word2007/AbstractPart.php | 123 +- .../PhpWord/Reader/Word2007/DocPropsApp.php | 4 +- .../PhpWord/Reader/Word2007/DocPropsCore.php | 21 +- .../Reader/Word2007/DocPropsCustom.php | 5 +- .../src/PhpWord/Reader/Word2007/Document.php | 18 +- .../src/PhpWord/Reader/Word2007/Endnotes.php | 4 +- .../src/PhpWord/Reader/Word2007/Footnotes.php | 5 +- .../src/PhpWord/Reader/Word2007/Numbering.php | 7 +- .../src/PhpWord/Reader/Word2007/Settings.php | 160 + .../src/PhpWord/Reader/Word2007/Styles.php | 8 +- .../phpword/src/PhpWord/Settings.php | 52 +- .../src/PhpWord/Shared/AbstractEnum.php | 75 + .../phpword/src/PhpWord/Shared/Converter.php | 113 +- .../phpword/src/PhpWord/Shared/Html.php | 303 +- .../Shared/Microsoft/PasswordEncoder.php | 235 + .../phpword/src/PhpWord/Shared/OLERead.php | 40 +- .../src/PhpWord/Shared/PCLZip/pclzip.lib.php | 9512 ++++++++--------- .../phpword/src/PhpWord/Shared/ZipArchive.php | 26 +- .../src/PhpWord/SimpleType/DocProtect.php | 55 + .../phpword/src/PhpWord/SimpleType/Jc.php | 41 +- .../src/PhpWord/SimpleType/JcTable.php | 26 +- .../PhpWord/SimpleType/LineSpacingRule.php | 45 + .../src/PhpWord/SimpleType/NumberFormat.php | 151 + .../src/PhpWord/SimpleType/TextAlignment.php | 45 + .../phpword/src/PhpWord/SimpleType/Zoom.php | 42 + .../phpoffice/phpword/src/PhpWord/Style.php | 10 +- .../src/PhpWord/Style/AbstractStyle.php | 22 +- .../phpword/src/PhpWord/Style/Border.php | 157 +- .../phpword/src/PhpWord/Style/Cell.php | 97 +- .../phpword/src/PhpWord/Style/Chart.php | 5 +- .../phpword/src/PhpWord/Style/Extrusion.php | 6 +- .../phpword/src/PhpWord/Style/Fill.php | 8 +- .../phpword/src/PhpWord/Style/Font.php | 65 +- .../phpword/src/PhpWord/Style/Frame.php | 6 +- .../phpword/src/PhpWord/Style/Image.php | 9 +- .../phpword/src/PhpWord/Style/Indentation.php | 6 +- .../phpword/src/PhpWord/Style/Language.php | 223 + .../phpword/src/PhpWord/Style/Line.php | 19 +- .../src/PhpWord/Style/LineNumbering.php | 12 +- .../phpword/src/PhpWord/Style/ListItem.php | 32 +- .../phpword/src/PhpWord/Style/Numbering.php | 18 +- .../src/PhpWord/Style/NumberingLevel.php | 85 +- .../phpword/src/PhpWord/Style/Outline.php | 22 +- .../phpword/src/PhpWord/Style/Paper.php | 26 +- .../phpword/src/PhpWord/Style/Paragraph.php | 138 +- .../phpword/src/PhpWord/Style/Row.php | 4 +- .../phpword/src/PhpWord/Style/Section.php | 26 +- .../phpword/src/PhpWord/Style/Shading.php | 12 +- .../phpword/src/PhpWord/Style/Shadow.php | 6 +- .../phpword/src/PhpWord/Style/Shape.php | 4 +- .../phpword/src/PhpWord/Style/Spacing.php | 42 +- .../phpword/src/PhpWord/Style/TOC.php | 4 +- .../phpword/src/PhpWord/Style/Tab.php | 38 +- .../phpword/src/PhpWord/Style/Table.php | 22 +- .../phpword/src/PhpWord/Style/TextBox.php | 16 +- .../phpword/src/PhpWord/Template.php | 4 +- .../phpword/src/PhpWord/TemplateProcessor.php | 76 +- .../src/PhpWord/Writer/AbstractWriter.php | 50 +- .../phpword/src/PhpWord/Writer/HTML.php | 9 +- .../Writer/HTML/Element/AbstractElement.php | 7 +- .../PhpWord/Writer/HTML/Element/Container.php | 4 +- .../PhpWord/Writer/HTML/Element/Endnote.php | 4 +- .../PhpWord/Writer/HTML/Element/Footnote.php | 4 +- .../src/PhpWord/Writer/HTML/Element/Image.php | 25 +- .../src/PhpWord/Writer/HTML/Element/Link.php | 4 +- .../PhpWord/Writer/HTML/Element/ListItem.php | 4 +- .../PhpWord/Writer/HTML/Element/PageBreak.php | 6 +- .../src/PhpWord/Writer/HTML/Element/Table.php | 4 +- .../src/PhpWord/Writer/HTML/Element/Text.php | 16 +- .../PhpWord/Writer/HTML/Element/TextBreak.php | 4 +- .../PhpWord/Writer/HTML/Element/TextRun.php | 4 +- .../src/PhpWord/Writer/HTML/Element/Title.php | 4 +- .../PhpWord/Writer/HTML/Part/AbstractPart.php | 17 +- .../src/PhpWord/Writer/HTML/Part/Body.php | 6 +- .../src/PhpWord/Writer/HTML/Part/Head.php | 28 +- .../Writer/HTML/Style/AbstractStyle.php | 5 +- .../src/PhpWord/Writer/HTML/Style/Font.php | 15 +- .../src/PhpWord/Writer/HTML/Style/Generic.php | 4 +- .../src/PhpWord/Writer/HTML/Style/Image.php | 4 +- .../PhpWord/Writer/HTML/Style/Paragraph.php | 18 +- .../phpword/src/PhpWord/Writer/ODText.php | 5 +- .../Writer/ODText/Element/AbstractElement.php | 4 +- .../Writer/ODText/Element/Container.php | 4 +- .../PhpWord/Writer/ODText/Element/Image.php | 4 +- .../PhpWord/Writer/ODText/Element/Link.php | 12 +- .../Writer/ODText/Element/PageBreak.php | 36 + .../PhpWord/Writer/ODText/Element/Table.php | 4 +- .../PhpWord/Writer/ODText/Element/Text.php | 63 +- .../Writer/ODText/Element/TextBreak.php | 4 +- .../PhpWord/Writer/ODText/Element/TextRun.php | 4 +- .../PhpWord/Writer/ODText/Element/Title.php | 12 +- .../Writer/ODText/Part/AbstractPart.php | 6 +- .../PhpWord/Writer/ODText/Part/Content.php | 15 +- .../PhpWord/Writer/ODText/Part/Manifest.php | 4 +- .../src/PhpWord/Writer/ODText/Part/Meta.php | 12 +- .../PhpWord/Writer/ODText/Part/Mimetype.php | 4 +- .../src/PhpWord/Writer/ODText/Part/Styles.php | 33 +- .../Writer/ODText/Style/AbstractStyle.php | 4 +- .../src/PhpWord/Writer/ODText/Style/Font.php | 6 +- .../src/PhpWord/Writer/ODText/Style/Image.php | 6 +- .../PhpWord/Writer/ODText/Style/Paragraph.php | 10 +- .../PhpWord/Writer/ODText/Style/Section.php | 8 +- .../src/PhpWord/Writer/ODText/Style/Table.php | 6 +- .../phpword/src/PhpWord/Writer/PDF.php | 6 +- .../PhpWord/Writer/PDF/AbstractRenderer.php | 31 +- .../phpword/src/PhpWord/Writer/PDF/DomPDF.php | 16 +- .../phpword/src/PhpWord/Writer/PDF/MPDF.php | 31 +- .../phpword/src/PhpWord/Writer/PDF/TCPDF.php | 23 +- .../phpword/src/PhpWord/Writer/RTF.php | 8 +- .../Writer/RTF/Element/AbstractElement.php | 11 +- .../PhpWord/Writer/RTF/Element/Container.php | 4 +- .../src/PhpWord/Writer/RTF/Element/Image.php | 4 +- .../src/PhpWord/Writer/RTF/Element/Link.php | 4 +- .../PhpWord/Writer/RTF/Element/ListItem.php | 4 +- .../PhpWord/Writer/RTF/Element/PageBreak.php | 4 +- .../src/PhpWord/Writer/RTF/Element/Table.php | 4 +- .../src/PhpWord/Writer/RTF/Element/Text.php | 4 +- .../PhpWord/Writer/RTF/Element/TextBreak.php | 4 +- .../PhpWord/Writer/RTF/Element/TextRun.php | 4 +- .../src/PhpWord/Writer/RTF/Element/Title.php | 4 +- .../PhpWord/Writer/RTF/Part/AbstractPart.php | 12 +- .../src/PhpWord/Writer/RTF/Part/Document.php | 22 +- .../src/PhpWord/Writer/RTF/Part/Header.php | 11 +- .../Writer/RTF/Style/AbstractStyle.php | 4 +- .../src/PhpWord/Writer/RTF/Style/Border.php | 10 +- .../src/PhpWord/Writer/RTF/Style/Font.php | 8 +- .../PhpWord/Writer/RTF/Style/Paragraph.php | 5 +- .../src/PhpWord/Writer/RTF/Style/Section.php | 4 +- .../phpword/src/PhpWord/Writer/Word2007.php | 45 +- .../Word2007/Element/AbstractElement.php | 79 +- .../Writer/Word2007/Element/Bookmark.php | 6 +- .../PhpWord/Writer/Word2007/Element/Chart.php | 7 +- .../Writer/Word2007/Element/CheckBox.php | 20 +- .../Writer/Word2007/Element/Container.php | 6 +- .../Writer/Word2007/Element/Endnote.php | 4 +- .../PhpWord/Writer/Word2007/Element/Field.php | 119 +- .../Writer/Word2007/Element/Footnote.php | 6 +- .../Writer/Word2007/Element/FormField.php | 29 +- .../PhpWord/Writer/Word2007/Element/Image.php | 11 +- .../PhpWord/Writer/Word2007/Element/Line.php | 10 +- .../PhpWord/Writer/Word2007/Element/Link.php | 14 +- .../Writer/Word2007/Element/ListItem.php | 6 +- .../Writer/Word2007/Element/ListItemRun.php | 6 +- .../Writer/Word2007/Element/Object.php | 7 +- .../Writer/Word2007/Element/PageBreak.php | 5 +- .../Word2007/Element/ParagraphAlignment.php | 6 +- .../Writer/Word2007/Element/PreserveText.php | 20 +- .../PhpWord/Writer/Word2007/Element/SDT.php | 31 +- .../PhpWord/Writer/Word2007/Element/Shape.php | 12 +- .../PhpWord/Writer/Word2007/Element/TOC.php | 20 +- .../PhpWord/Writer/Word2007/Element/Table.php | 10 +- .../Word2007/Element/TableAlignment.php | 6 +- .../PhpWord/Writer/Word2007/Element/Text.php | 14 +- .../Writer/Word2007/Element/TextBox.php | 7 +- .../Writer/Word2007/Element/TextBreak.php | 6 +- .../Writer/Word2007/Element/TextRun.php | 6 +- .../PhpWord/Writer/Word2007/Element/Title.php | 20 +- .../Writer/Word2007/Part/AbstractPart.php | 30 +- .../PhpWord/Writer/Word2007/Part/Chart.php | 54 +- .../PhpWord/Writer/Word2007/Part/Comments.php | 104 + .../Writer/Word2007/Part/ContentTypes.php | 24 +- .../Writer/Word2007/Part/DocPropsApp.php | 4 +- .../Writer/Word2007/Part/DocPropsCore.php | 4 +- .../Writer/Word2007/Part/DocPropsCustom.php | 10 +- .../PhpWord/Writer/Word2007/Part/Document.php | 33 +- .../PhpWord/Writer/Word2007/Part/Endnotes.php | 4 +- .../Writer/Word2007/Part/FontTable.php | 4 +- .../PhpWord/Writer/Word2007/Part/Footer.php | 4 +- .../Writer/Word2007/Part/Footnotes.php | 5 +- .../PhpWord/Writer/Word2007/Part/Header.php | 4 +- .../Writer/Word2007/Part/Numbering.php | 7 +- .../src/PhpWord/Writer/Word2007/Part/Rels.php | 10 +- .../Writer/Word2007/Part/RelsDocument.php | 4 +- .../PhpWord/Writer/Word2007/Part/RelsPart.php | 4 +- .../PhpWord/Writer/Word2007/Part/Settings.php | 227 +- .../PhpWord/Writer/Word2007/Part/Styles.php | 28 +- .../PhpWord/Writer/Word2007/Part/Theme.php | 5 +- .../Writer/Word2007/Part/WebSettings.php | 4 +- .../Writer/Word2007/Style/AbstractStyle.php | 17 +- .../PhpWord/Writer/Word2007/Style/Cell.php | 20 +- .../Writer/Word2007/Style/Extrusion.php | 8 +- .../PhpWord/Writer/Word2007/Style/Fill.php | 6 +- .../PhpWord/Writer/Word2007/Style/Font.php | 23 +- .../PhpWord/Writer/Word2007/Style/Frame.php | 20 +- .../PhpWord/Writer/Word2007/Style/Image.php | 4 +- .../Writer/Word2007/Style/Indentation.php | 6 +- .../PhpWord/Writer/Word2007/Style/Line.php | 7 +- .../Writer/Word2007/Style/LineNumbering.php | 7 +- .../Writer/Word2007/Style/MarginBorder.php | 41 +- .../PhpWord/Writer/Word2007/Style/Outline.php | 8 +- .../Writer/Word2007/Style/Paragraph.php | 23 +- .../src/PhpWord/Writer/Word2007/Style/Row.php | 7 +- .../PhpWord/Writer/Word2007/Style/Section.php | 6 +- .../PhpWord/Writer/Word2007/Style/Shading.php | 12 +- .../PhpWord/Writer/Word2007/Style/Shadow.php | 8 +- .../PhpWord/Writer/Word2007/Style/Shape.php | 6 +- .../PhpWord/Writer/Word2007/Style/Spacing.php | 8 +- .../src/PhpWord/Writer/Word2007/Style/Tab.php | 12 +- .../PhpWord/Writer/Word2007/Style/Table.php | 13 +- .../PhpWord/Writer/Word2007/Style/TextBox.php | 8 +- .../src/PhpWord/Writer/WriterInterface.php | 4 +- civicrm/vendor/psr/http-message/CHANGELOG.md | 36 + civicrm/vendor/psr/http-message/LICENSE | 19 + civicrm/vendor/psr/http-message/README.md | 13 + civicrm/vendor/psr/http-message/composer.json | 26 + .../psr/http-message/src/MessageInterface.php | 187 + .../psr/http-message/src/RequestInterface.php | 129 + .../http-message/src/ResponseInterface.php | 68 + .../src/ServerRequestInterface.php | 261 + .../psr/http-message/src/StreamInterface.php | 158 + .../src/UploadedFileInterface.php | 123 + .../psr/http-message/src/UriInterface.php | 323 + civicrm/xml/GenCode.php | 45 + civicrm/xml/plugins/block.ts.php | 11 + civicrm/xml/schema/ACL/ACL.xml | 125 + civicrm/xml/schema/ACL/Cache.xml | 63 + civicrm/xml/schema/ACL/EntityRole.xml | 69 + civicrm/xml/schema/ACL/files.xml | 9 + civicrm/xml/schema/Activity/Activity.xml | 486 + .../schema/Activity/ActivityAssignment.xml | 115 + .../xml/schema/Activity/ActivityContact.xml | 80 + .../xml/schema/Activity/ActivityTarget.xml | 61 + civicrm/xml/schema/Activity/files.xml | 5 + civicrm/xml/schema/Batch/Batch.xml | 220 + civicrm/xml/schema/Batch/EntityBatch.xml | 75 + civicrm/xml/schema/Batch/files.xml | 6 + civicrm/xml/schema/Bridge/OG.xml | 99 + civicrm/xml/schema/Bridge/Role.xml | 52 + civicrm/xml/schema/Bridge/files.xml | 8 + civicrm/xml/schema/Campaign/Campaign.xml | 251 + civicrm/xml/schema/Campaign/CampaignGroup.xml | 82 + civicrm/xml/schema/Campaign/Survey.xml | 240 + civicrm/xml/schema/Campaign/files.xml | 7 + civicrm/xml/schema/Case/Case.xml | 214 + civicrm/xml/schema/Case/CaseActivity.xml | 84 + civicrm/xml/schema/Case/CaseContact.xml | 61 + civicrm/xml/schema/Case/CaseType.xml | 85 + civicrm/xml/schema/Case/files.xml | 8 + .../xml/schema/Contact/ACLContactCache.xml | 73 + civicrm/xml/schema/Contact/Contact.xml | 884 ++ civicrm/xml/schema/Contact/ContactType.xml | 97 + .../xml/schema/Contact/DashboardContact.xml | 113 + civicrm/xml/schema/Contact/Group.xml | 224 + civicrm/xml/schema/Contact/GroupContact.xml | 108 + .../xml/schema/Contact/GroupContactCache.xml | 66 + civicrm/xml/schema/Contact/GroupNesting.xml | 52 + .../xml/schema/Contact/GroupOrganization.xml | 67 + civicrm/xml/schema/Contact/Household.xml | 68 + civicrm/xml/schema/Contact/Individual.xml | 231 + civicrm/xml/schema/Contact/Organization.xml | 87 + civicrm/xml/schema/Contact/Relationship.xml | 156 + .../xml/schema/Contact/RelationshipType.xml | 163 + civicrm/xml/schema/Contact/SavedSearch.xml | 90 + .../schema/Contact/SubscriptionHistory.xml | 101 + civicrm/xml/schema/Contact/files.xml | 19 + .../xml/schema/Contribute/Contribution.xml | 538 + .../schema/Contribute/ContributionPage.xml | 462 + .../schema/Contribute/ContributionProduct.xml | 121 + .../schema/Contribute/ContributionRecur.xml | 391 + .../schema/Contribute/ContributionSoft.xml | 146 + civicrm/xml/schema/Contribute/Premium.xml | 108 + .../xml/schema/Contribute/PremiumsProduct.xml | 85 + civicrm/xml/schema/Contribute/Product.xml | 208 + civicrm/xml/schema/Contribute/Widget.xml | 144 + civicrm/xml/schema/Contribute/files.xml | 14 + civicrm/xml/schema/Core/ActionLog.xml | 107 + civicrm/xml/schema/Core/ActionMapping.xml | 84 + civicrm/xml/schema/Core/ActionSchedule.xml | 344 + civicrm/xml/schema/Core/Address.xml | 445 + civicrm/xml/schema/Core/AddressFormat.xml | 27 + civicrm/xml/schema/Core/Cache.xml | 91 + civicrm/xml/schema/Core/Component.xml | 38 + civicrm/xml/schema/Core/Country.xml | 105 + civicrm/xml/schema/Core/County.xml | 60 + civicrm/xml/schema/Core/CustomField.xml | 292 + civicrm/xml/schema/Core/CustomGroup.xml | 226 + civicrm/xml/schema/Core/Dashboard.xml | 164 + civicrm/xml/schema/Core/Discount.xml | 105 + civicrm/xml/schema/Core/Domain.xml | 140 + civicrm/xml/schema/Core/Email.xml | 160 + civicrm/xml/schema/Core/EntityFile.xml | 69 + civicrm/xml/schema/Core/EntityTag.xml | 99 + civicrm/xml/schema/Core/Extension.xml | 101 + civicrm/xml/schema/Core/File.xml | 67 + civicrm/xml/schema/Core/IM.xml | 114 + civicrm/xml/schema/Core/Job.xml | 132 + civicrm/xml/schema/Core/JobLog.xml | 86 + civicrm/xml/schema/Core/LocBlock.xml | 126 + civicrm/xml/schema/Core/LocationType.xml | 80 + civicrm/xml/schema/Core/Log.xml | 78 + civicrm/xml/schema/Core/MailSettings.xml | 153 + civicrm/xml/schema/Core/Managed.xml | 82 + civicrm/xml/schema/Core/Mapping.xml | 64 + civicrm/xml/schema/Core/MappingField.xml | 163 + civicrm/xml/schema/Core/Menu.xml | 209 + civicrm/xml/schema/Core/MessageTemplate.xml | 111 + civicrm/xml/schema/Core/Navigation.xml | 130 + civicrm/xml/schema/Core/Note.xml | 112 + civicrm/xml/schema/Core/OpenID.xml | 82 + civicrm/xml/schema/Core/OptionGroup.xml | 87 + civicrm/xml/schema/Core/OptionValue.xml | 216 + civicrm/xml/schema/Core/Persistent.xml | 54 + civicrm/xml/schema/Core/Phone.xml | 158 + civicrm/xml/schema/Core/Preferences.xml | 204 + civicrm/xml/schema/Core/PreferencesDate.xml | 78 + civicrm/xml/schema/Core/PrevNextCache.xml | 75 + civicrm/xml/schema/Core/PrintLabel.xml | 115 + civicrm/xml/schema/Core/RecurringEntity.xml | 56 + civicrm/xml/schema/Core/Setting.xml | 144 + civicrm/xml/schema/Core/StateProvince.xml | 60 + civicrm/xml/schema/Core/StatusPreference.xml | 92 + civicrm/xml/schema/Core/SystemLog.xml | 69 + civicrm/xml/schema/Core/Tag.xml | 125 + civicrm/xml/schema/Core/Timezone.xml | 66 + civicrm/xml/schema/Core/UFField.xml | 233 + civicrm/xml/schema/Core/UFGroup.xml | 284 + civicrm/xml/schema/Core/UFJoin.xml | 107 + civicrm/xml/schema/Core/UFMatch.xml | 115 + civicrm/xml/schema/Core/Website.xml | 68 + civicrm/xml/schema/Core/WordReplacement.xml | 86 + civicrm/xml/schema/Core/Worldregion.xml | 30 + civicrm/xml/schema/Core/files.xml | 59 + civicrm/xml/schema/Cxn/Cxn.xml | 113 + civicrm/xml/schema/Cxn/files.xml | 5 + civicrm/xml/schema/Dedupe/Exception.xml | 55 + civicrm/xml/schema/Dedupe/Rule.xml | 73 + civicrm/xml/schema/Dedupe/RuleGroup.xml | 109 + civicrm/xml/schema/Dedupe/files.xml | 8 + civicrm/xml/schema/Event/Cart/Cart.xml | 42 + civicrm/xml/schema/Event/Cart/EventInCart.xml | 49 + civicrm/xml/schema/Event/Cart/files.xml | 5 + civicrm/xml/schema/Event/Event.xml | 881 ++ civicrm/xml/schema/Event/EventPage.xml | 233 + civicrm/xml/schema/Event/Participant.xml | 304 + .../xml/schema/Event/ParticipantPayment.xml | 58 + .../schema/Event/ParticipantStatusType.xml | 99 + civicrm/xml/schema/Event/files.xml | 7 + civicrm/xml/schema/Financial/Currency.xml | 64 + .../Financial/EntityFinancialAccount.xml | 90 + .../schema/Financial/EntityFinancialTrxn.xml | 86 + .../xml/schema/Financial/FinancialAccount.xml | 165 + .../xml/schema/Financial/FinancialItem.xml | 178 + .../xml/schema/Financial/FinancialTrxn.xml | 288 + .../xml/schema/Financial/FinancialType.xml | 84 + .../xml/schema/Financial/PaymentProcessor.xml | 244 + .../schema/Financial/PaymentProcessorType.xml | 194 + civicrm/xml/schema/Financial/PaymentToken.xml | 138 + civicrm/xml/schema/Financial/files.xml | 15 + civicrm/xml/schema/Friend/Friend.xml | 119 + civicrm/xml/schema/Friend/files.xml | 7 + civicrm/xml/schema/Grant/Grant.xml | 242 + civicrm/xml/schema/Grant/files.xml | 5 + civicrm/xml/schema/Mailing/BouncePattern.xml | 38 + civicrm/xml/schema/Mailing/BounceType.xml | 40 + civicrm/xml/schema/Mailing/Component.xml | 77 + civicrm/xml/schema/Mailing/Event/Bounce.xml | 61 + civicrm/xml/schema/Mailing/Event/Confirm.xml | 40 + .../xml/schema/Mailing/Event/Delivered.xml | 40 + civicrm/xml/schema/Mailing/Event/Forward.xml | 52 + civicrm/xml/schema/Mailing/Event/Opened.xml | 40 + civicrm/xml/schema/Mailing/Event/Queue.xml | 84 + civicrm/xml/schema/Mailing/Event/Reply.xml | 40 + .../xml/schema/Mailing/Event/Subscribe.xml | 69 + .../schema/Mailing/Event/TrackableURLOpen.xml | 53 + .../xml/schema/Mailing/Event/Unsubscribe.xml | 47 + civicrm/xml/schema/Mailing/Event/files.xml | 16 + civicrm/xml/schema/Mailing/Mailing.xml | 500 + civicrm/xml/schema/Mailing/MailingAB.xml | 133 + civicrm/xml/schema/Mailing/MailingGroup.xml | 79 + civicrm/xml/schema/Mailing/MailingJob.xml | 115 + civicrm/xml/schema/Mailing/Recipients.xml | 71 + civicrm/xml/schema/Mailing/Spool.xml | 65 + civicrm/xml/schema/Mailing/TrackableURL.xml | 39 + civicrm/xml/schema/Mailing/files.xml | 15 + civicrm/xml/schema/Member/Membership.xml | 272 + civicrm/xml/schema/Member/MembershipBlock.xml | 134 + civicrm/xml/schema/Member/MembershipLog.xml | 110 + .../xml/schema/Member/MembershipPayment.xml | 57 + .../xml/schema/Member/MembershipStatus.xml | 147 + civicrm/xml/schema/Member/MembershipType.xml | 266 + civicrm/xml/schema/Member/files.xml | 11 + civicrm/xml/schema/PCP/PCP.xml | 215 + civicrm/xml/schema/PCP/PCPBlock.xml | 153 + civicrm/xml/schema/PCP/files.xml | 6 + civicrm/xml/schema/Pledge/Pledge.xml | 339 + civicrm/xml/schema/Pledge/PledgeBlock.xml | 114 + civicrm/xml/schema/Pledge/PledgePayment.xml | 141 + civicrm/xml/schema/Pledge/files.xml | 8 + civicrm/xml/schema/Price/LineItem.xml | 216 + civicrm/xml/schema/Price/PriceField.xml | 225 + civicrm/xml/schema/Price/PriceFieldValue.xml | 238 + civicrm/xml/schema/Price/PriceSet.xml | 210 + civicrm/xml/schema/Price/PriceSetEntity.xml | 64 + civicrm/xml/schema/Price/files.xml | 9 + civicrm/xml/schema/Queue/QueueItem.xml | 76 + civicrm/xml/schema/Queue/files.xml | 5 + civicrm/xml/schema/Report/ReportInstance.xml | 259 + civicrm/xml/schema/Report/files.xml | 6 + civicrm/xml/schema/SMS/History.xml | 54 + civicrm/xml/schema/SMS/Provider.xml | 130 + civicrm/xml/schema/SMS/files.xml | 8 + civicrm/xml/schema/Schema.xml | 34 + .../schema/Standalone/OpenID/Associations.xml | 64 + .../xml/schema/Standalone/OpenID/Nonce.xml | 43 + .../xml/schema/Standalone/OpenID/files.xml | 7 + civicrm/xml/templates/access.tpl | 10 + civicrm/xml/templates/case_sample.tpl | 87 + civicrm/xml/templates/civicrm_acl.tpl | 106 + civicrm/xml/templates/civicrm_country.tpl | 296 + civicrm/xml/templates/civicrm_currency.tpl | 213 + civicrm/xml/templates/civicrm_data.tpl | 1769 +++ .../xml/templates/civicrm_msg_template.tpl | 147 + civicrm/xml/templates/civicrm_navigation.tpl | 819 ++ civicrm/xml/templates/civicrm_sample.tpl | 253 + .../xml/templates/civicrm_state_province.tpl | 4123 +++++++ civicrm/xml/templates/civicrm_version.tpl | 8 + civicrm/xml/templates/civicrm_version_sql.tpl | 1 + civicrm/xml/templates/dao.tpl | 240 + civicrm/xml/templates/drop.tpl | 40 + civicrm/xml/templates/joomla.tpl | 55 + civicrm/xml/templates/languages.tpl | 212 + civicrm/xml/templates/listAll.tpl | 39 + .../message_templates/case_activity_html.tpl | 104 + .../case_activity_subject.tpl | 1 + .../message_templates/case_activity_text.tpl | 38 + .../contribution_dupalert_html.tpl | 86 + .../contribution_dupalert_subject.tpl | 1 + .../contribution_dupalert_text.tpl | 17 + .../contribution_invoice_receipt_html.tpl | 458 + .../contribution_invoice_receipt_subject.tpl | 11 + .../contribution_invoice_receipt_text.tpl | 1 + .../contribution_offline_receipt_html.tpl | 319 + .../contribution_offline_receipt_subject.tpl | 1 + .../contribution_offline_receipt_text.tpl | 118 + .../contribution_online_receipt_html.tpl | 473 + .../contribution_online_receipt_subject.tpl | 1 + .../contribution_online_receipt_text.tpl | 209 + .../contribution_recurring_billing_html.tpl | 65 + ...contribution_recurring_billing_subject.tpl | 1 + .../contribution_recurring_billing_text.tpl | 23 + .../contribution_recurring_cancelled_html.tpl | 33 + ...ntribution_recurring_cancelled_subject.tpl | 1 + .../contribution_recurring_cancelled_text.tpl | 3 + .../contribution_recurring_edit_html.tpl | 36 + .../contribution_recurring_edit_subject.tpl | 1 + .../contribution_recurring_edit_text.tpl | 8 + .../contribution_recurring_notify_html.tpl | 129 + .../contribution_recurring_notify_subject.tpl | 1 + .../contribution_recurring_notify_text.tpl | 54 + .../event_offline_receipt_html.tpl | 513 + .../event_offline_receipt_subject.tpl | 1 + .../event_offline_receipt_text.tpl | 292 + .../event_online_receipt_html.tpl | 514 + .../event_online_receipt_subject.tpl | 1 + .../event_online_receipt_text.tpl | 302 + .../event_registration_receipt_html.tpl | 175 + .../event_registration_receipt_subject.tpl | 1 + .../event_registration_receipt_text.tpl | 80 + .../message_templates/friend_html.tpl | 40 + .../message_templates/friend_subject.tpl | 1 + .../message_templates/friend_text.tpl | 15 + .../membership_autorenew_billing_html.tpl | 66 + .../membership_autorenew_billing_subject.tpl | 1 + .../membership_autorenew_billing_text.tpl | 23 + .../membership_autorenew_cancelled_html.tpl | 70 + ...membership_autorenew_cancelled_subject.tpl | 1 + .../membership_autorenew_cancelled_text.tpl | 12 + .../membership_offline_receipt_html.tpl | 296 + .../membership_offline_receipt_subject.tpl | 5 + .../membership_offline_receipt_text.tpl | 113 + .../membership_online_receipt_html.tpl | 556 + .../membership_online_receipt_subject.tpl | 1 + .../membership_online_receipt_text.tpl | 241 + .../participant_cancelled_html.tpl | 129 + .../participant_cancelled_subject.tpl | 1 + .../participant_cancelled_text.tpl | 47 + .../participant_confirm_html.tpl | 184 + .../participant_confirm_subject.tpl | 1 + .../participant_confirm_text.tpl | 81 + .../participant_expired_html.tpl | 132 + .../participant_expired_subject.tpl | 1 + .../participant_expired_text.tpl | 51 + .../participant_transferred_html.tpl | 129 + .../participant_transferred_subject.tpl | 1 + .../participant_transferred_text.tpl | 45 + .../payment_or_refund_notification_html.tpl | 253 + ...payment_or_refund_notification_subject.tpl | 1 + .../payment_or_refund_notification_text.tpl | 102 + .../message_templates/pcp_notify_html.tpl | 96 + .../message_templates/pcp_notify_subject.tpl | 1 + .../message_templates/pcp_notify_text.tpl | 20 + .../pcp_owner_notify_html.tpl | 27 + .../pcp_owner_notify_subject.tpl | 1 + .../pcp_owner_notify_text.tpl | 20 + .../pcp_status_change_html.tpl | 57 + .../pcp_status_change_subject.tpl | 1 + .../pcp_status_change_text.tpl | 45 + .../pcp_supporter_notify_html.tpl | 99 + .../pcp_supporter_notify_subject.tpl | 1 + .../pcp_supporter_notify_text.tpl | 57 + .../petition_confirmation_needed_html.tpl | 10 + .../petition_confirmation_needed_subject.tpl | 1 + .../petition_confirmation_needed_text.tpl | 8 + .../message_templates/petition_sign_html.tpl | 3 + .../petition_sign_subject.tpl | 1 + .../message_templates/petition_sign_text.tpl | 1 + .../pledge_acknowledge_html.tpl | 117 + .../pledge_acknowledge_subject.tpl | 1 + .../pledge_acknowledge_text.tpl | 45 + .../pledge_reminder_html.tpl | 107 + .../pledge_reminder_subject.tpl | 1 + .../pledge_reminder_text.tpl | 33 + .../sample/Sample CiviMail Newsletter.tpl | 130 + ...sive Design Newsletter - Single Column.tpl | 496 + ...ponsive Design Newsletter - Two Column.tpl | 672 ++ .../message_templates/test_preview_html.tpl | 10 + .../test_preview_subject.tpl | 1 + .../message_templates/test_preview_text.tpl | 7 + .../message_templates/uf_notify_html.tpl | 74 + .../message_templates/uf_notify_subject.tpl | 1 + .../message_templates/uf_notify_text.tpl | 11 + civicrm/xml/templates/schema.tpl | 91 + civicrm/xml/templates/schema_structure.tpl | 135 + civicrm/xml/version.xml | 4 + includes/civicrm.basepage.php | 4 +- includes/civicrm.shortcodes.modal.php | 4 +- includes/civicrm.shortcodes.php | 4 +- includes/civicrm.users.php | 4 +- uninstall.php | 4 +- wp-cli/civicrm.php | 2 +- 3283 files changed, 81436 insertions(+), 14775 deletions(-) create mode 100644 civicrm/CRM/Case/Form/Task/Batch.php create mode 100644 civicrm/CRM/Case/Form/Task/PickProfile.php create mode 100644 civicrm/CRM/Core/Form/Task.php create mode 100644 civicrm/CRM/Core/Form/Task/Batch.php create mode 100644 civicrm/CRM/Core/Form/Task/PickProfile.php mode change 100644 => 100755 civicrm/CRM/Core/I18n/SchemaStructure.php create mode 100644 civicrm/CRM/Member/StatusOverrideTypes.php create mode 100644 civicrm/CRM/Upgrade/Incremental/php/FiveZero.php create mode 100644 civicrm/CRM/Upgrade/Incremental/php/Template.php create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/4.7.32.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.0.0.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.0.beta1.mysql.tpl create mode 100644 civicrm/CRM/Utils/EnglishNumber.php create mode 100644 civicrm/CRM/Utils/Url.php create mode 100644 civicrm/bower_components/crossfilter2/AUTHORS create mode 100644 civicrm/bower_components/crossfilter2/NOTICE create mode 100644 civicrm/bower_components/crossfilter2/index.d.ts mode change 100644 => 100755 civicrm/install/langs.php create mode 100644 civicrm/release-notes/5.0.0.md create mode 100644 civicrm/templates/CRM/Case/Form/Task/Batch.tpl create mode 100644 civicrm/templates/CRM/Case/Form/Task/PickProfile.tpl create mode 100644 civicrm/templates/CRM/Core/Form/Task/Batch.tpl create mode 100644 civicrm/templates/CRM/Core/Form/Task/PickProfile.tpl delete mode 100644 civicrm/templates/CRM/common/version.tpl delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/.name delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/compiler.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/copyright/profiles_settings.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/encodings.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/misc.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/modules.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/php.xml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/phpquery-git.iml delete mode 100644 civicrm/vendor/electrolinux/phpquery/.idea/vcs.xml create mode 100644 civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md create mode 100644 civicrm/vendor/guzzlehttp/guzzle/LICENSE create mode 100644 civicrm/vendor/guzzlehttp/guzzle/README.md create mode 100644 civicrm/vendor/guzzlehttp/guzzle/UPGRADING.md create mode 100644 civicrm/vendor/guzzlehttp/guzzle/composer.json create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Client.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/Pool.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/functions.php create mode 100644 civicrm/vendor/guzzlehttp/guzzle/src/functions_include.php create mode 100644 civicrm/vendor/guzzlehttp/promises/CHANGELOG.md create mode 100644 civicrm/vendor/guzzlehttp/promises/LICENSE create mode 100644 civicrm/vendor/guzzlehttp/promises/Makefile create mode 100644 civicrm/vendor/guzzlehttp/promises/README.md create mode 100644 civicrm/vendor/guzzlehttp/promises/composer.json create mode 100644 civicrm/vendor/guzzlehttp/promises/src/AggregateException.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/CancellationException.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/Coroutine.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/EachPromise.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/FulfilledPromise.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/Promise.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/PromiseInterface.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/PromisorInterface.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/RejectedPromise.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/RejectionException.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/TaskQueue.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/TaskQueueInterface.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/functions.php create mode 100644 civicrm/vendor/guzzlehttp/promises/src/functions_include.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md create mode 100644 civicrm/vendor/guzzlehttp/psr7/LICENSE create mode 100644 civicrm/vendor/guzzlehttp/psr7/README.md create mode 100644 civicrm/vendor/guzzlehttp/psr7/composer.json create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/BufferStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/CachingStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/DroppingStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/FnStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/LazyOpenStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/MultipartStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/NoSeekStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/PumpStream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/Request.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/Response.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/Stream.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/UploadedFile.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/Uri.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/UriNormalizer.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/UriResolver.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/functions.php create mode 100644 civicrm/vendor/guzzlehttp/psr7/src/functions_include.php create mode 100644 civicrm/vendor/marcj/topsort/bin/test.php delete mode 100644 civicrm/vendor/marcj/topsort/src/Implementations/GroupedFixedArraySort.php create mode 100644 civicrm/vendor/phpoffice/phpword/.php_cs.dist create mode 100644 civicrm/vendor/phpoffice/phpword/phpstan.neon create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Comments.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/FootnoteProperties.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/ProofState.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/TrackChangesView.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Comment.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Settings.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/AbstractEnum.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/DocProtect.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/LineSpacingRule.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/NumberFormat.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/TextAlignment.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Zoom.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/PageBreak.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Comments.php create mode 100644 civicrm/vendor/psr/http-message/CHANGELOG.md create mode 100644 civicrm/vendor/psr/http-message/LICENSE create mode 100644 civicrm/vendor/psr/http-message/README.md create mode 100644 civicrm/vendor/psr/http-message/composer.json create mode 100644 civicrm/vendor/psr/http-message/src/MessageInterface.php create mode 100644 civicrm/vendor/psr/http-message/src/RequestInterface.php create mode 100644 civicrm/vendor/psr/http-message/src/ResponseInterface.php create mode 100644 civicrm/vendor/psr/http-message/src/ServerRequestInterface.php create mode 100644 civicrm/vendor/psr/http-message/src/StreamInterface.php create mode 100644 civicrm/vendor/psr/http-message/src/UploadedFileInterface.php create mode 100644 civicrm/vendor/psr/http-message/src/UriInterface.php create mode 100644 civicrm/xml/GenCode.php create mode 100644 civicrm/xml/plugins/block.ts.php create mode 100644 civicrm/xml/schema/ACL/ACL.xml create mode 100644 civicrm/xml/schema/ACL/Cache.xml create mode 100644 civicrm/xml/schema/ACL/EntityRole.xml create mode 100644 civicrm/xml/schema/ACL/files.xml create mode 100644 civicrm/xml/schema/Activity/Activity.xml create mode 100644 civicrm/xml/schema/Activity/ActivityAssignment.xml create mode 100644 civicrm/xml/schema/Activity/ActivityContact.xml create mode 100644 civicrm/xml/schema/Activity/ActivityTarget.xml create mode 100644 civicrm/xml/schema/Activity/files.xml create mode 100644 civicrm/xml/schema/Batch/Batch.xml create mode 100644 civicrm/xml/schema/Batch/EntityBatch.xml create mode 100644 civicrm/xml/schema/Batch/files.xml create mode 100644 civicrm/xml/schema/Bridge/OG.xml create mode 100644 civicrm/xml/schema/Bridge/Role.xml create mode 100644 civicrm/xml/schema/Bridge/files.xml create mode 100644 civicrm/xml/schema/Campaign/Campaign.xml create mode 100644 civicrm/xml/schema/Campaign/CampaignGroup.xml create mode 100644 civicrm/xml/schema/Campaign/Survey.xml create mode 100644 civicrm/xml/schema/Campaign/files.xml create mode 100644 civicrm/xml/schema/Case/Case.xml create mode 100644 civicrm/xml/schema/Case/CaseActivity.xml create mode 100644 civicrm/xml/schema/Case/CaseContact.xml create mode 100644 civicrm/xml/schema/Case/CaseType.xml create mode 100644 civicrm/xml/schema/Case/files.xml create mode 100644 civicrm/xml/schema/Contact/ACLContactCache.xml create mode 100644 civicrm/xml/schema/Contact/Contact.xml create mode 100644 civicrm/xml/schema/Contact/ContactType.xml create mode 100644 civicrm/xml/schema/Contact/DashboardContact.xml create mode 100644 civicrm/xml/schema/Contact/Group.xml create mode 100644 civicrm/xml/schema/Contact/GroupContact.xml create mode 100644 civicrm/xml/schema/Contact/GroupContactCache.xml create mode 100644 civicrm/xml/schema/Contact/GroupNesting.xml create mode 100644 civicrm/xml/schema/Contact/GroupOrganization.xml create mode 100644 civicrm/xml/schema/Contact/Household.xml create mode 100644 civicrm/xml/schema/Contact/Individual.xml create mode 100644 civicrm/xml/schema/Contact/Organization.xml create mode 100644 civicrm/xml/schema/Contact/Relationship.xml create mode 100644 civicrm/xml/schema/Contact/RelationshipType.xml create mode 100644 civicrm/xml/schema/Contact/SavedSearch.xml create mode 100644 civicrm/xml/schema/Contact/SubscriptionHistory.xml create mode 100644 civicrm/xml/schema/Contact/files.xml create mode 100644 civicrm/xml/schema/Contribute/Contribution.xml create mode 100644 civicrm/xml/schema/Contribute/ContributionPage.xml create mode 100644 civicrm/xml/schema/Contribute/ContributionProduct.xml create mode 100644 civicrm/xml/schema/Contribute/ContributionRecur.xml create mode 100644 civicrm/xml/schema/Contribute/ContributionSoft.xml create mode 100644 civicrm/xml/schema/Contribute/Premium.xml create mode 100644 civicrm/xml/schema/Contribute/PremiumsProduct.xml create mode 100644 civicrm/xml/schema/Contribute/Product.xml create mode 100644 civicrm/xml/schema/Contribute/Widget.xml create mode 100644 civicrm/xml/schema/Contribute/files.xml create mode 100644 civicrm/xml/schema/Core/ActionLog.xml create mode 100644 civicrm/xml/schema/Core/ActionMapping.xml create mode 100644 civicrm/xml/schema/Core/ActionSchedule.xml create mode 100644 civicrm/xml/schema/Core/Address.xml create mode 100644 civicrm/xml/schema/Core/AddressFormat.xml create mode 100644 civicrm/xml/schema/Core/Cache.xml create mode 100644 civicrm/xml/schema/Core/Component.xml create mode 100644 civicrm/xml/schema/Core/Country.xml create mode 100644 civicrm/xml/schema/Core/County.xml create mode 100644 civicrm/xml/schema/Core/CustomField.xml create mode 100644 civicrm/xml/schema/Core/CustomGroup.xml create mode 100644 civicrm/xml/schema/Core/Dashboard.xml create mode 100644 civicrm/xml/schema/Core/Discount.xml create mode 100644 civicrm/xml/schema/Core/Domain.xml create mode 100644 civicrm/xml/schema/Core/Email.xml create mode 100644 civicrm/xml/schema/Core/EntityFile.xml create mode 100644 civicrm/xml/schema/Core/EntityTag.xml create mode 100644 civicrm/xml/schema/Core/Extension.xml create mode 100644 civicrm/xml/schema/Core/File.xml create mode 100644 civicrm/xml/schema/Core/IM.xml create mode 100644 civicrm/xml/schema/Core/Job.xml create mode 100644 civicrm/xml/schema/Core/JobLog.xml create mode 100644 civicrm/xml/schema/Core/LocBlock.xml create mode 100644 civicrm/xml/schema/Core/LocationType.xml create mode 100644 civicrm/xml/schema/Core/Log.xml create mode 100644 civicrm/xml/schema/Core/MailSettings.xml create mode 100644 civicrm/xml/schema/Core/Managed.xml create mode 100644 civicrm/xml/schema/Core/Mapping.xml create mode 100644 civicrm/xml/schema/Core/MappingField.xml create mode 100644 civicrm/xml/schema/Core/Menu.xml create mode 100644 civicrm/xml/schema/Core/MessageTemplate.xml create mode 100644 civicrm/xml/schema/Core/Navigation.xml create mode 100644 civicrm/xml/schema/Core/Note.xml create mode 100644 civicrm/xml/schema/Core/OpenID.xml create mode 100644 civicrm/xml/schema/Core/OptionGroup.xml create mode 100644 civicrm/xml/schema/Core/OptionValue.xml create mode 100644 civicrm/xml/schema/Core/Persistent.xml create mode 100644 civicrm/xml/schema/Core/Phone.xml create mode 100644 civicrm/xml/schema/Core/Preferences.xml create mode 100644 civicrm/xml/schema/Core/PreferencesDate.xml create mode 100644 civicrm/xml/schema/Core/PrevNextCache.xml create mode 100644 civicrm/xml/schema/Core/PrintLabel.xml create mode 100644 civicrm/xml/schema/Core/RecurringEntity.xml create mode 100644 civicrm/xml/schema/Core/Setting.xml create mode 100644 civicrm/xml/schema/Core/StateProvince.xml create mode 100644 civicrm/xml/schema/Core/StatusPreference.xml create mode 100644 civicrm/xml/schema/Core/SystemLog.xml create mode 100644 civicrm/xml/schema/Core/Tag.xml create mode 100644 civicrm/xml/schema/Core/Timezone.xml create mode 100644 civicrm/xml/schema/Core/UFField.xml create mode 100644 civicrm/xml/schema/Core/UFGroup.xml create mode 100644 civicrm/xml/schema/Core/UFJoin.xml create mode 100644 civicrm/xml/schema/Core/UFMatch.xml create mode 100644 civicrm/xml/schema/Core/Website.xml create mode 100644 civicrm/xml/schema/Core/WordReplacement.xml create mode 100644 civicrm/xml/schema/Core/Worldregion.xml create mode 100644 civicrm/xml/schema/Core/files.xml create mode 100644 civicrm/xml/schema/Cxn/Cxn.xml create mode 100644 civicrm/xml/schema/Cxn/files.xml create mode 100644 civicrm/xml/schema/Dedupe/Exception.xml create mode 100644 civicrm/xml/schema/Dedupe/Rule.xml create mode 100644 civicrm/xml/schema/Dedupe/RuleGroup.xml create mode 100644 civicrm/xml/schema/Dedupe/files.xml create mode 100644 civicrm/xml/schema/Event/Cart/Cart.xml create mode 100644 civicrm/xml/schema/Event/Cart/EventInCart.xml create mode 100644 civicrm/xml/schema/Event/Cart/files.xml create mode 100644 civicrm/xml/schema/Event/Event.xml create mode 100644 civicrm/xml/schema/Event/EventPage.xml create mode 100644 civicrm/xml/schema/Event/Participant.xml create mode 100644 civicrm/xml/schema/Event/ParticipantPayment.xml create mode 100644 civicrm/xml/schema/Event/ParticipantStatusType.xml create mode 100644 civicrm/xml/schema/Event/files.xml create mode 100644 civicrm/xml/schema/Financial/Currency.xml create mode 100644 civicrm/xml/schema/Financial/EntityFinancialAccount.xml create mode 100644 civicrm/xml/schema/Financial/EntityFinancialTrxn.xml create mode 100644 civicrm/xml/schema/Financial/FinancialAccount.xml create mode 100644 civicrm/xml/schema/Financial/FinancialItem.xml create mode 100644 civicrm/xml/schema/Financial/FinancialTrxn.xml create mode 100644 civicrm/xml/schema/Financial/FinancialType.xml create mode 100644 civicrm/xml/schema/Financial/PaymentProcessor.xml create mode 100644 civicrm/xml/schema/Financial/PaymentProcessorType.xml create mode 100644 civicrm/xml/schema/Financial/PaymentToken.xml create mode 100644 civicrm/xml/schema/Financial/files.xml create mode 100644 civicrm/xml/schema/Friend/Friend.xml create mode 100644 civicrm/xml/schema/Friend/files.xml create mode 100644 civicrm/xml/schema/Grant/Grant.xml create mode 100644 civicrm/xml/schema/Grant/files.xml create mode 100644 civicrm/xml/schema/Mailing/BouncePattern.xml create mode 100644 civicrm/xml/schema/Mailing/BounceType.xml create mode 100644 civicrm/xml/schema/Mailing/Component.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Bounce.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Confirm.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Delivered.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Forward.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Opened.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Queue.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Reply.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Subscribe.xml create mode 100644 civicrm/xml/schema/Mailing/Event/TrackableURLOpen.xml create mode 100644 civicrm/xml/schema/Mailing/Event/Unsubscribe.xml create mode 100644 civicrm/xml/schema/Mailing/Event/files.xml create mode 100644 civicrm/xml/schema/Mailing/Mailing.xml create mode 100644 civicrm/xml/schema/Mailing/MailingAB.xml create mode 100644 civicrm/xml/schema/Mailing/MailingGroup.xml create mode 100644 civicrm/xml/schema/Mailing/MailingJob.xml create mode 100644 civicrm/xml/schema/Mailing/Recipients.xml create mode 100644 civicrm/xml/schema/Mailing/Spool.xml create mode 100644 civicrm/xml/schema/Mailing/TrackableURL.xml create mode 100644 civicrm/xml/schema/Mailing/files.xml create mode 100644 civicrm/xml/schema/Member/Membership.xml create mode 100644 civicrm/xml/schema/Member/MembershipBlock.xml create mode 100644 civicrm/xml/schema/Member/MembershipLog.xml create mode 100644 civicrm/xml/schema/Member/MembershipPayment.xml create mode 100644 civicrm/xml/schema/Member/MembershipStatus.xml create mode 100644 civicrm/xml/schema/Member/MembershipType.xml create mode 100644 civicrm/xml/schema/Member/files.xml create mode 100644 civicrm/xml/schema/PCP/PCP.xml create mode 100644 civicrm/xml/schema/PCP/PCPBlock.xml create mode 100644 civicrm/xml/schema/PCP/files.xml create mode 100644 civicrm/xml/schema/Pledge/Pledge.xml create mode 100644 civicrm/xml/schema/Pledge/PledgeBlock.xml create mode 100644 civicrm/xml/schema/Pledge/PledgePayment.xml create mode 100644 civicrm/xml/schema/Pledge/files.xml create mode 100644 civicrm/xml/schema/Price/LineItem.xml create mode 100644 civicrm/xml/schema/Price/PriceField.xml create mode 100644 civicrm/xml/schema/Price/PriceFieldValue.xml create mode 100644 civicrm/xml/schema/Price/PriceSet.xml create mode 100644 civicrm/xml/schema/Price/PriceSetEntity.xml create mode 100644 civicrm/xml/schema/Price/files.xml create mode 100644 civicrm/xml/schema/Queue/QueueItem.xml create mode 100644 civicrm/xml/schema/Queue/files.xml create mode 100644 civicrm/xml/schema/Report/ReportInstance.xml create mode 100644 civicrm/xml/schema/Report/files.xml create mode 100644 civicrm/xml/schema/SMS/History.xml create mode 100644 civicrm/xml/schema/SMS/Provider.xml create mode 100644 civicrm/xml/schema/SMS/files.xml create mode 100644 civicrm/xml/schema/Schema.xml create mode 100644 civicrm/xml/schema/Standalone/OpenID/Associations.xml create mode 100644 civicrm/xml/schema/Standalone/OpenID/Nonce.xml create mode 100644 civicrm/xml/schema/Standalone/OpenID/files.xml create mode 100644 civicrm/xml/templates/access.tpl create mode 100644 civicrm/xml/templates/case_sample.tpl create mode 100644 civicrm/xml/templates/civicrm_acl.tpl create mode 100644 civicrm/xml/templates/civicrm_country.tpl create mode 100644 civicrm/xml/templates/civicrm_currency.tpl create mode 100644 civicrm/xml/templates/civicrm_data.tpl create mode 100644 civicrm/xml/templates/civicrm_msg_template.tpl create mode 100644 civicrm/xml/templates/civicrm_navigation.tpl create mode 100644 civicrm/xml/templates/civicrm_sample.tpl create mode 100644 civicrm/xml/templates/civicrm_state_province.tpl create mode 100644 civicrm/xml/templates/civicrm_version.tpl create mode 100644 civicrm/xml/templates/civicrm_version_sql.tpl create mode 100644 civicrm/xml/templates/dao.tpl create mode 100644 civicrm/xml/templates/drop.tpl create mode 100644 civicrm/xml/templates/joomla.tpl create mode 100644 civicrm/xml/templates/languages.tpl create mode 100644 civicrm/xml/templates/listAll.tpl create mode 100644 civicrm/xml/templates/message_templates/case_activity_html.tpl create mode 100644 civicrm/xml/templates/message_templates/case_activity_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/case_activity_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_dupalert_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_dupalert_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_dupalert_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_invoice_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_invoice_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_offline_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_online_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_billing_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_billing_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_billing_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_cancelled_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_cancelled_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_cancelled_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_edit_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_edit_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_edit_text.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_notify_html.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_notify_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/contribution_recurring_notify_text.tpl create mode 100644 civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/event_offline_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/event_online_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/event_online_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/event_registration_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/event_registration_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/event_registration_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/friend_html.tpl create mode 100644 civicrm/xml/templates/message_templates/friend_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/friend_text.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_autorenew_billing_html.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_autorenew_billing_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_autorenew_billing_text.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_autorenew_cancelled_html.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_autorenew_cancelled_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_autorenew_cancelled_text.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_offline_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_offline_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_online_receipt_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_cancelled_html.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_cancelled_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_cancelled_text.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_confirm_html.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_confirm_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_confirm_text.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_expired_html.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_expired_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_expired_text.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_transferred_html.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_transferred_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/participant_transferred_text.tpl create mode 100644 civicrm/xml/templates/message_templates/payment_or_refund_notification_html.tpl create mode 100644 civicrm/xml/templates/message_templates/payment_or_refund_notification_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/payment_or_refund_notification_text.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_notify_html.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_notify_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_notify_text.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_owner_notify_html.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_owner_notify_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_owner_notify_text.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_status_change_html.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_status_change_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_status_change_text.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_supporter_notify_html.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_supporter_notify_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/pcp_supporter_notify_text.tpl create mode 100644 civicrm/xml/templates/message_templates/petition_confirmation_needed_html.tpl create mode 100644 civicrm/xml/templates/message_templates/petition_confirmation_needed_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/petition_confirmation_needed_text.tpl create mode 100644 civicrm/xml/templates/message_templates/petition_sign_html.tpl create mode 100644 civicrm/xml/templates/message_templates/petition_sign_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/petition_sign_text.tpl create mode 100644 civicrm/xml/templates/message_templates/pledge_acknowledge_html.tpl create mode 100644 civicrm/xml/templates/message_templates/pledge_acknowledge_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/pledge_acknowledge_text.tpl create mode 100644 civicrm/xml/templates/message_templates/pledge_reminder_html.tpl create mode 100644 civicrm/xml/templates/message_templates/pledge_reminder_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/pledge_reminder_text.tpl create mode 100644 civicrm/xml/templates/message_templates/sample/Sample CiviMail Newsletter.tpl create mode 100644 civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl create mode 100644 civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl create mode 100644 civicrm/xml/templates/message_templates/test_preview_html.tpl create mode 100644 civicrm/xml/templates/message_templates/test_preview_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/test_preview_text.tpl create mode 100644 civicrm/xml/templates/message_templates/uf_notify_html.tpl create mode 100644 civicrm/xml/templates/message_templates/uf_notify_subject.tpl create mode 100644 civicrm/xml/templates/message_templates/uf_notify_text.tpl create mode 100644 civicrm/xml/templates/schema.tpl create mode 100644 civicrm/xml/templates/schema_structure.tpl create mode 100644 civicrm/xml/version.xml diff --git a/README.md b/README.md index a5b55148c6..a153d40fbc 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 4f8f31a938..c590390b01 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 3b4732471d..94ebc083ac 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 78815a8d7f..aa39577eff 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 3337c4ab9b..1271722fdf 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 7cec618ecc..fc6fd265d7 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 1bb9bf5ca0..33e9ae33f6 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 2146e02888..22eb7bf3de 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 fbb4110cb6..97e9f1c151 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 c505046dc4..577f80cf79 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 d807024237..9b3ecdd26c 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 c440178d08..30009f898d 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 07b6df7bda..14a1e2a53f 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 7d3798d72d..bed9ed4ed4 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 6ec23020fd..b952957d85 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 a17e4bc090..f333f1d6c8 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 758705e314..bc4e995d61 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 4fbd6215cd..2f66d4c743 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 b80bc8996c..f0bb5d7d07 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 28c4f45666..e3ff859b88 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 3f19f83cac..1ec56d0c3b 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 ee63f83e74..7486cf553e 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 2c548156ac..26aaab0c8b 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 a94cd18e24..805c350a51 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 2287312afa..d460e262b8 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 1395d13f62..6efc8fddd3 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 ce006eac72..c10f7d5b88 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 77618bafb4..2d6ced947f 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 fb72c80fa2..113247adfe 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 95c3b2448a..3a73c3b676 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 d06ba2db63..6f3a9a818e 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 254e5daf68..98e9872669 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 8f275c62aa..f7327f6052 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 90131945fd..5e8e62f6c0 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 3b32d612a4..58025d1b21 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 3b63f4a371..e76f0e3ebd 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 6fee99f7dc..ab88458eb3 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 ad693bf5bb..7e82085155 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 da475882be..b900e83e4d 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 7914eb9eb6..4d65b9264a 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 13ad599e32..4cdaec3622 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 b61214a8c4..bf763931b7 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 e1fecc0a36..088ae89f61 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 b44723d4ae..78e2a78305 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 a9251f0280..dc2193f7c5 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 9ad060e9ad..589827d79e 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 029f7fd23b..c867b4a080 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 8e1bdec642..b89f477c97 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 488970061a..4a6917d35b 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 b309805758..05a499fc42 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 83f360a7a0..ffb993220e 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 4103c7cc02..3920b17caa 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 4e41cf675b..abfa3b5b45 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 34ea1c7438..b5df7881b9 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 de6a0f35d2..97791e8ed2 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 ad32029a42..256ba40278 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 69972ea110..385aa8dcc0 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 8252b50042..4d4fe541d1 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 992a79986b..9eb4827765 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 f291090898..8e1a594e62 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 eb5ad34b82..9f4af94b54 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 8129e3f184..cf781cc44b 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 ee79cc7742..f8dfbf07a8 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 9e50d14273..9f63a17575 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 d6901f557f..cced34a566 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 9003bda4e5..2169f29e02 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 73ef984e89..67cc7aa908 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 9c6dbb723b..835b3f5575 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 a40b3f2adc..fd90c12890 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 8286b9c649..2555f20e65 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 7e2330dc51..6a0b2c86aa 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 12cd080471..54ad6dcc58 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 c7622ff790..f0b37f25a0 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 bd79a922bb..07ea080b35 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 e55c748271..b7b73668ec 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 061e6fff06..32706c6109 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 9edb6eb7f5..d6c512f864 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 c984a4e4dc..175d713c18 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 1f93a2c724..0687708013 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 43d1455dd4..149325d9b5 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 b00f7b6739..244aa62cc8 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 7c628073d7..4fb6434224 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 9fb2377ccc..db7f076f15 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 36bd8b891c..5783c70c97 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 5d8d75a660..1e3607f83a 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 74639b944d..166fa1afba 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 e1f68214d0..a8efcbe3cb 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 4aa58a961b..35acc53d3e 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 fcea91b739..e400a2b33a 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 c42db6dc31..9f939d2bbb 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 9e47d4b404..6e56a4dfc0 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 89e2574084..f7ed1b6246 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 d530c87e53..14d82de76a 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 4a45be0e23..1498ef0c2a 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 ae510be096..186a7954f4 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 40d95b0ee7..6ab965f4f5 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 21cd8f8a3a..68b911097c 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 83679cabe9..b16347b472 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 9e6ac247f0..e4d36781ad 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 6f9b6457e4..a62e88c2b2 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 edb8e959bf..253b214224 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 5d4a3b2245..d086773dc4 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 4bfa646424..2dbc9c53eb 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 ab290514d3..69c824e07f 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 e1b6a3627e..3026a30074 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 b629a2b6d6..7246ccc1c5 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 11c4bfbf8d..664d4b9df0 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 3b1d779f82..3303dcc2de 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 c5bfa84a05..10360483d8 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 5e493932a2..db0ffc860a 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 e35a5a9f19..fbafa003cc 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 c0e29be435..51321a1713 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 e42fa94b7e..b9df4b91e2 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 c11e4a356d..596c26fe7e 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 72be36e773..8edade59f0 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 8abf943cc1..126ca59baa 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 3c838b392c..25e6c0a2fb 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 e3128511d0..177cdbee0b 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 a90b78b695..5c99d8ee6d 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 32c7af03c0..23e7d71e44 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 a2969ce83e..3054686adb 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 3b690fe4d9..2a0e57a272 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 b9b99b4235..f4c1907f6b 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 d22d8be7cd..865f01ae1e 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 1a5fdb8671..dbfe1b9005 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 899271b9f2..6b9c9d326e 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 63c9e19176..76ddb1619a 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 66239e578a..6b6ed0232f 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 1c86644879..dcebf0b193 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 5fe710b75c..8032f4beab 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 da39905bca..5dd5e5909f 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 9a4f44941d..14962e9728 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 8148cadb63..64921da5b0 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 af66540df0..296c3566a3 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 983de171ac..e7925b5c47 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 40472b3c54..762f479eba 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 ba4d201707..fe51abb1c3 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 986efcafdc..608e3f0bc5 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 9a448c53d2..da191e151a 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 cbe84d0698..f7ec3dce4f 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 9189e733fa..d13e6e899d 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 fa9a16a014..dfdc5dba0f 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 4ee6b4382c..38894cf6d8 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 529bbdae23..bdad95626d 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 7e58b23d08..5173aac2f5 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 42f2189679..1ff788772f 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 2877e0244c..a02427ba5d 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 ddbe0338ee..23fd267172 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 bab3608011..bc8220a4b8 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 bff8507cfb..042a6fcb99 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 a1fc56e9a8..871931033b 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 43c534f5ef..48896de1d7 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 cb1c1b72a6..9e19ca136c 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 1a181247d0..c22316de29 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 a652633d72..626ed8f0fd 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 b306e52957..e0adbceb04 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 99b0bd359e..182908f4de 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 e6dda96f31..aa3d3ba831 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 30ad453f18..ebb2c5275a 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 2d4f97b555..9feb418b7f 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 bdb78d7bcb..2158502053 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 abcfc81d39..7185ac8c5e 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 f144dc4076..31823573e4 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 da3d9fafbc..a8f5d7ff93 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 f7a8377164..bab970a3dd 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 d9bbabe0f9..1c6e01ea00 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 781f61101b..cca82c0fd8 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 ea1113db7d..2a465cb6c1 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 503b4b1160..d283ba722f 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 aae8c13410..8a2f88f13c 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 1dfd387d7f..858237343f 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 15c5dbfc98..d8c070c6ee 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 ee5c58c81e..6b4aea1d7d 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 2d936f469a..afae24df23 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 7366d5d605..3a27eb0b33 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 8c0ce7992f..191e39b810 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 6fc4c94f1e..e6fe1c6e48 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 9f1d0cdcd3..d6ec8a139e 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 6638ee1950..6c7ebbe7be 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 98bd9fb731..29a9a7e0af 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 8667ca30c3..d8d6f91599 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 caaadfad8a..f1534cbefe 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 0ba913f408..0f179b6adc 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 9a10f16752..41e115b455 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 d68ae05f09..2fca570d41 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 f0fc9fffb2..8a8eea4672 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 74da1d9f31..0a15c6140f 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 76586b3699..449129372a 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 c50535c595..fa7f401348 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 f97eace40a..0127fec731 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 3ff6997b46..8f036637d2 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 2b12d19e00..13906d6030 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 2dea994936..91bebdf123 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 ea85094adc..ab8d134ab8 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 5f028ec744..ee220afd20 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 753702893f..d9a45cc297 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 57ef1e05d8..7481f1d531 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 d54b69eaf5..514544ec04 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 352e134e0d..6f084690af 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 9c297170eb..38a1147f89 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 8ee224bf4a..b55d114318 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 9bebe8b97e..852fed9e19 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 bc0e25b07a..14494ed04a 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 57361dcd61..bb0d603f50 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 946d90aae0..ba3f46725d 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 294b1d0377..967b6536ea 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 506b3951d0..afd7ac2189 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 f33cfbdb8e..87967baa63 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 7b1ccd7b7a..9459d9c21c 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 55d2122fe0..8b993f697e 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 07a24dc106..d05d41cd4c 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 ddfe9f357c..564a4e3889 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 a93cb14e3e..1275e2f686 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 a256d4410e..805b6f5369 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 37b0b38dba..3d72885747 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 d8e93ccfb1..3a5c4f1d7f 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 0000000000..b2f0419c1a --- /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 e9701d77c4..bd7d4b31a7 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 0a2434bc58..881dcac765 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 0000000000..2b9888406c --- /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 5e17d3fe2c..3ee84537e6 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 4318eb1f66..855863ae56 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 d4589efabb..252862ed19 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 67b043a2e4..eced57d41f 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 a1e5ebbe21..b69f9ffac0 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 2d643559fd..67668647b5 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 61f673f87b..036324c4e7 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 9ce8d4bd09..65ad071648 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 8be97d37d8..39bd1148b2 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 4fde3b50e7..d429fca867 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 99fc2c2267..8c175ef8f7 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 54488648b9..85028cfa31 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 5af2aaaf1c..1d317542f3 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 e1357b9fa2..20eacf8254 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 60d1277a17..15d56f0a64 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 8884a500b4..70e449f53d 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 8ec1162894..a49c41de46 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 a86e440160..3f427faa54 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 8bb7ea6914..49389dc8f6 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 8cafef35bc..51e8f498b2 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 a06971c9c8..dd3b6e5d99 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 73c379e0df..7c56b49b65 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 662e866227..a650d76087 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 2efb377464..ff82069ebd 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 734a4e5f65..a742f3d690 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 05e78491fc..c7582d99fe 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 73bf59b76b..f867c0cd05 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 8b661fcda5..9e8d6e5fe2 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 284aa3a1bf..f51e164af6 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 2014ed146c..4c7d284d88 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 da6d27008a..d708497c94 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 62109f0b33..7c0a29841c 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 bce8ff5e92..ed7d784c84 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 e41ab733f5..73e12f9530 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 5435aa3c2f..69c5655c5c 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 1b337fd3a0..2642d59e85 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 0987aa61b8..ffd1206d3e 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 b2ac947046..29a2f7adeb 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 656f7bae6e..656e27f62e 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 bdba332fe8..af2b0a87cf 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 e13bc52c4f..0cc38ed46c 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 331e2add53..c99b2d7429 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 e4c09ea269..daa7dde585 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 6a0a1a7f60..566c43559f 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 334d90a018..59e9108b71 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 85eccc56c7..14772d1140 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 e03a23879f..e3eb9e07bd 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 3c67ae0684..e1de1bb5f8 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 a53545599b..6d57260fe7 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 70970ac225..0a7bd2ab3c 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 40d736164f..d280df1f30 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 49bb7b4240..cb654891e0 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 20f4bef28d..f61c5c220f 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 df6adbf379..23b8cff703 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 0755741e05..97ecac5207 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 0fc2f90fb7..37ac628c8a 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 e3a4ea57fe..375d18a665 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 fa4bf98db5..4698051528 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 155862b7a7..f261fccc75 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 ff12c07eb7..0770a1e0c2 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 cd3d2ec7f9..558ce38d25 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 c3da42fa62..b6df73e0ec 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 20f08e501b..d62bcb8025 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 eb865796ed..6893168cb6 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 e96acc7e22..fe6dba816e 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 9d6b217349..cc15d8f7ab 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 1b6823657e..678b40d42b 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 ca56642b39..29fc602740 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 0395b78340..ded492da12 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 b8119602c1..f6a6298e73 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 7da3919882..9fa07b0670 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 de13a9657b..c39a363889 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 a52bbd0047..058f4c8961 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 84b7ccb379..e6bc3edbab 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 1518c2a119..b8c666037d 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 8cd7336eae..941d00bdd6 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 a443d8115f..76753621d3 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 01340a47bd..a9520b8f5c 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 e6c7e35041..b8904091d0 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 ce67560a2b..589589dbfd 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 48ef0d31b4..b9cd02b872 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 1fabfabdd5..5f60db40c3 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 418969f183..33b87f9ff2 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 ca843f4686..fed6dc9046 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 11ecf04535..5d39191052 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 1464c320ae..688e805c63 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 be6d6b024d..abeb99ebf2 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 6d102887a4..fe886c798f 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 26872ac827..d7f81ff354 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 7671a5fd3b..333e516228 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 c80eb609d1..520ed19da1 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 9a567873eb..2c6a299186 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 2f3eede683..6a513e5b49 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 e90727bb07..3ef442ab9e 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 08a5019fd9..2df8b362cf 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 d171068387..122963c22a 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 460af450a5..a5b26a36a6 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 b052193a0c..153768095b 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 1adc51377b..87159ac23b 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 4af599800f..67f752d5b2 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 066da42b7a..dc1aefedf7 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 74ed765057..bf9d95eb39 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 f5028b0f26..20a03cd824 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 e88f797070..e5bde961e5 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 db14a49ea7..d01a26e475 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 04a392cda5..7e0e55a722 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 2947696c3a..8606759d66 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 f52c1bde27..1404f4882a 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 f5f5ddc2be..39d9d50556 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 deb1ff7e40..b1cf1ab4f5 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 dc58616973..ade7852ef7 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 0849903b04..873d67a79a 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 7553ed3951..0f6b304c05 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 f1666bb5d7..6aa4792064 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 d73a1d1402..114a2d0466 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 3c28ac5482..3d17946f02 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 af2ed67337..0a64e357c1 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 07f6378b80..85854ba16b 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 78ad2a2540..ec95dda8d8 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 b2389a3d05..5585414cf9 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 a0125ed053..511e4b19d0 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 c5e2067c58..5c915b2bc7 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 3987ce399b..2a6b34cac4 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 349d57d818..e7c458c5f5 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 071962c0bc..1180240fe7 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 853e1cb00e..bb25431297 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 c77d358534..8e27e37cb4 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 7c2598bc8e..bc24165d31 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 ec029b873d..b78d3bef82 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 45c40a1f7c..62f916f5b7 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 1cc73f2da2..1d85aee81c 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 3ef04b3fc2..accd6f9a34 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 ef487ae253..4355ff3468 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 b147077b91..6f444383f3 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 33b4c4bb32..c29cca5381 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 efc5ac5616..e72f076413 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 e57efd9d01..0083bc9cf9 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 76fc66491a..b91a3cd04b 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 6f12a62ea8..4b8146e3f1 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 57376f885c..11a0e34b70 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 7f0bc3ad01..b88de102d0 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 257fc1b1a8..609f24b261 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 9bbdf4e223..dbf11dedb2 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 8238722947..e6326c2f87 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 eb3b9ee6fc..e2e9d06c39 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 46a5d67a6c..62f916286b 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 4087d2bcb1..f94d4beb05 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 f1ab27e3d0..5da9d8c418 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 2a7988082b..4d0f878589 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 f6847cacd4..e5bec4c873 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 1f6f8e678a..0884eb7905 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 0515118b0a..4224521319 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 9c36efbfb6..6c1db0369a 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 54be7e0d02..d668497461 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 a4c42883a8..f0778dd1ee 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 abcf56f6d8..c296cb0d7f 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 63fdb08346..548376dde0 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 7e1a4b9423..bbca8fe202 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 131c00fa73..eb31790ebf 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 38f13b8a89..cbf31f60b9 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 71aa3f6183..732527b54d 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 031f94c2dc..c0e3c740b9 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 781b1ad380..9df6f0bc33 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 6252e8ceec..309cffe00d 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 04d9d37722..e99880acc5 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 6085e8a5a0..c711114da0 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 3468592260..ad97146add 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 6f9123fac6..acd0d3d7a7 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 ec3f8afd4f..6ec94a569b 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 69e792b621..de3d28d1a2 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 62a811cbfc..a020d89aa9 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 48da495179..ab8bbea41b 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 99a91201de..701dd8e135 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 d3cc799854..d006a725be 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 d7288e6dbf..31043f6a69 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 60709a95cd..da9160ce16 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 cfa30081a7..3d6c79335e 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 8819dfda98..750eed9134 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 bf1978ba2f..b350399d29 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 80c0ae1a45..0675aaee2f 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 ff84f8d1fc..d2041c2f83 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 8705b3ddc6..992df754dc 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 373ff40188..cbdd080321 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 2e69d84469..da710a455e 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 58d0434102..be30a38654 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 7366d11ded..604ba943af 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 d93ea62890..098398086e 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 ef29b1c7af..115fd4c1e7 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 ab9f39bd2d..aef27eab69 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 0a33c62d07..ad97386398 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 5b5e6ad397..97626fa0f7 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 57200cbf60..2250986846 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 33e6ca6bb6..ff5e63d001 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 ea767bf394..34d992d24c 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 170bc3c6e1..0fb42a1f0b 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 9345343a73..7efa147d2f 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 4551377057..28080a70ba 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 47665c20cb..65ab9d63d4 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 dd9ec548c7..783f27195d 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 e70288998a..07ee2e9472 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 c3582cea54..f6b1c62dd3 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 ed399bff16..0ffb902c35 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 a7bef2708f..b2cdc67ffe 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 46212ce7ab..eccfc76c94 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 483d6e8349..2410f41fb8 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 6f2599bf85..09af0988ef 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 628d13aaa5..2c95ffd9f0 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 545b6e93d3..ce90bb0d82 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 8b2dbe0c1d..d7b32b78a6 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 0e3247013e..e56413ae0a 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 413375a19c..59c39829e2 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 936f4ed968..000242ccdb 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 9e7995a3d7..def8d6bd90 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 62ed764106..cb1c471214 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 320ed6910c..ec23ddb44b 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 27fd130ae0..acc726dfa6 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 8373b29713..f263908fef 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 8984e0558a..b8e87378f4 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 fc7f0348d2..0c60a6eb75 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 a9e511e185..3d3e1808a9 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 082fd547a0..d6205a11d1 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 926799fe8b..e427bd26fb 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 500d8ffd68..464a8584f5 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 f217ba7630..527cb61eb5 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 35fa5ca615..ab08e95089 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 2402e6a16a..00a509ea61 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 d14b7f5ce4..1f1650edad 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 edfc4fc6f8..5f81c2cf00 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 5631c954fb..f8981352c9 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 bf04314024..d1473251f1 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 09f301d444..9c1328102a 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 63394c305f..a570f7b173 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 6c1b8a52af..82aba90ac3 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 d2ff429626..353bcad960 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 d8b6b5ff7f..9d73e1e879 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 574591c9cc..77916e00fd 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 adc18069e8..f9227d42bc 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 13a9ae4811..8bc4c44c07 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 4018b85863..f91d894784 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 f7b04a1ac8..5439099b60 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 1a696dc257..4a0cd690bf 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 3b90eae838..a94e06a652 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 8b78eca48d..3642e11ba8 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 0952bcb142..138e98bb41 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 5780509c87..4356c6598b 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 042ade7a6e..be1caea309 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 930a295129..c22f1e2387 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 22d186344f..486f5021bd 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 f5c3bbe9b9..017b6f8813 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 af346e884b..a69e654ad2 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 8f9cad5e47..bc5f0e9b24 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 9b90a9d7d3..dee7eb1f21 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 7824a8c5b3..09bb4b2416 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 21a6fa560f..feb6f0c8e5 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 5820ff2962..17ae8ffe42 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 3eecbe8f5b..b0345ee9b8 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 781ac5fa79..d49ccc9cd9 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 5ffc5e59f0..f5de070e47 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 3f1a4e50f8..dc53ce711c 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 1e3444aec1..95fd0be3d6 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 76b8189222..c51fdc9d7e 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 0156f14a41..2268810901 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 8f2a406dff..9684891001 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 69ef1665f2..eab146007d 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 4daa0c6e2c..3945fc97f8 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 3d445df4fc..cad493a3c7 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 dfb89f8925..acc122b8d8 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 62259940b8..907ab5c3cf 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 9e01ea3d48..60f456e922 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 a3535e5cbe..13e7f6c0f7 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 97d358859b..1aba1d1b6a 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 b6a4430ee5..826b7cb3af 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 32eef8a8b3..0a09843534 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 686440fc15..6ab5b41cc3 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 6338597b5c..a0159b5ebc 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 d9c6de574d..d8f1eac519 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 3b25cfc1c0..ccc6645631 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 d0b20cd5af..68511dfdbe 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 603943a5db..8d86fcb330 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 05736a6280..993e977dec 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 7fccbdda92..8c6304632d 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 e51e17a243..ef0e696d10 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 ba4786bef4..505c9b0418 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 ad021d1dc7..baec9f45dd 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 0f46943431..c3bee31f18 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 dc28f48497..3b6fa4a128 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 8227ff067f..1824edfb4b 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 e0686b459e..7f75a9dae3 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 4e2aa09863..228e250389 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 234d94fed9..d236e2a26c 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 a3dfb35042..efad130378 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 21f5bfd6e6..c2b95a9aee 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 069dd8a1a5..6837bd2659 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 08b5bda75d..b094ccb078 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 bc225cfc86..0a7cea692e 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 487b82849b..a2f0107bba 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 a591f067ca..a5debaa657 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 441906fa7e..e85f08effa 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 8be4c9f4e5..b4095b83bf 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 91538012dc..77c67ee273 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 45cfe04a2a..eeaebf4c9e 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 b66f01a11b..0d19ca5b68 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 f12aaa6978..b3052fea75 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 c8452a41e6..5df962260c 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 31c4355b6b..7f993a7e5b 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 5897579fdf..c9268f7f0a 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 23b3d64eae..77fef1be19 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 26887449a9..a656f5048c 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 79ced1dae4..2e88e08014 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 efbb6518c4..6b7f0f8d75 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 b813dddac7..e7b1ad62e3 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 0134869a48..f9954b3a81 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 caeaa600d3..850084e7f0 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 5b2cbffe99..558614615f 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 5fc881edf9..32f1728242 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 9994323a7d..a7bf37ed2b 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 2227465cf9..3cb40c5916 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 accc5d6d08..1cb1030ac5 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 ebfcc5c16e..760101b098 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 7b0ade3794..e6ad7ee197 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 7bb1a2cc19..922e8ee24b 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 c23b28058e..baba3acd3f 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 2034fccba3..7819f2721a 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 ba4ca660e4..642ea1e1ae 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 56953d9b7d..46c72a2af8 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 9eead4bad1..f7ef6f9219 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 9403c1b5bc..767f5a1d36 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 ef806d5ea9..08a99e3842 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 34934ab123..75be147b12 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 1bc7ec1284..4433b7d51f 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 cff1a1d4bd..f6f395a03d 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 87e92fdc80..3457c4e08d 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 9ce9350e0b..6c5d6fcd62 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 b06e37251b..25db8a43e2 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 429d14ac78..560b255dc3 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 a66e7caed8..29a0da0c62 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 2a2cbf54d8..73cf693d68 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 4f0ba98bb1..9586145c64 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 180a4425dd..fe8d31a5bf 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 d9d49c8525..0ce7dc4df5 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 0eab40d4c8..0112a921b8 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 1a7520d836..fc83b012c1 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 a41d9367a7..729d3f8ca5 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 6cec729fad..e8a8c705e0 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 19749dadeb..13e066d461 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 ec0032e065..9a2767fcd7 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 7087a5a456..f9c950d7b5 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 10dccc79db..58811263c7 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 f2e64af801..64417e7b85 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 c3f5627934..9564b20651 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 afd256805e..265d27828d 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 585e843d5f..3f968d231b 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 3b5842a9d6..237ce337cf 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 d8676e4fca..76d1ff9671 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 e054dc3c09..a924959844 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 3a455777bb..18e5254dc8 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 63119cf49e..5d06369437 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 eb7272edde..e98e38e888 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 c35ff7f1db..87359a2afa 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 988a7059f1..2ca8879017 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 d8b448a05b..b978145e96 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 2127dbfe1c..940b8a272d 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 ee4531f745..6fb845ceb1 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 3282de2d81..88220f4488 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 7e9d64f0ea..e5e7022e98 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 28220778e9..59856f6342 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 f821036b16..565a84ad1a 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 9b3caefb5e..671e1542f8 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 c45168dca9..f7fe97914b 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 e2a8df4248..20d7fde9d3 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 462cb832a8..de15258fbf 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 3689bbca19..f77df5b91c 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 4ff6ec9985..2b49bc6691 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 f70d2a5bed..80a5747771 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 2845d05342..55d33594ff 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 f5ac34bcc7..a4823bf118 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 a837062a55..5823935f09 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 e1e686db8f..b431cf166a 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 42f04e959f..23114402d1 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 671d4d6350..839c61fb9c 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 fe618862a4..3974eab19e 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 b35720a11b..c8f421f16d 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 a85742e932..7047fa630e 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 45d97d1b90..7abc05f434 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 5423d59386..818b94e3ad 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 717ad3e639..43fe3f5b76 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 e6c97ea258..300ee740e2 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 b948be0b58..fda3bc4e97 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 d1e8289435..dcdf67f176 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 2a3abb54f6..464dc959cf 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 f441f19c34..55ea6a015b 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 e6edb4d73c..2953cc9797 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 fedb851cc3..f96aa3d60d 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 9c265e4747..65a1d5ea19 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 3b1964d6fe..5f5ba19f20 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 3349673c52..a764c6a79e 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 80d1edda9a..a3973f0678 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 6216bb9398..8572fd5032 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 ab2eb48eff..f9f8087dfa 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 af00820f91..93d2b0ec7e 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 8bc617a624..491afef73f 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 70ce136ff3..de88dcb390 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 b995ace61d..90569e58f0 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 6bc57c5285..aed6b23167 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 ea930c63e8..1875c75213 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 1fcf034a2e..b6cdf47d6d 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 28ab1b174c..013b416c94 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 8d395e56ac..a7bd2ad93c 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 a68699984b..26a8d91960 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 49367c2947..6ac6ceb287 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 9452995999..bf3393c78d 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 a16972205d..b7c4258344 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 ed6482e652..eecaa677ca 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 5dc85d39c2..c7a8694361 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 32df379c04..6667427e44 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 1ccdcc9cc2..df103628da 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 820a77146a..f3e73a11d7 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 c59199760e..bd5a61dab5 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 b596ab0de4..c0b5d43b47 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 59c2a7d1b6..52c86d7623 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 d3e8ddc839..e5ca6b4db4 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 a6df26b94c..633703e323 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 d3a2910bb4..de23dbb0bc 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 bd1ab11914..7f6f1eeacd 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 e74ff526e5..2ab41a7d23 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 88bb83505d..a32df20964 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 a980395207..17d7043175 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 f1cd1a66d8..f538f9aa3a 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 6303dc5e3a..3d52eb9b7b 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 e5f22414a7..7e292f8b5a 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 d720636a13..77d5d62c04 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 d1be3d7bcc..293935923d 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 3b3dcda18b..3fe18e7272 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 6bed85cfdc..cab8032916 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 9f5aab67ee..386ecab64e 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 0000000000..46094fe388 --- /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 0000000000..034439838b --- /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 0000000000..a749fd4a10 --- /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 15aaa3575f..695a996973 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 9e20536dfe..e54ee44e81 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 98391172fd..5fe809fdc0 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 84acac2bfc..16e80fd223 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 dfc44cb445..699f945b29 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 b795deacab..d1117d080f 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 85f8baf934..a5cd8d6e63 --- 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 99b88c54e6..9652264a83 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 45e69cbe57..4a8a6485ce 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 0bfc6f557a..7a3d298a30 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 e82dc11c83..458d029461 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 b3b8e66a8e..95582b8a1e 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 6c696b2da9..1d3acb2aa2 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 593d387537..16ee40660c 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 15c0cb0899..5eced3dd9d 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 dfe93e2484..7a601c0d62 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 749a474d1b..1ae3955613 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 a8e92ac2b5..289ddcc721 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 8df3b75877..dfc3172280 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 91cc13cb01..1545d5de32 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 4f337d98f5..194c73e76e 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 75fa35014c..dc519f0ea9 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 75975af423..ed7ca438e5 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 67c9edaa63..47981b496f 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 4115169ea7..a10b96db02 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 606b14bee0..361682a6f7 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 6d7ae283d4..733372ad78 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 69724fbdcf..0bd0ed2d31 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 4cfdb87456..a85ce48f0e 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 74e53abe9c..1f03bfa9ea 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 62c45626e9..7c73a2177b 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 1a92a7665d..0d175ce6fa 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 66a4cf593b..8bdf2371e6 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 cc5072107f..e792e68652 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 250c93cff3..a6fdb677f8 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 2e7417b6a9..33860b52c8 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 fe0f2b0732..234d9fa85c 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 2035feafa4..76a6f7ef0e 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 73d57b4f3c..6c973b8999 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 e22e4209ae..1ac3f1029b 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 9fe6b84f71..f091bf4795 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 b0b7934adb..89b63d0e34 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 63010854af..08e169f8f1 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 43762b9699..7ee79b6095 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 62b0d8e638..8add4beb3e 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 faf05f510a..f16e6b48ee 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 966cffa7ec..621ebde1ee 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 822d748238..e77761484b 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 4988ee531c..58b95a84d8 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 833609ad53..5fd1353916 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 9aa5874869..0ff4161ca8 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 07e0130eec..80b01dba57 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 3cfd93d2a5..26bf9b38cc 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 81e0273c6f..7c924ef88a 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 e7be11b4a6..b9f344975f 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 2c1f7e3999..aab5d15f51 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 5a56ef1435..e8ddd3ad75 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 d83d795af5..814fed6f65 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 131663af09..dd29bdac69 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 34fb06212f..a37dcfcbc2 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 bfcfe96848..37ca28008e 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 17a768770b..d3c9e947a4 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 fcb87791b2..7bf7def981 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 91dd5345e3..dc74563960 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 86b199bff6..b8dc30c080 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 e86cd90815..bd289c18b7 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 f67c23a2b0..5794c97b57 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 e8b88b0f58..b2b427040c 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 2b0a0639be..95786fe73d 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 e51ddbcdf1..5e057b6a9a 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 f2a2967d19..8bde85d132 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 234b25379b..d70eb55b02 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 4bc3921ab1..3428230879 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 90767f9f4e..9167fd0877 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 6a55390dbb..7561008759 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 488fb08559..902f5e84ff 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 ee8ba8d94d..674e411b6b 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 77c825e33d..6a6dd240c0 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 f77106480a..865a4669a7 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 a2a35da946..79c73ebe3a 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 87cb3c79c9..1472ea4510 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 b7398eab7f..4ae5970500 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 55aa94dc2c..83104896aa 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 ece069395c..5b770e9a9a 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 2f38c2d653..e125128ee6 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 d8bc4cc1aa..66ddd220a0 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 7de6ad443a..ed40e2b6ad 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 8514c5a80d..6ac85ac820 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 f0ef493e45..7eabad7c08 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 258f1abb47..d7538fb12b 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 91b747854c..3fc36a2e8a 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 e847debc1c..4ac39cf572 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 0107d8d792..8556ffc553 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 6070a3c4a6..8d2bddbd4f 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 d2559683fc..bfa1b61acd 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 4dda02f510..7355190865 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 c8bd888937..75fb7e2163 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 100936b5bb..5843e19c21 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 5abf1ec37f..e9ddca479d 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 3ee41bda84..a91d85e651 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 3d0e852be6..bad02518fb 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 8bfa30bebf..3339604d6e 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 ebc3c4beb1..ed8e9ddd97 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 139d4300a0..19d5ff606a 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 ce4b9ba0ed..e1457b7dfa 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 30c889960e..2374f4a7a4 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 1c704844f2..ccb7d8ae72 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 d9736ae44a..713f051be6 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 3f5f6b6fb8..164f9d8fb6 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 9b997a3928..338c5ec57f 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 dc9caae71f..0e9ec43638 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 8cabba0378..9f989cbaeb 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 07ba0a688b..10d92b574e 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 2224712182..36b0c9776a 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 5e7c8b178f..3f5b3a1c71 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 274487ba9f..ab4f4a5b77 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 e0da15e3a0..ce43182c89 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 11b001abd7..f25187afbc 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 467d484399..938ba21390 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 1880993968..e2ac20ac70 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 6e8b4f2e09..a79e951abf 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 9bebd8c096..0605403376 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 a72fde09ef..41a6bba506 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 a8b030d92e..95562bf149 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 f839fac2bb..2cec64c283 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 405e59896c..9834bedce9 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 45ef417f66..1cb555ac5c 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 5aa2e49de1..5bb137e965 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 cf9a0b86ef..4924582e0b 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 45dedaadf0..3e32006069 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 8cccdbcda7..3314434a2e 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 8457732554..f6069669a1 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 2c6194b1ac..5c99b0aade 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 033367705a..73ac21ae5e 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 43ad03333e..66cc644744 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 96a64e8a56..f9b7ef9533 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 d8d60153e7..8f9afb30f5 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 f6dcf0c614..23f09219a1 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 092a67924b..26bf51d30c 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 95c2eec22a..364abec1c9 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 83eaacb5c7..876f595e3b 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 811daa5573..34fd321e41 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 d9031b9797..7a717906a9 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 c763befdd1..6daad09f21 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 602e87d129..c0b374cc74 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 8f1c23a388..bedee2eaa2 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 cc86d6face..4725d4ca17 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 00b4507744..7426b98b31 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 22e9bc0409..22c3c0490b 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 844fdef56f..4934f65a15 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 4c8f46858f..a4a2fdd679 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 3d40b62928..9a43a68070 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 ef99f073b5..fba5e2b108 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 5e856cb311..0c8969ed94 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 5cc8e1293b..e5cc05135f 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 23b9f9ae34..6e4b6e8ec0 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 63a1a7572b..e61dea7513 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 abc5b4c3ef..50b784cfc5 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 679858f8a2..ee0d33a791 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 a48deb4ee7..fb633e58c8 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 733cfcf6fc..a8196d0fb8 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 6e3efc9cac..1eb8025c7f 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 79627fd5f5..911079b4bf 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 775726b06d..c6d3ebb42e 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 234e4c6d56..1b2e3bbc80 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 60858b7dc6..38bea2a76d 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 6484e934a6..9cb7bb4d4c 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 7bd63eec8f..0437983151 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 ecf939fba3..fd47144498 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 49d3356f4f..39e9d18ba3 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 924b83400e..0854b68828 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 3b61672bf2..f3baeee76f 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 381488563b..3a6eba7f6d 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 c1a314a662..b0425ebc16 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 48bbebed69..e7d430ccea 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 29ee233865..1a8edcc2a9 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 40cba7d8a4..dc9dcfd12c 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 434e02762d..73790bac2a 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 c542cff51d..ef04f00564 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 5791e72e39..c9ef8a6ef0 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 ee38f5848a..c7ee776a03 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 8a5825b1a2..c4705804c0 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 e0385666d9..6758632594 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 9fc151b895..a5c2202e52 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 a10b01c195..c66281eeab 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 51f9126b9d..a4e4a5f1ee 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 7d0d9cded4..46e89c3a3e 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 f33cfdce1f..f158f08345 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 e132610e1e..caa4b866f9 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 f67959c5b4..0b7a3c25ef 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 477459d7c1..feb8889ecd 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 a0bff1b197..f86e49eec6 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 216f97ce25..618f82baba 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 d285a74cc7..94c41be19e 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 f15b66cb4b..e0fa8d2c2f 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 e74c31f70f..4703816c6e 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 4c665a3d29..463541fbdd 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 8b024d73e2..86f406c622 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 9fccb5fa41..d8d148416c 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 9634feef78..ca54320d9c 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 aa8e69182b..46e115efcc 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 a818a54e48..15f42eb472 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 b7958bb4a0..05596f1f06 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 e4ec159713..626b906ab3 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 c7d22619a6..ea7f269b40 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 34d840bd21..67d25120ea 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 f23867627d..ce698260f1 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 43ed2923d2..9780f397e8 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 2d134f3950..dd9db82e18 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 109e1ba289..8d75931212 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 3a29a96eea..47eb9929b0 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 282ae87d82..2243780d32 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 4b59a7b0e9..24e4ac1dfe 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 4469b0ef4e..a81ad6469f 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 693c53f199..72a1374cb2 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 3bc742a451..5c5eb7aa4a 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 10b3034a72..55e9cde464 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 49c19de16e..f803648a4c 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 1e00bff620..15ef815a84 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 baf747583c..32347a5994 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 275f77032d..92c24ccf43 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 712a88aa76..47d6c093b8 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 9ba928aefb..cf29285e24 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 c78339b9f3..93606e4800 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 a9bef04f9c..7b53793e89 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 da18e47b97..a1fee215a3 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 0c9c8734b1..40d7241911 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 b3f193a27d..7caf2b57b9 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 1687c84798..3ecaf9f49f 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 e18c84f089..ae9d0d35cc 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 43b3556236..a792db69f4 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 a4ef979966..3284e466dc 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 f3e17f7161..a6e5332613 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 0751cbe0a6..6cb388d596 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 b42db7026f..1e97c841ec 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 1a9abaef1a..9c257f31b5 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 d723ca7f21..258c29700f 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 581ce7d952..e7f4fef2a5 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 1c574456b9..d60578d2c1 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 9f9af28663..0bbb25ff41 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 745ac1e70c..d116fd7d24 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 8a7b54aa11..2f79010dc9 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 8cdc8d16dc..70f2aca5a8 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 d3b670f960..65f832f0c8 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 abaf12c7c6..51b630e183 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 c323862793..68fd719074 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 4fd01ed5c8..dab6f8eb5b 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 585814f2c8..e68a20b3b8 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 3f7f75957e..d384f7e415 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 7dd25d396a..b538a16d53 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 23cf548d26..7837956ba3 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 50e4e2e222..5064ae471c 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 ce7ecfb530..015608e563 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 0df4e4925d..dc9538a90f 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 6347afed11..f2ad1d8e3b 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 1637e0d9f5..2aed7336de 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 423dd79a1d..c1b68c8b78 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 bf8ade7a92..132e9318c1 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 0d3590ab60..4bca9bd46e 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 066401d568..b4428e703e 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 e5ee25856f..732391d6dd 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 64d7d1a3c6..9330c799d2 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 82d8f47606..cd82c5f00b 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 2cfe4c4956..cd18e0e0b9 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 1988de4ad5..db230c2772 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 9116929605..abc01cbf60 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 4b3f2be9a4..e902b35d00 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 c4df7c5ec1..c4380420d6 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 8958c36ae4..f8557df44b 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 e071841ee6..aaa45877a9 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 e037e810f6..8a69676e29 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 b6bdb1f573..43bb6b3d99 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 a8b9d6a2b5..640b1354ed 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 39660414a6..d90dc723ad 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 0f672d33bb..3a68dc69a5 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 975c88b8e7..b7e7e3e0c1 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 6d2509e77b..887cb00b0a 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 673a97fcf8..9488ecca9e 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 0987350dfe..abf58bac2e 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 62adb58b5f..f67cefc4c6 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 8f92b9a7cd..c862ecdbb8 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 684d1027ca..697da77a08 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 12f624529b..20de6eef76 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 d83263a579..de312be013 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 7e020578cb..9ac2207474 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 cea6a39986..77b66d0bc8 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 bcb6768655..ce9f0b7af6 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 b6ab465cf8..9b962ad6b3 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 5b321634d8..d439be5498 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 47fff81976..0de2cf4d16 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 9b24f0381d..78fe35bd30 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 f26a3d9351..ffc641bee0 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 c3312c6f67..ad04284ad1 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 2afcc0f8a6..c29cbcbeae 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 a119e49882..3dd5bc3765 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 6264a92388..666eaba210 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 5bf7545ab5..7b5bc1fb26 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 cb3ec66074..4d7f073092 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 154ff57456..480b78afdc 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 78e557943d..6ac9060720 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 fc8d2924e2..7ee17ac490 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 a0568b18c8..5720108715 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 316051d01e..2fe0baeb58 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 c8fb590e07..aafe8bef34 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 e43e557335..d7ed1d2ddf 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 b58e57bba3..639813397b 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 eff3122f63..91a2aa7db2 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 7ae2fc505a..b8e336ab4e 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 caa7f7eaae..dcdaa3e919 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 2055f50079..a7d68c9f47 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 4863f5848b..55dd4d783c 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 72e97e7eb2..1a439aa03b 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 742c886d3b..13df482542 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 0a5b4ae6e8..767bc42fdd 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 58126d73d6..0c78a1cca8 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 7ea60f07b3..e744d73455 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 0d4718b6e2..75976c7856 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 6ce5833a5f..6ea6e65705 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 53d31b84b6..b8a5d76eed 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 5f20b5f2b2..4f6ca262c4 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 b79126f6ac..57b8de2196 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 c98623ee74..0fefde6aa9 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 ecd589234a..02ab539bd6 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 e59f94074f..f26d83c2ee 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 86f2a1d9a5..530b61117d 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 5fe5e2b1c9..9354c2f7fe 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 d10acbe418..54ed50e608 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 c04784ab45..b823353956 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 329a05259b..9a4c0f861c 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 fd477e6848..8912eb98a5 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 a0e872b768..444f9c0d76 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 3a1400ad75..2a7d84beca 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 c7700b34b9..55abfd143b 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 6c6eb1cd67..6459652284 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 dc4c429abb..970789ed43 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 099beb47f1..8ad55e6940 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 8670845382..94a31a3e5d 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 552e7dc15f..59995dcd6d 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 5addd46e10..1bd9f8383c 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 0a6bb61fe8..cab30ed857 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 ca999c60fb..d0ed428afb 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 49e957623c..dcce3d7c31 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 549db4e654..f4ecc2418d 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 290f52ab78..bbc1d41dc1 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 b97e103039..d18958e99c 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 e9635dd90d..0ef2b90b1f 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 6922d218df..22696f4477 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 9210ddbead..69359281d3 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 c371fe56bc..a1a11da490 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 56dc8c8b14..1155727afa 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 9091e3f647..9fdea4a2b3 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 c11b0aeb6a..692939763c 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 5223d2e803..b9f552dffc 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 6a7ba2ab93..7cc19f0142 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 08ca4fbd34..9bdbcc6460 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 0d08e83592..2d6f8c159f 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 32639f8cb8..9490c54169 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 f21515f63f..cec34cacfa 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 1aa4ac0875..5c0a2b8faa 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 ccb5502712..a57a0447c3 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 4c2a04255b..7196dd8ce3 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 7cee3df17c..874f9922c7 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 4e9310ff03..aee980f308 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 e91f02d52f..de3f13bccc 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 28158cbbe6..37dc78a597 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 2cedbb008e..03c894fd66 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 1a27d9ee7a..e70de4228c 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 5d954fdfb0..3a0f08048c 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 535593646c..a16f024f8c 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 3fe82a511b..0d49819d64 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 974d1c275f..4e34541fd2 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 27e3918033..fb38df9763 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 b12ed227df..80dce934bf 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 09307993b9..5768674a99 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 c0a1e1c6cd..442356d2c1 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 87095e312d..4aca468f32 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 597200636e..c0356203d4 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 458121ddb5..c49c51391b 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 636a754aea..d0c861594b 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 9f1f31356e..aafeb0090d 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 64028865d2..724fcc80ca 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 2468ba601a..a550b9acec 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 4e2c3e3b8c..93cd681948 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 679ab342c1..18b89a0431 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 d3ee6281c8..2c91bf9384 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 16eeadff8b..7a9b71d139 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 ac5d8735e3..dd9ec4b1e9 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 63f03d6956..d0dca9fbbe 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 a0d9ecdc06..0f1681bc79 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 738dd6ae52..fc9be9e198 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 a1f63b4ec8..5dc1605dab 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 225961686e..9657e247f3 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 c1ad732743..ae116a5f57 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 ac361de23c..a2c18166d2 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 28eb3c0e60..08116ab8e5 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 b681113e5e..992a578522 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 fb79d689bc..e59305752d 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 23f11839d9..c4e46d7cd3 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 27bf841717..11b1b764f2 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 6c6f7674e2..d8c21b3ef0 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 04b9153f8a..cca87706d2 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 84ba084a5d..8afbe0881d 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 e4da32e666..371402c625 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 7b3286e265..42cdad5082 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 1d019cfb4f..ee44c51ee1 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 b96efc392a..d1303ded6e 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 7e953d6f0a..232dd89558 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 a26449b12c..7c68d0f5c7 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 1add63eb21..4eb65919c7 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 ab3d3ed22b..2e13345015 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 83c212b7e4..8d12dbcf83 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 7fe3d2b2ae..d5f1867d65 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 3c9b6b0fa0..9c7a5c0d56 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 dbe9ad5a4f..221687db70 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 3b0f9acf24..638b0873f6 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 6a06b30e86..6b9734374c 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 206b92f1a2..40d4ee7439 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 a638a2f70f..f6fa91c72a 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 6494010931..c15d896306 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 3bec5d9aec..ee9c1bf71d 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 dc918f1d6d..48c4a79ce1 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 c00cf3adea..5abc4de08a 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 7a1aeef4f4..c4f73c1e9c 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 cda2dc234e..e09e80073a 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 c0a8b98a1c..23ab1c83aa 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 0b493a6c08..a62f0e69bd 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 d9b59a4651..f2afb009d5 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 51fa8b2661..b71b8e978d 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 72e01ad4fb..9d3787b61a 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 b58fbc9028..134b141d99 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 8b0290a4eb..a74aa059fa 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 bb746eaeb1..08137c8326 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 68e300f398..4049125ac4 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 8c01fed87b..501bc07d05 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 d950dd84f1..bbd57fff27 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 60d4717707..1384e8a361 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 61be1a0672..f86ec5cbe5 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 8b21dc9a1a..c1436edf84 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 9a4c25f44b..0fcf1dfab5 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 40a282090d..99eea7f50c 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 c7db96ca4c..e7cc88a074 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 8558f17c5f..2e279a09e1 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 6bdec4b22a..0ea28bac63 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 53271bc3ef..febf8fe45b 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 33b9e501ea..639406b8af 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 9645ebcd06..88c91348c0 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 00361ca217..c7dc326293 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 eb32779f7b..7614df769a 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 17d8a11e00..7787f0ffa3 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 1853b23d55..9050d3ae74 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 d06590ece8..c118c7cc29 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 f53c67175f..0b141d8ac9 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 b2993e379a..363281ec0b 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 c72c64293c..4e96853a08 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 7a378b086a..969b243937 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 084c706f81..cba09a6af5 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 3b6310bd57..9cd01bfebe 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 6d7ea99b97..5f59d38536 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 b40573e637..bf4302c3eb 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 177dcccedc..e4f260aa51 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 29f91b26ab..cf109871cd 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 2103683872..fa30cf4e67 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 25a2751268..089e8fe17b 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 e3f2df0ba7..14473fc1ef 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 5a0c2c2c05..03c9180935 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 e20ec7f86c..918b60a500 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 6278806698..1a22b0cd8e 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 4f3f201715..de45ee6cdb 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 0890a4bcce..33450a5e7a 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 7624334c19..1e3943ec21 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 9f79594945..be22704f44 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 21efb65d0b..334c07b38a 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 2efd8140ec..fdff9b1c2a 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 0bb7f0129c..db0c24b94e 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 04176fc47d..c5c96e6d44 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 1f5aefb07d..063cd9187c 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 7c89789747..7d1b1442b0 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 3f2e3dc30d..dee1051cad 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 bccbea6f5e..ad1536dce0 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 5148f9643c..1e84e74d36 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 5be7481098..7ca0a33c08 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 11eb187608..5aa7eed447 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 a48eb20700..f4d4e63415 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 3114d0271f..9190ff6225 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 ebd8345710..8b7970ed24 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 b8ffc0f91e..edc0e6db7e 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 a66d1f2816..df78ef77fc 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 4d7e6d594f..a718b54746 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 5e364ded05..655f4e7033 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 84ace2eba7..1a2423ae70 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 aa97322001..29a3555f18 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 7c83f7e635..16bb1e80db 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 789bbf1f63..8bfeacacf7 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 c83c4ce73e..76dbf3fdf5 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 e51bf25bfa..b346b3e1ac 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 36cda3a4d5..a59bae27e9 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 a4521ea163..9e4e8a2f55 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 0000000000..4b47ee4f16 --- /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 d20859a885..d93726a3a8 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 cc664cfec4..f7392bce1a 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 be20ded1b9..be7d803456 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 16f38739c3..f2ebbe8b5f 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 c30976e8b9..e9d53855fd 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 02bf004890..8f456dae90 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 623651863c..09371761b8 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 b68880302e..c1f007d564 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 4245978bfd..efeb41b332 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 4a5dd93ddf..09d8e501c2 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 2059006add..330f584417 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 89a0caaecb..a8a80e0f06 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 d62abf8640..0870524185 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 e3512ee7c3..03da83870b 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 3a0cd28007..aa1790f065 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 34f81e92c2..1feb8b4bdc 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 540b659fa1..346a9d8f20 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 11367eeebc..e8ef7d41ab 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 ed1900f8ac..efb1e96bb9 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 dc4965ab27..c16e1b2a20 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 c7c6a582a1..f7b252f395 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 3badb084b9..21d857a3d9 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 794bbc04a7..19ee593688 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 120177e523..d3f05e4656 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 71038395ec..c8959cf3d0 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 612aac95b0..33774f6b42 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 899c00a59f..2ef336bb3d 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 6859f79545..e3aeb072e3 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 218da6c3a8..d3dd096983 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 2c924ff17c..626cb9573f 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 5dee67b753..d57c70b27d 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 5e838317a6..cde64bed6f 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 9cc917aa50..caf9fb30a8 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 56f445a4ed..24fac09716 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 6a68cf132e..4e827d02f1 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 22369bc116..71296b2020 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 16f352b349..07de09ecc4 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 601f61ec6b..955fbac057 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 447286349d..8f81fa9e81 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 e5f253180c..c20f9a178e 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 653ee39d11..bf1d347b6c 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 feeaf10734..e620845db7 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 8296e38470..e85866fd61 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 04d3f39f39..4b884abccf 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 186c4326c8..4411bf0436 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 d7f09f480c..e913d3604f 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 905b47099f..23f11bb5f5 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 f3749ea052..9cfe976806 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 3526b30c32..e656e0ed28 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 5f9e11726c..3abf87d17f 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 4ce06aaef1..d70e76fa35 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 20319b8591..bdee3216f9 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 a4bb5a0d8a..a0ccedf102 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 d61dd371cb..dfa148634f 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 022697a744..1159864c7e 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 70d4b3c986..f564b0918e 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 c6c17e5efb..e78d58dddf 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 68ebdc7e4a..80c662e10b 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 eab7c0c560..7685321fe8 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 c3ec481e7b..53dd8af7f1 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 1b57c63807..050bca6d10 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 67bf3e1360..5488d6d87c 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 07a1c225b4..ffa004a629 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 bb8f0a57b2..d00fb5966c 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 4f663608c4..20e760a7ca 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 6cf74ea5ee..0f22e0f7e6 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 49d3a214bf..4db419686f 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 58ace32aa7..8dfd9bcf31 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 dae13fc7f5..3212e0d692 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 566667537b..ea1a00df57 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 c0e75cafbe..03cdc0df7d 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 588b85df99..cb927dd340 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 34a6840120..e5e5ace1ea 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 e14d5b963d..db57c88c25 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 086269f27a..1998b0c6d6 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 4b8c7e9a62..616cbbbf71 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 5cc6dece19..116a3b52ef 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 80032918ca..ce487eeadb 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 dda9d5a184..331e42e720 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 0433f1decb..cd246fa448 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 e855cd6e75..04fa6b8ff4 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 b48b81d0ce..527cf7cc25 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 c29bbccc6d..4d3114e501 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 96a85572c8..a49123a32b 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 f01d63a0c6..6bc730b543 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 33cb7ab1cd..6e382e3b3c 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 4129b584ee..4effadcc03 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 6b83d4ff0d..c95b5dffd2 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 e024ba937e..dd52e784aa 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 44e223b7fb..9ce524b30f 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 aa8e3e6f04..42a70c3906 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 67a4aa5492..e4c838f0c7 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 205aa72af4..50d3f72c07 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 521ad4e073..f15117f9fc 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 6ad89dc016..3766329482 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 d0081f850b..050745a50e 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 c715aea841..8ddef41d96 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 3c1279207f..4a60d96b86 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 f6d7ffe4bf..3b3d9ffdc7 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 38845457ca..07e42abfa5 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 df48628dcc..000b073f55 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 ad5fe235a8..a37ce608d5 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 9b7a5ba41d..05da2d5908 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 bf1c9ad3d7..1e06f6d9aa 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 e67e0d0b44..6359238334 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 0cb76f1fad..f9fbf895d3 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 dd9582e8b2..b6f8afac55 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 b19c08116a..d0ac75a6ae 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 501f381077..a44d5e63df 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 629ea99ba2..4e4b683d32 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 602b8f5607..d2cf531ef6 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 c976ab2870..4e31df8d8a 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 900825bdf0..898b7914c6 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 e9ef1772b7..b347fd9d1f 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 32f64a7aa8..1f95dc45da 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 2299e9d7b8..918965a81d 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 8fe9c8f4d6..4be5c28e8b 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 af9cc2473f..70518e8192 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 3787ebbcfe..c61915a606 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 29891e86b5..8a53052569 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 2a6d2bb91e..07fcb817f0 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 a9ded26d42..11e07bdf50 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 e4c8572103..33f769af19 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 90456d561f..43792c7fba 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 03fec11779..4078bb33fc 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 fa15767cbb..47d03c5f22 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 4dd547856f..c3de435dcb 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 2af42955ea..574d1659f9 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 cec0e2d6f6..31e6429226 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 371bedd764..f028d236ba 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 62a471db15..08ced58dbc 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 b7eaa0a917..edc50a7987 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 779521e8ad..3bb37c78aa 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 b4a3299e92..344af45dda 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 8d271ff5a9..13782579ac 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 a8dfc322e4..e72f15fd56 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 771d635abc..5e8df23c90 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 66423f2643..85a485caa5 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 42dcfbe9e4..596d91dd1b 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 610681ec6d..39749ef804 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 ea50eda551..fcb84b1301 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 6ac3245571..98e51413fe 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 a38157d187..23cc9a837b 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 34920bbbf2..f86bd8013f 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 837cf65bbd..9d210b2395 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 663baa8afe..fa858f34c6 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 da31c610a5..cb48958ff4 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 a12e275880..6c3255c1fa 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 2083357bd3..9ae552130a 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 caa4361486..b7f4b01dde 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 14aadb5360..74e1c6308a 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 f58f511ad6..228196fa20 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 110e43918b..9c7de6ce96 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 c2c7ebc368..990f58c84e 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 9aabab1004..fd0cd32a1e 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 1a94c13d0f..8fb3ffde3b 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 7aac205040..a4635a7e8f 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 4a52c4052b..8c8fd974f4 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 0d4289bf69..6892dde872 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 48e651f25a..3d013263df 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 bc43e3f804..61a47bdbca 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 bc7476766f..3ce50e9062 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 985b078c4f..87b625c7d0 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 e8afa5838a..b7854eeb33 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 f6778083d0..065c6576e5 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 231fb43db0..209a0c12ef 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 1c98beca04..d4534a3099 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 3e41c2c12a..26afc138a1 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 818896e476..38f5824729 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 485949e88c..11fd0d1ce7 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 ac78b3ecb5..ae37ce6a63 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 9da6fdd00b..1ceb32c51f 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 f75046cd76..2d5b2602dc 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 d2d436bd14..dbebc602cd 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 9d7a89d6d0..0fd3851443 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 e178e417cc..5b773fa049 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 e4bfb1b2fd..f123551d9f 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 9d1acb09e8..8381353fc8 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 10b87ead2e..e2246c0e04 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 d663ca7464..363e1d0691 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 00edb0c190..253fcbd284 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 56a80610d2..132f902098 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 0000000000..96c4305d2f --- /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 414f68225e..423d54ef7e 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 baea3d8c86..7a09342313 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 2a80fc01c7..2fe81eedf2 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 8a1947e8d8..609a2e4465 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 8777bc824a..670f030321 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 71442572e4..2e5fe56eba 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 f047bb29fa..0ac37b31c7 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 0000000000..fcd9708f3f --- /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 91e50b0f3e..ee87b96788 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 9eeb6a3948..61b278164c 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 0000000000..08267008b5 --- /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 0000000000..c6bdb5103b --- /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 0000000000..b58251174b --- /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 437b5ac0c5..b3f873e3f4 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 fec0b631e9..10e428ddfd 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 d9d1037bb5..c867fccfe5 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 ca214120f4..281c2fb60f 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 babfae63e7..16f57e934d 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 6740f6e57c..4295ceefdc 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 51ede4d549..c853fced28 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 d80104dbdc..6cdbbd5448 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 22b3fa6691..a6592a4d43 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 a73956f067..ef3fe54f6f 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 4cac29ac9e..739d8e3f30 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 453445c09f..392ee3a861 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 f0a3cf2db4..06a397cb86 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 51c6e11017..983331442f 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 297c72a5eb..3f9d704023 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 65016774da..45288ebb42 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 e9aa057e73..ba914fceab 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 6c41c62b29..b4cd646791 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 3168164aa0..c5f8985aab 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 0433067848..98a45379b8 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 5cedcc7e08..81041a95fa 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 4adc3598d3..42b355f3d0 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 02b6268d2c..1bca02869e 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 0e3bc09727..4c6cf0e386 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 2dfc556618..0f2ed74255 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 dbd434f20a..6bc0f2af5e 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 ce015522cb..a0c958495e 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 a37f33b79b..bb6c7c80fe 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 cc9e0566da..b163aa5ce8 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 a12e64ddb2..3d619ef038 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 2852935da9..6a1bb482be 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 9a495c81e4..32c50dc301 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 c2f4576406..d556fe7917 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 183c864a04..71b93ece6b 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 667e4fd77d..b14a991f87 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 f6f5a9eb11..d9cd06a880 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 5492bc45e7..9e115b4516 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 3785d49d79..e5a269043b 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 b8cd2225f2..ad5d1e635c 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 a36d9a5584..ef4070a37a 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 2ef1867deb..128b14159f 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 7d763dd4b0..2bae2a87e8 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 8371bc5861..391d1b0eda 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 2f58fda64f..01d2746733 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 5062307b18..916084ec82 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 4742640ec2..15c4bcadac 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 9659ddbeba..fcac8fb320 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 e6a96a8baa..453dbae1cb 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 abb1e1e5aa..f4db692f54 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 a533c16d93..82977dfc6e 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 d720fb1ffe..2ff2231c54 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 0000000000..3673eceaf6 --- /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 f56f2d9977..9c2d4f8bec 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 b23cacf128..6c759d7925 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 1d3b24a234..c51e3b2884 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 a5c21bca7d..271fdac5e2 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 5aa5a418a1..5cc66ce55c 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 d8ceac8e57..365ebc03df 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 12e595fb5c..c6b99274fb 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 54da310ecc..e439e2f725 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 cd60052a14..fcdefd2023 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 c34ccc4e55..1ac57a19e6 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 817df956dd..0c505c16a0 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 1c8c4eaa90..aeee7a0566 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 6d642fe3e4..833c19effe 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 685fd9ba30..3fc76004aa 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 14ef3fb6eb..420579af07 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 74cd81f890..60d5415517 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 e17d162c35..5635600d2e 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 b0900f28a5..e49600dac2 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 bfec1e37b4..b9a84c95e0 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 9a74d79297..11525c2ca5 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 ffe9b35a20..5cb9330e86 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 7f6f718149..fc9eaf6287 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 eb66e2b21c..fb8953ea9f 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 b2f138789f..94832e2d5c 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 c506e2aafa..e8e20764ad 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 9b90e98ba1..04f9ba641e 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 d790595901..8a9cf99e74 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 63a80e7434..7dfe594b35 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 edabc90446..555e7db6e4 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 08fd3d4dd3..4b5bf0acf5 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 f79cd1db1f..a16a1740ba 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 a22e99755e..6401f4af88 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 6e2ffe144d..6aebb568e6 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 e2dac47b16..585a8ef14a 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 e9a504004f..5192ce7585 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 9b42f7fad8..4cdbef3368 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 bd33490a83..a2e8f3e74a 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 3c605e6ede..731b545d38 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 6ffc725adf..c77237acde 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 fb4cae82b8..9bcbed6e1d 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 7802c47779..df5382746f 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 aa27d26dd6..bf556b7e59 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 b89e775cc1..7070ecb907 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 ad6bf094e5..d1afbe876d 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 0c6473c70a..ada29634f1 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 dba0c9ebe8..2f50c8c6f0 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 8473d34eea..f05e2d6d8a 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 bd825d0a6e..15e4b510ea 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 5ab5672c34..2a934e3cb7 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 991cced62a..47cfb1c033 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 9b0fdcbf07..bb715f37dd 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 a253b091c0..ca0f9a9b9f 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 3b96bfbd02..ab0a2963da 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 6a4d669999..7dd4952051 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 721855e111..df8eec7568 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 9c2eb667a5..75f3f99701 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 b54b6761ab..ecc8ebbfe3 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 526438f4df..4b89202525 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 b6233ae986..c28a634cb0 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 5d34bc6713..5b55f736b3 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 ce6c322a5e..7ee488bed5 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 dd6ba99546..62ba50b957 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 639f234d9b..b52a4253c1 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 be56cce196..c2cbd5fbfc 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 29b05579ae..d96a0c4a13 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 0000000000..0c97ae48ba --- /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 0ecf6050c2..e00add68af 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 204e5e3443..ce14ef4a12 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 27128b1760..fb07912109 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 d514351845..48fe4f47c6 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 2716dd1f67..6f8ec00b02 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 178e6bf6ab..803c923069 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 e901e0b690..cd06f99ced 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 f763e30aa0..99a77ae5a4 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 418642cb65..11a86467ec 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 34e091b52d..96b9581890 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 2c04398864..e35dec04e0 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 c0a59c88e2..53ec98edfc 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 75d8192d24..fb10018e80 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 a151280b60..62c8be3006 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 3f14a2ef5c..37ca470daf 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 022de94f5a..8e541d82a5 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 55c4df3b2b..3a9e5352d2 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 404c2de2bc..4e08841fb0 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 71669fd41e..b671052c0d 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 e16737e0d7..bc263cbf6b 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 dc94db7090..27e14889f6 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 d44f769a6b..fbee414d84 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 b052ec4189..05951a0cd7 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 d170827c93..22d406babe 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 de15a781de..7a2b8bd630 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 ec6c8c01f5..0e3c98af37 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 85f5de2142..6ad8d1a3ff 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 f933272725..e5fd68b1ff 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 f33e742964..04a57bff87 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 a32117b3e1..64a0b3c7e0 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 9340b3b720..d3da629242 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 7eab69c7be..b09b329d85 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 c18c712a93..fa22234dd9 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 dd25ee7af3..2d51e3aab5 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 6dc726dc8a..30636948db 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 87b942dc5a..7086ad63cf 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 bd67838321..34314fd746 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 2236affdcd..15efa0dcc8 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 00feba2c01..cb6c0a270c 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 557c8c0893..1e73800069 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 abf3df00de..333b313d2a 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 881f194200..1949673f63 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 7485c508c6..36d6dce987 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 7cb31fe1d5..bcb9a0cb54 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 9c47029c9b..745f10bd19 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 dfbce6582c..f9c0c33b0e 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 af01c623c4..284c8ea29f 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 e3e8d4f001..3d7f5d2524 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 ab3722d0fa..71e3d6b904 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 ba13a1b915..a5de6fed67 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 6eb89355c9..4573d62650 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 d06ad033cd..f427db9d19 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 268f0874c1..a59798c162 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 4b7fb0b7dd..447def0fa8 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 66a663e93b..595ce92a9d 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 2e49450d4e..041ebe62cb 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 c7ee465233..03390cbaed 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 e4747a8d2b..104e2a44f0 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 60c35a9c22..67ceb628f4 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 d4a2aab0cd..a8be7756a7 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 b147f996de..94761e319d 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 2f40345796..acea08f6bc 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 450955bfd5..8cd6c17ea8 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 def183c010..5a0021e40a 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 4eb62381f2..cfaaeda2b1 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 3fc8598217..70da3871c8 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 b1708533b7..36f570df60 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 03c63ec456..45372c1ae4 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 4898d6308c..c121abc7da 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 7efeb499af..f31750ba8a 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 027725ff58..451e302d58 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 a372bf871d..86efc7bd96 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 5c4daf3a94..aafe6023e6 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 8b0520df03..820e8087b3 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 cf5aae7b2f..01c1e43cd1 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 e67fef5f6e..7a1d9b3711 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 4418bce80c..7dae97a0e3 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 0c0e7b1578..5ddd6c30a5 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 3b9378e6c8..6926aa8bfb 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 11747973d6..9aecca6eaf 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 e8987d5d86..20ed57e99a 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 c3bdde207d..0816c5b9bc 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 7630989d4c..e78bf04812 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 1d21b34965..e9e9306691 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 f4e770b3aa..ce2a9e911f 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 49b124f0d3..bd419d8711 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 54743ad179..112a175e9f 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 22aba4bfda..32c3fe1a33 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 e0ca07424a..542ced9213 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 811d3b5b21..e05491edce 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 8592a8d364..a1a3f8de84 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 4dc8778762..88d257bc9c 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 89d58c442c..cd5dd6ad7b 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 05277f11d6..3f13154fb0 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 a8b29405c5..436b22e879 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 a8557538a8..8c4c755418 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 e4070ef164..fb040d2c65 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 70f73c5b2f..d08d6e37f0 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 cff85e2928..d338a24290 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 58942efa59..e20cced41f 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 a10cb899c9..e833334670 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 422049a920..7a231e78d6 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 22ea6081b9..ea74bbf593 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 9f3f4c09e0..9c2799650f 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 5f3a8f41ea..066e6e9a9b 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 54ad27ccc2..c436a853c2 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 e862b28449..a60e19bad0 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 4260edc42c..b7aa1d34c8 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 97679be0ed..cb8c618e55 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 68a0f9ef41..d8abd0a8b3 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 e32c258e35..ec9538601d 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 fc45ebb241..c445c4ed76 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 b07d41cb42..2044cf98b3 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 b1f6d72041..734fadba57 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 4b526add88..7c67264e72 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 34735609db..310d601fee 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 01a6e1a4bd..93d779e878 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 7640e9ae12..b12e53636d 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 dc6f7ce790..d7363b6302 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 0000000000..1ad8182c28 --- /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 4e2411bf92..616c1631bb 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 a0ae5ddbc7..9b729ccd20 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 0000000000..6f1c66a513 --- /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 a8e0b9175f..5b0893fd1c 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 c75d6ff0d9..7fbdaeda40 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 a9b843b24b..49b664e715 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 7bb2c73edb..46114a21e3 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 0000000000..91c54bfd0c --- /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 aa17bc2123..a3ed44e63f 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 c973041e87..62f0c60a68 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 dc4f1ebdcc..1d6b097070 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 1f2e174412..528ddfbcb3 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":";;;;;;;;;;;;;;;;;;AAAA,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7C,CAAC,GAAG,CAAC,MAAM,EAAE;;ACDb,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS;AACxF,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;AACrG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ;AACrG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7E,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AACzF,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC;AAC1D,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;AAChB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ;AACtB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;AACpB,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;AAC1B,CAAC,EAAE;AACH,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;AAChB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACV,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrB,IAAI,SAAS,CAAC,CAAC,CAAC;AAChB,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE;AAChC,QAAQ,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE;AACnC,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE;AAC7B,QAAQ,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE;AACvC,QAAQ,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnC,QAAQ,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE;AACrC,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,EAAE;AAC5C,QAAQ,mBAAmB,CAAC,CAAC,CAAC,uBAAuB,EAAE;AACvD,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC;AACxB,QAAQ,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE;AAChC,IAAI,EAAE;AACN,IAAI,UAAU,CAAC,CAAC,IAAI;AACpB,EAAE;AACF,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;AAChB;AACA,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;AACjG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AACzB,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS;AAC1E,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;AACnG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE;AAC3F,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS;AAC3F,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE;AAC1D,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACrE,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa;AAC3B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnD,CAAC,EAAE;AACH,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK;AACxC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AACvB;AACA,IAAI,QAAQ,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACrB,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC;AACrD,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;AAChC,YAAY,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;AAClC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,CAAC;AACZ,QAAQ,GAAG;AACX,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpF,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AACtB,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACrC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AACrD,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AAC7B,SAAS,EAAE;AACX,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAoB,MAAM,CAAC,IAAI,CAAC;AAChC,gBAAgB,CAAC;AACjB,YAAY,CAAC;AACb,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG;AACX,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AACxF,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AACtG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACrC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AACrD,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI;AAC7C,SAAS,EAAE;AACX,QAAQ,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,YAAY,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE;AAChD,YAAY,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACzC,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG;AACX,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AAC7F,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AACtG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AAC7B,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACrC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AACrD,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI;AAC7C,SAAS,EAAE;AACX,QAAQ,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,YAAY,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE;AAChD,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;AAC9E,oBAAoB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,oBAAoB,KAAK,CAAC;AAC1B,gBAAgB,CAAC;AACjB,YAAY,CAAC;AACb,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG;AACX,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7E,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACxB,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACrC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;AAC3C,SAAS,EAAE;AACX,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxB,gBAAgB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;AACxC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,SAAS,CAAC,CAAC,CAAC,GAAG;AAC/B,YAAY,CAAC;AACb,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG;AACX,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAClE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjF,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACvB,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACrC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI;AAC7C,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;AACnC,SAAS,EAAE;AACX,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,YAAY,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE;AAChD,YAAY,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;AACpC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN,KAAK;AACL;AACA,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AAChF,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AAC9F,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AAC7C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI;AACrC,CAAC,EAAE;AACH,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,IAAI,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AAC5C,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AACrF,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AAC9F,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC1B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AAC7C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI;AACrC,CAAC,EAAE;AACH,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,IAAI,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AAC9C,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5E,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACnB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AAC7C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACrB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE;AACvC,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACrE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB;AAC9B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;AACnC,CAAC,EAAE;AACH,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE;AAClC,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;AACrG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACpE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACpB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE;AAC9C,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG;AAC9B,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACrG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnF,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE;AAC9C,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B,YAAY,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG;AAC9B,QAAQ,CAAC;AACT,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;AAClG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACpB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE;AAC9C,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;AAC7B,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK;AACpG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ;AACtG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAChB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACpB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE;AAC9C,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;AAC7B,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;AACzG,CAAC,CAAC,CAAC,WAAW,CAAC;AACf,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB;AAC7B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAClB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;AACjB,CAAC,EAAE;AACH,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B;AACA,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO;AACxE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM;AACnG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI;AAChG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY;AACrE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU;AAC1D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;AAChG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK;AACzC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI;AAC7F,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC;AACxC,CAAC,EAAE;AACH,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,QAAQ,MAAM,CAAC,SAAS,CAAC;AACzB,IAAI,CAAC;AACL;AACA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE;AACvC;AACA,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACjC,IAAI,CAAC;AACL,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,CAAC,CAAC;AACb,EAAE;AACF;AACA,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACpD,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjB,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnE,QAAQ,EAAE;AACV,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,EAAE;AACV,IAAI,CAAC;AACL,EAAE;AACF;AACA,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ;AAC1C,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,QAAQ,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;AAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,QAAQ,UAAU;AAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACvC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,oBAAoB,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9C,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACb,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;AACd;AACA,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG;AAC9E,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM;AAClE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AACxD,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7G,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACxE,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;AACzD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AACjC,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACtG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO;AACnG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;AACvG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/F,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACzG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACxE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACjC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG;AAC9B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;AACnB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;AACjB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;AAChB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACb,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;AACjB,GAAG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AACnG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK;AACzG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AACpC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;AAClG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5C,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AACxB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACxE,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AAChD,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;AACrE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AAClD,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG;AACvC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;AAC5B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC9C,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE;AAClD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACjC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AAChC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9B,IAAI,MAAM,CAAC,EAAE,CAAC;AACd,EAAE;AACF;AACA,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;AACd,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,EAAE;AACF,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AACxB,EAAE;AACF,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,EAAE;AACF;AACA,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACzD,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE;AAC7C,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC/C,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACpC,EAAE;AACF;AACA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5B,QAAQ,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;AAC7B,IAAI,CAAC;AACL,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,IAAI,MAAM,CAAC,EAAE,CAAC;AACd,EAAE;AACF;AACA,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;AACvD,EAAE;;ACzbF,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;AACf;AACA,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE;AAClD;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACxB;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjC,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,EAAE;AACN,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;AACrC,EAAE;AACF,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;AAC/D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;AAChE;AACA,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAC/C,EAAE;AACF;AACA,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;AACzF,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC;AACxF;AACA,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAC/C,EAAE;AACF;AACA,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;AACxF,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC;;AC3BtF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACpC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AACnB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC,CAAC,EAAE;AACH,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AAC3C;AACA,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ;AACtB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACb,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;AACjB;AACA,GAAG;AACH,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO;AACrC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AACf;AACA,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtB,QAAQ,CAAC;AACT,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG;AAC5C,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,CAAC,CAAC;AACb,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5C,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACjB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM;AAC5C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AACf;AACA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;AACrH,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG;AACzD,YAAY,CAAC;AACb,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE;AAClD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,CAAC,CAAC;AACb,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ;AACrH,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC9E,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AAChB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAC9B,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC1C,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,GAAG;AACN,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC,SAAS,EAAE;AAClD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;AACtB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACb,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7C,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;AAC1D,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACb,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;AACd;AACA,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC3B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACxB;AACA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE;AAClC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7C,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnB,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE;AACtD,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC/B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,CAAC,CAAC;AACb,EAAE;AACF,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG;AACrD;AACA,GAAG;AACH,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;AACtC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AACd,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,IAAI;AACR,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG;AACjF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM;AACpD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK;AAC5D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG;AAC9C,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE;AACnG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS;AAC1B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI;AAC/B,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAQ,CAAC;AACT,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;AACvB,QAAQ,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACpC,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACnE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,IAAI;AACR,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG;AACjF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM;AACpD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK;AAC5D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG;AAC9C,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE;AACnG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS;AAC1B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI;AAC/B,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAQ,CAAC;AACT,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;AACvB,QAAQ,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACpC,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACnE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,CAAC;AACL,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACzB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACrB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACxB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACrB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrC,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;AAC3B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACrB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrC,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;AACnC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AACvB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACrB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE;AAChH,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AAChB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AACnB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AACnB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AACnB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;AACjB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;AACrD,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9D,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,CAAC,EAAE,UAAU,CAAC;AACxB,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AACvB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI;AAC1E,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAChD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AACzB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM;AAC/B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ;AAC3B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC1B,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AACrC,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACrB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC,EAAE;AACH,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;;AC1S7E,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;AACf;AACA,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC;AACA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;AAC9B,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;AAC7B,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AACrB,EAAE;AACF;AACA,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;AAC/B,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;AAC7B,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AACrB,EAAE;AACF;AACA,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW;AACnC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACtB,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;AAChC,YAAY,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AACzC,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,UAAU,CAAC;AACtB,EAAE;;ACvCF,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,OAAO,CAAC,CAAC,IAAI;AACjB,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM;AACvG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO;AACtG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;AAC/F,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;AACvB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;AACvD,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG;AACpC,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK;AAChF,CAAC,CAAC,SAAS,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI;AAChD,CAAC,CAAC,KAAK,GAAG;AACV,CAAC,CAAC,CAAC,EAAE;AACL,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO;AAC5B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACjB,QAAQ,OAAO,GAAG;AAClB,QAAQ,MAAM,CAAC;AACf,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC;AACA,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,IAAI,EAAE,CAAC,KAAK,EAAE;AACd,EAAE;;ACpCF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACnG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;AACtG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;AAC/F,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7B,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE;AACrG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACzG,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;AACxE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM;AAChF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW;AACrF,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO;AAChG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AACzD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO;AACrB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACb,CAAC,EAAE;AACH,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AAChB;AACA,GAAG;AACH,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/E,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;AACrC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY;AACrB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG;AACtB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AACvB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,CAAC,CAAC,CAAC,CAAC,WAAW;AACf,CAAC,EAAE;AACH,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACrC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AACnD,IAAI,EAAE;AACN,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;AACtC;AACA,IAAI,MAAM,CAAC,KAAK,CAAC;AACjB,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;AACpG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG;AAC5G,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE;AAC7D,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC;AAC7C,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB;AAC7B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,CAAC,CAAC,CAAC,CAAC,WAAW;AACf,CAAC,EAAE;AACH,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC;AACA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnB,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC3D,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACtD,IAAI,EAAE;AACN,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE;AAC1C;AACA,IAAI,MAAM,CAAC,CAAC,CAAC;AACb,EAAE;AACF;AACA,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;AAC5F,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnG,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;AACnG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;AAChG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAChF,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACrG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC,CAAC,CAAC,EAAE,EAAE;AACP,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,0BAA0B,CAAC;AACnD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B;AACnC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM;AACvC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG;AAClC,CAAC,CAAC,CAAC,CAAC,WAAW;AACf,CAAC,EAAE;AACH,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC;AACA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnB,IAAI,GAAG,CAAC,cAAc,CAAC;AACvB;AACA,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,QAAQ,cAAc,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;AACzF,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG;AACxF,QAAQ,EAAE;AACV,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAQ,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG;AACzE,IAAI,CAAC;AACL;AACA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB;AACA,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;AACrC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACvE,eAAe,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;AACrE,IAAI,EAAE;AACN,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,0BAA0B,EAAE;AAChD;AACA,IAAI,MAAM,CAAC,CAAC,CAAC;AACb,EAAE;;ACxHF,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;AACzF,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS;AAC9G,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAClE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG;AAC5C;AACA,IAAI,GAAG,CAAC,UAAU,CAAC;AACnB,IAAI,GAAG,CAAC,MAAM,CAAC;AACf;AACA,IAAI,GAAG,CAAC,OAAO,CAAC;AAChB,IAAI,GAAG,CAAC,KAAK,CAAC;AACd,IAAI,GAAG,CAAC,IAAI,CAAC;AACb,IAAI,GAAG,CAAC,QAAQ,CAAC;AACjB;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACxB,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;AACtG,QAAQ,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,IAAI,EAAE;AACN,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACvC;AACA,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;AACzB,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,GAAG,MAAM,CAAC;AACxG,QAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AACrE,IAAI,EAAE;AACN,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACzC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AACxB,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC;AACpC;AACA,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG;AACvC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG;AAC3C,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG;AACjC;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG;AACpC,IAAI,GAAG,CAAC,UAAU,CAAC;AACnB;AACA,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE;AAC1E,IAAI,EAAE;AACN,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC;AACA,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC;AAClC;AACA,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC7C;AACA,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG;AACtD;AACA,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC;AACvD;AACA,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACjC,QAAQ,CAAC,SAAS,EAAE;AACpB,QAAQ,CAAC,UAAU,EAAE;AACrB,QAAQ,CAAC,SAAS,EAAE;AACpB,QAAQ,CAAC,UAAU,EAAE;AACrB,QAAQ,CAAC,QAAQ,EAAE;AACnB,QAAQ,CAAC,MAAM,EAAE;AACjB,QAAQ,CAAC,SAAS,EAAE;AACpB,QAAQ,CAAC,aAAa,GAAG;AACzB;AACA,IAAI,GAAG,CAAC,OAAO,CAAC;AAChB,IAAI,GAAG,CAAC,cAAc,CAAC;AACvB;AACA,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;AACtB,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,YAAY,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;AACnC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACpE,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;AAC3D,YAAY,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG;AAC9C,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;AACtF,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;AACxC,YAAY,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG;AAC9C,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1D,oBAAoB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE;AAC5C,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,wBAAwB,MAAM,CAAC,IAAI,CAAC;AACpC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,wBAAwB,MAAM,CAAC,IAAI,CAAC;AACpC,oBAAoB,CAAC;AACrB,gBAAgB,CAAC;AACjB,gBAAgB,MAAM,CAAC,KAAK,CAAC;AAC7B,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;AAC3B,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACnB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;AACjF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;AAC9F,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC;AACpD,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM;AACxB,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACxC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,GAAG,MAAM,CAAC;AAC3G,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG;AACtF,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7D,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;AACpH,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;AAC9E,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,gBAAgB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;AACtC,gBAAgB,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI;AACpD,YAAY,CAAC;AACb,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE;AAC/D,QAAQ,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAClD,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK;AACvB,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;AACzG,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG;AACjF,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7C,gBAAgB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;AACtC,gBAAgB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI;AAClD,YAAY,CAAC;AACb,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE;AAC5D,QAAQ,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;AACzG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;AAC1G,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;AACnD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;AAChC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE;AACtG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACnG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;AAChG,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;AAC/F,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACjE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG;AACnG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAChG,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ;AAC5E,KAAK,CAAC,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE;AACzD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAClD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC/D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,mBAAmB,CAAC;AACvC,QAAQ,CAAC;AACT,QAAQ,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACjD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC3F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AAC5G,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AACjH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK;AACnC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI;AACxD,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;AACpD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,WAAW,GAAG;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtG,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;AACvC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;AACjG,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACpF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ;AAC/B,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG;AAC5D,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG;AAC7D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;AAChC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAC9C,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE;AACrC,QAAQ,MAAM,CAAC,WAAW,GAAG;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACtE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;AAChH,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACtH,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACpD,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACpH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK;AACnC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI;AACxD,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;AAClC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,KAAK;AAC7D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,QAAQ,MAAM,CAAC,WAAW,GAAG;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI;AAC1E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;AAClH,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACrE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ;AACnC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI;AACxC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;AAClC,QAAQ,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE;AACzD,QAAQ,MAAM,CAAC,WAAW,GAAG;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACrC;AACA,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,YAAY,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1B,YAAY,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE;AAC7D,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxD,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC/F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG;AACtD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACnC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,SAAS,CAAC;AACjB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACnG,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC;AAC5G,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;AAC/B,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7F,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACnG,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC;AAClH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC3E,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM;AAC7F,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;AAC1H,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK;AACpG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;AACpG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;AAC/F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;AACvD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG;AACtC,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG;AAClC,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS;AACzE,gBAAgB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG;AACxC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,YAAY,CAAC;AACb,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;AACvC,YAAY,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;AAC1D,YAAY,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AACjD,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG;AAC/E,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACxB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG;AAChC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,YAAY,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI;AACtC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG;AAC7C,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;AACtG,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC7G,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AAC5F,KAAK,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;AAC5F,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC;AAC1C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;AAC5B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;AACjG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;AACpG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACxD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;AAC1F,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACpD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;AACtD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACxC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;AACzF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;AAC1F,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;AAC5B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG;AACtC,QAAQ,MAAM,CAAC,WAAW,GAAG;AAC7B,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnB,YAAY,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACvC,gBAAgB,IAAI;AACpB,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG;AAClD,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI;AACrD,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;AAC/C,gBAAgB,IAAI;AACpB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI;AACtF,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,GAAG;AAC3C,QAAQ,OAAO,GAAG;AAClB,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK;AACpG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;AACpG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,EAAE;AACvF,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AACxG,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACtF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;AAC5E,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;AAChF,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM;AAC9E,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG;AACjF,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC7D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM;AACnG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB;AACpC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,sBAAsB,CAAC;AAC1C,QAAQ,CAAC;AACT,QAAQ,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;AAC3F,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAClG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI;AACrG,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;AACtG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;AAChG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACtF,YAAY,MAAM,CAAC,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AAC9D,YAAY,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACtG,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC;AAC9D,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACtF,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC3E,YAAY,MAAM,CAAC,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;AAC/D,YAAY,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI;AACtF,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC9F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,mBAAmB,CAAC;AACvC,QAAQ,CAAC;AACT,QAAQ,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,oBAAoB,CAAC;AACxC,QAAQ,CAAC;AACT,QAAQ,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AACzC,YAAY,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,gBAAgB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK;AACtE,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE;AACnG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS;AACtG,KAAK,CAAC,CAAC,SAAS,CAAC;AACjB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjC,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW;AAC1D,QAAQ,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;AACrC;AACA,QAAQ,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACnC,YAAY,oBAAoB,CAAC,OAAO,CAAC,2BAA2B,EAAE;AACtE,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG;AACxC;AACA,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,YAAY,OAAO,CAAC,MAAM,GAAG;AAC7B,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,mBAAmB,EAAE,UAAU,GAAG;AACjD;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,QAAQ,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,YAAY,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG;AACnG,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,oBAAoB,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;AACjD,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,wBAAwB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AAClD,oBAAoB,CAAC;AACrB,gBAAgB,GAAG;AACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;AACzC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxB,gBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AAC1C,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;AAClG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5F,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACnG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;AAC7C,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,GAAG;AAC9G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjC,QAAQ,OAAO,GAAG;AAClB,QAAQ,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;AACrC;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG;AACxC;AACA,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,YAAY,OAAO,CAAC,MAAM,GAAG;AAC7B,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,mBAAmB,EAAE,UAAU,GAAG;AACjD;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrG,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACnG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS;AAC1G,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;AAC5F,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,IAAI;AAC1F,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7B,YAAY,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AACvC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI;AACtD,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI;AAC9C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG;AAC1F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7B,YAAY,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AACvC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI;AACtD,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI;AAC9C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9B,YAAY,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AAC3C,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChD,QAAQ,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAChE,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAC1I,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;AACpC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1D,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AACnE,KAAK,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,KAAK,CAAC,KAAK,GAAG;AACd,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC;AACxB,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC3D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC7C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzG,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG;AAC1C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACzB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AACnD,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAClD,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,gBAAgB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrC,gBAAgB,KAAK,CAAC;AACtB,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;AACvC,KAAK,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACxC,KAAK,CAAC,aAAa,KAAK,CAAC;AACzB,KAAK,CAAC,SAAS,CAAC;AAChB,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,KAAK,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACjE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,oBAAoB,CAAC;AACxC,QAAQ,CAAC;AACT,QAAQ,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACnD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AAC7B,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO;AACtG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;AACvG,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AACxB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;AACpC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1D,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AAChC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC3D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC7C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,QAAQ,MAAM,CAAC,GAAG;AAClB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACrG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/F,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9D,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;AACvC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3B,KAAK,CAAC,KAAK,MAAM,CAAC,GAAG;AACrB,KAAK,CAAC,CAAC,CAAC;AACR,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,KAAK,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC/D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,mBAAmB,CAAC;AACvC,QAAQ,CAAC;AACT,QAAQ,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACjD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9D,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE;AACjE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrB,gBAAgB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7B,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;AAClG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAClE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,QAAQ,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE;AACjD,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS;AAClG,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AAChB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AACxD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;AAC7F,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9F,KAAK,CAAC,CAAC,OAAO;AACd,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE;AACtF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG;AAC5E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,MAAM;AACnE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,GAAG;AAC5F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE;AAChG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;AACnD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AACjE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;AAClG,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACpF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;AAChG,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;AAClG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;AAC5F,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;AAC9E,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE;AACzF,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI;AACjG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;AACxE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AACtE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC;AAC5D,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACnC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG;AAC9B,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAChC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE;AACxB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;AACnC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK;AAChD,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACxF,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;AACnG,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG;AACpD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1F,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;AACjC,YAAY,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,oBAAoB,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC/D,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC5D,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,YAAY,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE;AACnD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACrD,gBAAgB,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAChE,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC7D,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE;AACzC,QAAQ,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE;AAC/C;AACA,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACnD,YAAY,MAAM,CAAC,cAAc,GAAG;AACpC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,eAAe,GAAG;AACrC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AAClG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;AACtG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI;AAC1B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,QAAQ,CAAC;AACxB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;AAChE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;AACnE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE;AACjE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;AAClE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE;AACjE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;AACnE,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACtG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACvF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;AACvB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE;AACjD,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM;AACtG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;AACpG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;AAC/H,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACvF,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;AAC/E,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC/C,KAAK,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;AACtC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACvE,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;AAC9D,KAAK,CAAC,SAAS,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG;AACjD,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;AACzF,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;AAC3C,KAAK,CAAC,SAAS,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG;AACjD,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACnB,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO;AACnE,KAAK,CAAC,SAAS,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7D,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE;AAC/C,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AACvE,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC;AACvC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC;AACvC,KAAK,CAAC,iBAAiB,CAAC;AACxB,KAAK,CAAC,aAAa,CAAC;AACpB,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC;AAChC,KAAK,CAAC,SAAS,GAAG;AAClB,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;AAC/B,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AACvD,KAAK,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,KAAK,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE;AACvC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK;AAC5E,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,QAAQ,MAAM,CAAC,GAAG;AAClB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AAClE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ;AAC9B,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AACxD,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS;AACrE,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG;AAClE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG;AACnG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;AAC7F,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;AACxB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;AAChC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;AAC5D,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS;AACvE,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG;AAC3E,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;AACtG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK;AACrG,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC3F,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;AACtG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;AACpD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AAClD,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW;AACjG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;AACnH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;AAC/B,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3D,YAAY,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS;AAClC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;AAC3G,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AACrG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACpG,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO;AACvG,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACnD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;AACnE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW;AACjG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;AACpC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3F,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI;AAClG,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,KAAK,CAAC;AACb,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO;AACrG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;AAClG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC1F,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACtE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAChE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;AAC/E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,UAAU;AAClB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAChE,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC7C,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY;AAC/C,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG;AACxD,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;AACtG,KAAK,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI;AAC5C,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,iBAAiB;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACzE,QAAQ,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,iBAAiB,EAAE;AACzE,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,GAAG,CAAC,iBAAiB,IAAI;AACnH;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AACnG,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACzF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxB,YAAY,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AACpD,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxB,YAAY,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AAClD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM;AAC/F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC;AAC5G,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACjF,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AACnE,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;AACvG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AACnE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACzB,QAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACpD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACxB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AACjC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACtG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACrF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG;AAC/D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;AACvB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAY,CAAC,MAAM,EAAE;AACrB,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,UAAU,EAAE;AACzB,YAAY,CAAC,UAAU,EAAE;AACzB,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,QAAQ,EAAE;AACvB,YAAY,CAAC,cAAc,CAAC;AAC5B,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnD,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,oBAAoB,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG;AACrD,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG;AACpD,gBAAgB,CAAC;AACjB,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACxE,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;AAC9D,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG;AACrH,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACxG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;AACrF,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;AACrF,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS;AAC3F,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;AACzG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;AACrF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AACjB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO;AACrD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO;AACzD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,OAAO;AAC7C,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,OAAO;AAC9C,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,OAAO;AAC7C,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,OAAO;AAC9C,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO;AACpD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO;AAClD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK;AAC5B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ;AACjC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5C,QAAQ,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AC9hDF,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI;AACtG,CAAC,CAAC,CAAC,MAAM,CAAC;AACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;AACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,CAAC,EAAE;AACH,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AAC7D;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO;AAC9D,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AAC/H,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC;AAC3F,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AAC/E,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;AAChF,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AC1CF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO;AAC7F,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;AACrD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC3B,CAAC,EAAE;AACH,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG;AACzC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE;AAC1E;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK;AACrC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI;AAC5C,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK;AACvB,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,KAAK;AACtE,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;AAC/C,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI;AACnD,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AAC5B,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,IAAI;AAC7D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG;AAC5D,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,YAAY,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;AAC/H,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE;AAC7C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACnD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;AACrH,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACjB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG;AAC1D,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;AAC9C,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,6BAA6B,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,GAAG;AAC9D,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAClG,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAC/F,KAAK,CAAC,CAAC,QAAQ,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;AAC5C,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;AACjD,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS;AAChE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG;AAC5D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AACpB,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAQ,MAAM,CAAC,gBAAgB,CAAC;AAChC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACtG,KAAK,CAAC,CAAC,KAAK,CAAC;AACb,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACnD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC;AAC7C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG;AACpC,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;AAC3E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AACnF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB;AACnC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI;AACvE,yBAAyB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK;AACxE,QAAQ,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACxB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AACxD,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG;AAC/E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AACtD,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,GAAG;AACnG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AAC5F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7E,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC;AAC1C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG;AACxH;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AC5KF,GAAG;AACH,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK;AAClG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACtE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB;AAC5B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACpC,CAAC,EAAE;AACH,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACtC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACxC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACpC,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5C,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5C,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC;AACA,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI;AACjE;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI;AACzC,IAAI,MAAM,CAAC,oBAAoB,GAAG,IAAI,EAAE,CAAC,GAAG;AAC5C,IAAI,GAAG,CAAC,OAAO,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC;AACX,IAAI,GAAG,CAAC,WAAW,CAAC;AACpB;AACA,IAAI,GAAG,CAAC,EAAE,CAAC;AACX,IAAI,GAAG,CAAC,gBAAgB,CAAC;AACzB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,GAAG;AAChD,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;AACpC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAClC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,IAAI,GAAG,CAAC,WAAW,CAAC;AACpB,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,YAAY,CAAC;AACrB;AACA,IAAI,GAAG,CAAC,EAAE,CAAC;AACX,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG;AAC9C,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,IAAI,GAAG,CAAC,WAAW,CAAC;AACpB,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG;AAChC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACxB,IAAI,GAAG,CAAC,MAAM,CAAC;AACf;AACA,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC;AACxC;AACA,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,IAAI,GAAG,CAAC,UAAU,CAAC;AACnB;AACA,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC;AACA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3D,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACxD,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC;AACA,IAAI,GAAG,CAAC,WAAW,CAAC;AACpB,IAAI,GAAG,CAAC,WAAW,CAAC;AACpB;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB;AACA,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ;AACnG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AACnG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE;AACpC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,SAAS,CAAC;AACzB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS;AACtG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;AACrG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AACvG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AACpD,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;AACnG,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACvB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AACpG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC;AACnD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACnD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;AACzD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC;AAC3D,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACzD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACnC,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG;AACnC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7B,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE;AACtD;AACA,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG;AACjC;AACA,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;AAChE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;AACxG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,KAAK;AAC5E;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC;AAClB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AACvG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACnD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC/F,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;AAC5B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACxD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;AAChH,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;AACtG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACjC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG;AACvD,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;AACrD,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI;AACtF,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACjD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACpB,QAAQ,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG;AACvC,QAAQ,MAAM,CAAC,OAAO,GAAG;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,gBAAgB,CAAC;AAChC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AACtG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;AACrG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS;AAC3F,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;AACxC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM;AAC5H,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG;AACvG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;AACnC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;AAClC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM;AACrC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;AACpC,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;AAC7F,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO;AAC1B,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM;AAChE,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AACzC,KAAK,CAAC,CAAC,EAAE;AACT,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK;AACrB,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC1F,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC;AACxB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;AACnD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACjD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI;AACvG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;AACtG,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5D,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC5F,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;AAChG,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK;AAC9G,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACvG,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;AAC/D,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AACpD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,GAAG;AAClE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACpD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;AACvG,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AACpF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACvG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9D,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AAChG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;AAC3G,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG;AACzG,KAAK,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACtD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC3G,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;AACpG,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AAC/B,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG;AAC1G,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG;AAC3C,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAC/C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC/F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE;AACpD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACxB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACvC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,IAAI;AAC7G;AACA,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,gBAAgB,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1C,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;AACnC,YAAY,CAAC;AACb,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,UAAU,CAAC;AAC1B,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjG,KAAK,CAAC,CAAC,KAAK,CAAC;AACb,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK;AAC7G,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACvG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AACzB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACpD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,IAAI;AACjE,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI;AAChD,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AACvD,YAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG;AAC5H,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AAClC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK;AAClE,YAAY,CAAC;AACb,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;AACtC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI;AACpD,YAAY,CAAC;AACb,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG;AAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,YAAY,MAAM,CAAC,OAAO,GAAG;AAC7B,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B;AACA,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,iBAAiB,CAAC;AACvE,0BAA0B,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE;AAClF,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK;AAChD,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI;AAC1C;AACA,QAAQ,uBAAuB,CAAC,CAAC,EAAE;AACnC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;AACrC;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;AAClC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AACxC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK;AACxG,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,EAAE;AAC9D,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;AACtD,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;AACvC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC;AAClD,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5G,sBAAsB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;AACnE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAC/C,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;AAC7E,YAAY,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI;AAC/C,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACpF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;AACnG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACtF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxG,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK;AAChE,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;AACxD;AACA,QAAQ,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACtC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AACpC,gBAAgB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE;AACzD,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AAC1E,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;AAChH,YAAY,CAAC;AACb;AACA,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AACnE,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI;AACjG;AACA,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE;AACnD,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE;AAC7B;AACA,YAAY,EAAE,CAAC,KAAK;AACpB,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AAC3C,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACjC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;AACpE,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACjC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9B,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACpC,YAAY,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAC7F,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACpC;AACA,YAAY,EAAE,CAAC,MAAM;AACrB,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACvF,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACjC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;AACpE,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACjC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;AAC/B;AACA,YAAY,EAAE,CAAC,IAAI;AACnB,YAAY,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG;AAClC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,SAAS,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG;AACjD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE;AAC3D,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG;AACvC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC1G,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACxB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAChC,QAAQ,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACtD,QAAQ,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5F,QAAQ,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACtD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpD,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACnC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG;AACvC,YAAY,CAAC;AACb,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,gBAAgB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,UAAU,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG;AACxE,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG;AAC5C,QAAQ,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;AAClC;AACA,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG;AACnC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;AAChE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AACpF,QAAQ,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,kBAAkB,CAAC;AAC9D;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG;AACpG,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,YAAY,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE;AAChD,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;AACvH,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AAC/E,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAC9C,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE;AAC5B,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,YAAY,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACtF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;AACpH,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;AAC3C,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;AAC/F,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACpF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;AAC1F,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AACxB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG;AACzG,QAAQ,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;AACxD,QAAQ,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACxG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,QAAQ,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE;AACnF,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;AAC1D;AACA,QAAQ,EAAE,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACxC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG;AAC7F;AACA,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AACpC,gBAAgB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE;AACzD,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC5E,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;AAChH,YAAY,CAAC;AACb;AACA,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE;AACnD,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE;AAC7B;AACA,YAAY,EAAE,CAAC,KAAK;AACpB,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AAC3C,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9B,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACpC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG;AACjD,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACpC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACpC,YAAY,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAC7F,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACpC;AACA,YAAY,EAAE,CAAC,MAAM;AACrB,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACvF,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9B,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACpC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG;AACjD,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACpC,gBAAgB,GAAG;AACnB;AACA,YAAY,EAAE,CAAC,IAAI;AACnB,YAAY,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG;AAClC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,SAAS,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG;AACjD,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AACxG,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG;AACvG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACnB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAC/C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAChC,QAAQ,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACpD,QAAQ,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5F,QAAQ,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACpD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;AAC7G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACjD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACpB,QAAQ,MAAM,CAAC,OAAO,GAAG;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM;AACrG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;AACrG,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG;AAClH,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;AAClC,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC5F,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK;AAC9G,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACvG,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;AAC/D,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AACpD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG;AAChE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACpD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;AACvG,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AACpF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,yBAAyB;AACxC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACzD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC7E,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,yBAAyB,CAAC;AAC7C,QAAQ,CAAC;AACT,QAAQ,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAC9D,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,uBAAuB;AACtC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACvD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACzE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,uBAAuB,CAAC;AAC3C,QAAQ,CAAC;AACT,QAAQ,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;AAC1D,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;AAC5F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;AACnB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AAC3C,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,iBAAiB,EAAE;AACxE,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;AAC5F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;AACnB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AAC3C,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,iBAAiB,EAAE;AACnE,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;AAC5F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;AACnB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE;AAC7C,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE;AACrD,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;AAC5F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;AACnB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE;AAC7C,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE;AAChD,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9E,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AAChG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AACtE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAC/C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG;AACxC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AAChG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;AACtF,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AAC7B,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACxC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB,CAAC;AACjD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,sBAAsB,CAAC;AAC1C,QAAQ,CAAC;AACT,QAAQ,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG;AACpC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AAC1B;AACA,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,EAAE;AACrC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG;AACnC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;AACvD,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvB,YAAY,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;AACjD,YAAY,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE;AAC9D,YAAY,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,kBAAkB,EAAE;AACtD;AACA,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;AACtC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACvC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;AAC3G,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK;AAC5C,YAAY,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;AAC5C,YAAY,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE;AAC1C;AACA,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACrC,gBAAgB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC7C,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,QAAQ,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACtF,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE;AAChC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,WAAW,IAAI;AAC3C,QAAQ,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE;AACxC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE;AAChD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG;AACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE;AACtD,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE;AACtD;AACA,YAAY,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE;AAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG;AAC7C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;AACnE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AAC1C;AACA,QAAQ,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;AACtC;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACpC,gBAAgB,MAAM,CAAC,WAAW,GAAG;AACrC,YAAY,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE;AACzC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG;AAC7E;AACA,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,gBAAgB,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE;AACnD,gBAAgB,MAAM,CAAC,WAAW,GAAG;AACrC,YAAY,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE;AACzC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AAC5D,gBAAgB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI;AACvD,YAAY,CAAC;AACb;AACA,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI;AACzI,YAAY,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACtC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG;AACpC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,KAAK;AACxD,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ;AAC9D,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO;AACxC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9B,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;AAC1E,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;AACtG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAC/C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG;AAC5D,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC9E,QAAQ,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW;AACpE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG;AACjC,QAAQ,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AAC/F;AACA,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC;AACA,QAAQ,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;AACtD,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3D,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK;AAC1F,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;AAC5C;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B;AACA,QAAQ,MAAM,CAAC,eAAe,GAAG;AACjC;AACA,QAAQ,MAAM,CAAC,UAAU,GAAG;AAC5B,QAAQ,gBAAgB,GAAG;AAC3B;AACA,QAAQ,SAAS,CAAC,IAAI,EAAE;AACxB;AACA,QAAQ,kBAAkB,GAAG;AAC7B;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,eAAe,GAAG;AACjC;AACA,QAAQ,SAAS,CAAC,KAAK,EAAE;AACzB,QAAQ,gBAAgB,GAAG;AAC3B;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,QAAQ,CAAC;AACT;AACA,QAAQ,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE;AACzC,QAAQ,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI;AACzC;AACA,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI;AAC3C,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI;AAC3C,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,YAAY,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;AAClD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE;AACtD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC,QAAQ,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,gBAAgB,GAAG;AACtC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC3C,YAAY,MAAM,CAAC,iBAAiB,GAAG;AACvC,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAQ,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG;AAC3B,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC;AACpC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI;AACpD,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,IAAI;AACnD,QAAQ,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AAClC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5C,QAAQ,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AACtC,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAQ,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1B,QAAQ,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/B,YAAY,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC9C,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9B,gBAAgB,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI;AACpF,YAAY,CAAC;AACb,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE;AAC/E,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9B,gBAAgB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE;AAC/C,YAAY,CAAC;AACb,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG;AACzC,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG;AACtE;AACA,QAAQ,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE;AACxC,QAAQ,MAAM,CAAC,OAAO,GAAG;AACzB,QAAQ,MAAM,CAAC,MAAM,GAAG;AACxB;AACA,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;AACjF,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,gBAAgB,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE;AACrD,gBAAgB,WAAW,CAAC,MAAM,GAAG;AACrC,YAAY,GAAG;AACf,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,qBAAqB,GAAG;AACvC;AACA,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE;AACrC;AACA,QAAQ,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE;AAC5D,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACrD,YAAY,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG;AACxD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI;AACxE,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,YAAY,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK;AACzG,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,YAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG;AAC9G,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI;AACtG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;AACrG,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9F,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;AAC3D,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG;AACxC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK;AACrF,KAAK,CAAC,UAAU,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI;AACrD,KAAK,CAAC,KAAK,GAAG;AACd,KAAK,CAAC,CAAC,EAAE;AACT,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;AACtC,YAAY,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE;AACrC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE;AAChD,QAAQ,CAAC;AACT;AACA,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AAC5B,QAAQ,WAAW,GAAG;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,UAAU,CAAC;AAC1B,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,gBAAgB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,oBAAoB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,IAAI;AAC1E,gBAAgB,GAAG;AACnB,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;AAC5E,gBAAgB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,oBAAoB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI;AACtD,gBAAgB,GAAG;AACnB,YAAY,CAAC;AACb,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AACjE,YAAY,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AAC1D,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;AACjG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;AACrG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ;AACrG,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACrE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB;AACvC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAQ,CAAC;AACT,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AC/yCF,GAAG;AACH,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AACnG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC3B,CAAC,EAAE;AACH,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9C,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,GAAG;AACnE,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACpD,QAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAY,MAAM,CAAC,CAAC;AACpB,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9C,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3D,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,gBAAgB,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,gBAAgB,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM;AACpC,YAAY,EAAE;AACd,QAAQ,GAAG;AACX;AACA,QAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI;AAC3D,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAC5B,IAAI,CAAC;AACL;AACA,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;AACxC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/B;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;AACpB,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AACrB;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;AACnC;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAChD,YAAY,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;AACpC,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG;AAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG;AACxB,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE;AAC9C,YAAY,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChC,gBAAgB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,YAAY,EAAE;AACd,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AAChD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC;AAC1B,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3E,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;AAC7F,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;AACxG,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACpH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;AAC5C,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;AACjC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;AAC3C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI;AACpE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK;AACvC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC;AACnG,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAY,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;AAC3B;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG;AACnC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG;AACpB,QAAQ,OAAO,CAAC,CAAC,CAAC,GAAG;AACrB,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3B,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE;AACpC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACnC,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5E,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;AACnE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;AACxD,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;AACzB,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACxD,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAC/D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE;AAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,YAAY,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACxD,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAC/D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE;AAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,YAAY,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,GAAG;AAChE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,QAAQ,GAAG;AACX;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI;AAC7D;AACA,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,QAAQ,GAAG;AACX;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI;AACxD,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG;AACpF,QAAQ,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;AAC1D,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;AACxD,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI;AACxF,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;AACxD,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI;AACnF,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACpH,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3H,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AACzH,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACtE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS;AACvH,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;AACnD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/C,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;AAClF,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,KAAK,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG;AAC7D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACtE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG;AACnC,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;AAC5C,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrF,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;AAChD,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClD,YAAY,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG;AACzD,QAAQ,CAAC;AACT;AACA,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AAC3C;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;AAC5F,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1G,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AAChD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AACnE,YAAY,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;AACjG,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK;AACpG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/E,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AAChG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC;AAC/E,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AACvF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB;AAChC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,kBAAkB,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;AACjE,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI;AACxD,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE;AACzD,QAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI;AACjD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAY,MAAM,CAAC,CAAC;AACpB,gBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC;AAC9B,gBAAgB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,gBAAgB,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;AAC9C,gBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnE,YAAY,EAAE;AACd,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5C,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,gBAAgB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;AACzC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;AACzC,YAAY,CAAC;AACb,YAAY,EAAE,MAAM,CAAC,MAAM,GAAG;AAC9B,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;ACnVF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;AACtG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AACtB,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;AACrG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG;AACrG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AAClG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;AACjB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AAChC;AACA,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;AACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AACzB,IAAI,GAAG;AACP;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI;AACrE,YAAY,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI;AAC3D,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG;AACrC,gBAAgB,MAAM,CAAC,CAAC,QAAQ,CAAC;AACjC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AAC1C,gBAAgB,KAAK,CAAC,CAAC,YAAY;AACnC,YAAY,IAAI;AAChB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,QAAQ,CAAC;AACxB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5C,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ;AAC9E,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS;AAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,IAAI;AAC7D,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1C,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ;AACtF;AACA,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvB,gBAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACjC,oBAAoB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7C,oBAAoB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACjD,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;AACjE,oBAAoB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACjD,oBAAoB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;AAC/C,gBAAgB,CAAC;AACjB,YAAY,CAAC;AACb;AACA,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AACjC,gBAAgB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnD,YAAY,CAAC;AACb,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC3F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACnG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE;AAC7F,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;AACxD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG;AAClG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACvF,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;AACnG,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AACtD,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;AAC/D,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACnD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,IAAI;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACjG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAChG,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;AAChG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AAC9F,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM;AACrE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACrB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;AAC7E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,SAAS;AACxF,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;AAC5E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE;AACvC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK;AACrG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxF,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACjG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;AAC5B,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACjC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;AAChC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3D,KAAK,CAAC,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI;AACxE,KAAK,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI;AAC9D,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,KAAK,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG;AACxC,KAAK,CAAC,aAAa,MAAM,CAAC,CAAC,QAAQ,CAAC;AACpC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AAC7C,KAAK,CAAC,aAAa,KAAK,CAAC,CAAC,YAAY;AACtC,KAAK,CAAC,SAAS,IAAI;AACnB,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC;AAC3B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACvD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AACtC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC3B,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AClMF,GAAG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACzG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;AACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK;AACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;AACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,CAAC,EAAE;AACH,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B;AACA,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACtC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACnC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B;AACA,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE;AACnC;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;AAC7B;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG;AAC/B,QAAQ,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9B,YAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;AAC5D,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC9D,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG;AACvG,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,GAAG;AACP;AACA,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;AAChD;AACA,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;AAC3E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;AACtI,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;AAC/E,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI;AACjG,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AACtG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACrG,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;AACvG,KAAK,CAAC,CAAC,IAAI,CAAC;AACZ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACjE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,eAAe,CAAC;AACnC,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC9C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE;AACnD,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,GAAG,CAAC;AACnB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE;AACnD,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,GAAG,CAAC;AACnB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE;AACpD,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE;AAClC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AACjC,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE;AACzD,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG;AACpD;AACA,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,gBAAgB,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AACnD,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAClD,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE;AACvC,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;AACjD,YAAY,CAAC;AACb;AACA,YAAY,KAAK;AACjB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACnC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC;AAC1D,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE;AACrC,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACvF,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE;AAC/C,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AACpD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC;AAC1D,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE;AACrC,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACxF,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE;AAC/C,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AACjC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG;AAC1C;AACA,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,gBAAgB,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AACtD,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClD,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9F,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;AACxC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AACvD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,eAAe,CAAC;AACnC,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;AACtG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,mBAAmB,CAAC;AACvC,QAAQ,CAAC;AACT,QAAQ,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;AACrC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM;AACrG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB;AACpC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,sBAAsB,CAAC;AAC1C,QAAQ,CAAC;AACT,QAAQ,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC9C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,oBAAoB,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACnD,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAChD,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChF,gBAAgB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAC5C,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AACvC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3B,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AC9RF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG;AACvG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;AAClG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;AACpC,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC7F,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG;AACjD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AAChE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C,IAAI,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;AACrC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;AACrC,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;AAChD,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;AAChD,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AACvC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC9B;AACA,IAAI,GAAG,CAAC,OAAO,CAAC;AAChB,QAAQ,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG;AACjD,QAAQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,QAAQ,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC;AACA,IAAI,GAAG,CAAC,EAAE,CAAC;AACX,IAAI,GAAG,CAAC,GAAG,CAAC;AACZ,IAAI,GAAG,CAAC,GAAG,CAAC;AACZ,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,2BAA2B,CAAC;AACxD,IAAI,GAAG,CAAC,oBAAoB,CAAC;AAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3B,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,OAAO;AAC9D;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,EAAE;AACnD;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE;AAClF,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC5G,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;AAC9G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAClC;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE;AAC3C,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;AAC7B;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;AACnC,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC9B;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B;AACA,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AACzB,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;AACrF;AACA,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,mBAAmB,EAAE;AAC1D,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,mBAAmB,EAAE;AAC1D;AACA,QAAQ,SAAS,GAAG;AACpB;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AACpF,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,QAAQ,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF;AACA,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG;AAC9B;AACA,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG;AAC9B,QAAQ,GAAG,CAAC,OAAO,CAAC;AACpB,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG;AAC7B,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;AAC5D,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;AACzC,YAAY,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE;AAC9C,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ;AAC1D,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ;AACrE,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK;AACjF,YAAY,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;AAC7C,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjB,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC9D,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AACjD,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE;AAC/B;AACA,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC9D,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AACpD,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE;AAC/B;AACA,YAAY,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;AACzD;AACA,YAAY,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AACzC;AACA,YAAY,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAC3C;AACA,YAAY,eAAe,GAAG;AAC9B;AACA,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACpF,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;AACzF,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE;AACnD;AACA,QAAQ,eAAe,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE;AAC1C;AACA,QAAQ,YAAY,CAAC,WAAW,EAAE;AAClC;AACA,QAAQ,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAC3C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;AAChC,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,YAAY,GAAG;AACf,QAAQ,MAAM,CAAC,WAAW,CAAC;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE;AAClD,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;AAC/B,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AACjC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC1C,YAAY,GAAG;AACf;AACA,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI;AACzG,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACnC,YAAY,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;AAChD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,WAAW,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE;AAC9C,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,QAAQ,MAAM;AACd,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,gBAAgB,EAAE,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AACxF,oBAAoB,MAAM,CAAC,GAAG;AAC9B,gBAAgB,CAAC;AACjB,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE;AAC9C,YAAY,GAAG;AACf,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,QAAQ,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;AACvC,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACpF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,gBAAgB,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC7C,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAC3C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE;AAC3C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;AACpC,gBAAgB,CAAC,KAAK,EAAE;AACxB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,oBAAoB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,oBAAoB,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC/C,wBAAwB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC/C,oBAAoB,CAAC;AACrB,oBAAoB,MAAM,CAAC,OAAO,CAAC;AACnC,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AACrC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,oBAAoB,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5C,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,oBAAoB,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC7C,gBAAgB,GAAG;AACnB,YAAY,cAAc,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE;AAC7C,YAAY,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,gBAAgB,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAC/C,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AACjE,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE;AAC/B;AACA,QAAQ,QAAQ;AAChB,gBAAgB,CAAC,KAAK,EAAE;AACxB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE;AACnC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,oBAAoB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AACnE,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AACrC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,oBAAoB,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5C,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,oBAAoB,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC7C,gBAAgB,GAAG;AACnB;AACA,QAAQ,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG;AACjC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;AAC/B,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACrF,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,EAAE;AAC/D,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI;AACxG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU;AAC9E,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACnC,YAAY,UAAU;AACtB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,oBAAoB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,oBAAoB,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC3F,oBAAoB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACjE,oBAAoB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE;AACnD,oBAAoB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,wBAAwB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE;AAChD,wBAAwB,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG;AACrE,oBAAoB,EAAE;AACtB,gBAAgB,GAAG;AACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,gBAAgB,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG;AAC3D,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AAC7E,QAAQ,GAAG;AACX;AACA,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,QAAQ,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AACvC,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AACnC,QAAQ,YAAY,CAAC,OAAO,EAAE;AAC9B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AAC5D,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AAC3B,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC1C,YAAY,GAAG;AACf,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI;AAC1G,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACnC,YAAY,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;AAChD,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACtC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AAC/D,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE;AAC/B,YAAY,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;AACxC,YAAY,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,gBAAgB,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAC/C,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AAC/C,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE;AAChC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAoB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE;AAClD,gBAAgB,GAAG;AACnB,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG;AAC/B,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG;AAC/B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,gBAAgB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,oBAAoB,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACnD,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAChD,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtE,gBAAgB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAC5C,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACpE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB;AACpC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAChD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACrE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,sBAAsB,CAAC;AAC1C,QAAQ,CAAC;AACT,QAAQ,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACvD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;AACnG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC;AACzE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AACjB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAChD,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC;AACzE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AACjB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACjD,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAQ,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;AAC3B,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;AAC1D,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE;AACvC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,GAAG;AAClE,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,SAAS,GAAG;AACpB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AACtG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC3D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC7C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAQ,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE;AAC5E,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAChD,QAAQ,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACzD,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AACnC,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACnD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;AAChF,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnF,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC3C,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7B,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI;AACjD,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChF,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC1C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAClD,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACtC,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;AAC7D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACrE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AAC5E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC5D,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,oBAAoB,CAAC;AACxC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACzC,YAAY,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACvD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;AACxE,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,QAAQ,GAAG,CAAC,QAAQ,CAAC;AACrB,QAAQ,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACnC,YAAY,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;AACnC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACrF,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACrF,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC7B,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE;AACvC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG;AACpC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;AACjD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,YAAY,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC3F,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,4BAA4B,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC9C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,4BAA4B,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC/C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG;AACxD,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,4BAA4B,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACrE,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,gBAAgB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,WAAW,EAAE;AAClE,YAAY,CAAC;AACb,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACtlBF,GAAG;AACH,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;AAC/C,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC7F,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG;AACjD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AAChE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC5C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACzE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AACrH,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG;AAC9F,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM;AAC9F,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,MAAM;AAC3D;AACA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACxC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3B,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;AACnC;AACA,IAAI,GAAG,CAAC,SAAS,CAAC;AAClB;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChD,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B,QAAQ,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,GAAG;AACP;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAClE,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,IAAI;AAC/E,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG;AAChC,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,IAAI,EAAE,CAAC,KAAK,EAAE;AACd;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE;AAC7D,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;AACjC;AACA,QAAQ,iBAAiB,GAAG;AAC5B;AACA,QAAQ,MAAM;AACd,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,GAAG;AACf;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACxC;AACA,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACpC;AACA,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,gBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1C,YAAY,CAAC;AACb,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;AACxF,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;AACrD,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;AAC3C;AACA,QAAQ,MAAM,CAAC,KAAK,EAAE;AACtB,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AAC3B,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;AACtC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAC3C;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;AAC/C,YAAY,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG;AAC7C,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACpF,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACxC,gBAAgB,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAClC,oBAAoB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAgB,CAAC;AACjB,gBAAgB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;AAC9C,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC/C;AACA,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,oBAAoB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;AACtC,gBAAgB,CAAC;AACjB;AACA,gBAAgB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE;AAC9D,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AACzC,YAAY,GAAG;AACf;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,YAAY,CAAC,MAAM,GAAG;AACtB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC9C,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;AAC3C;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAChC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AAC3B,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;AACjC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC5D,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG;AAC5C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;AAC/B;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;AAC/E,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;AAC7C,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAClF,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACxC,gBAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACjC,oBAAoB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAgB,CAAC;AACjB,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/D,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAgB,CAAC;AACjB,gBAAgB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;AAC9C,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC/C;AACA,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,oBAAoB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;AACtC,gBAAgB,CAAC;AACjB;AACA,gBAAgB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;AAC9C,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC;AACrC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,gBAAgB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;AACpC,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC5D,YAAY,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;AAC1E;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACzF,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AAChE,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAY,CAAC,MAAM,GAAG;AACtB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG;AACnD;AACA,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AACpE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3D,gBAAgB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,IAAI;AAC/D,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,gBAAgB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;AAC1G,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE;AACxG,YAAY,CAAC;AACb;AACA,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1F,gBAAgB,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;AAC1C,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,GAAG;AAC7D,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG;AAC7C;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACrC,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,oBAAoB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AACjD,gBAAgB,GAAG;AACnB,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,oBAAoB,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,gBAAgB,GAAG;AACnB,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE;AACjE,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;AACnE,YAAY,CAAC;AACb,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACtC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACpC;AACA,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,oBAAoB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrD,gBAAgB,GAAG;AACnB,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;AACnE,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAClG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE;AAChC,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC;AAClH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,iBAAiB,GAAG;AAC9C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE;AAC7C,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9G,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC;AACxD;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS;AACnG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa;AACjG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACnB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG;AAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACpE,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE;AACtD,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE;AACtD;AACA,YAAY,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,KAAK,EAAE;AAChD,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG;AACrD,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK;AACrF,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC5E,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;AAC/F,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AAC5F,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AACpD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB;AAChC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAChE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,kBAAkB,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACvC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACpD,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACxC,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,YAAY,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC5C,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE;AAC3D,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;AAChE,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACxC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC;AACxC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;AACvC,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjD,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG;AACnC,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;AACjD,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AACvB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,GAAG,CAAC;AACnB,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACjXF,GAAG;AACH,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;AAC3C,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC9F,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,GAAG;AAClD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AACjE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE;AAC7C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACzE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AACrH,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;AAC/F,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM;AAC9F,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE;AACvC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACjC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACvC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACvC,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,MAAM;AAC3D,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACxC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACpD,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACtD,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AAChC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI,GAAG,CAAC,QAAQ,CAAC;AACjB,IAAI,GAAG,CAAC,UAAU,CAAC;AACnB,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;AACnC,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC9B,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE;AAChC;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG;AAC5C,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG;AAC1D;AACA,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG;AAC3E,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;AACzE;AACA,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;AAChC,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,GAAG;AACf;AACA,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AACtC;AACA,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AACtC;AACA,QAAQ,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AACpC;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,UAAU,CAAC,MAAM,EAAE;AAC/B,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;AAC/F,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AACtE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG;AAChI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;AAC7H,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACjI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACjI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AACrF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG;AACxH,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;AACrH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACjI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACjI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAQ,CAAC;AACT,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC9F,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5F,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AACjC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACpH,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK;AAC7F,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG;AAC/E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACzH,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAQ,CAAC;AACT,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AACxG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;AAC1B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAChH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AACnC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,IAAI;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;AAC5C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;AAClG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AACpD,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;AAChC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,gBAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACvC,YAAY,EAAE;AACd,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,gBAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC9C,YAAY,EAAE;AACd,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC;AACtC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvB,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnC,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE;AAC7C,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE;AAClC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE;AACpC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,YAAY,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE;AACtD,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACxG,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE;AAC7B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;AACnC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG;AAC7C,YAAY,GAAG;AACf,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1B,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;AACpC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC3C,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAClD,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE;AAC5C,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC;AAC1C,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvC,YAAY,CAAC;AACb;AACA,YAAY,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE;AACtC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE;AACtC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC;AACrC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAoB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG;AACjD,gBAAgB,GAAG;AACnB;AACA,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAC5G,gBAAgB,GAAG,IAAI,EAAE,MAAM,EAAE;AACjC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC;AACrC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAoB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG;AACjD,gBAAgB,GAAG;AACnB,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;AACzF,YAAY,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;AAC7D,YAAY,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;AACrE;AACA,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACnC,gBAAgB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,gBAAgB,EAAE;AACjF,YAAY,CAAC;AACb;AACA,YAAY,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAClD,gBAAgB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/B,oBAAoB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AACrD,gBAAgB,CAAC;AACjB;AACA,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACpF,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAChG,gBAAgB,CAAC;AACjB;AACA,gBAAgB,cAAc,CAAC,CAAC,EAAE;AAClC;AACA,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACpE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;AACjD;AACA,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE;AACrC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC;AACpD,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,YAAY,GAAG;AAC9C,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;AACjE,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,uBAAuB,CAAC;AACrE,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClD,wBAAwB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AAClD,wBAAwB,OAAO,CAAC,GAAG,EAAE;AACrC,wBAAwB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC7C,oBAAoB,EAAE;AACtB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjD,wBAAwB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AAClD,wBAAwB,OAAO,CAAC,GAAG,EAAE;AACrC,wBAAwB,YAAY,CAAC,CAAC,EAAE;AACxC,oBAAoB,GAAG;AACvB;AACA,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AAC1C;AACA,gBAAgB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG;AAChE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,wBAAwB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AACpE,oBAAoB,EAAE;AACtB,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,wBAAwB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG;AAC3E,oBAAoB,EAAE;AACtB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;AACnD;AACA,gBAAgB,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG;AACrC,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACrD,IAAI,EAAE,CAAC,KAAK,EAAE;AACd;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACxC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC1D,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;AAC/C;AACA,YAAY,MAAM,CAAC,KAAK,EAAE;AAC1B,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AAC3C,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAC/C;AACA,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG;AAC9D,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAoB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAChE,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AACnE,oBAAoB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;AAClD,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAoB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AAC7C,gBAAgB,GAAG;AACnB;AACA,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG;AACrE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAClC,gBAAgB,CAAC,MAAM,GAAG;AAC1B,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,YAAY,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE;AAC9G,QAAQ,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAC1E;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,YAAY,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE;AAC9G,QAAQ,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAC1E,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,QAAQ,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACzC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE;AAClC,QAAQ,MAAM,CAAC,GAAG,CAAC;AACnB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG;AAC/B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG;AAC/B,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE;AAChE,QAAQ,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3E,QAAQ,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE;AAChG,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE;AAChG,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAQ,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,CAAC;AAC9C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,QAAQ,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;AACxD,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,uBAAuB,CAAC;AAC7D,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,YAAY,IAAI;AACvC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG;AAC3E,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG;AAC3E,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG;AACzC,YAAY,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;AAC7E,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;AACzG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC/E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;AACzD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACtD,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChF,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AACzI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;AAC3F,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,CAAC;AACpB,gBAAgB,WAAW,CAAC,CAAC,qBAAqB,CAAC;AACnD,gBAAgB,aAAa,CAAC,CAAC,uBAAuB,CAAC;AACvD,gBAAgB,MAAM,CAAC,CAAC,gBAAgB;AACxC,YAAY,EAAE;AACd,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9B,YAAY,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACxD,YAAY,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC1D,YAAY,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,YAAY,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,YAAY,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,QAAQ,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACvC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACzD,gBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,oBAAoB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAChF,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACxC,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,YAAY,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACxD,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;AACxE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;AAC7E,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACpD,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC;AACxC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;AACvC,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpD,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG;AAChD,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1B,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACrC,YAAY,MAAM,CAAC,CAAC,CAAC;AACrB,QAAQ,GAAG;AACX,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACnfF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;AACrG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AACzG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AAC3F,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO;AAC7C,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;AACvE,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/F,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;AAC5E,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3C,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE;AAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG;AAC5B,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;AACjC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;AACtB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACnB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG;AACxC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK;AAClC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI;AACpC;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;AACrG,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC5E,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ;AAC5D,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ;AACjE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;AACrB,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACzE,KAAK,CAAC,CAAC,EAAE;AACT,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;AACpD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;AACzD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1B,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACpF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;AAClG,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG;AAC7C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG;AAC5C,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG;AACzC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE;AACrC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE;AAC1C;AACA,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,YAAY,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,GAAG;AAC1G,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,GAAG;AAC3G,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;AACvD,YAAY,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7D,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG;AAClC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;AC3GF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;AAC9F,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC1H,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI;AACrH,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACjF,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE;AAChH,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;AAC9F,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO;AAC7F,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC;AACnE,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AACjH,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1G,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;AACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC1B,CAAC,EAAE;AACH,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;AAC3C,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;AACvC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;AAC7C,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;AAC3C,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;AACzC;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK;AAClC;AACA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACnB,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;AACtB,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,EAAE;AACN,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,GAAG,CAAC,SAAS,CAAC;AAClB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG;AAC3C;AACA,QAAQ,UAAU,CAAC,YAAY,IAAI;AACnC;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,QAAQ,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3C,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ;AAChE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;AACzE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtF,gBAAgB,CAAC;AACjB,eAAe,EAAE;AACjB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc;AAC1D,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AACpC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5D,QAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1C,gBAAgB,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,iBAAiB,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACxE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,UAAU;AACrB,QAAQ,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACtD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AAC1B,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;AACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM;AACxC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC5C,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG;AACnD,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,IAAI;AACtD,gBAAgB,CAAC;AACjB,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE;AACvD,QAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK;AACjF,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAChF,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACrE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG;AACvF,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE;AACtF,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAQ,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,QAAQ,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,YAAY,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG;AACtE,QAAQ,GAAG;AACX;AACA,QAAQ,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AAC7B,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK;AAC/B,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG;AAC5D,YAAY,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG;AAC1C,YAAY,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG;AAClC;AACA,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC1B,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG;AAC1D,YAAY,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,EAAE,GAAG;AACzC,YAAY,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG;AACpC;AACA,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;AACxC,YAAY,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE;AAClD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAY,QAAQ,CAAC,KAAK,GAAG,MAAM,EAAE,EAAE,GAAG;AAC1C,YAAY,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG;AACrC;AACA,YAAY,QAAQ;AACpB,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC;AAC9C,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,wBAAwB,MAAM,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG;AACjE;AACA,oBAAoB,GAAG;AACvB,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE;AACrD,YAAY,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAgB,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AAC/C,YAAY,GAAG;AACf;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;AAC7B,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,MAAM,EAAE,KAAK,GAAG;AAC7B;AACA,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,YAAY,QAAQ;AACpB,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE;AAC7B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;AAC/C,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE;AACjC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;AACnD,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrD,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,wBAAwB,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AACvD,oBAAoB,GAAG;AACvB,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG;AAC/B;AACA,QAAQ,MAAM,CAAC,QAAQ,CAAC;AACxB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAQ,GAAG,CAAC,OAAO,CAAC;AACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE;AACvD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE;AACpD,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;AACxB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG;AAChC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAgB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG;AACtD,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG;AAC9C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;AACjC,YAAY,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AAC7C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAChC,YAAY,GAAG;AACf;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AACnC,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE;AACzB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,aAAa,EAAE;AAC1C;AACA,QAAQ,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE;AACjC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAoB,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7D,gBAAgB,GAAG;AACnB,QAAQ,GAAG;AACX;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG;AAC7B;AACA,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG;AAClC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAChG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;AAC7H,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK;AAChD,KAAK,CAAC,CAAC,KAAK;AACZ,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAClD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAChG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;AAC/F,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC1D,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;AACjG;AACA,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;AAC3G,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AAC/F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG;AAChG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1H,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS;AACnG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;AACpG,KAAK,CAAC,CAAC,OAAO,CAAC;AACf,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACjC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AAC1C,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AAC1C,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3C,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAClE,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAChG,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9D,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACjC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,aAAa;AACnF,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG;AAC5B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;AAC5B,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;AAC/B,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,aAAa,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACzD,KAAK,CAAC,SAAS,CAAC;AAChB,KAAK,CAAC,KAAK,EAAE;AACb,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,aAAa;AACrF,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;AACtF,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACjC,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7B,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,KAAK,CAAC,KAAK,EAAE;AACb,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7B,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACpE,KAAK,CAAC,KAAK,EAAE;AACb,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;AAC9B,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACrE,KAAK,CAAC,KAAK,EAAE;AACb,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;AAC/B,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9E,KAAK,CAAC,KAAK,EAAE;AACb,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;AAC/B,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,KAAK,CAAC,KAAK,CAAC;AACZ,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC,GAAG;AACvF,KAAK,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK;AACnG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;AACtF,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;AAClG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;AAC9F,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;AACjG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;AACzB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAI;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC;AAC/C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAQ,CAAC;AACT,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AACrF,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;AAC1F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9G,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC;AAChH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7F,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK;AACZ,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE;AAClC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE;AACnC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;AC3aF,GAAG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS;AAChF,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACtD,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACzI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;AACzH,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5D,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;AAClG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;AAC1C,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;AACxC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;AAC1C,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;AACvC;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK;AAClC;AACA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK;AAC1D,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;AAC/G,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,EAAE;AACN,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9B,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnC;AACA,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChG,YAAY,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;AACpD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,MAAM,GAAG;AAC3D;AACA,QAAQ,WAAW,CAAC,YAAY,IAAI;AACpC;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AACrE,gBAAgB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,oBAAoB,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AACnD,gBAAgB,GAAG;AACnB;AACA,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;AAC9B,gBAAgB,CAAC,KAAK,EAAE;AACxB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;AAC9B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE;AAC/C;AACA,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,YAAY,SAAS;AACrB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAoB,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE;AACzC,gBAAgB,GAAG;AACnB,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG;AAC/B,QAAQ,MAAM,CAAC,SAAS,CAAC;AACzB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE;AACpD;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;AACxB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG;AAChC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAgB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG;AACtD,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG;AAC9C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;AAClC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AACnD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAoB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACpC,gBAAgB,GAAG;AACnB;AACA,QAAQ,KAAK,CAAC,KAAK,EAAE;AACrB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;AAC1B,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC;AAC1C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,YAAY,GAAG;AACf;AACA,QAAQ,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG;AAC9B;AACA,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG;AAClC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAC/F,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;AAC7H,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK;AAChD,KAAK,CAAC,CAAC,KAAK;AACZ,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAClD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAChG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACvC,KAAK,EAAE;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9G,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AACxG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChF,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACjF,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,MAAM,IAAI,CAAC,aAAa,IAAI,GAAG,MAAM;AACrH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK;AACxG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI;AACvF,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;AACzD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9G,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC;AAChH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;AC5PF,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;AACvG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;AACpB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;AACpB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AAClB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AACV,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW;AACrB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAChG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG;AAC1D,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AACzE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,CAAC,EAAE;AACH,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,mBAAmB,MAAM;AAC5D;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;AACnC;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC9B;AACA,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;AACtE,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,qBAAqB,GAAG;AACvC,QAAQ,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,KAAK;AACrG;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG;AACjC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACpF,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;AACtC,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI;AAC7C,YAAY,OAAO,CAAC,KAAK,GAAG;AAC5B,QAAQ,CAAC;AACT;AACA,QAAQ,WAAW,CAAC,OAAO,EAAE;AAC7B;AACA,QAAQ,WAAW,CAAC,OAAO,EAAE;AAC7B;AACA,QAAQ,WAAW,CAAC,OAAO,EAAE;AAC7B;AACA,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG;AACvD;AACA,QAAQ,YAAY;AACpB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACpD,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC;AAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,gBAAgB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,EAAE;AACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC1B,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACrF,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AACpD,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AACzC,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAgB,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAY,GAAG;AACf;AACA,QAAQ,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE;AAC5C;AACA,QAAQ,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE;AAC7C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACrF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC;AAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AACpD,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAgB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AACzC,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAgB,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAY,GAAG;AACf;AACA,QAAQ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE;AACvC,QAAQ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE;AACvC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,QAAQ,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG;AAChC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG;AACpD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACvB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG;AACtD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACvB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;AAC1D,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;AAC1D,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACnIF,GAAG;AACH,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU;AAClG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAChG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc;AACxB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AACnG,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,GAAG;AAChE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AAC/E,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;AAC/B,CAAC,EAAE;AACH,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD;AACA,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAChC,IAAI,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,KAAK;AAC5C,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AACvB;AACA,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG;AAC3B;AACA,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,QAAQ,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5B;AACA,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG;AACpC,QAAQ,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,uBAAuB,CAAC,CAAC,CAAC,kCAAkC,CAAC;AACrE,QAAQ,OAAO,CAAC;AAChB,QAAQ,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC;AACpC;AACA,IAAI,MAAM,CAAC,oBAAoB,KAAK;AACpC,IAAI,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;AACnC,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC9B;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnD,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG;AACnC;AACA,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACrC;AACA,YAAY,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACrC;AACA,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;AACrC,gBAAgB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,IAAI;AACpD,YAAY,CAAC;AACb,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AAC5C,YAAY,CAAC;AACb;AACA,YAAY,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,IAAI;AAClD,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;AACpC,YAAY,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI;AAC1C,YAAY,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI;AAC5F,YAAY,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI;AAC5C,YAAY,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,IAAI;AACpD,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI;AAC9C,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AAC1C,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;AACvD;AACA,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;AACrE,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AACtD,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AACxD,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACvD;AACA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;AACjD;AACA,QAAQ,EAAE,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACrE,YAAY,MAAM,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;AAC7F,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,YAAY,MAAM,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;AACvF,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAY,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE;AAC7E,YAAY,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,EAAE;AACnE,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,YAAY,MAAM,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,EAAE;AACrG,YAAY,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE;AAClH,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACvD,QAAQ,GAAG,CAAC,MAAM,CAAC;AACnB;AACA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnB,YAAY,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG;AACnC,YAAY,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG;AACnC,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,YAAY,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG;AACxC,YAAY,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG;AACxC,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,YAAY,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;AAClF,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B,YAAY,SAAS,CAAC,CAAC,SAAS,CAAC;AACjC,YAAY,SAAS,CAAC,CAAC,SAAS,CAAC;AACjC,YAAY,SAAS,CAAC,CAAC,SAAS,CAAC;AACjC,YAAY,SAAS,CAAC,CAAC,SAAS;AAChC,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5E,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;AAC5E,QAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;AAC/E,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAChF;AACA,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;AAC/E,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5E,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;AAC7E,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACzC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;AAC5E;AACA,QAAQ,MAAM,CAAC,CAAC;AAChB,YAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE;AACpE,YAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE;AACpE,YAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE;AACpE,YAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;AACnE,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG;AAC5E,YAAY,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG;AACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,YAAY,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI;AAC7C,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG;AACzE,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxB,YAAY,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG;AAClE,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG;AACzD,QAAQ,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK;AACtE;AACA,QAAQ,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,KAAK,GAAG;AAC5C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG;AACvE,YAAY,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG;AACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI;AACxC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG;AACpE,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxB,YAAY,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG;AAC7D,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG;AACpD,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK;AACvD;AACA,QAAQ,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,GAAG;AACtC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI;AACrC,QAAQ,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5D,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACrC;AACA,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,gBAAgB,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACzC,YAAY,CAAC;AACb;AACA,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/B,gBAAgB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI;AAC9C,YAAY,CAAC;AACb;AACA,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AAChC;AACA,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AACxC;AACA,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;AACxC,gBAAgB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI;AACzC,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI;AACjD,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AACpC,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AAC5C,YAAY,CAAC;AACb;AACA,YAAY,KAAK,CAAC,QAAQ,GAAG;AAC7B;AACA,YAAY,KAAK,CAAC,mBAAmB,GAAG;AACxC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;AACvG,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;AACrG,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;AACnB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB;AACpC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;AAC3C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACrE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,mBAAmB,CAAC;AACvC,QAAQ,CAAC;AACT;AACA,QAAQ,mBAAmB,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACpD,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO;AAC5F,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC;AAC1C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,YAAY,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;AACzC,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACrC,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AACxC,YAAY,KAAK,CAAC,kBAAkB,GAAG;AACvC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC;AAC1C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,QAAQ,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC;AAC1D,QAAQ,uBAAuB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,OAAO,CAAC;AACzG,QAAQ,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC;AAC1D,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAChF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;AAC1B,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK;AAC1E,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;AAClC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;AACnG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG;AAChE,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;AACxF,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAChC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACtE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACnC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,KAAK,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK,CAAC,aAAa,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE;AACzE,KAAK,CAAC,SAAS,GAAG;AAClB,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC;AACzC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/B,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/C,QAAQ,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;AAClC,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,YAAY,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI;AAC1C,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AACxC,YAAY,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI;AAC5C;AACA,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9B,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;AAC5C,YAAY,CAAC;AACb;AACA,YAAY,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;AACzC,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,SAAS,CAAC;AACzB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;AACvH,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;AACxF,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;AACvF,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;AAChD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;AAC3C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI;AACzG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;AAC3C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa;AAC9F,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7F,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC;AAC5C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACzB,QAAQ,MAAM,CAAC,OAAO,GAAG;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;AAC/F,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AACvB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,OAAO,GAAG;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,YAAY,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG;AAC1C,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,YAAY,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG;AACzC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG;AAChC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAQ,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,KAAK;AACxD,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,KAAK;AACzD,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG;AAChC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI;AAC7F,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI;AAC9F,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAQ,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG;AAChC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjD,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI;AACjG,IAAI,GAAG;AACP;AACA,IAAI,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAQ,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG;AAChC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjD,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI;AAC5F,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/B,gBAAgB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI;AAC9C,YAAY,CAAC;AACb,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI;AACzD,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,EAAE,CAAC,IAAI;AACf,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACrC,YAAY,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE;AACrC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACrC,YAAY,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE;AACjC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,QAAQ,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG;AAC3E,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnG,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;AACvF,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;AACvH,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5B,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC5F,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc;AAClC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACvG,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;AACrE,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AACzD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AAC/C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACxhBF,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG;AAChG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG;AAC9F,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3E,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW;AACrB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc;AAC3B,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAChG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG;AAC1D,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AACzE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,CAAC,EAAE;AACH,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AACvD;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG;AAC9E,IAAI,CAAC;AACL;AACA,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AACrB,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,IAAI,GAAG,CAAC,eAAe,CAAC;AACxB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AACnC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7B;AACA,IAAI,MAAM,CAAC,oBAAoB,GAAG,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,KAAK,GAAG;AAClE,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;AAC7B;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;AACtB,QAAQ,GAAG,CAAC,eAAe,CAAC;AAC5B,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,EAAE;AACpD,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1B,YAAY,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;AACzC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE;AAC1C,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI;AACpD,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtB,YAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAgB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC/G,gBAAgB,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,oBAAoB,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,gBAAgB,CAAC;AACjB,gBAAgB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,gBAAgB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACnC,gBAAgB,MAAM,CAAC,QAAQ;AAC/B,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG;AAClD,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAClE,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,GAAG;AACtD,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,GAAG;AAC1D,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI;AAC/C,YAAY,GAAG;AACf,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;AACnE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS;AACnC,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAClE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,gBAAgB,UAAU,CAAC,CAAC,EAAE;AAC9B,gBAAgB,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAY,GAAG;AACf,QAAQ,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAClC,QAAQ,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,YAAY,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG;AACrC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAY,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG;AACpC,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE;AAC7C,QAAQ,OAAO,CAAC,CAAC,CAAC,GAAG;AACrB,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM;AAClE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE;AAChF,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;AACnC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,aAAa,GAAG;AACxB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ;AAC1F,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AACtD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;AAChC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE;AACxE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,eAAe,CAAC;AACnC,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC,QAAQ,aAAa,GAAG;AACxB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAChF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9G,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC;AAChH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE;AACvC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC;AACpD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;AACnC,QAAQ,aAAa,GAAG;AACxB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtG,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACjG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC;AAC9G,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC;AAChH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;AAC5B,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,KAAK,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG;AACjF,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;AAClC,QAAQ,aAAa,GAAG;AACxB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;AAC3B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACrC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1B;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AC3LF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AACpG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC/D,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;AACtE,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB;AAC5B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC9F,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,KAAK,GAAG;AACnD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,GAAG;AAC/D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACnC,CAAC,EAAE;AACH,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACvD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,MAAM;AACjD;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,IAAI,GAAG;AACP;AACA,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG;AACjC,IAAI,GAAG,CAAC,eAAe,CAAC;AACxB;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AACvB;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/E,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,EAAE;AACjD,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACrD;AACA,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AAC3E,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AAC/C,gBAAgB,CAAC,KAAK,EAAE;AACxB,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE;AAC5B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE;AACzD;AACA,YAAY,OAAO;AACnB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE;AACtC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;AACrC;AACA,YAAY,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG;AACpC;AACA,YAAY,QAAQ,CAAC,UAAU,EAAE;AACjC,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,GAAG;AACzC;AACA,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;AACtC,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE;AACpD;AACA,YAAY,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;AACnD;AACA,YAAY,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;AACnD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACrC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;AACtB,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG;AACrC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnD,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,CAAC,GAAG;AAC1F,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;AAC/C,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AAClC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE;AACjD,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAgB,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACjD,YAAY,EAAE;AACd,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,gBAAgB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACnD,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAgB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AAC9D,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,GAAG;AACxF,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACrE,gBAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,oBAAoB,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC/C,gBAAgB,CAAC;AACjB,gBAAgB,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAClD,oBAAoB,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE;AACjD,gBAAgB,CAAC;AACjB,gBAAgB,MAAM,CAAC,WAAW,CAAC;AACnC,YAAY,GAAG;AACf,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AACzE,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;AAC7E,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;AAC9E,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;AAClD,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,QAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;AAChC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;AAC3B,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AAC3B,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG;AAC/D,gBAAgB,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAClC,oBAAoB,MAAM,CAAC,WAAW,CAAC;AACvC,gBAAgB,CAAC;AACjB,gBAAgB,MAAM,CAAC,CAAC,IAAI,EAAE;AAC9B,YAAY,EAAE;AACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAgB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACrD,YAAY,GAAG;AACf;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClH,YAAY,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AAChF,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;AAChE,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;AAC1C,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,OAAO,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AAChD,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACtC,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG;AAChE,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/E,YAAY,QAAQ,CAAC,UAAU,EAAE;AACjC,YAAY,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAClC,gBAAgB,MAAM,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;AACtG,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;AACvG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ;AACvG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAChF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB;AACtC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AAC/C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrI,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM;AAChD,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AACrC,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;AAC7C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAC/C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC1H,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;AAC9E,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAChE,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,gBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;AACvD,gBAAgB,MAAM,CAAC,MAAM,CAAC;AAC9B,YAAY,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,GAAG;AAC3E,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS;AAC5D,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE;AACrH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB;AACtC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/G,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;AACtF,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG;AAC7D,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE;AACxC,QAAQ,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/F,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;AACrG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB;AACtC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG;AACxE,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,SAAS,CAAC;AACzB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC9H,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG;AAClG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;AACxF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;AACtB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB;AACtC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACxG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,QAAQ,CAAC;AACxB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI;AACrD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB;AACtC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AAC3B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;AAC1B;AACA,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACrC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,gBAAgB,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;AACrC,YAAY,CAAC;AACb,QAAQ,CAAC;AACT;AACA,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACtRF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;AACrG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;AAChG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACnG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChB,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa;AACvB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AACtH,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,GAAG,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI;AACzG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI;AACpH,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;AAC9B,CAAC,EAAE;AACH,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAClD,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AAChD,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACnC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AAChC;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;AACtG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG;AACxG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACnG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO;AACvC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI;AAC1C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;AACtD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,MAAM;AAClD,IAAI,GAAG,CAAC,EAAE,CAAC;AACX,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AACrB;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;AACnC;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC9B;AACA,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE;AACpB,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;AACvG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACpG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACzF,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;AAC/D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AAC3B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG;AAC5B;AACA,QAAQ,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,KAAK;AAC/F;AACA,QAAQ,iBAAiB,GAAG;AAC5B;AACA,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,EAAE;AACxD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AACzB,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,oBAAoB,EAAE;AAC9E,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,EAAE,CAAC;AAClB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG;AAC7B,QAAQ,MAAM,CAAC,qBAAqB,GAAG;AACvC;AACA,QAAQ,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AAC9C;AACA,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE;AAChE;AACA,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,gBAAgB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;AAC/C,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC;AAChD,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;AACjD,YAAY,CAAC;AACb;AACA,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACxF,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAoB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AAC7C,gBAAgB,GAAG;AACnB;AACA,YAAY,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE;AACzC;AACA,YAAY,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE;AAC1C,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACzB,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;AACtB,QAAQ,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACtD,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,QAAQ,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;AACtF;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG;AACpE;AACA,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5B,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;AAClC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;AAC/C,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AACjF,QAAQ,CAAC;AACT;AACA,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG;AACtC;AACA,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,aAAa,GAAG;AACxB;AACA,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG;AAC7B,QAAQ,MAAM,CAAC,qBAAqB,GAAG;AACvC;AACA,QAAQ,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AAC9C;AACA,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE;AAChE;AACA,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACxF,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAoB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AAC7C,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/C;AACA,YAAY,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE;AACzC;AACA,YAAY,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE;AACzC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnB,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE;AAC9E;AACA,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,gBAAgB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AACrC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE;AAChC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE;AACnE,YAAY,CAAC;AACb;AACA,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;AACjD,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9B,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/B;AACA,YAAY,MAAM;AAClB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG;AAC9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG;AAChD,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,oBAAoB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI;AAC3D,oBAAoB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC/D,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;AACxC,gBAAgB,GAAG;AACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG;AAChD,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AACtC;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,EAAE;;AClNF,GAAG;AACH,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;AACrC,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;AAClB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ;AACrB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC7F,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG;AACjD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AAChE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzB,CAAC,EAAE;AACH,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C;AACA,IAAI,GAAG,CAAC,EAAE,CAAC;AACX;AACA,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ;AACxI,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B;AACA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB;AACA,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC7B,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACvC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,QAAQ;AAC9E;AACA,IAAI,GAAG,CAAC,EAAE,CAAC;AACX;AACA,IAAI,GAAG,CAAC,SAAS,CAAC;AAClB;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,GAAG;AAChD;AACA,IAAI,GAAG,CAAC,QAAQ,CAAC;AACjB;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAChC;AACA,IAAI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/B,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE;AACzE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAY,CAAC;AACb,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAY,CAAC;AACb,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACjD,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK;AACrD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;AACzB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG;AACxC;AACA,QAAQ,kBAAkB,GAAG;AAC7B;AACA,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5B,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,GAAG;AACzD,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK;AAClF;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACnF,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B;AACA,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AACzB,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;AACxG;AACA,QAAQ,SAAS,GAAG;AACpB;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE;AAClF,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE;AAC3C;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAC1D,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;AAC9G,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;AAClH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACnB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;AAC9B,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACrC,YAAY,CAAC,MAAM,GAAG;AACtB;AACA,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;AAC9B,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AAC3B,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1B,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1B,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1B,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,gBAAgB,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,GAAG;AACjD,YAAY,GAAG;AACf,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAQ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG;AACjC;AACA,QAAQ,QAAQ,GAAG;AACnB,QAAQ,aAAa,GAAG;AACxB;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;AACpD,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5B;AACA,QAAQ,cAAc,CAAC,IAAI,EAAE;AAC7B,QAAQ,cAAc,CAAC,IAAI,EAAE;AAC7B,QAAQ,cAAc,CAAC,IAAI,EAAE;AAC7B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AACnC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAY,GAAG;AACf;AACA,QAAQ,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;AACjD;AACA,QAAQ,YAAY,CAAC,QAAQ,EAAE;AAC/B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG;AAC7B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACzB,QAAQ,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAChC;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC;AACnB,QAAQ,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;AAC/B,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;AACrC,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM;AAC9F,QAAQ,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAChC,YAAY,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5E,YAAY,GAAG,MAAM,EAAE,IAAI,EAAE;AAC7B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;AACnC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AACjC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,gBAAgB,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,YAAY,EAAE;AACd,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAgB,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvE,YAAY,GAAG;AACf;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAClF,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,IAAI;AAC7E,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE;AAC3C;AACA,QAAQ,YAAY,CAAC,IAAI,EAAE;AAC3B,QAAQ,YAAY,CAAC,IAAI,EAAE;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG;AAC1C,YAAY,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI;AACtD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;AACnC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE;AACtC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACxC,YAAY,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;AACnC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC;AACjD,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE;AACtC,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AACzC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC;AACzC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC;AACzC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;AACtC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AACrC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,oBAAoB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAgB,EAAE;AAClB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAoB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AAC7C,gBAAgB,GAAG;AACnB,YAAY,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACrF,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE;AAC/C,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACxC,YAAY,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC/D,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;AAC5E,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC;AAC7C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;AAC/C,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AACzC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,oBAAoB,EAAE;AACtB,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,wBAAwB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AACjD,oBAAoB,GAAG;AACvB,YAAY,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAC1F,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE;AAC/C,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;AACvF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC3D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAQ,CAAC;AACT,QAAQ,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC7C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG;AAClD,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG;AAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAQ,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;AACxC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,SAAS,GAAG;AACpB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AACrF,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7G,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACvG,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;AAChE,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AACpD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACtF,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACvG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClG,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE;AAChC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;AAC7B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AACtE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC5C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AACvD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,eAAe,CAAC;AACnC,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACnB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AACzH,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACrH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,QAAQ,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AAClG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB;AAChC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7D,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,kBAAkB,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC/C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG;AAC7D,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;AClaF,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;AACjG,CAAC,CAAC,CAAC,MAAM,CAAC;AACV,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;AAChB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC/D,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;AACvB,CAAC,EAAE;AACH,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzB,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB;AACA,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AACrB,QAAQ,OAAO,CAAC;AAChB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AACzB,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5B,QAAQ,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3B,QAAQ,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AACxB,QAAQ,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG;AACvC,QAAQ,SAAS,CAAC;AAClB;AACA,IAAI,GAAG,CAAC,EAAE,CAAC;AACX;AACA,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,OAAO,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG;AACrD,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,EAAE;AACtC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AACvC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;AACnE,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG;AAChD;AACA,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,YAAY,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;AAC1D,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACxD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAY,CAAC,KAAK,EAAE;AACpB,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AAC5C,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAgB,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE;AAC3C,YAAY,EAAE;AACd,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,gBAAgB,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE;AACvC,YAAY,EAAE;AACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAgB,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;AACxC,YAAY,GAAG;AACf;AACA,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACxC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAgB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE;AACrD,YAAY,GAAG;AACf;AACA,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC;AACtD,YAAY,SAAS;AACrB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9B,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;AACxC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG;AAChE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI;AACnD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,SAAS;AACrB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC;AAC3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC;AAC5C,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK;AAC3E,QAAQ,CAAC;AACT;AACA,QAAQ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;AAChC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;AAClC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,oBAAoB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,gBAAgB,GAAG;AACnB;AACA,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAQ,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9B,gBAAgB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACrG,gBAAgB,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChH,oBAAoB,EAAE,GAAG,CAAC;AAC1B,oBAAoB,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAgB,CAAC;AACjB,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI;AACnH,gBAAgB,0BAA0B,CAAC,EAAE,CAAC,SAAS,CAAC;AACxD,gBAAgB,MAAM,CAAC,WAAW,CAAC;AACnC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI;AACrE,YAAY,CAAC;AACb,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAClC,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACnB,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;AAC1D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;AACzC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAClD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AAC/C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAClC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AAClH,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;AACrE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACtD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM;AACrG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK;AAC/F,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AACtC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU;AAC5B,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG;AAC1C,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG;AACzF,KAAK,CAAC;AACN,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM;AAC/C,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG;AACzF,KAAK,GAAG;AACR,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO;AAChD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;AAC1B,KAAK,EAAE;AACP,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,EAAE;;AClSF,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;AACvB,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7E,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACzF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW;AACrB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAChG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG;AACpD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AACnE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE;AAC/C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,CAAC,EAAE;AACH,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,KAAK;AAC5C,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG;AAClC;AACA,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9D;AACA,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AACnD,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AAC3E,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AAC7E,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG;AACpE;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS;AACrF,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG;AACxD,QAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjF,YAAY,MAAM,CAAC,iBAAiB,GAAG,CAAC,EAAE;AAC1C,IAAI,GAAG;AACP;AACA,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACzE,8BAA8B,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;AAC1E,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AACvB;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AAC3C,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAClC,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AAC5C,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AAC9C,QAAQ,CAAC;AACT,IAAI,CAAC;AACL,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9B;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG;AACrC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,MAAM,GAAG;AAC9E,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;AAClE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;AACjC;AACA,QAAQ,OAAO;AACf,YAAY,CAAC,KAAK,EAAE;AACpB,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;AACvB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;AACpC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC/B,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE;AACzC;AACA,QAAQ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI;AAClD;AACA,QAAQ,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,YAAY,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI;AAChG,QAAQ,GAAG;AACX;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACrF,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAgB,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,oBAAoB,MAAM,CAAC,aAAa,CAAC;AACzC,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,oBAAoB,MAAM,CAAC,gBAAgB,CAAC;AAC5C,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG;AACpD,gBAAgB,CAAC;AACjB,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAgB,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5D,oBAAoB,MAAM,CAAC,WAAW,CAAC;AACvC,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,oBAAoB,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG;AAClD,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC9C,gBAAgB,CAAC;AACjB,YAAY,EAAE;AACd,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC;AACxC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE;AAChC;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAC5F,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG;AACzC,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG;AAC/C,YAAY,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;AACzC,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;AAC9E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG;AAC9D,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;AACxD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACnF,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;AACpE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB;AAChC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;AACxD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;AACtD,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ;AAC1B,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;AACjE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AACzC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,kBAAkB,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtC,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACzF,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;AACrB,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG;AAC9B,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;AACrB,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG;AAC9B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE;AAC/C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG;AAClC,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG;AAC5E,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG;AAC1G,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AACzD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7G,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC/B,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7G,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AAChI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG;AAC9D,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC;AAChD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,OAAO,CAAC;AAC3B,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;AAC/B,QAAQ,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACzD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;AACjF,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;AAClF,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACzE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;AAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACxE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACzD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACvH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;AACvC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACjE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAClF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7E,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACvB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE;AAChC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;AAC9D,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACvB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAClE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC/B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACvB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC/B,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACzD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK;AACpF,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,kBAAkB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,QAAQ,EAAE,CAAC,gBAAgB,EAAE;AAC7B,QAAQ,MAAM,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrF,YAAY,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,QAAQ,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE;AACpC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,kBAAkB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,QAAQ,EAAE,CAAC,WAAW,EAAE;AACxB,QAAQ,MAAM,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrF,YAAY,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,QAAQ,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;AACrC,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnG,YAAY,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG;AAC9C,QAAQ,GAAG;AACX,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG;AACrC,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;AACxC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE;AACzG,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,QAAQ,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;AAC3C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG;AAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;AACtD,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;AACtD;AACA,YAAY,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE;AACvC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG;AACrD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACjH,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AAC1C;AACA,QAAQ,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI;AACvC;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACpC,gBAAgB,MAAM,CAAC,WAAW,GAAG;AACrC,YAAY,GAAG;AACf;AACA,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE;AAC/E,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACpC,gBAAgB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;AAC9C,gBAAgB,MAAM,CAAC,WAAW,GAAG;AACrC,YAAY,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE;AACzC;AACA,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK;AAClD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACjbF,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACvC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG;AACvG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa;AACvB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAClG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,GAAG;AACxD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;AAC9B,CAAC,EAAE;AACH,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAClD,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACtC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG;AACzC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK;AAClC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI;AAC9C,IAAI,GAAG,CAAC,UAAU,CAAC;AACnB;AACA,IAAI,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ;AAC7B,IAAI,MAAM,CAAC,oBAAoB,GAAG,KAAK,IAAI;AAC3C;AACA,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;AAC9F,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG;AACxD;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM;AAC/F,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAC9E,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACtD,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS;AAC7C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AACjC,KAAK,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;AACnC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,OAAO,GAAG;AAC/B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI;AAC3F,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC;AACzE,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS;AACtD,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG;AACjE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AAC3E,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS;AACnD,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AACjE,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS;AACtD,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG;AACjE,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;AAChE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACxB,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG;AAC7B,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1B,YAAY,MAAM,CAAC,IAAI,CAAC;AACxB,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;AACvD,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACzC,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;AACvE,QAAQ,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,EAAE;AAC9C,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO;AACnD,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC9B;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG;AACtC,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;AACtD;AACA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC3B,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACjC,gBAAgB,CAAC,KAAK,EAAE;AACxB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE;AAC3C,QAAQ,CAAC;AACT;AACA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG;AAClD,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG;AAC5C,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AAChC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAClF,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,gBAAgB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC9E,gBAAgB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,oBAAoB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,GAAG;AAC5E,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChE,wBAAwB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1C,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtE,wBAAwB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,wBAAwB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1C,oBAAoB,CAAC;AACrB,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/E,gBAAgB,EAAE;AAClB,YAAY,GAAG;AACf,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG;AAClC,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACjE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa;AACjC,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;AAClG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG;AACrD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC;AAC3C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAChD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACzJF,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;AACjB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU;AACvB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW;AACxB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC5F,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG;AAClD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AACjE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACxB,CAAC,EAAE;AACH,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5C;AACA,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC;AACA,IAAI,GAAG,CAAC,UAAU,CAAC;AACnB;AACA,IAAI,GAAG,CAAC,KAAK,CAAC;AACd,IAAI,GAAG,CAAC,KAAK,CAAC;AACd,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AACpC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AACpC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG;AACvC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG;AACvC;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAC/C,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAC/C;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,OAAO;AACjE,IAAI,MAAM,CAAC,oBAAoB,GAAG,KAAK,IAAI;AAC3C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI;AACzC;AACA,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,EAAE;AACN,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AACzF,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AACjE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI;AAC1D,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;AAClD,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACnE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;AACtF,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI;AAC1D,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;AAClD,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACnE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AAC3D,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AAC3D,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3B,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AACzC,QAAQ,GAAG;AACX,QAAQ,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,YAAY,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AAC5C,QAAQ,GAAG;AACX,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAChG,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,gBAAgB,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE;AAC/D,YAAY,GAAG;AACf,YAAY,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG;AACtC,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,GAAG;AACX,IAAI,CAAC;AACL;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG;AACpC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,GAAG;AACvE,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG;AACnG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;AACjD,KAAK,EAAE;AACP;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE;AACvC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACxE,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG;AACpG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;AACjD,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC;AACT,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE;AACvC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;AACrE,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,QAAQ,GAAG;AAC1B;AACA,QAAQ,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AACjC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE;AACxB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;AACrC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;AACxG;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG;AAClC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG;AACjC,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI;AACrE,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI;AACnE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3B,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC3C,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3B,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC3C,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;AACtC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;AACtC;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5C,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5C,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;AACtE,YAAY,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;AACxE;AACA,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK;AAC3D,QAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG;AAC5D;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,YAAY,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACpF,QAAQ,GAAG;AACX,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE;AAC9C,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG;AACxC;AACA,QAAQ,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;AAC7B,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACtC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE;AAClC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI;AAC9C;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,YAAY,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG;AACnC,YAAY,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI;AACvD,QAAQ,CAAC;AACT;AACA,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AAClG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACpF,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACtF,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC;AACvC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC;AACvC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC;AACpC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE;AACvC;AACA,QAAQ,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG;AAC9B;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG;AAChD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5B,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG;AACtE,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI;AACpE,QAAQ,SAAS,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE;AACxC,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACzE,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAC7C,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,GAAG;AAClD,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7B,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG;AACjD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI;AACxC,QAAQ,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACvF,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG;AACxC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1E,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,IAAI;AACpD,QAAQ,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG;AAClC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG;AAChD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5B,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG;AACtE,QAAQ,CAAC;AACT,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI;AACpE,QAAQ,SAAS,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE;AACxC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5B,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;AAC1C,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7B,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG;AACjD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI;AACxC,QAAQ,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACvF,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG;AACvC,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AAC3E,QAAQ,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG;AAClC;AACA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,oBAAoB,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACnD,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAChD,gBAAgB,CAAC;AACjB,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9D,gBAAgB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAC5C,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7F,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACzD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO;AACtC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9B,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACrC,KAAK,CAAC,SAAS,MAAM,CAAC,WAAW,GAAG;AACpC,KAAK,CAAC,KAAK,GAAG;AACd,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACvF,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AAChG,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AACrD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC1F,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AAClD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AACrC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,aAAa,CAAC;AACjC,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AACvC,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;ACpYF,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1D,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACd;AACA,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,2BAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AACtE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAY,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1B,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3B,YAAY,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC,YAAY,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;AACrC,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B;AACA,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AACnC,QAAQ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AACpD,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AACxC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/B,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACnC;AACA,gBAAgB,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,gBAAgB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AAC9D;AACA,gBAAgB,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;AAC7E,gBAAgB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3E,oBAAoB,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;AACtG;AACA,gBAAgB,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AAC3F,gBAAgB,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC9F,gBAAgB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AACrD,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5G;AACA,gBAAgB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3C,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;AAC1C,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AAC5E,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG;AACxC;AACA,gBAAgB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;AAClE,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;AAC5D,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC1C,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI;AACvC;AACA,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC;AACA,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;AACpF,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ;AACxF,gBAAgB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ;AACrF,gBAAgB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AACjD;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/E,gBAAgB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;AACvD,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5D;AACA,gBAAgB,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACrD,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;AAC5C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,UAAU,EAAE;AACjC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACxC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AACnE;AACA,gBAAgB,MAAM,CAAC,UAAU,EAAE;AACnC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACxC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AACnE;AACA,gBAAgB,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE;AAC1C,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,MAAM,GAAG;AAC9B;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;AAC5C,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACjD,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG;AAC1C;AACA,gBAAgB,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE;AAC1C,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;AACzC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjE,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC;AACzC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjF,kBAAkB,CAAC,UAAU,EAAE;AAC/B,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjE,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AAClF;AACA,gBAAgB,GAAG,CAAC,UAAU,EAAE;AAChC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC;AACzC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjE,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AAClF;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACtC,gBAAgB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;AAC3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI;AAC7C;AACA,gBAAgB,UAAU,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE;AACjD,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;AAC5C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;AACtC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,UAAU,EAAE;AACjC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AACpC;AACA,gBAAgB,UAAU,CAAC,UAAU,EAAE;AACvC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;AACtC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AACpC;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnC,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;AACzD,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI;AAC7C;AACA,gBAAgB,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;AAC9D,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;AAC7C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;AACtC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,kBAAkB,CAAC,UAAU,EAAE;AAC/B,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzC;AACA,gBAAgB,OAAO,CAAC,UAAU,EAAE;AACpC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;AACtC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzC;AACA,gBAAgB,OAAO,CAAC,IAAI,GAAG,UAAU,EAAE;AAC3C,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,MAAM,GAAG;AAC9B;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnC,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE;AAC3D,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;AAClD;AACA,gBAAgB,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE;AACxD,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;AAC7C,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,UAAU,EAAE;AACjC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzC;AACA,gBAAgB,OAAO,CAAC,UAAU,EAAE;AACpC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzC;AACA,gBAAgB,OAAO,CAAC,IAAI,GAAG,UAAU,EAAE;AAC3C,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAClE,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,MAAM,GAAG;AAC9B;AACA,gBAAgB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3C,gBAAgB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE;AAC5D;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrD,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE;AACxC;AACA,gBAAgB,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE;AAC9C,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;AACzC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE;AACvC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3E,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7E,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;AAC7F,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,oBAAoB,CAAC,UAAU,EAAE;AACjC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACnC;AACA,gBAAgB,OAAO,CAAC,UAAU,EAAE;AACpC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7E,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACnC;AACA,gBAAgB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAClF,gBAAgB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;AAClF,gBAAgB,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7E,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;AAC7D,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI;AAC7C;AACA,gBAAgB,WAAW,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE;AAClD,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;AAC7C,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE;AACvC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AACrC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,UAAU,EAAE;AACjC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzC;AACA,gBAAgB,WAAW,CAAC,UAAU,EAAE;AACxC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AACrC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzC;AACA,gBAAgB,WAAW,CAAC,IAAI,GAAG,UAAU,EAAE;AAC/C,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,CAAC,MAAM,GAAG;AAC9B,YAAY,GAAG;AACf,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG;AAC7B,QAAQ,CAAC;AACT;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,KAAK,CAAC;AAC7B,YAAY,CAAC;AACb,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,MAAM,CAAC;AAC9B,YAAY,CAAC;AACb,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,UAAU,CAAC;AAClC,YAAY,CAAC;AACb,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,QAAQ,CAAC;AAChC,YAAY,CAAC;AACb,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,MAAM,CAAC;AAC9B,YAAY,CAAC;AACb,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE;AACpD,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,KAAK,CAAC;AAC7B,YAAY,CAAC;AACb,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,QAAQ,CAAC;AAChC,YAAY,CAAC;AACb,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,gBAAgB,MAAM,CAAC,SAAS,CAAC;AACjC,YAAY,CAAC;AACb,YAAY,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE;AACV;AACA,QAAQ,MAAM,CAAC,GAAG,CAAC;AACnB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACjC,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,CAAC;AAChB,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACjC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,KAAK;;ACzVL;AACA,GAAG;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/E,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,QAAQ,CAAC;AACZ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3F,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;AACjB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB;AAChC,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AAC5F,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG;AAClD,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG;AACjE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU;AAChI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACtG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACxB,CAAC,EAAE;AACH,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,KAAK;AAC5C;AACA,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7D,IAAI,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACpC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACpC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7B,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;AAChD,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;AAChD,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1B,QAAQ,EAAE;AACV,IAAI,CAAC;AACL;AACA,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC;AAC5C,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,EAAE;AACpD;AACA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;AACxB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG;AAC1C,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACxE,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;AACrD,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE;AAC5B;AACA,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO;AACzB,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI;AACjC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;AACpC;AACA,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;AACtF,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;AACpF,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AACxE,YAAY,MAAM,CAAC,CAAC,CAAC;AACrB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE;AACnD,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG;AACX,IAAI,GAAG;AACP;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC;AAC1H,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3I,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACjD,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3B;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM;AAC7G,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9F,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACtD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;AACnC,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC;AACxD,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7B;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpG,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAClG,KAAK,CAAC,CAAC,KAAK,CAAC;AACb,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS;AACnC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE;AAC1B,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AACxB,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AACzD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AAC5C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;AAC7D,QAAQ,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;AAC/C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,CAAC,GAAG,MAAM,KAAK;AAClC,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI;AAC1F;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAChC,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC;AACvC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG;AAC7C,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG;AAC1C,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG;AACxC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG;AAClD,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE;AACrC;AACA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI;AACtG;AACA,QAAQ,WAAW,CAAC,MAAM,EAAE;AAC5B,QAAQ,WAAW,CAAC,MAAM,EAAE;AAC5B,QAAQ,WAAW,CAAC,MAAM,EAAE;AAC5B;AACA,QAAQ,MAAM,CAAC,kBAAkB,GAAG;AACpC,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG;AACrD;AACA,QAAQ,WAAW;AACnB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;AACjC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC;AAC5C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAgB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG;AACvD,gBAAgB,MAAM,CAAC,WAAW,GAAG;AACrC,YAAY,GAAG;AACf,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG;AACpF,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC;AAC5C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/B,gBAAgB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;AACjF,YAAY,GAAG;AACf,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAC1C,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACjC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACrC,gBAAgB,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACvD,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5B,wBAAwB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AACpD,oBAAoB,CAAC;AACrB,gBAAgB,GAAG;AACnB,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAgB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG;AACrD,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACtC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACpC,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG;AACvD,gBAAgB,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,oBAAoB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE;AAC7C,oBAAoB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,wBAAwB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AACpD,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5B,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACvD,oBAAoB,CAAC;AACrB,gBAAgB,GAAG;AACnB,YAAY,CAAC;AACb,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5D,gBAAgB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;AAC5C,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG;AACzD,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG;AACrD,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI;AAC7D,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG;AACrD,QAAQ,GAAG;AACX,QAAQ,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI;AACxD,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE;AAChG,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;AAC1C,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,IAAI;AAC1C,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;AACzB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO;AAC3B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;AAC5C,KAAK,EAAE;AACP,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjC,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;AC3PF,GAAG;AACH,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;AAChG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAClF,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU;AACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS;AACtB,CAAC,CAAC,CAAC,CAAC,OAAO;AACX,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;AACvF,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE;AAClD,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC;AACpC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE;AACrC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ;AACzD,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE;AACpD,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC7B,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAChC,CAAC,CAAC,CAAC,EAAE;AACL,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;AACzE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,UAAU;AACrG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9F,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACrF,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;AACxB,CAAC,GAAG;AACJ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;AAC5C,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;AAC9C;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK;AAClC;AACA,IAAI,GAAG,CAAC,OAAO,CAAC;AAChB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AACnC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1B,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;AAClE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;AACpE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,IAAI,EAAE;AACN;AACA,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE;AACpD,IAAI,GAAG;AACP;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG;AACzC,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE;AAChD,wBAAwB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;AACzD,QAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI;AACrE;AACA,QAAQ,MAAM,CAAC,SAAS,GAAG;AAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK;AAClD,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,IAAI,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACtF,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AACxC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACzE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACtC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,QAAQ,aAAa,GAAG;AACxB,QAAQ,aAAa,GAAG;AACxB,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,YAAY,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE;AACvC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtH,gBAAgB,GAAG;AACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;AACxC,YAAY,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI;AACvD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI;AAC1C,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACrE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,GAAG;AACjF;AACA,QAAQ,OAAO,CAAC,KAAK,EAAE;AACvB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;AAC/B,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;AAC9C,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,GAAG;AAC/E;AACA,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI;AACrC,QAAQ,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG;AAChC,QAAQ,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE;AACrE;AACA,QAAQ,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE;AACvC,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,IAAI,CAAC;AACL;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,GAAG,CAAC,MAAM,CAAC;AACnB,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;AACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;AACrC,YAAY,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACrF,YAAY,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAgB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,YAAY,GAAG;AACf,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe;AACxE,YAAY,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;AAClF,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;AACjE,YAAY,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,gBAAgB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACvC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,YAAY,GAAG;AACf,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;AAC/B,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ;AAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,YAAY,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC;AAC1C,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AAC/B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AAChC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/B,YAAY,MAAM,CAAC,aAAa,EAAE,GAAG,GAAG;AACxC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,YAAY,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE;AACtC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,MAAM,CAAC,SAAS,GAAG;AAC/B,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,YAAY,MAAM,CAAC,WAAW,GAAG;AACjC,QAAQ,GAAG;AACX,IAAI,EAAE;AACN;AACA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxB,YAAY,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;AAC3C,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;AAC3C,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,YAAY,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE;AACjD,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,YAAY,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACvC,QAAQ,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;AAC/E,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS;AAChF,KAAK,CAAC,CAAC,KAAK,CAAC;AACb,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;AAClB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;AACpC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7E,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;AACvB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;AAChD,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,GAAG;AACtC,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,WAAW,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO;AAC5F,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7C,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe;AAC5B,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC;AAC1C,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;AACtE,KAAK,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,KAAK,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC;AACvB,KAAK,CAAC,CAAC,GAAG;AACV,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACzD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU;AACnF,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;AACrB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxC,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC5B,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3C,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7B;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;AAChD,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC;AACzG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;AACpG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACnC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,YAAY,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AACnC;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,GAAG;AACP,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI;AAChG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE;AACtH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACxF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;AACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC9B,KAAK,CAAC,CAAC,CAAC,QAAQ;AAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5C,KAAK,CAAC,CAAC,CAAC,OAAO;AACf,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE;AAC/B,KAAK,GAAG;AACR,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,CAAC,cAAc,CAAC;AAClC,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACvC;AACA,QAAQ,MAAM,CAAC,MAAM,CAAC;AACtB,IAAI,EAAE;AACN;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG;AACxH;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AAC7C,EAAE;;AClRF,EAAE,CAAC,OAAO,CAAC,SAAS;AACpB;AACA,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AACxC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;AAC5B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACxB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC9B,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;AAChD,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;AAC/B,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAClC;AACA,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU;AAC3D,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACX,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7B;AACA,MAAM,CAAC,EAAE,EAAE;AACX,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,QAAQ,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE;AAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG;AAChC,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG;AACnD,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE;AACzE,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;AAChE,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;AAC1E,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjD,YAAY,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;AACpD,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE;AAChD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AACvC,IAAI,CAAC;AACL,CAAC;AACD,IAAI","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 642cdb0f5d..0e85b6427d 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 7051060e89..987397a639 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 fd1ba36702..15dc46e5da 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":";;;;;;;;;;;;;;;;;;;CAkBA,WAAc,QAASA,GAAIC,EAAIC,GAC/B,YAoBA,IAAIC,IACAC,QAAS,QACTC,WACIC,YAAa,WACbC,kBAAmB,QACnBC,YAAa,QACbC,iBAAkB,aAClBC,eAAgB,WAChBC,gBAAiB,YACjBC,iBAAkB,kBAClBC,oBAAqB,0BACrBC,YAAa,GACbC,kBAAmB,OAEvBC,WAAY,KAmBhBb,GAAGc,cAAgB,WAIf,QAASC,GAAsBC,GAS3B,MARKA,KACDA,EAAQhB,EAAGE,UAAUQ,qBAGpBO,EAAUD,KACXC,EAAUD,OAGPA,EAXX,GAAIC,KAcJ,QAQIC,IAAK,SAAUC,GACX,IAAK,GAAIC,KAAKH,GACV,GAAIA,EAAUG,GAAGC,QAAQF,IAAU,EAC/B,OAAO,CAGf,QAAO,GAWXG,SAAU,SAAUH,EAAOH,GACvBA,EAAQD,EAAqBC,GAC7BC,EAAUD,GAAOO,KAAKJ,IAW1BK,WAAY,SAAUL,EAAOH,GACzBA,EAAQD,EAAqBC,EAC7B,KAAK,GAAIS,GAAI,EAAGA,EAAIR,EAAUD,GAAOU,OAAQD,IACzC,GAAIR,EAAUD,GAAOS,GAAGE,eAAiBR,EAAMQ,aAAc,CACzDV,EAAUD,GAAOY,OAAOH,EAAG,EAC3B,SAWZI,MAAO,SAAUb,GACTA,QACOC,GAAUD,GAEjBC,MAYRa,KAAM,SAAUd,GAEZ,MADAA,GAAQD,EAAqBC,GACtBC,EAAUD,QAa7BhB,EAAG+B,cAAgB,SAAUZ,EAAOH,GAChChB,EAAGc,cAAcQ,SAASH,EAAOH,IAWrChB,EAAGgC,gBAAkB,SAAUb,EAAOH,GAClChB,EAAGc,cAAcU,WAAWL,EAAOH,IAUvChB,EAAGiC,SAAW,SAAUd,GACpB,MAAOnB,GAAGc,cAAcI,IAAIC,IAShCnB,EAAGkC,oBAAsB,SAAUlB,GAC/BhB,EAAGc,cAAce,MAAMb,IAU3BhB,EAAGmC,UAAY,SAAUnB,GAErB,IAAK,GADDoB,GAASpC,EAAGc,cAAcgB,KAAKd,GAC1BS,EAAI,EAAGA,EAAIW,EAAOV,SAAUD,EACjCW,EAAOX,GAAGU,aAWlBnC,EAAGqC,WAAa,SAAUrB,GAEtB,IAAK,GADDoB,GAASpC,EAAGc,cAAcgB,KAAKd,GAC1BS,EAAI,EAAGA,EAAIW,EAAOV,SAAUD,EAC7BW,EAAOX,GAAGa,OACVF,EAAOX,GAAGa,SAYtBtC,EAAGuC,UAAY,SAAUvB,GAErB,IAAK,GADDoB,GAASpC,EAAGc,cAAcgB,KAAKd,GAC1BS,EAAI,EAAGA,EAAIW,EAAOV,SAAUD,EACjCW,EAAOX,GAAGe,QAGQ,QAAlBxC,EAAGa,YACHb,EAAGa,WAAWG,IAatBhB,EAAGyC,UAAY,SAAUzB,GAErB,IAAK,GADDoB,GAASpC,EAAGc,cAAcgB,KAAKd,GAC1BS,EAAI,EAAGA,EAAIW,EAAOV,SAAUD,EACjCW,EAAOX,GAAGiB,QAGQ,QAAlB1C,EAAGa,YACHb,EAAGa,WAAWG,IAYtBhB,EAAG2C,oBAAqB,EAkBxB3C,EAAG4C,WAAa,SAAUC,EAAWC,EAAUC,EAAOC,GAClD,GAAIhD,EAAG2C,oBAAsBG,GAAY,EACrC,MAAOD,EAGX,IAAII,GAAIJ,EAAUD,WAAWI,EAS7B,QAPIF,GAAY,GAAkBI,SAAbJ,KACjBG,EAAIA,EAAEH,SAASA,KAEfC,GAAS,GAAeG,SAAVH,KACdE,EAAIA,EAAEF,MAAMA,IAGTE,GAIXjD,EAAGmD,mBAAqB,SAAUC,EAAQN,EAAUC,EAAOC,GACvD,MAAII,GACO,SAAUP,GACb,MAAO7C,GAAG4C,WAAWC,EAAWC,EAAUC,EAAOC,IAG9C,SAAUH,GACb,MAAOA,KAMnB7C,EAAGqD,gBAAkB,SAAUT,EAAYU,GACvC,GAAIV,EAAWW,UAAYX,EAAWE,SAClCQ,EAASE,KAAKZ,OACX,CACH,GAAIa,GAAI,CACRb,GACKc,KAAK,aAAgBD,IACrBC,KAAK,MAAO,aACFD,GACHH,EAASE,KAAKZ,OAWlC5C,EAAG2D,SAgBH3D,EAAG2D,MAAMC,SAAW,SAAUC,EAAOC,GACjC,MAAOC,MAAKC,IAAIF,EAAMD,IAsB1B7D,EAAG2D,MAAMM,QAAU,SAAUJ,EAAOC,EAAKI,GACrC,MAAOA,IAQXlE,EAAG2D,MAAMQ,MAmBTnE,EAAG2D,MAAMQ,GAAGC,UAAY,SAAUA,GAC9B,GAAIC,GAAK,SAAUpB,EAAG7B,GAClB,GAAIkD,GAAIP,KAAKC,KAAK5C,EAAI6B,GAAKoB,EAAGE,WAC9B,OAAIvE,GAAGwE,MAAMC,aAAaH,EAAIP,KAAKW,MAAMJ,IAC9BP,KAAKW,MAAMJ,GAEXP,KAAKY,KAAKL,GAIzB,OADAD,GAAGE,WAAaH,EACTC,GAGXrE,EAAG4E,SACH5E,EAAG4E,MAAMF,MAAQ,SAAUjB,GACvB,MAAOM,MAAKW,MAAMjB,IAEtBzD,EAAG4E,MAAMD,KAAO,SAAUlB,GACtB,MAAOM,MAAKY,KAAKlB,IAErBzD,EAAG4E,MAAMA,MAAQ,SAAUnB,GACvB,MAAOM,MAAKa,MAAMnB,IAGtBzD,EAAG6E,SAAW,SAAUC,EAAKC,EAAcC,GACvC,GAAIC,GAAmBH,EAAIC,EAC3BD,GAAI,IAAMC,GAAgBE,EAC1BH,EAAIC,GAAgBC,GAGxBhF,EAAGkF,UAAY,SAAUC,GACrB,MAAKC,WAAU1D,QAGf1B,EAAGa,WAAasE,EACTnF,GAHIA,EAAGa,YAMlBb,EAAGqF,gBAAkB,SAAUC,GAC3B,MAAOA,aAAaC,SAAUD,EAAEE,aAAc,GAGlDxF,EAAGyF,UAEHzF,EAAGyF,OAAOC,UAAY,SAAUC,GAC5B,GAAIC,GAAOD,GAAO,2BAElBE,MAAKC,QAAUF,EAEfC,KAAKE,SAAW,WACZ,MAAOH,IAEXC,KAAKG,OAAQ,GAAKC,QAASD,OAE/BhG,EAAGyF,OAAOC,UAAUQ,UAAYX,OAAOY,OAAOF,MAAMC,WACpDlG,EAAGyF,OAAOC,UAAUQ,UAAUE,YAAcpG,EAAGyF,OAAOC,UAEtD1F,EAAGyF,OAAOY,sBAAwB,WAC9BrG,EAAGyF,OAAOC,UAAUY,MAAMT,KAAMT,YAGpCpF,EAAGyF,OAAOY,sBAAsBH,UAAYX,OAAOY,OAAOnG,EAAGyF,OAAOC,UAAUQ,WAC9ElG,EAAGyF,OAAOY,sBAAsBH,UAAUE,YAAcpG,EAAGyF,OAAOY,sBAElErG,EAAGyF,OAAOc,qBAAuB,WAC7BvG,EAAGyF,OAAOC,UAAUY,MAAMT,KAAMT,YAGpCpF,EAAGyF,OAAOc,qBAAqBL,UAAYX,OAAOY,OAAOnG,EAAGyF,OAAOC,UAAUQ,WAC7ElG,EAAGyF,OAAOc,qBAAqBL,UAAUE,YAAcpG,EAAGyF,OAAOc,qBASjEvG,EAAGwG,WAAa1G,EAAG2G,KAAKC,OAAO,YAO/B1G,EAAG2G,YASH3G,EAAG2G,SAASC,QAAU,SAAUA,GAG5B,IAAK,GAFD3D,GAAI,GAECxB,EAAI,EAAGA,EAAImF,EAAQlF,SAAUD,EAC9BA,EAAI,IACJwB,GAAK,MAETA,GAAKjD,EAAG2G,SAASE,OAAOD,EAAQnF,GAGpC,OAAOwB,IAUXjD,EAAG2G,SAASE,OAAS,SAAUA,GAC3B,GAAI5D,GAAI,EAcR,OAZsB,mBAAX4D,IAAqC,OAAXA,IAC7BA,YAAkBC,OACdD,EAAOnF,QAAU,EACjBuB,EAAI,IAAMjD,EAAGwE,MAAMuC,iBAAiBF,EAAO,IAAM,OAAS7G,EAAGwE,MAAMuC,iBAAiBF,EAAO,IAAM,IAC1FA,EAAOnF,QAAU,IACxBuB,EAAIjD,EAAGwE,MAAMuC,iBAAiBF,EAAO,KAGzC5D,EAAIjD,EAAGwE,MAAMuC,iBAAiBF,IAI/B5D,GA0BXjD,EAAGgH,MAAQ,SAAUvD,EAAGwD,GACpB,MAAKA,GAGE,SAAU3C,EAAG7C,GAAK,MAAOwF,GAAEzD,KAAKc,EAAGA,EAAEb,GAAIhC,IAFrC,SAAU6C,GAAK,MAAOA,GAAEb,KAUvCzD,EAAGwE,SASHxE,EAAGwE,MAAMuC,iBAAmB,SAAUF,GAClC,GAAI5D,GAAI,GAAK4D,CAYb,OAVIA,aAAkBK,MAClBjE,EAAIjD,EAAGwG,WAAWK,GACQ,gBAAb,GACb5D,EAAI4D,EACG7G,EAAGwE,MAAM2C,QAAQN,GACxB5D,EAAIjD,EAAGwE,MAAMuC,iBAAiBK,QAAQP,GAC/B7G,EAAGwE,MAAM6C,UAAUR,KAC1B5D,EAAIc,KAAKa,MAAMiC,IAGZ5D,GAEXjD,EAAGwE,MAAMuC,iBAAiBK,QAAUtH,EAAG4G,OAAO,OAgB9C1G,EAAGwE,MAAM8C,IAAM,SAAUC,EAAGC,EAAGC,GAK3B,GAJiB,gBAAND,KACPA,EAAIA,EAAEE,QAAQ,IAAK,KAGnBH,YAAaL,MAIb,MAHiB,gBAANM,KACPA,GAAKA,GAEC,WAANC,EACO,GAAIP,MAAKK,EAAEI,UAAYH,IAElCC,EAAIA,GAAK,MACF3H,EAAG2G,KAAKgB,GAAGG,OAAOL,EAAGC,GACzB,IAAiB,gBAANA,GAAgB,CAC9B,GAAIK,IAAeL,EAAI,GACvB,OAAOD,GAAI,EAAIA,GAAK,EAAIM,GAAcN,GAAK,EAAIM,GAE/C,MAAON,GAAIC,GAkBnBxH,EAAGwE,MAAMsD,SAAW,SAAUP,EAAGC,EAAGC,GAKhC,GAJiB,gBAAND,KACPA,EAAIA,EAAEE,QAAQ,IAAK,KAGnBH,YAAaL,MAIb,MAHiB,gBAANM,KACPA,GAAKA,GAEC,WAANC,EACO,GAAIP,MAAKK,EAAEI,UAAYH,IAElCC,EAAIA,GAAK,MACF3H,EAAG2G,KAAKgB,GAAGG,OAAOL,GAAIC,GAC1B,IAAiB,gBAANA,GAAgB,CAC9B,GAAIK,IAAeL,EAAI,GACvB,OAAOD,GAAI,EAAIA,GAAK,EAAIM,GAAcN,GAAK,EAAIM,GAE/C,MAAON,GAAIC,GAWnBxH,EAAGwE,MAAMuD,SAAW,SAAUtE,GAC1B,MAAOA,MAAOA,GAUlBzD,EAAGwE,MAAM2C,QAAU,SAAU1D,GACzB,MAAOA,MAAOA,GAAKA,KAAW,EAAJA,IAU9BzD,EAAGwE,MAAM6C,UAAY,SAAU5D,GAC3B,MAAOA,MAAOA,GAAKA,KAAW,EAAJA,IAU9BzD,EAAGwE,MAAMC,aAAe,SAAUhB,GAC9B,OAAQzD,EAAGwE,MAAMuD,SAAStE,IAAOA,EAAIzD,EAAGE,UAAUU,mBAAqB6C,GAAKzD,EAAGE,UAAUU,mBAY7FZ,EAAGwE,MAAMwD,MAAQ,SAAUC,EAAKC,EAAKC,GACjC,MAAOF,GAAMC,EAAMA,EAAOD,EAAME,EAAMA,EAAMF,EAShD,IAAIG,GAAa,CA+oUjB,OA9oUApI,GAAGwE,MAAM6D,SAAW,WAChB,QAASD,GAUbpI,EAAGwE,MAAM8D,SAAW,SAAUtF,GAC1B,MAAOA,GAAKuF,cAAcb,QAAQ,QAAS,KAAKA,QAAQ,SAAU,KAYtE1H,EAAGwE,MAAMgE,eAAiB,SAAUC,EAAQC,EAAUC,GAClDA,EAAMA,GAAOD,CACb,IAAIE,GAAUH,EAAOI,OAAOH,EAI5B,OAHIE,GAAQrF,UACRqF,EAAUH,EAAOK,OAAOH,IAErBC,GAUX5I,EAAGwE,MAAMuE,WAAa,SAAUtF,GAAK,MAAOzD,GAAGwE,MAAMuD,UAAUtE,IAAMA,EAAI,GAEzEzD,EAAGgJ,UAEHhJ,EAAGgJ,OAAOC,gBAAiB,EAE3BjJ,EAAGgJ,OAAOE,KAAO,SAAUvD,GASvB,MARIwD,WACIA,QAAQD,KACRC,QAAQD,KAAKvD,GACNwD,QAAQC,KACfD,QAAQC,IAAIzD,IAIb3F,EAAGgJ,QAGdhJ,EAAGgJ,OAAOK,MAAQ,SAAU1D,GASxB,MARI3F,GAAGgJ,OAAOC,gBAAkBE,UACxBA,QAAQE,MACRF,QAAQE,MAAM1D,GACPwD,QAAQC,KACfD,QAAQC,IAAIzD,IAIb3F,EAAGgJ,QAGdhJ,EAAGgJ,OAAOM,UAAY,SAAUC,EAAI5D,GAGhC,QAAS6D,KAKL,MAJKC,KACDzJ,EAAGgJ,OAAOE,KAAKvD,GACf8D,GAAS,GAENF,EAAGjD,MAAMT,KAAMT,WAN1B,GAAIqE,IAAS,CAQb,OAAOD,IAGXxJ,EAAG0J,QACCC,QAAS,MAsBb3J,EAAG0J,OAAOE,QAAU,SAAUC,EAAS9G,GACnC,MAAKA,IAKL/C,EAAG0J,OAAOC,QAAUE,MAEpBC,YAAW,WACHD,IAAY7J,EAAG0J,OAAOC,SACtBE,KAEL9G,QAVC8G,MAiCR7J,EAAG4G,WAcH5G,EAAG4G,QAAQmD,aAAe,SAAUC,EAAKC,GACrC,GAAIC,GAAQ,GAAIpD,OAAMkD,EAAKC,EAM3B,OALAC,GAAMC,WAAa,SAAUC,GACzB,MAAOA,IAASvE,KAAK,IAAMuE,EAAQvE,KAAK,IAE5CqE,EAAMG,WAAa,eAEZH,GAeXlK,EAAG4G,QAAQ0D,qBAAuB,SAAUzD,GACxC,GAAe,OAAXA,EAAmB,MAAO,KAE9B,IAAII,GAAIJ,CAOR,OANAI,GAAEkD,WAAa,SAAUC,GACrB,MAAOA,GAAM1I,QAAU0I,EAAM1I,SAAWuF,EAAEvF,QACnC0I,EAAM,KAAOnD,EAAE,IAAMmD,EAAM,KAAOnD,EAAE,IAE/CA,EAAEoD,WAAa,uBAERpD,GAsBXjH,EAAG4G,QAAQ2D,2BAA6B,SAAU1D,GAC9C,GAAe,OAAXA,EAAmB,MAAO,KAE9B,IACI2D,GADAvD,EAAIJ,CA4BR,OAxBI2D,GADAvD,EAAE,YAAcH,SAEX/C,KAAKmE,IAAIrB,EAAO,GAAG,GAAIA,EAAO,GAAG,IAAK9C,KAAKmE,IAAIrB,EAAO,GAAG,GAAIA,EAAO,GAAG,MACvE9C,KAAKoE,IAAItB,EAAO,GAAG,GAAIA,EAAO,GAAG,IAAK9C,KAAKoE,IAAItB,EAAO,GAAG,GAAIA,EAAO,GAAG,QAGzDA,EAAO,KAAK4D,EAAAA,KAAY5D,EAAO,GAAI4D,EAAAA,IAG1DxD,EAAEkD,WAAa,SAAUC,GACrB,GAAIM,GAAGC,CAUP,OARIP,aAAiBtD,QACjB4D,EAAIN,EAAM,GACVO,EAAIP,EAAM,KAEVM,EAAIN,EACJO,EAAIH,EAAe,GAAG,IAGnBE,GAAKF,EAAe,GAAG,IAAME,EAAIF,EAAe,GAAG,IACnDG,GAAKH,EAAe,GAAG,IAAMG,EAAIH,EAAe,GAAG,IAE9DvD,EAAEoD,WAAa,6BAERpD,GAaXjH,EAAG4K,UAAY,SAAUC,GAigBrB,QAASC,KACDC,IACKC,EAIOD,EAAKE,KAAK,YAClBF,EACKE,KAAK,UAAW,OAASJ,EAAOK,QAAU,IAAML,EAAOM,UAL5DJ,EACKE,KAAK,QAASJ,EAAOK,SACrBD,KAAK,SAAUJ,EAAOM,WAQvC,QAASC,KAGL,MAFAL,GAAOF,EAAOQ,OAAOvC,OAAO,OAC5BgC,IACOC,EAoIX,QAASO,GAA6BC,GAClC,IAAKV,EAAOU,KAAOV,EAAOU,KACtB,KAAM,IAAIvL,GAAGyF,OAAOY,sBAAsB,6BAA+BkF,EACrE,yBAA2BV,EAAOlJ,aAAe,KA4U7D,QAAS6J,GAAc5E,GACnB,GAAIiE,EAAOY,aAAeZ,EAAOY,YAAY5E,OAAQ,CACjD,GAAI6E,GAAKC,EAAed,EAAOY,YAAa7E,EACxC8E,KACA9E,EAAU8E,GAGlB,MAAO9E,GA1+BXiE,EAAOrF,WAAaxF,EAAGwE,MAAM6D,UAE7B,IAAIuD,GACAC,EAEAC,EACAC,EACAhB,EACAiB,EAeAC,EAAQC,EAQRC,EA8BAC,EACAC,EApDAC,EAAY,IACZC,EAAoB,SAAU3D,GAC9B,GAAIsC,GAAQtC,GAAWA,EAAQ4D,uBAAyB5D,EAAQ4D,wBAAwBtB,KACxF,OAAQA,IAASA,EAAQoB,EAAapB,EAAQoB,GAE9CG,EAAaF,EAEbG,EAAa,IACbC,EAAqB,SAAU/D,GAC/B,GAAIuC,GAASvC,GAAWA,EAAQ4D,uBAAyB5D,EAAQ4D,wBAAwBrB,MACzF,OAAQA,IAAUA,EAASuB,EAAcvB,EAASuB,GAElDE,EAAcD,EAEd3B,GAAsB,EAEtB6B,EAAe7M,EAAGgH,MAAM,OACxB8F,EAAiB9M,EAAGgH,MAAM,SAC1B+F,EAAS/M,EAAGgH,MAAM,OAElBgG,EAAYhN,EAAGgH,MAAM,OAGrBiG,GAAe,EAEfC,EAAS,SAAU5I,GACnB,MAAOuG,GAAOsC,cAAc7I,GAAK,KAAOuG,EAAOuC,gBAAgB9I,IAE/D+I,GAAe,EACfC,GAAyB,EAEzBC,EAAsB,IAEtBC,EAAmB,EAEnBC,EAAiBzN,EAAG2G,SAASC,QAE7B8G,GAAwB,YAAa,SAErCC,EAAc3N,EAAGE,UAAUQ,oBAE3BkN,EAAa9N,EAAG+N,SAChB,YACA,aACA,YACA,aACA,WACA,SACA,YACA,iBAKAC,KACAnC,EAAiB,SAAUF,EAAW7E,GAsBtC,MArBuB,KAAnBA,EAAQlF,OACR+J,EAAU5E,OAAO,MACS,IAAnBD,EAAQlF,QAAiBkF,EAAQ,GAAGuD,WAGjB,IAAnBvD,EAAQlF,QAA0C,iBAA1BkF,EAAQ,GAAGyD,WAE1CoB,EAAUsC,YAAYnH,EAAQ,IAE9B6E,EAAUuC,eAAe,SAAU1J,GAC/B,IAAK,GAAI7C,GAAI,EAAGA,EAAImF,EAAQlF,OAAQD,IAAK,CACrC,GAAIoF,GAASD,EAAQnF,EACrB,IAAIoF,EAAOsD,YAActD,EAAOsD,WAAW7F,GACvC,OAAO,CACJ,IAAIuC,GAAUvC,GAAKuC,GAAUvC,EAChC,OAAO,EAGf,OAAO,IAdXmH,EAAUwC,YAAYrH,EAAQ,IAiB3BA,GAGPsH,EAAQ,SAAUlN,GAClB,MAAOA,GAAMmN,MA+BjBtD,GAAOM,OAAS,SAAUA,GACtB,MAAK/F,WAAU1D,QAOfkL,EAAc9M,EAAGsO,QAAQjD,GAAUwB,GACnCT,EAAUhJ,OACH2H,IARE7K,EAAGwE,MAAMuD,SAASmE,KAEnBA,EAAUU,EAAYb,EAAMsC,SAEzBnC,IAuBfrB,EAAOK,MAAQ,SAAUA,GACrB,MAAK9F,WAAU1D,QAOf+K,EAAa3M,EAAGsO,QAAQlD,GAASqB,GACjCN,EAAS/I,OACF2H,IARE7K,EAAGwE,MAAMuD,SAASkE,KAEnBA,EAASQ,EAAWV,EAAMsC,SAEvBpC,IAiBfpB,EAAOyD,SAAW,SAAUA,GACxB,MAAKlJ,WAAU1D,QAGf4K,EAAYgC,EACLzD,GAHIyB,GAgBfzB,EAAO0D,UAAY,SAAUA,GACzB,MAAKnJ,WAAU1D,QAGfgL,EAAa6B,EACN1D,GAHI6B,GA6Bf7B,EAAO2D,mBAAqB,SAAUA,GAClC,MAAKpJ,WAAU1D,QAGfsJ,EAAsBwD,EACf3D,GAHIG,GAyBfH,EAAOY,UAAY,SAAUA,GACzB,MAAKrG,WAAU1D,QAGfkK,EAAaH,EACbZ,EAAO4D,cACA5D,GAJIe,GAuBff,EAAO6D,KAAO,SAAUpL,GACpB,MAAK8B,WAAU1D,QAGfwM,EAAQpO,EAAGsO,QAAQ9K,GACnBuH,EAAO4D,cACA5D,GAJIqD,EAAM1K,KAAKqH,EAAQgB,IA8BlChB,EAAO7J,MAAQ,SAAUA,EAAOgC,GAC5B,MAAKoC,WAAU1D,QAGfmK,EAAS7K,EACT6J,EAAO8D,WAAa3L,EACpB6H,EAAO4D,cACA5D,GALIgB,GAsBfhB,EAAO+D,SAAW,SAAUC,GACxB,MAAKzJ,WAAU1D,QAGfsL,EAAY6B,EACZ1C,EAAapM,EAAY+O,UAAUC,GAAG/B,GACtCnC,EAAO4D,cACA5D,GALImC,GAQfnC,EAAOmE,sBAAwB,SAAUN,GACrC,GAAIO,GAAWP,EAAKQ,MAAM,EAE1B,OAAID,GAASvN,QAAU,EACZuN,GAGN9C,IACDA,EAAapM,EAAY+O,UAAUC,GAAG/B,IAGnCb,EAAW8C,EAAU,EAAGA,EAASvN,UAW5CmJ,EAAO1I,UAAY,WACf,MAAO0I,GAAOhE,OAAO,OAkBzBgE,EAAOhC,OAAS,SAAU5F,GACtB,MAAO8I,GAAMlD,OAAO5F,IAiBxB4H,EAAOsE,UAAY,SAAUlM,GACzB,MAAO8I,GAAQA,EAAMoD,UAAUlM,GAAK,MAgBxC4H,EAAOuE,OAAS,SAAU3G,EAAQ4G,GAC9B,IAAKjK,UAAU1D,OACX,MAAOoK,EAEX,IAAI9L,EAAGqF,gBAAgBoD,GACnBqD,EAAUrD,EAAO2G,SACjBrD,EAAQtD,EAAO4C,OACfW,GAAW,MACR,CAAA,IAAIvD,EAWP,KAAM,IAAIzI,GAAGyF,OAAOc,qBAAqB,yBATrCuF,GADArD,EAAOI,QAAUJ,EAAO6G,QACd7G,EAAO4F,OAEP5F,EAEdsD,EAAQjM,EAAG+I,OAAOiD,GAClBC,EAAMuD,QAAQtP,EAAGE,UAAUC,aAAa,GACxCH,EAAG+B,cAAc8I,EAAQwE,GACzBrD,GAAW,EAKf,MADA2B,GAAc0B,EACPxE,GAUXA,EAAOlJ,WAAa,WAChB,GAAI4J,GAAIV,EAAOuE,QACf,OAAI7D,IAAKA,EAAEgE,GACAhE,EAAEgE,GAEThE,GAAKA,EAAE7D,QACA6D,EAAE7D,QAAQ,IAAK,IAEnB,WAAamD,EAAO2E,WAe/B3E,EAAOQ,KAAO,SAAUoE,GACpB,MAAKrK,WAAU1D,QAGfqK,EAAQ0D,EACD5E,GAHIkB,GAiBflB,EAAO6E,IAAM,SAAUC,GACnB,MAAKvK,WAAU1D,QAGfqJ,EAAO4E,EACA9E,GAHIE,GAcfF,EAAO+E,SAAW,WAEd,MADA/E,GAAOhC,OAAO,OAAOgH,SACdzE,KA6CXP,EAAOiF,cAAgB,SAAUC,GAC7B,MAAK3K,WAAU1D,QAGf+L,EAAiBsC,EACVlF,GAHI4C,GAef5C,EAAOmF,sBAAwB,SAAUC,GACrC,MAAK7K,WAAU1D,QAGf4L,EAAyB2C,EAClBpF,GAHIyC,GAoBfzC,EAAOqF,eAAiB,WACpB,GAAInE,EAAO,CACP,GAAIoE,GAAYtF,EAAOmF,wBAA0B,aAAe,SAChEnF,GAAOsE,UAAU,UAAUiB,MAAMD,EAAW,MAC5CtF,EAAOsE,UAAU,WAAWkB,KAAK5C,EAAe5C,EAAOjE,YAAYwJ,MAAMD,EAAW,MAExF,MAAOtF,IAWXA,EAAOyF,gBAAkB,WACrB,GAAIvE,EAAO,CACP,GAAIoE,GAAYtF,EAAOmF,wBAA0B,aAAe,UAC5D5F,EAAQS,EAAOmF,wBAA0B,SAAW,MACxDnF,GAAOsE,UAAU,UAAUiB,MAAMD,EAAW/F,GAC5CS,EAAOsE,UAAU,WAAWiB,MAAMD,EAAW/F,GAAOiG,KAAKxF,EAAOhE,UAEpE,MAAOgE,IAWXA,EAAO0F,mBAAqB,SAAUzN,GAClC,MAAKsC,WAAU1D,QAGf6L,EAAsBzK,EACf+H,GAHI0C,GAcf1C,EAAO2F,gBAAkB,SAAUzN,GAC/B,MAAKqC,WAAU1D,QAGf8L,EAAmBzK,EACZ8H,GAHI2C,GAMf3C,EAAO6C,qBAAuB,SAAUvI,GACpC,MAAKC,WAAU1D,QAGfgM,EAAuBvI,EAChB0F,GAHI6C,GAuBf7C,EAAOrI,OAAS,WACZ0J,EAAUD,EAAS/I,OACnB0K,EAAW6C,UAAU5F,GAEjB6C,GACAA,EAAqBgD,QAAQpF,EAGjC,IAAIqF,GAAS9F,EAAO+F,WAQpB,OANIxE,IACAA,EAAQ5J,SAGZqI,EAAOgG,oBAAoB,cAEpBF,GAGX9F,EAAOgG,oBAAsB,SAAUC,GACnClD,EAAWmD,cAAclG,GACrBA,EAAO0F,qBAAuB,GAAKxF,EACnCA,EAAKnI,aAAaE,SAAS+H,EAAO0F,sBAAsBxN,MAAM8H,EAAO2F,mBAChE9M,KAAK,MAAO,WACTkK,EAAW1I,UAAU2F,GACjBiG,GACAlD,EAAWkD,GAAOjG,MAI9B+C,EAAW1I,UAAU2F,GACjBiG,GACAlD,EAAWkD,GAAOjG,KAkB9BA,EAAOnI,OAAS,WACZoI,IACA8C,EAAWoD,UAAUnG,EAErB,IAAI8F,GAAS9F,EAAOoG,WAQpB,OANI7E,IACAA,EAAQ5J,SAGZqI,EAAOgG,oBAAoB,cAEpBF,GAgBX9F,EAAOqG,cAAgB,SAAUA,GAC7B,MAAK9L,WAAU1D,QAGf2K,EAAiB6E,EACVrG,GAHIwB,GAefxB,EAAOsG,YAAc,WAYjB,MAXI9E,GACAA,GAAe,EAAO,SAAU+E,EAAOT,GAC/BS,EACAjI,QAAQC,IAAIgI,GAEZpR,EAAGyC,UAAUoI,EAAOwE,gBAI5BrP,EAAGyC,UAAUoI,EAAOwE,cAEjBxE,GAWXA,EAAOwG,YAAc,WAYjB,MAXIhF,GACAA,GAAe,EAAO,SAAU+E,EAAOT,GAC/BS,EACAjI,QAAQC,IAAIgI,GAEZpR,EAAGuC,UAAUsI,EAAOwE,gBAI5BrP,EAAGuC,UAAUsI,EAAOwE,cAEjBxE,GAGXA,EAAOyG,wBAA0B,SAAUrK,GAC7B/D,SAAN+D,GACA2G,EAAW2D,SAAS1G,EAAQ5D,IAIpC4D,EAAO2G,sBAAwB,WAC3B5D,EAAW6D,OAAO5G,GAGtB,IAAI6G,GAAoB,SAAU9K,EAASC,GACvC,MAAe,QAAXA,GAAsC,mBAAb,GAClBD,EAAQlF,OAAS,EAErBkF,EAAQ+K,KAAK,SAAU1K,GAC1B,MAAOJ,IAAUI,GAAKJ,GAAUI,IA6BxC4D,GAAO+G,iBAAmB,SAAUA,GAChC,MAAKxM,WAAU1D,QAGfgQ,EAAoBE,EACb/G,GAHI6G,GAgBf7G,EAAOgH,UAAY,SAAUhL,GACzB,MAAO6K,GAAkB5D,EAAUjH,GAGvC,IAAIiL,GAAuB,SAAUlL,EAASC,GAC1C,IAAK,GAAIpF,GAAI,EAAGA,EAAImF,EAAQlF,OAAQD,IAChC,GAAImF,EAAQnF,IAAMoF,GAAUD,EAAQnF,IAAMoF,EAAQ,CAC9CD,EAAQhF,OAAOH,EAAG,EAClB,OAGR,MAAOmF,GAgCXiE,GAAOkH,oBAAsB,SAAUA,GACnC,MAAK3M,WAAU1D,QAGfoQ,EAAuBC,EAChBlH,GAHIiH,EAMf,IAAIE,GAAoB,SAAUpL,EAASC,GAEvC,MADAD,GAAQrF,KAAKsF,GACND,EA2BXiE,GAAOoH,iBAAmB,SAAUA,GAChC,MAAK7M,WAAU1D,QAGfsQ,EAAoBC,EACbpH,GAHImH,EAMf,IAAIE,GAAsB,SAAUtL,GAChC,SAilBJ,OAvjBAiE,GAAOsH,mBAAqB,SAAUA,GAClC,MAAK/M,WAAU1D,QAGfwQ,EAAsBC,EACftH,GAHIqH,GA0BfrH,EAAOuH,cAAgB,SAAUvL,GAG7B,MAFAiH,GAAWoE,EAAoBpE,GAC/BjD,EAAOhE,OAAOA,GACPgE,GAwDXA,EAAOhE,OAAS,SAAUA,GACtB,IAAKzB,UAAU1D,OACX,MAAOoM,GAASpM,OAAS,EAAIoM,EAAS,GAAK,IAE/C,IAAIlH,GAAUkH,CA4Bd,OA3BIjH,aAAkBC,QAASD,EAAO,YAAcC,SAAUD,EAAOsD,WAEjEtD,EAAO,GAAG6J,QAAQ,SAAUzJ,GAEpBL,EADA8K,EAAkB9K,EAASK,GACjB6K,EAAqBlL,EAASK,GAE9B+K,EAAkBpL,EAASK,KAI7CL,EADkB,OAAXC,EACGqL,EAAoBtL,GAE1B8K,EAAkB9K,EAASC,GACjBiL,EAAqBlL,EAASC,GAE9BmL,EAAkBpL,EAASC,GAG7CiH,EAAWtC,EAAa5E,GACxBiE,EAAOyG,wBAAwBzK,GAEjB,OAAVkF,GAAkBlB,EAAOgH,YACzBhH,EAAOqF,iBAEPrF,EAAOyF,kBAGJzF,GAYXA,EAAOjE,QAAU,WACb,MAAOkH,IAGXjD,EAAOwH,kBAAoB,SAAUjR,GACjCtB,EAAG+I,OAAOzH,GAAGkO,QAAQtP,EAAGE,UAAUK,gBAAgB,GAClDT,EAAG+I,OAAOzH,GAAGkO,QAAQtP,EAAGE,UAAUI,kBAAkB,IAGxDuK,EAAOyH,eAAiB,SAAUlR,GAC9BtB,EAAG+I,OAAOzH,GAAGkO,QAAQtP,EAAGE,UAAUK,gBAAgB,GAClDT,EAAG+I,OAAOzH,GAAGkO,QAAQtP,EAAGE,UAAUI,kBAAkB,IAGxDuK,EAAO0H,eAAiB,SAAUnR,GAC9BtB,EAAG+I,OAAOzH,GAAGkO,QAAQtP,EAAGE,UAAUK,gBAAgB,GAClDT,EAAG+I,OAAOzH,GAAGkO,QAAQtP,EAAGE,UAAUI,kBAAkB,IAWxDuK,EAAO2H,QAAU,SAAUC,GACvB,GAAI5L,GAASgE,EAAOsC,cAAcsF,EAClCzS,GAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAOA,GACdgE,EAAOsG,iBAmDftG,EAAO6H,cAAgB,SAAUA,GAC7B,MAAKtN,WAAU1D,QAGfiK,EAAiB+G,EACV7H,GAHIc,GAOfd,EAAO+F,UAAY,WAEf,MAAO/F,IAGXA,EAAOoG,UAAY,WAEf,MAAOpG,IAGXA,EAAO8H,YAAc,WAEjB,UAGJ9H,EAAO+H,gBAAkB,aAIzB/H,EAAOgI,YAAc,aAIrBhI,EAAOiI,aAAe,aAItBjI,EAAOkI,mBAAqB,WAExB,OAAO,GAkBXlI,EAAOsC,YAAc,SAAUA,GAC3B,MAAK/H,WAAU1D,QAGfmL,EAAeM,EACRtC,GAHIgC,GAsBfhC,EAAOuC,cAAgB,SAAUA,GAC7B,MAAKhI,WAAU1D,QAGfoL,EAAiBM,EACVvC,GAHIiC,GAuBfjC,EAAOmI,MAAQ,SAAUC,EAAeC,GACpC,MAAK9N,WAAU1D,QAGfqL,EAASkG,GACa/P,SAAjBgQ,GAA+BA,KAChCjG,GAAe,GAEZpC,GANIkC,GAiBflC,EAAOsI,YAAc,SAAUA,GAC3B,MAAK/N,WAAU1D,QAGfuL,EAAekG,EACRtI,GAHIoC,GA6BfpC,EAAOuI,MAAQ,SAAUC,GACrB,MAAKjO,WAAU1D,QAGfwL,EAASmG,EACFxI,GAHIqC,GAefrC,EAAOyI,YAAc,SAAUA,GAC3B,MAAKlO,WAAU1D,QAGf2L,EAAeiG,EACRzI,GAHIwC,GA8BfxC,EAAO3F,UAAYlF,EAAGgJ,OAAOM,UAAU,SAAUiK,GAE7C,MADA1I,GAAO2I,GAAG,aAAexT,EAAGwE,MAAM6D,WAAYkL,GACvC1I,GACR,4GAWHA,EAAOwE,WAAa,SAAUA,GAC1B,MAAKjK,WAAU1D,QAGVsK,GACDhM,EAAGgC,gBAAgB6I,EAAQ8C,GAE/BA,EAAc0B,EACTrD,GACDhM,EAAG+B,cAAc8I,EAAQ8C,GAEtB9C,GATI8C,GAwBf9C,EAAO4D,YAAc,WAEjB,MAAO5D,IAcXA,EAAO4I,OAAS,SAAUA,GACtB,MAAKrO,WAAU1D,QAGf0K,EAAUqH,EACVrH,EAAQ3D,OAAOoC,GACRA,GAJIuB,GAcfvB,EAAO2E,QAAU,WACb,MAAO3E,GAAOrF,YAclBqF,EAAO6I,QAAU,SAAUC,GACvB,GAAIC,IACA,SACA,QACA,aACA,aACA,QACA,QACA,QACA,WACA,iBAGJ,KAAK,GAAItO,KAAKqO,GACgB,kBAAf9I,GAAOvF,GACVqO,EAAKrO,YAAcwB,QAAS8M,EAAavS,QAAQiE,MAAO,EACxDuF,EAAOvF,GAAGgB,MAAMuE,EAAQ8I,EAAKrO,IAE7BuF,EAAOvF,GAAG9B,KAAKqH,EAAQ8I,EAAKrO,IAGhCtF,EAAGgJ,OAAOK,MAAM,mCAAqC/D,EAG7D,OAAOuF,IAkCXA,EAAO2I,GAAK,SAAU1C,EAAO+C,GAEzB,MADAjG,GAAW4F,GAAG1C,EAAO+C,GACdhJ,GAGJA,GAYX7K,EAAG8T,YAAc,SAAUjJ,GACvB,GAAIkJ,IAAWC,IAAK,GAAIC,MAAO,GAAIC,OAAQ,GAAIC,KAAM,GA+BrD,OAhBAtJ,GAAOuJ,QAAU,SAAUA,GACvB,MAAKhP,WAAU1D,QAGfqS,EAAUK,EACHvJ,GAHIkJ,GAMflJ,EAAOwJ,eAAiB,WACpB,MAAOxJ,GAAOK,QAAUL,EAAOuJ,UAAUD,KAAOtJ,EAAOuJ,UAAUH,OAGrEpJ,EAAOyJ,gBAAkB,WACrB,MAAOzJ,GAAOM,SAAWN,EAAOuJ,UAAUJ,IAAMnJ,EAAOuJ,UAAUF,QAG9DrJ,GAYX7K,EAAGuU,WAAa,SAAU1J,GACtB,GAAI2J,GAAU1U,EAAG2U,MAAMC,cACnBC,GAAmB,EAEnBC,EAAiB,SAAUtQ,GAAK,MAAOuG,GAAOsC,cAAc7I,GA8JhE,OAzIAuG,GAAOgK,OAAS,SAAUC,GACtB,MAAK1P,WAAU1D,QAIX8S,EADAM,YAAsBhO,OACZhH,EAAG2U,MAAMM,WAAW7K,MAAM4K,GAE1BhV,EAAGsO,QAAQ0G,GAElBjK,GAPI2J,GAoBf3J,EAAOmK,cAAgB,SAAUxN,GAC7B,MAAOqD,GAAOgK,OAAO/U,EAAG2U,MAAMxQ,UAAUiG,MAAM1C,KAWlDqD,EAAOoK,aAAe,SAAUzN,GAC5B,MAAOqD,GAAOgK,OAAO/U,EAAG2U,MAAMS,SACRhL,MAAM1C,GACN2N,YAAYrV,EAAGsV,kBAkBzCvK,EAAOwK,cAAgB,SAAUA,GAC7B,MAAKjQ,WAAU1D,QAGfkT,EAAiBS,EACjBV,GAAmB,EACZ9J,GAJI+J,GAQf/J,EAAOyK,qBAAuB,WAC1B,MAAOX,IAeX9J,EAAO0K,YAAc,SAAUrR,GAC3B,MAAKkB,WAAU1D,QAGf8S,EAAQtQ,OAAOA,GACR2G,GAHI2J,EAAQtQ,UAcvB2G,EAAO2K,qBAAuB,WAC1B,GAAIC,IAAa3V,EAAGoI,IAAI2C,EAAO6D,OAAQ7D,EAAOwK,iBAC7BvV,EAAGqI,IAAI0C,EAAO6D,OAAQ7D,EAAOwK,iBAE9C,OADAb,GAAQtQ,OAAOuR,GACR5K,GAYXA,EAAO6K,SAAW,SAAUpR,EAAG7C,GAC3B,MAAO+S,GAAQI,EAAepR,KAAKqC,KAAMvB,EAAG7C,KAehDoJ,EAAO8K,gBAAkB3V,EAAGgJ,OAAOM,UAAU,SAAUqM,GACnD,MAAKvQ,WAAU1D,QAGfmJ,EAAO6K,SAAWC,EACX9K,GAHIA,EAAO6K,UAInB,iHAEI7K,GAeX7K,EAAG4V,oBAAsB,SAAU/K,GAsb/B,QAASgL,GAAgBC,EAAIC,GACzB,OAAQD,IAAOC,GAAMD,EAAGpU,SAAWqU,EAAGrU,QAClCoU,EAAGnE,KAAK,SAAUqE,EAAMvU,GAAK,MAAQuU,IAAQD,EAAGtU,GAAMuU,EAAKjQ,aAAegQ,EAAGtU,GAAGsE,WAAaiQ,IAASD,EAAGtU,KAGjH,QAASwU,GAAcC,EAAG1T,GACjBqI,EAAOsL,aAKJtL,EAAOuL,YAAqC,IAAvBC,EAAGnS,SAASxC,SACjC2U,EAAGnS,OAAO2G,EAAOyL,mBALjBzL,EAAOuL,YACPC,EAAGnS,QAAQ2G,EAAO0L,WAAY1L,EAAO2L,YAS7C,IAAIC,GAAOJ,EAAGnS,UACV1B,GAAUqT,EAAea,EAAcD,KACvC5L,EAAO8L,UAEXD,EAAeD,EAGX5L,EAAOsL,YACPE,EAAGO,YAAY,EAAG/L,EAAOgM,eAAgBC,GAC3BjM,EAAOkM,mBAAqBC,GAAyB,GAEnEX,EAAGnM,OAAO,EAAGW,EAAOgM,gBAGxBI,EAASA,EAAOxC,MAAM5J,EAAOH,KAE7BwM,EAAwBhB,GAgC5B,QAASgB,GAAyBhB,GAC9B,GAAIiB,GAAYjB,EAAErN,OAAO,KAAOuO,EAEhC,IAAIC,EAAyB,CACrBF,EAAU5T,UACV4T,EAAYjB,EAAEoB,OAAO,IAAK,gBACrBrM,KAAK,QAASsM,EAAkB,IAAMH,GACtCnM,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOuJ,UAAUJ,IAAM,KAG/F,IAAIwD,GAAQP,EAAOQ,aAAeR,EAAOQ,aACZ,kBAAbpB,GAAGmB,MAAuBnB,EAAGmB,MAAMP,EAAOO,QAAQ,IAAMnB,EAAGnS,SAEvEwT,EAAQP,EAAUhI,UAAU,QAC3BT,KAAK8I,GAGNG,EAAcD,EAAME,QACnB9O,OAAO,QACPmC,KAAK,KAAM,SAAU3G,GAClB,MAAO+R,GAAG/R,KAEb2G,KAAK,KAAMJ,EAAOgN,UAAYhN,EAAOuJ,UAAUJ,KAC/C/I,KAAK,KAAM,SAAU3G,GAClB,MAAO+R,GAAG/R,KAEb2G,KAAK,KAAM,GACXA,KAAK,UAAW,EACrBjL,GAAG4C,WAAW+U,EAAa9M,EAAO0F,qBAAsB1F,EAAO2F,mBAC1DvF,KAAK,UAAW,GAGrBjL,EAAG4C,WAAW8U,EAAO7M,EAAO0F,qBAAsB1F,EAAO2F,mBACpDvF,KAAK,KAAM,SAAU3G,GAClB,MAAO+R,GAAG/R,KAEb2G,KAAK,KAAMJ,EAAOgN,UAAYhN,EAAOuJ,UAAUJ,KAC/C/I,KAAK,KAAM,SAAU3G,GAClB,MAAO+R,GAAG/R,KAEb2G,KAAK,KAAM,GAGhByM,EAAMI,OAAOjI,aAEbsH,GAAUhI,UAAU,QAAQU,SAsZpC,QAASkI,KACL,MAAOlN,GAAOgN,UAAYhN,EAAOuJ,UAAUJ,IAuG/C,QAASgE,KACL,MAAOnN,GAAOlJ,aAAa+F,QAAQ,eAAgB,KAAO,QAqB9D,QAASuQ,KACL,GAAIC,GAAOlY,EAAGwE,MAAMgE,eAAe2P,EAAS,QAGxC5I,EAAKyI,IACLI,EAAgBpY,EAAGwE,MAAMgE,eAAe0P,EAAM,IAAM3I,EAAI,YAAYtE,KAAK,KAAMsE,GAE/E8I,EAAyB,EAAfC,EAEdtY,GAAGwE,MAAMgE,eAAe4P,EAAe,QAClCnN,KAAK,QAASJ,EAAOgM,cAAgBwB,GACrCpN,KAAK,SAAUJ,EAAO0N,cAAgBF,GACtCpN,KAAK,YAAa,cAAgBqN,GAAe,MAAQA,GAAe,KA6BjF,QAASE,GAAWhW,GACZqI,EAAOsL,cACPsC,GAAW,GAGfxC,EAAapL,EAAOqL,IAAK1T,GACzBqI,EAAO6N,cAAc7N,EAAOqL,KAE5BrL,EAAO8N,YAEH9N,EAAOuL,YAAcwC,GAAapW,IAClCqI,EAAOgO,YAAYhO,EAAOqL,MAG1BrL,EAAOiO,YAAcF,GAAapW,IAClCqI,EAAOkO,YAAYlO,EAAOqL,KAG1B1T,EACAqI,EAAOmO,YAAYnO,EAAOqL,KAAK,GAE/BrL,EAAOoO,YAAYpO,EAAOqL,IAAK0C,GAEnC/N,EAAOqO,qBACPN,GAAY,EAGhB,QAASO,KACDC,GACAvO,EAAOwO,mBACAC,IACPzO,EAAO0O,oBAiBf,QAASC,KAEL,GADAC,GAAa,EACTC,EAAkB,CAClB,GAAIC,GAAaC,CACbC,KACAF,EAAaG,EAAiBH,EAAYE,EAAYnP,IAAIxG,UAE9D,IAAI6V,GAAcC,EAAgBnP,EAAOH,IAAIxG,SAAUyV,EACnDI,IACAlP,EAAOH,IAAIxG,OAAO6V,GAI1B,GAAI7V,GAAS2G,EAAOH,IAAIxG,SACpB+V,EAAYja,EAAG4G,QAAQmD,aAAa7F,EAAO,GAAIA,EAAO,GAE1D2G,GAAOuH,cAAc6H,GACrBpP,EAAO8L,UACP9L,EAAOnI,SAEHmX,IAAgBK,EAAYrP,EAAOhE,SAAUgT,EAAYhT,WACzD7G,EAAG0J,OAAOE,QAAQ,WACdiQ,EAAYzH,cAAc6H,GAC1BJ,EAAYnX,WAIpBmI,EAAO2G,wBAEPxR,EAAG0J,OAAOE,QAAQ,WACdiB,EAAOsG,eACRnR,EAAGE,UAAUS,aAEhB8Y,GAAcS,EAAYhW,EAAQ0V,GAGtC,QAASE,GAAkBK,EAAMC,GAI7B,OAHID,EAAK,GAAKC,EAAK,IAAMD,EAAK,GAAKC,EAAK,KACpCjR,QAAQD,KAAK,gCAETnF,KAAKoE,IAAIgS,EAAK,GAAIC,EAAK,IAAKrW,KAAKmE,IAAIiS,EAAK,GAAIC,EAAK,KAG/D,QAASJ,GAAiBK,EAAQV,GAC9B,GAAIW,GAAOD,EAAO,GAAKA,EAAO,EAC9B,OAAIA,GAAO,GAAKV,EAAW,IACfA,EAAW,GAAI5V,KAAKmE,IAAIyR,EAAW,GAAI3Z,EAAGwE,MAAM8C,IAAIqS,EAAW,GAAIW,EAAM,YAC1ED,EAAO,GAAKV,EAAW,IACtB5V,KAAKoE,IAAIwR,EAAW,GAAI3Z,EAAGwE,MAAMsD,SAAS6R,EAAW,GAAIW,EAAM,WAAYX,EAAW,IAEvF,KAwDf,QAASO,GAAaK,EAAQC,GAC1B,OAAKD,IAAWC,MAEJD,IAAWC,KAEM,IAAlBD,EAAO7Y,QAAkC,IAAlB8Y,EAAO9Y,QAE9B6Y,EAAO,GAAGE,YAAcD,EAAO,GAAGC,WACzCF,EAAO,GAAGE,YAAcD,EAAO,GAAGC,WA2B1C,QAASC,GAAkBxQ,GACvB,MAAOA,aAAiBpD,QAASoD,EAAMxI,OAAS,EA9xCpD,GAAI6V,GAAkB,YAClBoD,EAAmB,aACnBvD,EAAiB,WACjBwD,EAAqB,eACrBC,EAAqB,eACrBC,EAA6B,EAEjCjQ,GAAS7K,EAAGuU,WAAWvU,EAAG8T,YAAY9T,EAAG4K,UAAUC,KAEnDA,EAAOgK,OAAO/U,EAAG2U,MAAMsG,cACvBlQ,EAAO6C,uBAAuBnM,KAAK,IACnC,IAAI4W,GACA6C,EACAC,EAEA5E,EACAuD,EAMAsB,EAEAxE,EAEAyE,EAIAC,EAKAC,EAMAC,EASAzB,EACA0B,EAlCAtE,EAASnX,EAAG4P,IAAI8L,OAAOC,OAAO,UAC9BC,EAAU1b,EAAG2D,MAAMC,SACnB+X,EAAgB,EAChBC,EAAoB,MACpBC,GAAe,EAEfC,EAAqB,EAIrBC,EAASjc,EAAG4P,IAAI8L,OAAOC,OAAO,QAC9BO,EAAgB,EAChBC,GAAe,EAEfC,EAAqB,EAErBC,EAASrc,EAAG4P,IAAI0M,QAChB3D,GAAW,EAGX4D,GAA4B,EAC5BhF,GAA0B,EAE1BoC,GAAa,EAAOb,GAAY,EAGhC0D,GAAc,EAAG7R,EAAAA,GACjBiP,GAAmB,EAEnB6C,EAAQzc,EAAG0c,SAASC,OAAOjJ,GAAG,OAAQgG,GACtCkD,GAAY5c,EAAG0c,SAASC,OAAOjJ,GAAG,OAAQ,MAC1C8F,IAAwB,EAKxBF,IAAiB,EACjBd,GAAe,EAEftB,GAAyB,GACzBF,GAAoB,EAEpB6F,IAAiB,CAsuCrB,OA1tCA9R,GAAO8L,QAAU,WAGb,MAFA2E,GAAapY,OACb0V,GAAY,EACL/N,GAGXA,EAAO+R,SAAW,WACd,MAAOhE,IAoBX/N,EAAOgS,WAAa,SAAUA,GAC1B,MAAKzX,WAAU1D,QAGfmY,EAAcgD,EACdhD,EAAYiD,WAAWjS,GAChBA,GAJIgP,GAefhP,EAAOkS,UAAY,SAAU1C,GACzB,MAAKjV,WAAU1D,QAGf4a,EAAajC,EACNxP,GAHIyR,GAcfzR,EAAOmS,gBAAkB,SAAUA,GAC/B,MAAK5X,WAAU1D,QAGf4a,EAAW,GAAKU,EAAkB,EAAI,EACtCtD,EAAmBsD,EACZnS,GAJI6O,GAOf7O,EAAOoS,WAAa,SAAUxU,GAEtB0P,EADWjV,SAAXuF,EACUoC,EAAO6E,MAEPjH,CAGd,IAAIyU,GAAOC,OAAOC,SAASF,KAAKG,MAAM,KAAK,EAQ3C,OANArC,GAAK7C,EAAQrP,OAAO,KAEpBmS,EAAcD,EAAGlS,OAAO,KAAKmC,KAAK,QAAS,cACtCA,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,KAAOtJ,EAAOuJ,UAAUJ,IAAM,KACvF/I,KAAK,YAAa,OAASiS,EAAO,IAAMlF,IAAkB,KAExDgD,GAaXnQ,EAAOqL,EAAI,SAAUoH,GACjB,MAAKlY,WAAU1D,QAGfsZ,EAAKsC,EACEzS,GAHImQ,GAgBfnQ,EAAO0S,cAAgB,SAAUA,GAC7B,MAAKnY,WAAU1D,QAGf0X,GAAiBmE,EACV1S,GAHIuO,IAcfvO,EAAO2S,WAAa,SAAUA,GAC1B,MAAKpY,WAAU1D,QAGfuZ,EAAcuC,EACP3S,GAHIoQ,GAwBfpQ,EAAOH,EAAI,SAAU+S,GACjB,MAAKrY,WAAU1D,QAGf2U,EAAKoH,EACL7D,EAAmBvD,EAAGnS,SACtB2G,EAAO8L,UACA9L,GALIwL,GAQfxL,EAAO6S,gBAAkB,WACrB,MAAO9D,IAoCX/O,EAAO8S,OAAS,SAAUA,GACtB,MAAKvY,WAAU1D,QAGfga,EAAUiC,EACH9S,GAHI6Q,GA6Bf7Q,EAAO+S,MAAQ,SAAUA,GACrB,MAAKxY,WAAU1D,QAGfuV,EAAS2G,EACF/S,GAHIoM,GAefpM,EAAOuL,SAAW,SAAUA,GACxB,MAAKhR,WAAU1D,QAGfma,EAAezF,EACRvL,GAHIgR,GAoBfhR,EAAOgT,aAAe,SAAUxF,GAC5B,MAAKjT,WAAU1D,QAGfia,EAAgBtD,EACTxN,GAHI8Q,GAoBf9Q,EAAOiT,iBAAmB,SAAUC,GAChC,MAAK3Y,WAAU1D,QAGfka,EAAoBmC,EACblT,GAHI+Q,GAcf/Q,EAAOmT,WAAa,WAChB,GAAmB9a,SAAfoY,EAA0B,CAC1B,GAAI3X,GAAQkH,EAAO8S,SAAS9S,EAAOH,IAAIxG,SAAS,GAAI2G,EAAOH,IAAIxG,SAAS,GAAI2G,EAAOH,IAAIxG,SAGnFoX,GADA3X,YAAiBmD,OACJnD,EAAMjC,OAENiC,EAIrB,MAAO2X,IAaXzQ,EAAOoT,cAAgB,SAAUA,GAC7B,MAAK7Y,WAAU1D,QAGfib,GAAiBsB,EACVpT,GAHI8R,IAef9R,EAAOsL,UAAY,WACf,MAAOtL,GAAO8S,WAAa3d,EAAG2D,MAAMM,SAGxC4G,EAAOkM,iBAAmB,WACtB,OAAO,GAGXlM,EAAOyL,gBAAkB,WACrB,GAAI4H,GAASrT,EAAOmE,sBAAsBnE,EAAO6D,OACjD,OAAOwP,GAAOC,IAAItT,EAAOsC,gBAuC7BtC,EAAOgO,YAAc,SAAU3C,GAC3B,GAAIkI,GAASlI,EAAErN,OAAO,MAElBuV,GAAO7a,UACP6a,EAASlI,EAAEpN,OAAO,KACbmC,KAAK,QAAS,UACdA,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOgN,UAAY,KAG3F,IAAIwG,GAAWnI,EAAErN,OAAO,QAAUgS,EAC9BwD,GAAS9a,SAAWsH,EAAOyT,eAC3BD,EAAWnI,EAAEpN,OAAO,QACfmC,KAAK,QAAS4P,GACd5P,KAAK,YAAa,cAAgBJ,EAAOuJ,UAAUD,KAAOtJ,EAAOgM,cAAgB,GAAK,KAChFhM,EAAOM,SAAW2Q,GAAsB,KAC9C7Q,KAAK,cAAe,WAEzBJ,EAAOyT,cAAgBD,EAAShO,SAAWxF,EAAOyT,cAClDD,EAAShO,KAAKxF,EAAOyT,cAGzBte,EAAG4C,WAAWwb,EAAQvT,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOgN,UAAY,KAClFrU,KAAKyT,GACVjX,EAAG4C,WAAWyb,EAAUxT,EAAO0F,qBAAsB1F,EAAO2F,mBACvDvF,KAAK,YAAa,cAAgBJ,EAAOuJ,UAAUD,KAAOtJ,EAAOgM,cAAgB,GAAK,KAChFhM,EAAOM,SAAW2Q,GAAsB,MAoDvDjR,EAAOgN,QAAU,WACb,MAAQhN,GAAOM,SAAWN,EAAOuJ,UAAUF,QAG/CrJ,EAAOgM,YAAc,WACjB,MAAOhM,GAAOwJ,kBAalBxJ,EAAOyT,WAAa,SAAUC,EAAWlG,GACrC,MAAKjT,WAAU1D,QAGfwZ,EAAcqD,EACd1T,EAAOuJ,UAAUF,QAAU4H,EAC3BA,EAAkC5Y,SAAZmV,EAAyByC,EAA6BzC,EAC5ExN,EAAOuJ,UAAUF,QAAU4H,EACpBjR,GANIqQ,GASfrQ,EAAO6N,cAAgB,SAAUxC,GAC7B,GAAWhT,SAAPiY,GAAoBtQ,EAAOiO,WAAY,CAC5B5V,SAAPiY,IACAA,EAAKrb,EAAG2U,MAAMS,SAElB,IAAIhN,GAAM2C,EAAO2T,YAAc,EAC3BrW,EAAM0C,EAAO4T,YAAc,CAC/BtD,GAAGjX,QAAQgE,EAAKC,IAAMuW,YAAY7T,EAAO0N,cAAe,IAG5D4C,EAAGjR,OAAOW,EAAO0N,cAAe,IAChCwD,EAASA,EAAOtH,MAAM0G,GAElBwB,IACAZ,EAAON,OAAO,SAGlB5Q,EAAO8T,kCAAkCzI,EAAGiF,EAAIY,IAGpDlR,EAAO+T,iBAAmB,SAAUC,EAAWxO,EAAMyO,EAAUC,GAC3DA,EAAiBA,GAAkB7C,CAEnC,IAAI8C,GAAWnU,EAAOqL,IAAIrN,OAAO,QAAU+R,EAAqB,IAAMiE,EAAY,UAC9EI,EAAkBpU,EAAOuJ,UAAUJ,IAAMnJ,EAAO0N,cAAgB,CAChEyG,GAASzb,SAAW8M,IACpB2O,EAAWnU,EAAOqL,IAAIpN,OAAO,QACxBmC,KAAK,YAAa,aAAe8T,EAAiB,IAAME,EAAiB,YAAcH,EAAW,KAClG7T,KAAK,QAAS2P,EAAqB,IAAMiE,EAAY,UACrD5T,KAAK,cAAe,UACpBoF,KAAKA,IAEVA,GAAQ2O,EAAS3O,SAAWA,GAC5B2O,EAAS3O,KAAKA,GAElBrQ,EAAG4C,WAAWoc,EAAUnU,EAAO0F,qBAAsB1F,EAAO2F,mBACvDvF,KAAK,YAAa,aAAe8T,EAAiB,IAAME,EAAiB,YAAcH,EAAW,MAG3GjU,EAAOqU,cAAgB,SAAUL,EAAWrD,EAAM2D,GAC9C,GAAIC,GAASvU,EAAOqL,IAAIrN,OAAO,KAAOgW,EAClCO,GAAO7b,UACP6b,EAASvU,EAAOqL,IAAIpN,OAAO,KACtBmC,KAAK,QAAS,QAAU4T,GACxB5T,KAAK,YAAa,aAAekU,EAAW,IAAMtU,EAAOuJ,UAAUJ,IAAM,MAGlFhU,EAAG4C,WAAWwc,EAAQvU,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,YAAa,aAAekU,EAAW,IAAMtU,EAAOuJ,UAAUJ,IAAM,KACzExQ,KAAKgY,IAGd3Q,EAAOkO,YAAc,WACjB,GAAIsG,GAAe1C,GAAkB9R,EAAOK,QAAUL,EAAOuJ,UAAUH,MAASpJ,EAAOyU,SACvFzU,GAAOqU,cAAc,IAAKnD,EAAQsD,EAClC,IAAIE,GAAgB5C,GAAkB9R,EAAOK,QAAUgR,EAAsBA,EACzE4C,EAAWnC,GAAiB,IAAK,EACrC9R,GAAO+T,iBAAiB,IAAK/T,EAAO2U,aAAcV,EAAUS,IAGhE1U,EAAO8T,kCAAoC,SAAUzI,EAAGzB,EAAO+G,GAC3D,GAAIrE,GAAYjB,EAAErN,OAAO,KAAO8R,EAEhC,IAAI0B,EAA2B,CAC3B,GAAI7E,GAAQgE,EAAK/D,aAAe+D,EAAK/D,aAAehD,EAAM+C,MAAMgE,EAAKhE,QAAQ,GAEzEL,GAAU5T,UACV4T,EAAYjB,EAAEoB,OAAO,IAAK,gBACrBrM,KAAK,QAASsM,EAAkB,IAAMoD,GACtC1P,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOuJ,UAAUJ,IAAM,KAG/F,IAAI0D,GAAQP,EAAUhI,UAAU,QAC3BT,KAAK8I,GAGNG,EAAcD,EAAME,QACnB9O,OAAO,QACPmC,KAAK,KAAM,GACXA,KAAK,KAAM,SAAU3G,GAClB,MAAOmQ,GAAMnQ,KAEhB2G,KAAK,KAAMJ,EAAOgM,eAClB5L,KAAK,KAAM,SAAU3G,GAClB,MAAOmQ,GAAMnQ,KAEhB2G,KAAK,UAAW,EACrBjL,GAAG4C,WAAW+U,EAAa9M,EAAO0F,qBAAsB1F,EAAO2F,mBAC1DvF,KAAK,UAAW,GAGrBjL,EAAG4C,WAAW8U,EAAO7M,EAAO0F,qBAAsB1F,EAAO2F,mBACpDvF,KAAK,KAAM,GACXA,KAAK,KAAM,SAAU3G,GAClB,MAAOmQ,GAAMnQ,KAEhB2G,KAAK,KAAMJ,EAAOgM,eAClB5L,KAAK,KAAM,SAAU3G,GAClB,MAAOmQ,GAAMnQ,KAIrBoT,EAAMI,OAAOjI,aAEbsH,GAAUhI,UAAU,QAAQU,UAIpChF,EAAOyU,QAAU,WACb,MAAOzU,GAAOoT,gBAAkBpT,EAAOK,QAAUL,EAAOuJ,UAAUH,MAAQpJ,EAAOuJ,UAAUD,MAc/FtJ,EAAO2U,WAAa,SAAUjB,EAAWlG,GACrC,MAAKjT,WAAU1D,QAGf0Z,EAAcmD,EACd1T,EAAOuJ,UAAUD,MAAQ+H,EACzBA,EAAkChZ,SAAZmV,EAAyByC,EAA6BzC,EAC5ExN,EAAOuJ,UAAUD,MAAQ+H,EAClBrR,GANIuQ,GAkBfvQ,EAAOF,EAAI,SAAU8U,GACjB,MAAKra,WAAU1D,QAGfyZ,EAAKsE,EACL5U,EAAO8L,UACA9L,GAJIsQ,GA8BftQ,EAAO6U,MAAQ,SAAUA,GACrB,MAAKta,WAAU1D,QAGfqa,EAAS2D,EACF7U,GAHIkR,GAeflR,EAAOiO,SAAW,SAAUA,GACxB,MAAK1T,WAAU1D,QAGfua,EAAenD,EACRjO,GAHIoR,GAcfpR,EAAO8U,0BAA4B,SAAUA,GACzC,MAAKva,WAAU1D,QAGf2a,EAA4BsD,EACrB9U,GAHIwR,GAcfxR,EAAOqM,wBAA0B,SAAUA,GACvC,MAAK9R,WAAU1D,QAGf2V,EAA0BH,EACnBrM,GAHIwM,GAafxM,EAAO0L,SAAW,WACd,GAAIrO,GAAMpI,EAAGoI,IAAI2C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOyJ,GAAOsC,cAAc/L,IAEhC,OAAOpB,GAAGwE,MAAMsD,SAASI,EAAKyT,EAAeC,IAUjD/Q,EAAO2L,SAAW,WACd,GAAIrO,GAAMrI,EAAGqI,IAAI0C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOyJ,GAAOsC,cAAc/L,IAEhC,OAAOpB,GAAGwE,MAAM8C,IAAIa,EAAKwT,EAAeC,IAU5C/Q,EAAO2T,SAAW,WACd,GAAItW,GAAMpI,EAAGoI,IAAI2C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOyJ,GAAOuC,gBAAgBhM,IAElC,OAAOpB,GAAGwE,MAAMsD,SAASI,EAAK8T,IAUlCnR,EAAO4T,SAAW,WACd,GAAItW,GAAMrI,EAAGqI,IAAI0C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOyJ,GAAOuC,gBAAgBhM,IAElC,OAAOpB,GAAGwE,MAAM8C,IAAIa,EAAK6T,IAgB7BnR,EAAO+U,aAAe,SAAUvH,GAC5B,MAAKjT,WAAU1D,QAGfsa,EAAgB3D,EACTxN,GAHImR,GAMfnR,EAAO0N,YAAc,WACjB,MAAO1N,GAAOyJ,mBAelBzJ,EAAOjG,MAAQ,SAAUA,GACrB,MAAKQ,WAAU1D,QAGf2Z,EAASzW,EACFiG,GAHIwQ,GAMfxQ,EAAOiM,kBAAoB,SAAU3R,GACjC,MAAKC,WAAU1D,QAGfoV,GAAoB3R,EACb0F,GAHIiM,IAMfjM,EAAOmM,uBAAyB,SAAU7R,GACtC,MAAKC,WAAU1D,QAGfsV,GAAyB7R,EAClB0F,GAHImM,IAMfhX,EAAG6E,SAASgG,EAAQ,SAAU,SAAU1F,GACpC,MAAKC,WAAU1D,QAIfmJ,EAAOgV,QAAQ1a,GAEXA,EACA0F,EAAOuR,QAAQ/B,OAAOlV,GAEtB0F,EAAOuR,QAAQva,QAGZgJ,GAXIA,EAAOgV,YActBhV,EAAOuR,MAAQ,SAAUjX,GACrB,MAAKC,WAAU1D,QAGfya,EAAShX,EACF0F,GAHIsR,GAUftR,EAAOmO,YAAc,SAAU9C,GAC3B,GAAIuC,EAAU,CACV0D,EAAO3I,GAAG,QAAS3I,EAAOiV,WAC1B3D,EAAO3I,GAAG,aAAc3I,EAAO0O,mBAC/B4C,EAAO3I,GAAG,WAAY2F,EAEtB,IAAI4G,GAAS7J,EAAEpN,OAAO,KACjBmC,KAAK,QAAS,SACdA,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOuJ,UAAUJ,IAAM,KACtFxQ,KAAK2Y,EAAOzR,EAAEG,EAAOH,KAC1BG,GAAOmV,UAAUD,GAAQ,GACzBlV,EAAOoV,eAAeF,GAElBlV,EAAOgH,aACPhH,EAAOoO,YAAY/C,GAAG,KAKlCrL,EAAOoV,eAAiB,SAAUF,GAC9BA,EAAO5Q,UAAU,WAAWrG,OAAO,QAAQmC,KAAK,IAAKJ,EAAOqV,mBAGhErV,EAAOmV,UAAY,SAAUD,GACzBA,EAAO5Q,UAAU,QACZlE,KAAK,SAAU8M,KACpBgI,EAAO5Q,UAAU,gBACZlE,KAAK,IAAKJ,EAAOqV,mBAG1BrV,EAAOsV,YAAc,WACjB,GAAI9F,GAAS8B,EAAO9B,QAQpB,OAPIxP,GAAOjG,UACPyV,EAAO,GAAKA,EAAO8D,IAAItT,EAAOjG,SAAS,GACvCyV,EAAO,GAAKA,EAAO8D,IAAItT,EAAOjG,SAAS,GAEvCoW,EAAGnS,OAAO,UACLrF,KAAK2Y,EAAO9B,OAAOA,KAErBA,GAGXxP,EAAOuV,aAAe,SAAU/F,GAC5B,MAAO8B,GAAO5Y,UAAY8W,GAAUA,EAAO,IAAMA,EAAO,IAG5DxP,EAAOiV,UAAY,WACf,GAAIzF,GAASxP,EAAOsV,aAIpB,IAFAtV,EAAOoO,YAAY+B,GAAI,GAEnBnQ,EAAOuV,aAAa/F,GACpBra,EAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAO,MACdgE,EAAOsG,eACRnR,EAAGE,UAAUS,iBACb,CACH,GAAI0f,GAAergB,EAAG4G,QAAQmD,aAAasQ,EAAO,GAAIA,EAAO,GAE7Dra,GAAG0J,OAAOE,QAAQ,WACdiB,EAAOuH,cAAciO,GACrBxV,EAAOsG,eACRnR,EAAGE,UAAUS,eAIxBkK,EAAOoO,YAAc,SAAU/C,EAAGoK,GAC9B,GAAI7H,EAAU,CACN5N,EAAOhE,UAAYgE,EAAOuR,QAAQ7Y,SAClCsH,EAAOuR,QAAQ/B,OAAOxP,EAAOhE,SAGjC,IAAIkZ,GAAS/f,EAAGmD,mBAAmBmd,EAAczV,EAAO0F,qBAAsB1F,EAAO2F,mBAAmB0F,EAAErN,OAAO,WACjHgC,GAAOmV,UAAUD,GACjBA,EAAOvc,KAAKqH,EAAOuR,QACR1R,EAAEG,EAAOH,KACT2P,OAAOxP,EAAOuR,QAAQ/B,WAGrCxP,EAAOqO,sBAGXrO,EAAOqO,mBAAqB,aAK5BrO,EAAOqV,iBAAmB,SAAU5b,GAChC,GAAIlD,KAAY,MAANkD,GAAYoG,EAAItJ,EAAI,GAAI,EAAIuJ,EAAIoN,IAAgB,CAC1D,OAAO,IAAO,GAAMrN,EAAK,IAAMC,EAC3B,YAAcvJ,EAAI,IAAO,IAAMsJ,EAAK,KAAOC,EAAI,GAC/C,KAAO,EAAIA,EAAI,GACf,YAAcvJ,EAAI,IAAO,GAAMsJ,EAAK,IAAO,EAAIC,EAC/C,KACO,IAAMD,EAAK,KAAOC,EAAI,GAC7B,KAAO,EAAIA,EAAI,GACf,IAAO,IAAMD,EAAK,KAAOC,EAAI,GAC7B,KAAO,EAAIA,EAAI,IAiBvBE,EAAO0V,YAAc,SAAUlI,GAC3B,MAAKjT,WAAU1D,QAGf4W,GAAeD,EACRxN,GAHIyN,IAqBfzN,EAAO2V,gBAAkB,aAEzB3V,EAAO+F,UAAY,WAYf,MAXA/F,GAAO+E,WAEP/E,EAAO2V,kBAEP3V,EAAOoS,aACPhF,IAEAO,GAAU,GAEVW,IAEOtO,GAGXA,EAAOoG,UAAY,WAMf,MALApG,GAAO2V,kBAEPhI,GAAU,GACVP,IAEOpN,GAsCXA,EAAOwO,iBAAmB,WACtBC,IAAwB,EACxBiD,EAAM7R,EAAEG,EAAOH,KACV+V,YAAYnE,GACZhC,MAAMzP,EAAOK,QAASL,EAAOM,WAC7BrI,SAAS+H,EAAO0F,sBACrB1F,EAAOQ,OAAO7H,KAAK+Y,IAGvB1R,EAAO0O,kBAAoB,WACvB1O,EAAOQ,OAAO7H,KAAKkZ,KA2EvB7R,EAAOvI,MAAQ,SAAU4H,GACjBwQ,EAAiBxQ,GACjBW,EAAOH,IAAIxG,OAAOgG,GAElBW,EAAOH,IAAIxG,OAAO0V,GAGtB2C,EAAM7R,EAAEG,EAAOH,KACf8O,KAGJ3O,EAAO6V,UAAY,WACf,MAAOjH,IAGX5O,EAAOiS,WAAa,SAAU6D,GAC1B,MAAKvb,WAAU1D,QAGf6Z,EAAcoF,EACd9V,EAAO2I,GAAG,WAAY,SAAUrS,GACvBA,EAAM0F,SAICqT,EAAY/Y,EAAM0F,SAAU0U,EAAY1U,WAChD7G,EAAG0J,OAAOE,QAAQ,WACd2R,EAAYjZ,MAAMnB,EAAM0F,YAL5B7G,EAAG0J,OAAOE,QAAQ,WACd2R,EAAY7Q,IAAIxG,OAAOqX,EAAYmC,uBAQxC7S,GAdI0Q,GA4Cf1Q,EAAO+V,QAAU,SAAUA,GACvB,MAAKxb,WAAU1D,QAGf+W,EAAWmI,EACJ/V,GAHI4N,GAUR5N,GAWX7K,EAAG6gB,WAAa,SAAUhW,GAEtB,QAASiW,GAAeC,EAAOC,GAC3B,GAAIC,GAAcF,EAAMG,UAAYrW,EAAOuC,eAa3C,OAZA2T,GAAM/d,KAAOme,OAAOJ,EAAM/d,MAAQge,GAClCD,EAAMK,OAASL,EAAM/f,MAAMmN,MAAMgQ,IAAI,SAAU7Z,EAAG7C,GAC9C,OACIiJ,EAAGG,EAAOsC,cAAc7I,EAAG7C,GAC3BkJ,EAAGoW,EAAMM,OAAS,KAAOJ,EAAY3c,EAAG7C,GACxCiN,KAAMpK,EACNyc,MAAOA,EAAM/d,KACbqe,OAAQN,EAAMM,UAItBN,EAAMK,OAASL,EAAMK,OAAOva,OAAOya,KAC5BP,EAAMK,OAYjB,QAASE,KACL,IAAKzW,EAAOH,KAAO6W,EACf,MAAOzhB,GAAGsO,SAAQ,EAEtB,IAAIoT,GAAU3W,EAAOH,IAAIxG,QACzB,OAAI2G,GAAOsL,YAGA,WACH,OAAO,GAGXtL,EAAOuL,WACA,WAAc,OAAO,GAEzB,SAAUqL,GAEb,MAAOA,GAAE/W,GAAK8W,EAAQ,IAAMC,EAAE/W,GAAK8W,EAAQA,EAAQ9f,OAAS,IA4EpE,QAASggB,GAAiBje,GACtB,GAAIhC,GAAIkgB,EAAOxD,IAAIne,EAAGgH,MAAM,SAAS3F,QAAQoC,EAC7C,OAAOke,GAAOlgB,GA0DlB,QAASmgB,KACL,GAAIC,GAAWhX,EAAO6D,OAAOyP,IAAI,SAAU4C,GAAS,MAAOA,GAAMK,QACjE,OAAOta,OAAMZ,UAAU4b,OAAOxb,SAAUub,GAmG5C,QAASE,GAAYxa,GACjB,OAAQA,EAAE8Z,OAxQd,GAAIW,GAAeliB,EAAGmiB,OAAOjc,QACxBob,OAAON,GAERa,KACAO,KAEAC,GAAiB,EACjBZ,GAAqB,CAgTzB,OApQA1W,GAAO7E,MAAQ,SAAUhF,EAAOgC,EAAMke,GAClC,IAAK9b,UAAU1D,OACX,MAAOigB,EAGPvc,WAAU1D,QAAU,IACpBwf,EAAWle,EAGf,IAAI+d,IAAS/f,MAAOA,EASpB,OARoB,gBAATgC,KACP+d,EAAM/d,KAAOA,GAEO,kBAAbke,KACPH,EAAMG,SAAWA,GAErBS,EAAOpgB,KAAKwf,GAELlW,GAGX7K,EAAG6E,SAASgG,EAAQ,QAAS,SAAUqL,EAAGzS,EAAGwD,GACzC,MAAK7B,WAAU1D,QAGfigB,KACAO,KACArX,EAAO7E,MAAMkQ,EAAGzS,GACZwD,GACA4D,EAAOuC,cAAcnG,GAElB4D,EAAOgB,OAAOqK,EAAGzS,IARboH,EAAOgB,WAoBtBhB,EAAOuX,cAAgB,SAAUA,GAC7B,MAAKhd,WAAU1D,QAGfygB,EAAiBC,EACVvX,GAHIsX,GAoBftX,EAAOwX,UAAY,SAAUC,GACzB,GAAIvB,GAAQW,EAAgBY,EAI5B,OAHIvB,KACAA,EAAMM,QAAS,GAEZxW,GAYXA,EAAO0X,UAAY,SAAUD,GACzB,GAAIvB,GAAQW,EAAgBY,EAI5B,OAHIvB,KACAA,EAAMM,QAAS,GAEZxW,GAGXA,EAAO2X,wBAA0B,SAAUC,GACvC,MAAOd,GAAOc,GAAOvB,UAAYrW,EAAOuC,iBAG5CvC,EAAO2T,SAAW,WACd,GAAItW,GAAMpI,EAAGoI,IAAI0Z,IAAgB,SAAUH,GACvC,MAAQA,GAAE9W,EAAI,EAAM8W,EAAE9W,EAAI8W,EAAEiB,GAAMjB,EAAEiB,IAGxC,OAAO1iB,GAAGwE,MAAMsD,SAASI,EAAK2C,EAAO+U,iBAIzC/U,EAAO4T,SAAW,WACd,GAAItW,GAAMrI,EAAGqI,IAAIyZ,IAAgB,SAAUH,GACvC,MAAQA,GAAE9W,EAAI,EAAM8W,EAAE9W,EAAI8W,EAAEiB,GAAMjB,EAAEiB,IAGxC,OAAO1iB,GAAGwE,MAAM8C,IAAIa,EAAK0C,EAAO+U,iBAQpC/U,EAAO0L,SAAW,WACd,GAAIrO,GAAMpI,EAAGoI,IAAI0Z,IAAgB5hB,EAAGgH,MAAM,KAC1C,OAAOhH,GAAGwE,MAAMsD,SAASI,EAAK2C,EAAOgT,eAAgBhT,EAAOiT,qBAGhEjT,EAAO2L,SAAW,WACd,GAAIrO,GAAMrI,EAAGqI,IAAIyZ,IAAgB5hB,EAAGgH,MAAM,KAC1C,OAAOhH,GAAGwE,MAAM8C,IAAIa,EAAK0C,EAAOgT,eAAgBhT,EAAOiT,qBAuB3D9d,EAAG6E,SAASgG,EAAQ,QAAS,SAAUyX,EAAWK,GAC9C,MAAKL,GAIoB,kBAAdA,GACAzX,EAAOqC,OAAOoV,GAErBA,IAAczX,EAAO8D,YAAuC,kBAAlBgU,GACnC9X,EAAOqC,OAAOyV,GAGI,kBAAlBA,GACAT,EAAQI,IAAczX,EAAOqC,UAGxCgV,EAAQI,GAAaK,EAEd9X,GAhBIA,EAAOqC,WA6BtBrC,EAAO+X,YAAc,SAAU5c,GAC3B,MAAKZ,WAAU1D,QAGfsgB,EAAehc,EACXgc,EAAaZ,WAAathB,EAAGmiB,OAAOjc,QAAQob,UAC5CY,EAAaZ,OAAON,GAEjBjW,GANImX,GAyBfnX,EAAOgY,kBAAoB,SAAUA,GACjC,MAAKzd,WAAU1D,QAGf6f,EAAqBsB,EACdhY,GAHI0W,GAUf1W,EAAO6D,KAAK,WACR,GAAIoU,GAASnB,EAAO9a,OAAOkb,EAC3B,OAAOe,GAAOphB,OAASmJ,EAAO+X,cAAcE,QAGhDjY,EAAOyL,gBAAkB,WACrB,GAAIyM,GAAOnB,IAAezD,IAAIne,EAAGgH,MAAM,SACnCgc,EAAUnY,EAAOmE,sBAAsB+T,EAC3C,OAAOC,GAAQ7E,IAAItT,EAAOsC,gBAG9BtC,EAAOwK,cAAc,SAAU/Q,GAC3B,GAAIyc,GAAQlb,KAAKkb,OAASlb,KAAK7C,MAAQsB,EAAEtB,MAAQsB,EAAEyc,KACnD,OAAOA,KAGXlW,EAAO8H,YAAc,WACjB,MAAOgP,GAAOxD,IAAI,SAAU4C,EAAOtf,GAC/B,OACIN,MAAO0J,EACP7H,KAAM+d,EAAM/d,KACZqe,OAAQN,EAAMM,SAAU,EACxB4B,MAAOpY,EAAO6K,SAASlS,KAAKud,EAAOA,EAAMK,OAAQ3f,OAK7DoJ,EAAOkI,mBAAqB,SAAUzO,GAClC,GAAIyc,GAAQW,EAAgBpd,EAAEtB,KAC9B,SAAO+d,GAAQA,EAAMM,QAGzBxW,EAAOiI,aAAe,SAAUxO,GACxB6d,IACItX,EAAOkI,mBAAmBzO,GAC1BuG,EAAO0X,UAAUje,EAAEtB,MAEnB6H,EAAOwX,UAAU/d,EAAEtB,MAGvB6H,EAAOwG,gBAIRxG,GAiBX7K,EAAGkjB,SAAW,SAAUrY,GACpB,GAAIsY,GAAO1Y,EAAAA,EAAU2Y,GAAa,EAC9BC,EAAe,QAGnBxY,GAAO+D,SAAS,SAAU0U,GACtB,OAAQA,EAAGlZ,OAGf,IAAImZ,GAAiB,SAAUC,EAAUC,GACrC,GAAIC,GAAe5jB,EAAG6jB,IAAIF,EAAW5Y,EAAOuC,iBACxCwW,EAAWH,EAAUtF,IAAItT,EAAOsC,cACpC,OAAIuW,GAAe,EACRF,EAAS1B,SACZ+B,OAAQD,EACRE,IAAKjZ,EAAOkZ,cACZ3Z,MAAOsZ,KAGRF,EAgKX,OA7JA3Y,GAAOmZ,kBAAoB,SAAU1f,EAAG7C,GACpC,MAAI6C,GAAEuf,OACKvf,EAAEwf,IAENjZ,EAAOsC,cAAc7I,EAAG7C,IAGnCoJ,EAAOoZ,oBAAsB,SAAU3f,EAAG7C,GACtC,MAAI6C,GAAEuf,OACKvf,EAAE8F,MAENS,EAAOuC,gBAAgB9I,EAAG7C,IAKrCoJ,EAAO6D,KAAK,SAAU1N,GAClB,GAAImiB,IAAS1Y,EAAAA,EACT,MAAOI,GAAOmE,sBAAsBhO,EAAMmN,MAE1C,IAAyB+V,GAArBC,EAAQnjB,EAAMmN,KAGlB,IAFAgW,EAAQtZ,EAAOmE,sBAAsBmV,GAEjChB,EACA,GAAIC,EACAc,EAAOC,EAAMjV,MAAMiU,GACnBgB,EAAQA,EAAMjV,MAAM,EAAGiU,OACpB,CACH,GAAItf,GAAQE,KAAKoE,IAAI,EAAGgc,EAAMziB,OAASyhB,EACvCe,GAAOC,EAAMjV,MAAM,EAAGrL,GACtBsgB,EAAQA,EAAMjV,MAAMrL,GAI5B,MAAI0f,GACOA,EAAeY,EAAOD,GAE1BC,IAmCftZ,EAAOuZ,IAAM,SAAUC,GACnB,MAAKjf,WAAU1D,QAGfyhB,EAAOkB,EACAxZ,GAHIsY,GAgBftY,EAAOyZ,UAAY,SAAUA,GACzB,MAAKlf,WAAU1D,QAGf0hB,EAAakB,EACNzZ,GAHIuY,GAcfvY,EAAOkZ,YAAc,SAAU/Q,GAC3B,MAAK5N,WAAU1D,QAGf2hB,EAAerQ,EACRnI,GAHIwY,GAkCfxY,EAAO0Z,cAAgB,SAAUC,GAC7B,MAAKpf,WAAU1D,QAGf6hB,EAAiBiB,EACV3Z,GAHI0Y,GAMfvjB,EAAG6E,SAASgG,EAAQ,UAAW,SAAUvG,GACjCA,EAAEuf,QACFhZ,EAAOhE,QAAQvC,EAAEuf,SAErBhZ,EAAO4Z,SAASngB,KAGbuG,GAYX7K,EAAG0kB,YAAc,SAAU7Z,GACvB,GAAI8Z,GAAyB,GACzBC,EAAsB,GACtBC,GAAkB,EAClBC,GAAiB,CAErBja,GAAOka,kBAAoB,OAC3Bla,EAAOma,aAAe,SACtBna,EAAOoa,WAAa,GAEpBpa,EAAS7K,EAAGuU,WAAW1J,GAEvBA,EAAOsI,aAAY,GAEnBtI,EAAO6D,KAAK,SAAU1N,GAClB,GAAI0N,GAAO1N,EAAMmN,KACjB,IAAI0W,EAAiB,CAEjB,GAAIK,GAAiBra,EAAOsa,qBAC5BzW,GAAK0W,KAAK,SAAU7Z,EAAG8Z,GAAK,MAAOvlB,GAAGwlB,WAAWJ,EAAe3Z,GAAI2Z,EAAeG,MAEvF,MAAO3W,IAGX,IAAI6W,GAAKzlB,EAAG2U,MAAMS,SAAShR,QAAQ,EAAG,MAElCshB,EAAkB,SAAUlhB,GAC5B,MAAOA,GAAEkD,EAcbqD,GAAOrD,EAAI,SAAUie,GACjB,MAAKrgB,WAAU1D,QAGf6jB,EAAKE,EACE5a,GAHI0a,GAef1a,EAAO6a,cAAgB,SAAUA,GAC7B,MAAKtgB,WAAU1D,QAGfojB,EAAiBY,EACV7a,GAHIia,GAMfja,EAAO8a,sBAAwB,WACvBb,GACAja,EAAOrD,IAAItD,QAAQ2G,EAAO+a,OAAQ/a,EAAOgb,UAejDhb,EAAOsa,oBAAsB,SAAUA,GACnC,MAAK/f,WAAU1D,QAGf8jB,EAAkBL,EACXta,GAHI2a,GAMf3a,EAAO+a,KAAO,WACV,GAAI1d,GAAMpI,EAAGoI,IAAI2C,EAAO6D,OAAQ,SAAUtN;AACtC,MAAOyJ,GAAOsa,sBAAsB/jB,IAExC,OAAO8G,IAGX2C,EAAOgb,KAAO,WACV,GAAI1d,GAAMrI,EAAGqI,IAAI0C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOyJ,GAAOsa,sBAAsB/jB,IAExC,OAAO+G,IAGX0C,EAAOib,QAAU,SAAUxhB,GACvB,GAAI8F,GAAQS,EAAOsa,sBAAsB7gB,GACrCkD,EAAIqD,EAAOrD,IAAI4C,EAInB,QAHI2b,MAAMve,IAAM4C,GAAS,KACrB5C,EAAI,GAEDA,EAGX,IAAIyL,GAAgB,SAAU3O,GAC1B,MAAOuG,GAAOmI,QAAQ1O,IAGtB0hB,EAAc,SAAU1hB,GACxB,MAAQuG,GAAOib,QAAQxhB,GAAKsgB,GAG5BqB,EAAe,SAAU3hB,GACzB,MAAO0hB,GAAY1hB,GAAK,EAAI,GAG5B4hB,EAAoB,SAAU5hB,GAC9B,MAAO0hB,GAAY1hB,GAAK,MAAQ,OAGpCuG,GAAOsb,eAAiB,SAAUC,GAC9B,GAAIvb,EAAOsI,cAAe,CACtB,GAAIH,GAAQoT,EAAavd,OAAO,OAE5BmK,GAAMzP,UACNyP,EAAQoT,EAAatd,OAAO,QACvBmC,KAAK,cAAe,UACpBA,KAAK,KAAM,QACXuI,GAAG,QAAS3I,EAAO2H,UAG5BQ,EACK/H,KAAK,UAAW,GAChBA,KAAK,iBAAkBib,GACvB7V,KAAK4C,GACVjT,EAAG4C,WAAWoQ,EAAOnI,EAAO0F,qBAAsB1F,EAAO2F,mBACpDvF,KAAK,UAAWgb,KAI7Bpb,EAAOwb,eAAiB,SAAUD,GAC9B,GAAIvb,EAAOsI,cAAe,CACtB,GAAImT,GAASF,EAAavd,OAAO,QAC5BoC,KAAK,iBAAkBib,GACvB7V,KAAK4C,EACVjT,GAAG4C,WAAW0jB,EAAQzb,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,UAAWgb,IAI7B,IAAI5S,GAAgB,SAAU/O,GAC1B,MAAOuG,GAAOuI,QAAQ9O,GAmH1B,OAhHAuG,GAAO0b,gBAAkB,SAAUrQ,GAC/B,GAAIrL,EAAOyI,cAAe,CACtB,GAAIF,GAAQ8C,EAAErN,OAAO,QAEjBuK,GAAM7P,SACN2S,EAAEpN,OAAO,SAASuH,KAAKgD,KAKnCxI,EAAO2b,eAAiB,SAAUtQ,GAC1BrL,EAAOyI,eACP4C,EAAErN,OAAO,SAASwH,KAAKgD,IAa/BxI,EAAO4b,eAAiB,SAAUA,GAC9B,MAAKrhB,WAAU1D,QAGfmjB,EAAkB4B,EACX5b,GAHIga,GAcfha,EAAO6b,UAAY,SAAUC,GACzB,MAAKvhB,WAAU1D,QAGfmJ,EAAOoa,WAAa0B,EACb9b,GAHIA,EAAOoa,YAgBtBpa,EAAO+b,mBAAqB,SAAUD,GAClC,MAAKvhB,WAAU1D,QAGfkjB,EAAsB+B,EACf9b,GAHI+Z,GAef/Z,EAAOgc,sBAAwB,SAAUC,GACrC,MAAK1hB,WAAU1D,QAGfijB,EAAyBmC,EAClBjc,GAHI8Z,GAMf9Z,EAAOqO,mBAAqB,WACpBrO,EAAOgH,YACPhH,EAAOsE,UAAU,KAAOtE,EAAOka,mBAAmBrhB,KAAK,SAAUY,GACzDuG,EAAOkc,eAAeziB,GACtBuG,EAAOwH,kBAAkBxM,MAEzBgF,EAAOyH,eAAezM,QAI9BgF,EAAOsE,UAAU,KAAOtE,EAAOka,mBAAmBrhB,KAAK,WACnDmH,EAAO0H,eAAe1M,SAKlCgF,EAAOkc,eAAiB,SAAUziB,GAC9B,MAAOuG,GAAOgH,UAAUvN,EAAEwf,MAG9BjZ,EAAO2H,QAAU,SAAUlO,GACvB,GAAIuC,GAASvC,EAAEwf,GACf9jB,GAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAOA,GACdgE,EAAOsG,iBAIRtG,GA4BX7K,EAAGgnB,SAAW,SAAUve,EAAQ4G,GA6D5B,QAASmJ,KAEL,GAAIyO,GAAannB,EAAGoI,KAAK2C,EAAOK,QAASL,EAAOM,WAAa,CAC7D+b,GAAUC,GAAgBA,EAAeF,EAAYE,EAAeF,CAEpE,IAGIG,GAHAC,EAAMC,IAENC,EAAMC,GAaV,IAVI1nB,EAAG6jB,IAAI9Y,EAAO6D,OAAQ7D,EAAOuC,kBAC7Bga,EAAUG,EAAI1c,EAAO6D,QACrBsM,EAAG1L,QAAQmY,GAAgB,KAI3BL,EAAUG,IAAMzD,IAAK4D,EAAatd,MAAO,EAAGyZ,QAAS6D,MACrD1M,EAAG1L,QAAQmY,GAAgB,IAG3BzM,EAAI,CACJ,GAAI2M,GAAS3M,EAAGnS,OAAO,KAAO+e,GACzBzY,UAAU,KAAO0Y,GACjBnZ,KAAK0Y,GAENd,EAAStL,EAAGnS,OAAO,KAAOif,GACzB3Y,UAAU,QAAU4Y,GACpBrZ,KAAK0Y,EAEVY,GAAeL,EAAQrB,EAAQe,EAAKD,GAEpCa,EAAeb,EAASC,GAExBa,EAAeP,EAAQrB,GAEvB6B,IAEAnoB,EAAG4C,WAAWoY,EAAInQ,EAAO0F,qBAAsB1F,EAAO2F,mBACjDvF,KAAK,YAAa,aAAeJ,EAAOud,KAAO,IAAMvd,EAAOwd,KAAO,MAIhF,QAASL,GAAgBL,EAAQrB,EAAQe,EAAKD,GAC1C,GAAIkB,GAAcC,EAAiBZ,EAEnCa,GAAgBF,EAAajB,GAE7BoB,EAAaH,GAEbI,EAAapC,EAAQc,EAASC,GAGlC,QAASkB,GAAkBZ,GACvB,GAAIW,GAAcX,EACb/P,QACA9O,OAAO,KACPmC,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAOomB,GAAiB,KAAOpmB,GAEvC,OAAO6mB,GAGX,QAASE,GAAiBF,EAAajB,GACnC,GAAIsB,GAAYL,EAAYxf,OAAO,QAC9BmC,KAAK,OAAQ2d,GACbpV,GAAG,QAAShB,GACZvH,KAAK,IAAK,SAAU3G,EAAG7C,GACpB,MAAOonB,GAAQvkB,EAAG7C,EAAG4lB,KAGzBzkB,EAAa5C,EAAG4C,WAAW+lB,EAAW9d,EAAO0F,qBAAsB1F,EAAO2F,kBAC1E5N,GAAWkmB,WACXlmB,EAAWkmB,UAAU,IAAKC,GAIlC,QAASN,GAAcH,GACfzd,EAAOyI,eACPgV,EAAYxf,OAAO,SAASuH,KAAK,SAAU/L,GACvC,MAAOuG,GAAOuI,QAAQ9O,EAAEoK,QAgBpC,QAASsa,GAAgB1C,EAAQe,GAC7Bxc,EAAOoe,gBAAgB3C,GACvBtmB,EAAG4C,WAAW0jB,EAAQzb,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,YAAa,SAAU3G,GACzB,MAAOib,GAAcjb,EAAG+iB,KAE3Bpc,KAAK,cAAe,UAG7B,QAASie,GAAgBznB,EAAG0nB,GACxBte,EAAOhC,OAAO,gBAAkBpH,GAC3B6N,QAAQ,YAAa6Z,GAG9B,QAAST,GAAcpC,EAAQc,EAASC,GACpC,GAAIxc,EAAOsI,cAAe,CACtB,GAAIiW,GAAc9C,EACb1O,QACA9O,OAAO,QACPmC,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,GAAI4nB,GAAUxB,EAAiB,IAAME,EAAiB,KAAOtmB,CAI7D,OAHI6nB,KACAD,GAAW,aAERA,IAEV7V,GAAG,QAAShB,GACZgB,GAAG,YAAa,SAAUlP,EAAG7C,GAC1BynB,EAAeznB,GAAG,KAErB+R,GAAG,WAAY,SAAUlP,EAAG7C,GACzBynB,EAAeznB,GAAG,IAE1BunB,GAAeI,EAAa/B,GACxBiC,GAAwBC,GACxBC,EAAiBpC,EAASC,IAKtC,QAASmC,GAAkBpC,EAASC,GAChC,GAAIoC,GAAWzO,EAAG7L,UAAU,YAAc0Y,GACjCnZ,KAAK0Y,EAEdqC,GACS7R,QACA9O,OAAO,YACPmC,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAO,aAAeA,EAAI,IAAMomB,IAEnCrU,GAAG,QAAShB,GACZgB,GAAG,YAAa,SAAUlP,EAAG7C,GAC1BynB,EAAeznB,GAAG,KAErB+R,GAAG,WAAY,SAAUlP,EAAG7C,GACzBynB,EAAeznB,GAAG,KAG9BgoB,EAAS3R,OAAOjI,QAChB,IAAI6Z,GAAO5pB,EAAG4P,IAAI2X,MACTsC,YAAYzC,EAAU0C,EAAyBN,GAC/CO,YAAY3C,EAAU0C,GAC3BhnB,EAAa5C,EAAG4C,WAAW6mB,EAAU5e,EAAO0F,qBAAsB1F,EAAO2F,kBAEzE5N,GAAWkmB,UACXlmB,EACKkmB,UAAU,SAAU,SAAUxkB,GAC3B,GAAIqF,GAAU9D,KAAKikB,UAAYxlB,CAC/BqF,IAAWogB,WAAYpgB,EAAQogB,WAAYC,SAAUrgB,EAAQqgB,SAC7D,IAAI7U,GAAcrV,EAAGqV,YAAYxL,EAASrF,EAE1C,OADAuB,MAAKikB,SAAW3U,EAAY,GACrB,SAAU1N,GACb,GAAIsO,GAAKZ,EAAY1N,EACrB,QAAQ4f,EAAI4C,SAASlU,GAAK2T,EAAKO,SAASlU,OAIpDnT,EAAWqI,KAAK,SAAU,SAAU3G,GAChC,OAAQ+iB,EAAI4C,SAAS3lB,GAAIolB,EAAKO,SAAS3lB,MAG/C1B,EAAWwN,MAAM,aAAc,SAAU9L,GACrC,MAAOA,GAAE0lB,SAAW1lB,EAAEylB,WAAa,KAAS,SAAW,YAK/D,QAAS9B,GAAgBb,EAASC,GAC9B6C,EAAiB9C,EAASC,GAC1B8C,EAAa/C,EAASC,GACtB+C,EAAahD,GAGjB,QAAS8C,GAAkB9C,EAASC,GAChC,GAAIgD,GAAarP,EAAG7L,UAAU,KAAO0Y,GAChCnZ,KAAK0Y,GACLve,OAAO,QACPoC,KAAK,IAAK,SAAU3G,EAAG7C,GACpB,MAAOonB,GAAQvkB,EAAG7C,EAAG4lB,KAEzBzkB,EAAa5C,EAAG4C,WAAWynB,EAAYxf,EAAO0F,qBAAsB1F,EAAO2F,kBAC3E5N,GAAWkmB,WACXlmB,EAAWkmB,UAAU,IAAKC,GAE9BnmB,EAAWqI,KAAK,OAAQ2d,GAG5B,QAASuB,GAAc/C,EAASC,GAC5B,GAAIxc,EAAOsI,cAAe,CACtB,GAAImT,GAAStL,EAAG7L,UAAU,QAAU4Y,GAC/BrZ,KAAK0Y,EACV4B,GAAe1C,EAAQe,GACnBiC,GAAwBC,GACxBC,EAAiBpC,EAASC,IAKtC,QAAS+C,GAAchD,GACfvc,EAAOyI,eACP0H,EAAG7L,UAAU,KAAO0Y,GACfnZ,KAAK0Y,GACLve,OAAO,SACPwH,KAAK,SAAU/L,GACZ,MAAOuG,GAAOuI,QAAQ9O,EAAEoK,QAKxC,QAASwZ,GAAgBP,EAAQrB,GAC7BqB,EAAO7P,OAAOjI,SACdyW,EAAOxO,OAAOjI,SAGlB,QAASsY,KACDtd,EAAOgH,YACPhH,EAAOsE,UAAU,KAAO0Y,GAAgBnkB,KAAK,SAAUY,GAC/CgmB,EAAgBhmB,GAChBuG,EAAOwH,kBAAkBxM,MAEzBgF,EAAOyH,eAAezM,QAI9BgF,EAAOsE,UAAU,KAAO0Y,GAAgBnkB,KAAK,WACzCmH,EAAO0H,eAAe1M,QAwFlC,QAASyhB,KACL,MAAOxnB,GAAG4P,IAAI2X,MACTsC,YAAYzC,EAAU0C,GACtBC,YAAYU,GAGrB,QAASD,GAAiBhmB,GACtB,MAAOuG,GAAOgH,UAAUhH,EAAOmZ,kBAAkB1f,EAAEoK,OAyBvD,QAAS8Y,KACL,MAAO1nB,GAAGmiB,OAAOsF,MAAMnC,KAAK,MAAMhb,MAAMS,EAAOoZ,qBAGnD,QAASuG,GAAelmB,GACpB,GAAImmB,GAASnmB,EAAE0lB,SAAW1lB,EAAEylB,UAC5B,OAAOhE,OAAM0E,IAAUA,EAAQC,EAGnC,QAASC,GAAgBrmB,GACrB,MAAyC,KAAlCuG,EAAOoZ,oBAAoB3f,GAGtC,QAASykB,GAAU1D,GACfA,EAAEwE,YAAcU,CAChB,IAAI5gB,GAAU9D,KAAKikB,QAEfngB,GADAihB,EAAYjhB,IACDogB,WAAY,EAAGC,SAAU,IAGzBD,WAAYpgB,EAAQogB,WAAYC,SAAUrgB,EAAQqgB,SAEjE,IAAIvoB,GAAI3B,EAAGqV,YAAYxL,EAAS0b,EAEhC,OADAxf,MAAKikB,SAAWroB,EAAE,GACX,SAAUgG,GACb,MAAOohB,GAAQpnB,EAAEgG,GAAI,EAAG6f,MAIhC,QAASsD,GAAajhB,GAClB,OAAQA,GAAWoc,MAAMpc,EAAQogB,aAAehE,MAAMpc,EAAQqgB,UAGlE,QAASpB,GAAMtkB,EAAG7C,GACd,MAAOoJ,GAAO6K,SAASpR,EAAEoK,KAAMjN,GAGnC,QAAS+Q,GAASlO,EAAG7C,GACbuZ,EAAG/P,KAAK,WAAawc,GACrB5c,EAAO2H,QAAQlO,EAAEoK,KAAMjN,GAI/B,QAASonB,GAASvkB,EAAG7C,EAAG4lB,GACpB,GAAIwD,GAAOxD,EAAI/iB,EAAG7C,EAIlB,OAHIopB,GAAKxpB,QAAQ,QAAU,IACvBwpB,EAAO,QAEJA,EA0DX,QAAStL,GAAejb,EAAG+iB,GACvB,GAAI4C,EASJ,OAPIA,GADAX,EACWxpB,EAAG4P,IAAI2X,MACbsC,YAAYzC,EAAU0C,EAAyBN,GAC/CO,YAAY3C,EAAU0C,EAAyBN,GAC/CW,SAAS3lB,GAEH+iB,EAAI4C,SAAS3lB,GAExByhB,MAAMkE,EAAS,KAAOlE,MAAMkE,EAAS,IAC9B,iBAEA,aAAeA,EAAW,IAwBzC,QAASa,GAA8BC,EAAYC,GAC/CngB,EAAOsE,UAAU,eAAezL,KAAK,SAAUY,GACvCymB,EAAW/nB,OAASsB,EAAEoK,KAAKoV,KAC3BhkB,EAAG+I,OAAOhD,MAAMyJ,QAAQ,YAAa0b,KAtjBjD,GASI9D,GACAC,EAIAnM,EACAiQ,EACAC,EAEA5B,EAlBA6B,EAA8B,GAE9BtD,EAAiB,YACjBE,EAAiB,YACjBH,EAAsB,kBACtBE,EAAsB,kBACtBL,EAAiB,cACjBC,EAAc,QAId6C,EAAe,EACfX,EAAyB,EAKzBc,EAAoBS,EAEpB5B,GAAa,EACb1e,EAAS7K,EAAGkjB,SAASljB,EAAGuU,WAAWvU,EAAG4K,eAuiB1C,OAriBAC,GAAOwK,cAAcxK,EAAOmZ,mBAE5BnZ,EAAOuI,MAAM,SAAU9O,GACnB,MAAOuG,GAAOmZ,kBAAkB1f,GAAK,KAAOuG,EAAOoZ,oBAAoB3f,KAY3EuG,EAAOugB,UAAYvgB,EAAOuZ,IAE1BvZ,EAAOmI,MAAMnI,EAAOmZ,mBACpBnZ,EAAOsI,aAAY,GAEnBtI,EAAO0F,mBAAmB,KAC1B1F,EAAO2F,gBAAgB,GAEvB3F,EAAO+F,UAAY,WAYf,MAXA/F,GAAO+E,WAEPoL,EAAKnQ,EAAO6E,MACP5G,OAAO,KACPmC,KAAK,YAAa,aAAeJ,EAAOud,KAAO,IAAMvd,EAAOwd,KAAO,KAExErN,EAAGlS,OAAO,KAAKmC,KAAK,QAAS2c,GAC7B5M,EAAGlS,OAAO,KAAKmC,KAAK,QAAS6c,GAE7BtP,IAEO3N,GAuFXA,EAAOoe,gBAAkB,SAAU3C,GAC/BA,EACKjW,KAAK,SAAU/L,GACZ,GAAIoK,GAAOpK,EAAEoK,IACb,QAAKic,EAAejc,KAAS8b,EAAclmB,IAAQgmB,EAAgBhmB,GAG5DuG,EAAOmI,QAAQ1O,EAAEoK,MAFb,MAqKvB7D,EAAOwgB,sBAAwB,SAAUA,GACrC,MAAKjmB,WAAU1D,QAGfkoB,EAAyByB,EAClBxgB,GAHI+e,GAef/e,EAAOgf,YAAc,SAAUA,GAC3B,MAAKzkB,WAAU1D,QAGf6oB,EAAeV,EACRhf,GAHI0f,GAef1f,EAAO8b,OAAS,SAAUA,GACtB,MAAKvhB,WAAU1D,QAGfylB,EAAeR,EACR9b,GAHIsc,GAcftc,EAAOud,GAAK,SAAUA,GAClB,MAAKhjB,WAAU1D,QAGfupB,EAAM7C,EACCvd,GAHKogB,GAAQpgB,EAAOK,QAAU,GAczCL,EAAOwd,GAAK,SAAUA,GAClB,MAAKjjB,WAAU1D,QAGfwpB,EAAM7C,EACCxd,GAHKqgB,GAAQrgB,EAAOM,SAAW,GAgB1CN,EAAOoG,UAAY,WAEf,MADAuH,KACO3N,GAYXA,EAAOygB,iBAAmB,SAAUA,GAChC,MAAKlmB,WAAU1D,QAGfgpB,EAAoBY,EACbzgB,GAHI6f,GAiEf7f,EAAO0gB,WAAa,SAAUnY,GAC1B,MAAyB,KAArBhO,UAAU1D,OACHgmB,GAEXA,EAActU,EACPvI,IAaXA,EAAO2gB,eAAiB,SAAUC,GAC9B,MAAyB,KAArBrmB,UAAU1D,OACH4nB,GAEPA,EADOmC,EACgBA,EAEAvoB,OAGpB2H,IAYXA,EAAO6gB,UAAY,SAAUA,GACzB,MAAyB,KAArBtmB,UAAU1D,OACH6nB,GAEXA,EAAamC,EACN7gB,IAoBXA,EAAO8H,YAAc,WACjB,MAAO9H,GAAO6D,OAAOyP,IAAI,SAAU7Z,EAAG7C,GAClC,GAAIspB,IAAc/nB,KAAMsB,EAAEwf,IAAKpV,KAAMpK,EAAE8F,MAAOyZ,OAAQvf,EAAEuf,OAAQ1iB,MAAO0J,EAEvE,OADAkgB,GAAW9H,MAAQpY,EAAO6K,SAASpR,EAAG7C,GAC/BspB,KAIflgB,EAAO+H,gBAAkB,SAAUtO,GAC/BwmB,EAA6BxmB,GAAG,IAGpCuG,EAAOgI,YAAc,SAAUvO,GAC3BwmB,EAA6BxmB,GAAG,IAGpCuG,EAAOiI,aAAe,SAAUxO,GAC5BuG,EAAO2H,SAASsR,IAAKxf,EAAEtB,KAAM6gB,OAAQvf,EAAEuf,UAWpChZ,EAAOuE,OAAO3G,EAAQ4G,IA6BjCrP,EAAG2rB,SAAW,SAAUljB,EAAQ4G,GAyD5B,QAASuc,GAAWtnB,GAChB,MAAOtE,GAAGwE,MAAMuE,WAAWhF,KAAKC,IAAI6G,EAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,IAAM7X,EAAOF,IAAIrG,EAAEoe,MAG9E,QAASmJ,GAAc9K,EAAO+K,EAAYxnB,GACtC,GAAIgiB,GAASvF,EAAM5R,UAAU,iBACxBT,KAAKpK,EAAE8c,OAAQphB,EAAGgH,MAAM,KAE7Bsf,GAAO1O,QACF9O,OAAO,QACPmC,KAAK,QAAS,YACdA,KAAK,cAAe,UAErBJ,EAAOsL,cACPmQ,EAAO9S,GAAG,QAAS3I,EAAO2H,SAC1B8T,EAAOrb,KAAK,SAAU,YAG1BjL,EAAG4C,WAAW0jB,EAAQzb,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,IAAK,SAAU3G,GACjB,GAAIoG,GAAIG,EAAOH,IAAIpG,EAAEoG,EAIrB,OAHKqhB,KACDrhB,GAAKshB,EAAY,GAEdhsB,EAAGwE,MAAMuE,WAAW2B,KAE9BO,KAAK,IAAK,SAAU3G,GACjB,GAAIqG,GAAIE,EAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,GAM3B,OAJIpe,GAAEqG,EAAI,IACNA,GAAKihB,EAAUtnB,IAGZtE,EAAGwE,MAAMuE,WAAW4B,EAAIshB,KAElC5b,KAAK,SAAU/L,GACZ,MAAOuG,GAAOmI,QAAQ1O,KAG9BtE,EAAG4C,WAAW0jB,EAAOxO,OAAQjN,EAAO0F,qBAAsB1F,EAAO2F,mBAC5DvF,KAAK,SAAU,GACf4E,SAGT,QAASqc,GAAYnL,EAAO+K,EAAYxnB,GACpC,GAAI6nB,GAAOpL,EAAM5R,UAAU,YACtBT,KAAKpK,EAAE8c,OAAQphB,EAAGgH,MAAM,MAEzB4Q,EAAQuU,EAAKvU,QACZ9O,OAAO,QACPmC,KAAK,QAAS,OACdA,KAAK,OAAQjL,EAAGgH,MAAM,OAAQ6D,EAAO6K,WACrCzK,KAAK,IAAKJ,EAAO0N,eACjBtN,KAAK,SAAU,EAEhBJ,GAAOyI,eACPsE,EAAM9O,OAAO,SAASuH,KAAKrQ,EAAGgH,MAAM,OAAQ6D,EAAOuI,MAAM9O,EAAEtB,QAG3D6H,EAAOsL,aACPgW,EAAK3Y,GAAG,QAAS3I,EAAO2H,SAG5BxS,EAAG4C,WAAWupB,EAAMthB,EAAO0F,qBAAsB1F,EAAO2F,mBACnDvF,KAAK,IAAK,SAAU3G,GACjB,GAAIoG,GAAIG,EAAOH,IAAIpG,EAAEoG,EAOrB,OANIqhB,KACArhB,GAAKshB,EAAY,GAEjBnhB,EAAOsL,aAAwBjT,SAATkpB,IACtB1hB,GAAK0hB,EAAO,GAETpsB,EAAGwE,MAAMuE,WAAW2B,KAE9BO,KAAK,IAAK,SAAU3G,GACjB,GAAIqG,GAAIE,EAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,GAM3B,OAJIpe,GAAEqG,EAAI,IACNA,GAAKihB,EAAUtnB,IAGZtE,EAAGwE,MAAMuE,WAAW4B,KAE9BM,KAAK,QAAS+gB,GACd/gB,KAAK,SAAU,SAAU3G,GACtB,MAAOsnB,GAAUtnB,KAEpB2G,KAAK,OAAQjL,EAAGgH,MAAM,OAAQ6D,EAAO6K,WACrC7M,OAAO,SAASwH,KAAKrQ,EAAGgH,MAAM,OAAQ6D,EAAOuI,MAAM9O,EAAEtB,QAE1DhD,EAAG4C,WAAWupB,EAAKrU,OAAQjN,EAAO0F,qBAAsB1F,EAAO2F,mBAC1DvF,KAAK,IAAK,SAAU3G,GAAK,MAAOuG,GAAOH,IAAIpG,EAAEoG,KAC7CO,KAAK,QAAqB,GAAZ+gB,GACdnc,SAGT,QAASwc,KACL,GAAkBnpB,SAAd8oB,EAAyB,CACzB,GAAIM,GAAezhB,EAAOmT,YAItBgO,GADAnhB,EAAOsL,aAAwBjT,SAATkpB,EACVroB,KAAKW,MAAMmG,EAAOH,IAAI6hB,aAC3BH,EACKroB,KAAKW,OAAOmG,EAAOgM,eAAiByV,EAAe,GAAKF,GAAQE,GAEhEvoB,KAAKW,MAAMmG,EAAOgM,eAAiB,EAAIhM,EAAO2hB,cAAgBF,IAG1EN,IAAcvhB,EAAAA,GAAYsb,MAAMiG,IAAcA,EAAYS,KAC1DT,EAAYS,IAgJxB,QAASC,GAAazJ,EAAO0J,GACzB,MAAO,YACH,GAAIC,GAAO9sB,EAAG+I,OAAOhD,MACjBgnB,EAAQD,EAAK3hB,KAAK,UAAYgY,CAClC,OAAO0J,IAAOE,EAAQA,GA1T9B,GAUIb,GAVAS,EAAgB,EAChBK,EAA2B,EAC3Bb,EAAgB,EAEhBphB,EAAS7K,EAAG6gB,WAAW7gB,EAAG4V,yBAE1BwW,EAAOU,EACPf,GAAa,EACbgB,GAAqB,CA6UzB,OAzUA/sB,GAAG6E,SAASgG,EAAQ,UAAW,WAG3B,MAFAA,GAAOmiB,WACPhB,EAAY9oB,OACL2H,IAGX7K,EAAG6E,SAASgG,EAAQ,SAAU,WAM1B,MALIA,GAAOjG,SAAWmnB,IAAegB,GACjC/sB,EAAGgJ,OAAOE,KAAK,mHAIZ2B,EAAOoiB,YAGlBpiB,EAAOmI,MAAM,SAAU1O,GACnB,MAAOtE,GAAGwE,MAAMuC,iBAAiBzC,EAAEoe,GAAKpe,EAAEqG,KAC3C,GAEHE,EAAO8N,SAAW,WACd,GAAImK,GAASjY,EAAO2S,aAAarO,UAAU,WACtCT,KAAK7D,EAAO6D,OAEjB2d,KAEAvJ,EACKlL,QACA9O,OAAO,KACPmC,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAO,UAAiBA,GAGhC,IAAIyrB,GAAOpK,EAAOxI,OAAS,CAC3BwI,GAAOpf,KAAK,SAAUY,EAAG7C,GACrB,GAAIsf,GAAQjhB,EAAG+I,OAAOhD,KAEtBqmB,GAAWnL,EAAOtf,EAAG6C,GAEjBuG,EAAOsI,eAAiB+Z,IAASzrB,GACjCoqB,EAAa9K,EAAOtf,EAAG6C,MAwHnCuG,EAAOqO,mBAAqB,WACxB,GAAIiT,GAAOthB,EAAO2S,aAAarO,UAAU,YACrCkL,EAASxP,EAAOuR,QAAQ/B,QAE5B,IAAIxP,EAAOsL,YACHtL,EAAOgH,aACPsa,EAAK7c,QAAQtP,EAAGE,UAAUK,eAAgB,SAAU+D,GAChD,MAAOuG,GAAOgH,UAAUvN,EAAEoG,KAE9ByhB,EAAK7c,QAAQtP,EAAGE,UAAUI,iBAAkB,SAAUgE,GAClD,OAAQuG,EAAOgH,UAAUvN,EAAEoG,OAG/ByhB,EAAK7c,QAAQtP,EAAGE,UAAUK,gBAAgB,GAC1C4rB,EAAK7c,QAAQtP,EAAGE,UAAUI,kBAAkB,QAGhD,IAAKuK,EAAOuV,aAAa/F,GAQrB8R,EAAK7c,QAAQtP,EAAGE,UAAUI,kBAAkB,OARd,CAC9B,GAAIuD,GAAQwW,EAAO,GACfvW,EAAMuW,EAAO,EAEjB8R,GAAK7c,QAAQtP,EAAGE,UAAUI,iBAAkB,SAAUgE,GAClD,MAAOA,GAAEoG,EAAI7G,GAASS,EAAEoG,GAAK5G,MAgB7C+G,EAAOsiB,UAAY,SAAUA,GACzB,MAAK/nB,WAAU1D,QAGfqqB,EAAaoB,EACNtiB,GAHIkhB,GAMf/rB,EAAG6E,SAASgG,EAAQ,UAAW,SAAUvG,GACrCuG,EAAO4Z,SAASngB,EAAEoK,QActB7D,EAAO2hB,WAAa,SAAUA,GAC1B,MAAKpnB,WAAU1D,QAGfmJ,EAAOiM,kBAAkB0V,GACzBJ,EAAOlpB,OACA2H,GAJIA,EAAOiM,qBAOtBjM,EAAOkM,iBAAmB,WACtB,MAAgB7T,UAATkpB,GAYXvhB,EAAOuiB,aAAeviB,EAAOmM,uBAY7BnM,EAAOwiB,IAAM,SAAUA,GACnB,MAAKjoB,WAAU1D,QAGf0qB,EAAOiB,EACAxiB,GAHIuhB,GAMfvhB,EAAOsV,YAAc,WACjB,GAAI9F,GAASxP,EAAOuR,QAAQ/B,QAS5B,QARIxP,EAAOjG,SAAamnB,IAAcgB,IAClC1S,EAAO,GAAKA,EAAO8D,IAAItT,EAAOjG,SAAS,GACvCyV,EAAO,GAAKA,EAAO8D,IAAItT,EAAOjG,SAAS,GAEvCiG,EAAO2S,aAAa3U,OAAO,UACtBrF,KAAKqH,EAAOuR,QAAQ/B,OAAOA,KAG7BA,GAkBXxP,EAAOyiB,kBAAoB,SAAUA,GACjC,MAAKloB,WAAU1D,QAGfqrB,EAAqBO,EACdziB,GAHIkiB,GAcfliB,EAAO+H,gBAAkB,SAAUtO,GAC1BuG,EAAOkI,mBAAmBzO,IAC3BuG,EAAOqL,IAAI/G,UAAU,YAChBG,QAAQ,YAAaod,EAAYpoB,EAAE2e,QACnC3T,QAAQ,UAAWod,EAAYpoB,EAAE2e,OAAO,KAIrDpY,EAAOgI,YAAc,WACjBhI,EAAOqL,IAAI/G,UAAU,YAChBG,QAAQ,aAAa,GACrBA,QAAQ,WAAW,IAG5BtP,EAAG6E,SAASgG,EAAQ,WAAY,WAC5B,GAAI1C,GAAMtC,KAAK0nB,WACf,IAAI,cAAgB1iB,GAAO8S,SAAU,CACjC,GAAI6P,GAAM3iB,EAAO8S,SAASpZ,UAC1B4D,IAAOqlB,EAEX,MAAOrlB,KAGJ0C,EAAOuE,OAAO3G,EAAQ4G,IA6BjCrP,EAAGytB,UAAY,SAAUhlB,EAAQ4G,GA+J7B,QAASwF,GAAQvQ,EAAG7C,GAChB,MAAOoJ,GAAO6K,SAASlS,KAAKc,EAAGA,EAAE8c,OAAQ3f,GAG7C,QAASisB,GAAUC,EAAa7K,GAC5B,GAAI8K,GAAO9tB,EAAG4P,IAAIke,OACbljB,EAAE,SAAUpG,GACT,MAAOuG,GAAOH,IAAIpG,EAAEoG,KAEvBC,EAAE,SAAUrG,GACT,MAAOuG,GAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,MAE7BvN,YAAY0Y,GACZC,QAAQC,EACTC,IACAJ,EAAKK,QAAQD,EAGjB,IAAInD,GAAO8C,EAAY7kB,OAAO,QACzBmC,KAAK,QAAS,QACdA,KAAK,SAAU4J,EAChBqZ,IACArD,EAAK5f,KAAK,mBAAoBijB,GAGlCluB,EAAG4C,WAAWkgB,EAAOja,OAAO,aAAcgC,EAAO0F,qBAAsB1F,EAAO2F,mBAEzEvF,KAAK,SAAU4J,GACf5J,KAAK,IAAK,SAAU3G,GACjB,MAAO6pB,GAAMP,EAAKtpB,EAAE8c,WAIhC,QAASgN,GAAUT,EAAa7K,GAC5B,GAAIuL,EAAa,CACb,GAAIC,GAAOxuB,EAAG4P,IAAI4e,OACb5jB,EAAE,SAAUpG,GACT,MAAOuG,GAAOH,IAAIpG,EAAEoG,KAEvBC,EAAE,SAAUrG,GACT,MAAOuG,GAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,MAE7BA,GAAG,SAAUpe,GACV,MAAOuG,GAAOF,IAAIrG,EAAEoe,MAEvBvN,YAAY0Y,GACZC,QAAQC,EACTC,IACAM,EAAKL,QAAQD,GAGjBL,EAAY7kB,OAAO,QACdmC,KAAK,QAAS,QACdA,KAAK,OAAQ4J,GACb5J,KAAK,IAAK,SAAU3G,GACjB,MAAO6pB,GAAMG,EAAKhqB,EAAE8c,WAG5BphB,EAAG4C,WAAWkgB,EAAOja,OAAO,aAAcgC,EAAO0F,qBAAsB1F,EAAO2F,mBAEzEvF,KAAK,OAAQ4J,GACb5J,KAAK,IAAK,SAAU3G,GACjB,MAAO6pB,GAAMG,EAAKhqB,EAAE8c,YAKpC,QAAS+M,GAAO7pB,GACZ,OAASA,GAAKA,EAAEjD,QAAQ,QAAU,EAAK,OAASiD,EAGpD,QAASiqB,GAAUC,EAAW1L,GAC1B,GAA0B,WAAtBjY,EAAO4jB,aAA6B5jB,EAAO+V,WAAa/V,EAAO4jB,WAAa,CAC5E,GAAIC,GAAmBC,EAAkB,QACrCC,EAAWJ,EAAU3lB,OAAO,KAAO6lB,EAEnCE,GAASrrB,UACTqrB,EAAWJ,EAAU1lB,OAAO,KAAKmC,KAAK,QAASyjB,IAGnD5L,EAAOpf,KAAK,SAAUY,EAAGwnB,GACrB,GAAI+C,GAASvqB,EAAE8c,MACX4M,KACAa,EAASA,EAAOhoB,OAAOmnB,GAG3B,IAAI9X,GAAI0Y,EAAS/lB,OAAO,KAAO8lB,EAAkB,KAAO7C,EACpD5V,GAAE3S,UACF2S,EAAI0Y,EAAS9lB,OAAO,KAAKmC,KAAK,QAAS0jB,EAAkB,KAAO7C,IAGpEgD,EAAe5Y,EAEf,IAAI6Y,GAAO7Y,EAAE/G,UAAU,UAAY6f,GAC9BtgB,KAAKmgB,EAAQ7uB,EAAGgH,MAAM,KAE3B+nB,GAAKnX,QACA9O,OAAO,UACPmC,KAAK,QAAS+jB,GACd/jB,KAAK,IAAKgkB,KACV7e,MAAM,eAAgB8e,GACtB9e,MAAM,iBAAkB+e,GACxBlkB,KAAK,OAAQJ,EAAO6K,UACpBlC,GAAG,YAAa,WACb,GAAI4b,GAAMtvB,EAAG+I,OAAOhD,KACpBwpB,GAAQD,GACRE,EAAaF,EAAKlZ,KAErB1C,GAAG,WAAY,WACZ,GAAI4b,GAAMtvB,EAAG+I,OAAOhD,KACpB0pB,GAAQH,GACRI,EAAatZ,KAGrB6Y,EAAKvrB,KAAK8P,EAAahP,GAEvBtE,EAAG4C,WAAWmsB,EAAMlkB,EAAO0F,sBACtBtF,KAAK,KAAM,SAAU3G,GAClB,MAAOtE,GAAGwE,MAAMuE,WAAW8B,EAAOH,IAAIpG,EAAEoG,MAE3CO,KAAK,KAAM,SAAU3G,GAClB,MAAOtE,GAAGwE,MAAMuE,WAAW8B,EAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,OAEjDzX,KAAK,OAAQJ,EAAO6K,UAEzBqZ,EAAKjX,OAAOjI,YASxB,QAAS4f,GAAY3M,GACjBA,EAAOpf,KAAK,SAAUY,EAAGwnB,GACrB,GAAI/K,GAAQjhB,EAAG+I,OAAOhD,MAClBygB,EAASvF,EAAM5R,UAAU,kBACxBT,KAAKpK,EAAE8c,OAAQphB,EAAGgH,MAAM,KAE7Bsf,GAAO1O,QACF9O,OAAO,QACPmC,KAAK,QAAS,aACdA,KAAK,cAAe,UAEzBjL,EAAG4C,WAAW0jB,EAAQzb,EAAO0F,sBACxBtF,KAAK,IAAK,SAAU3G,GACjB,MAAOtE,GAAGwE,MAAMuE,WAAW8B,EAAOH,IAAIpG,EAAEoG,MAE3CO,KAAK,IAAK,SAAU3G,GACjB,GAAIqG,GAAIE,EAAOF,IAAIrG,EAAEqG,EAAIrG,EAAEoe,IAAMuJ,CACjC,OAAOjsB,GAAGwE,MAAMuE,WAAW4B,KAE9B0F,KAAK,SAAU/L,GACZ,MAAOuG,GAAOmI,QAAQ1O,KAG9BtE,EAAG4C,WAAW0jB,EAAOxO,OAAQjN,EAAO0F,sBAC/BtF,KAAK,SAAU,GACf4E,WAIb,QAASif,GAAgB5Y,GACrB,GAAIwZ,GAAWxZ,EAAErN,OAAO,QAAU8mB,GAAuBpsB,QACrD2S,EAAEpN,OAAO,QAAQmC,KAAK,QAAS0kB,GAAyBzZ,EAAErN,OAAO,QAAU8mB,EAC/ED,GAAStf,MAAM,UAAW,QAAQnF,KAAK,mBAAoB,MAE3D,IAAI2kB,GAAW1Z,EAAErN,OAAO,QAAUgnB,GAAuBtsB,QACrD2S,EAAEpN,OAAO,QAAQmC,KAAK,QAAS4kB,GAAyB3Z,EAAErN,OAAO,QAAUgnB,EAC/ED,GAASxf,MAAM,UAAW,QAAQnF,KAAK,mBAAoB,OAG/D,QAASokB,GAASD,GAId,MAHAA,GAAIhf,MAAM,eAAgB,IAC1Bgf,EAAIhf,MAAM,iBAAkB,IAC5Bgf,EAAInkB,KAAK,IAAK6kB,GACPV,EAGX,QAASE,GAAcF,EAAKlZ,GACxB,GAAIxL,GAAI0kB,EAAInkB,KAAK,MACbN,EAAIykB,EAAInkB,KAAK,MACb8kB,EAAUllB,EAAOyU,UAAYzU,EAAOuJ,UAAUD,KAC9C6b,EAAgB,IAAMD,EAAS,IAAMplB,EAAI,IAAM,EAAM,IAAM,EAC3DslB,EAAgB,IAAMvlB,EAAI,IAAMG,EAAO0N,cAAgB,IAAM7N,EAAI,IAAMC,CAC3EuL,GAAErN,OAAO,QAAU8mB,GAAuBvf,MAAM,UAAW,IAAInF,KAAK,IAAK+kB,GACzE9Z,EAAErN,OAAO,QAAUgnB,GAAuBzf,MAAM,UAAW,IAAInF,KAAK,IAAKglB,GAG7E,QAAShB,KACL,MAAOiB,IAAoBJ,EAG/B,QAASP,GAASH,GACdA,EAAIhf,MAAM,eAAgB8e,GACrB9e,MAAM,iBAAkB+e,GACxBlkB,KAAK,IAAKgkB,KAGnB,QAASO,GAActZ,GACnBA,EAAErN,OAAO,QAAU8mB,GAAuBvf,MAAM,UAAW,QAC3D8F,EAAErN,OAAO,QAAUgnB,GAAuBzf,MAAM,UAAW,QAG/D,QAASkD,GAAa8b,EAAK9qB,GACnBuG,EAAOyI,gBACP8b,EAAIvmB,OAAO,SAASgH,SACpBuf,EAAItmB,OAAO,SAASuH,KAAKrQ,EAAGgH,MAAM,OAAQ6D,EAAOuI,MAAM9O,EAAEtB,SAsEjE,QAAS0pB,GAAazJ,EAAOkN,EAAWxD,GACpC,MAAO,YACH,GAAIC,GAAO9sB,EAAG+I,OAAOhD,MACjBgnB,EAASD,EAAK3hB,KAAK,YAAcgY,GACjC2J,EAAK3hB,KAAK,uBAA0BklB,YAAqBrpB,OACrDqpB,EAAUC,KAAK,KAAO,OAAUxD,EAAK3hB,KAAK,UAAYgY,CAC9D,OAAO0J,IAAOE,EAAQA,GA1b9B,GAgBImB,GACAE,EAjBAmC,EAAqB,EACrB1B,EAAkB,aAClBK,EAAmB,MACnBW,EAAwB,OACxBE,EAAwB,OACxBS,EAAsB,KACtBrE,EAAgB,EAEhBphB,EAAS7K,EAAG6gB,WAAW7gB,EAAG4V,yBAC1ByY,GAAc,EACdyB,EAAaO,EACbH,EAAmB,KACnBhB,EAAwBoB,EACxBnB,EAA0BmB,EAC1BzC,EAAe,SACfE,EAAW,GAGXwC,GAAY,CAqchB,OAncA1lB,GAAO0F,mBAAmB,KAC1B1F,EAAO2F,gBAAgB,GACvB3F,EAAOiM,kBAAkB,GAEzBjM,EAAO8N,SAAW,WACd,GAAI6V,GAAY3jB,EAAO2S,aACnBgT,EAAahC,EAAU3lB,OAAO,eAE9B2nB,GAAWjtB,UACXitB,EAAahC,EAAU1lB,OAAO,KAAKmC,KAAK,QAAS,cAGrD,IAAI6X,GAAS0N,EAAWrhB,UAAU,WAAWT,KAAK7D,EAAO6D,QAErDif,EAAc7K,EACblL,QACA9O,OAAO,KACPmC,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAO,UAAiBA,GAGhCisB,GAASC,EAAa7K,GAEtBsL,EAAST,EAAa7K,GAEtByL,EAASC,EAAW1L,GAEhBjY,EAAOsI,eACPsc,EAAW3M,IAkBnBjY,EAAOsK,YAAc,SAAUA,GAC3B,MAAK/P,WAAU1D,QAGfmsB,EAAe1Y,EACRtK,GAHIgjB,GAmBfhjB,EAAOijB,QAAU,SAAUA,GACvB,MAAK1oB,WAAU1D,QAGfqsB,EAAWD,EACJjjB,GAHIkjB,GAuBfljB,EAAOojB,QAAU,SAAUA,GACvB,MAAK7oB,WAAU1D,QAGfssB,EAAWC,EACJpjB,GAHImjB,GAmBfnjB,EAAO4lB,UAAY,SAAUA,GACzB,MAAKrrB,WAAU1D,QAGfwsB,EAAauC,EACN5lB,GAHIqjB,GAefrjB,EAAO6lB,WAAa,SAAUA,GAC1B,MAAKtrB,WAAU1D,QAGf2sB,EAAcqC,EACP7lB,GAHIwjB,GAwIfxjB,EAAOmI,MAAM,SAAU1O,GACnB,MAAOtE,GAAGwE,MAAMuC,iBAAiBzC,EAAEoe,GAAKpe,EAAEqG,KAC3C,GA0FHE,EAAO4jB,SAAW,SAAUA,GACxB,MAAKrpB,WAAU1D,QAGf6uB,EAAY9B,EACL5jB,GAHI0lB,GAcf1lB,EAAO8lB,UAAY,SAAUA,GACzB,MAAKvrB,WAAU1D,QAGfouB,EAAaa,EACN9lB,GAHIilB,GAmBfjlB,EAAO+lB,iBAAmB,SAAUld,GAChC,MAAKtO,WAAU1D,QAMHgS,GAKRwb,EAAwBxb,EAAQmd,aAAe,GAC/C1B,EAA0Bzb,EAAQod,eAAiB,GACnDZ,EAAmBxc,EAAQiT,QAAU,IANrCuI,EAAwBoB,EACxBnB,EAA0BmB,EAC1BJ,EAAmB,MAMhBrlB,IAbCgmB,YAAa3B,EACb4B,cAAe3B,EACfxI,OAAQuJ,IAwBpBrlB,EAAO+H,gBAAkB,SAAUtO,GAC1BuG,EAAOkI,mBAAmBzO,IAC3BuG,EAAOqL,IAAI/G,UAAU,wBAChBG,QAAQ,YAAaod,EAAYpoB,EAAE2e,MAAO3e,EAAE6rB,YAC5C7gB,QAAQ,UAAWod,EAAYpoB,EAAE2e,MAAO3e,EAAE6rB,WAAW,KAIlEtlB,EAAOgI,YAAc,WACjBhI,EAAOqL,IAAI/G,UAAU,wBAChBG,QAAQ,aAAa,GACrBA,QAAQ,WAAW,IAG5BtP,EAAG6E,SAASgG,EAAQ,cAAe,WAC/B,GAAI8H,GAAc9H,EAAOkmB,cACzB,OAAK7C,GAGEvb,EAAYwL,IAAI,SAAU5W,GAE7B,MADAA,GAAE4oB,UAAYjC,EACP3mB,IAJAoL,IAQR9H,EAAOuE,OAAO3G,EAAQ4G,IAkCjCrP,EAAGgxB,UAAY,SAAUvoB,EAAQ4G,GAC7B,GAAI4hB,GAAgBnxB,EAAG4G,OAAO,MAC1BmE,EAAS7K,EAAG4K,cACZsmB,GAASvf,KAAM,GAAIxD,IAAK,GAwE5B,OArDAtD,GAAOsmB,KAAO,SAAUzd,GACpB,MAAKtO,WAAU1D,QAGXgS,EAAQvF,MACR+iB,EAAM/iB,IAAMuF,EAAQvF,KAEpBuF,EAAQ/B,OACRuf,EAAMvf,KAAO+B,EAAQ/B,MAElB9G,GARIqmB,GAsBfrmB,EAAOumB,aAAe,SAAUC,GAC5B,MAAKjsB,WAAU1D,QAGfuvB,EAAgBI,EACTxmB,GAHIomB,GAMfpmB,EAAO+F,UAAY,WACf,GAAI0gB,GAAMzmB,EAAOY,YAAY6O,OACzBrS,EAAM4C,EAAO7J,QAAQoJ,QACrB+D,EAAM8iB,EAAcK,GACpBC,EAAWN,EAAchpB,EAU7B,OARKqpB,KAAQrpB,GAAuB,KAAdipB,EAAM/iB,IACxBtD,EAAOQ,OAAO8lB,KAAKD,EAAM/iB,IAAIzG,QAAQ,eAAgByG,GAAKzG,QAAQ,gBAAiB6pB,IAC7D,KAAfL,EAAMvf,KACb9G,EAAOQ,OAAO8lB,KAAKD,EAAMvf,KAAKjK,QAAQ,eAAgByG,GAAKzG,QAAQ,gBAAiB6pB,KAEpF1mB,EAAOsE,UAAU,gBAAgBkB,KAAKlC,GACtCtD,EAAOsE,UAAU,iBAAiBkB,KAAKkhB,IAEpC1mB,GAGXA,EAAOoG,UAAY,WACf,MAAOpG,GAAO+F,aAGX/F,EAAOuE,OAAO3G,EAAQ4G,IA8BjCrP,EAAGwxB,UAAY,SAAU/oB,EAAQ4G,GAqE7B,QAASoiB,KAQL,GAAIC,IAAgB,CAKpB,IAJAC,EAASjhB,QAAQ,SAAUzJ,GACvByqB,GAA8C,kBAANzqB,MAGvCyqB,EAAe,CAEhB,GAAIE,GAAQ/mB,EAAOsE,UAAU,SAAST,MAAM,GAC5CkjB,GAAMha,QAAQ9O,OAAO,SACrB8oB,EAAM9Z,OAAOjI,QAGb,IAAIgiB,GAAUD,EAAMziB,UAAU,MAAMT,MAAM,GAC1CmjB,GAAQja,QAAQ9O,OAAO,MACvB+oB,EAAQ/Z,OAAOjI,QAGf,IAAIiiB,GAAWD,EAAQ1iB,UAAU,MAC5BT,KAAKijB,EACVG,GAASla,QAAQ9O,OAAO,MACxBgpB,EAASha,OAAOjI,SAEhBiiB,EACK7mB,KAAK,QAAS8mB,GACVZ,KAAK,SAAU7sB,GACZ,MAAQuG,GAAOmnB,sBAAsB1tB,KAKrD,GAAI4Z,GAASrT,EAAOQ,OAAO8D,UAAU,SAChCT,KAAKujB,IAAe,SAAU3tB,GAC3B,MAAOuG,GAAOsC,cAAc7I,KAGhC4tB,EAAWhU,EACVtG,QACA9O,OAAO,QAgBZ,OAdIqpB,MAAgB,GAChBD,EACKppB,OAAO,MACPmC,KAAK,QAASmnB,GACVtpB,OAAO,MACPmC,KAAK,QAASonB,GACdpnB,KAAK,UAAW0mB,EAASjwB,QACzByvB,KAAK,SAAU7sB,GACZ,MAAOuG,GAAOsC,cAAc7I,KAI5C4Z,EAAOpG,OAAOjI,SAEPqiB,EAGX,QAASD,KACL,GAAIK,EAOJ,OALIA,GADAC,IAAWzyB,EAAG0yB,UACJ3nB,EAAOY,YAAYyI,OAAOue,GAE1B5nB,EAAOY,YAAYuI,IAAIye,GAG9B3yB,EAAG4yB,OACL5O,IAAIjZ,EAAO7J,SACX2xB,SAASJ,GACTD,QAAQA,EAAQlN,KAAK,SAAU7Z,EAAG8Z,GAC/B,MAAOkN,GAAOK,EAAQrnB,GAAIqnB,EAAQvN,MACnCnW,MAAM2jB,EAAaC,IAG9B,QAASC,GAAY7U,GACjB,GAAI8U,GAAO9U,EAAO+U,QACb9jB,UAAU,MAAQ+jB,GAClBxkB,KAAK,SAAUpK,GACZ,MAAOA,GAAE8c,SAGb+R,EAAWH,EAAKpb,QACf9O,OAAO,MACPmC,KAAK,QAASioB,EAYnB,OAVAvB,GAASjhB,QAAQ,SAAU0iB,EAAG3xB,GAC1B0xB,EAASrqB,OAAO,MACXmC,KAAK,QAASooB,EAAmB,KAAO5xB,GACxC0vB,KAAK,SAAU7sB,GACZ,MAAOuG,GAAOyoB,qBAAqBF,EAAG9uB,OAIlD0uB,EAAKlb,OAAOjI,SAELmjB,EAzKX,GAeIF,GAfAT,EAAkB,iBAClBa,EAAgB,eAChBG,EAAmB,kBACnBjB,EAAkB,iBAClBL,EAAiB,gBAEjBlnB,EAAS7K,EAAG4K,cAEZ6nB,EAAQ,GACRd,KACAiB,EAAU,SAAUtuB,GACpB,MAAOA,IAEPiuB,EAASzyB,EAAG0yB,UACZK,EAAc,EAEdV,GAAc,CA8XlB,OA5XAtnB,GAAO+F,UAAY,WAKf,MAJA/F,GAAOsE,UAAU,SAASU,SAE1BkjB,EAAWtB,KAEJ5mB,GAGXA,EAAOyoB,qBAAuB,SAAUF,EAAG9uB,GACvC,MAAsB,kBAAN8uB,GACRA,EAAE9uB,GACa,gBAAN8uB,GACR9uB,EAAE8uB,GACFA,EAAE1sB,OAAOpC,IAKtBuG,EAAOmnB,sBAAwB,SAAU1tB,GAIrC,MAAqB,kBAANA,GACPuG,EAAO0oB,0BAA0BjvB,GAClB,gBAANA,GACRuG,EAAO2oB,0BAA0BlvB,GAAK6c,OAAO7c,EAAE0O,QAG5DnI,EAAO2oB,0BAA4B,SAAUvwB,GAEzC,MAAOA,GAAEwwB,OAAO,GAAGC,cAAgBzwB,EAAEiM,MAAM,IAG/CrE,EAAO0oB,0BAA4B,SAAUtsB,GAEzC,GAAIhE,GAAIke,OAAOla,GACX0sB,EAAK1wB,EAAE5B,QAAQ,UACnB,IAAIsyB,GAAM,EAAG,CACT,GAAIC,GAAK3wB,EAAE4wB,YAAY,IACvB,IAAID,GAAM,EAAG,CACT3wB,EAAIA,EAAE6wB,UAAUH,EAAK,EAAGC,EACxB,IAAIG,GAAK9wB,EAAE5B,QAAQ,eACf0yB,IAAM,IACN9wB,EAAIA,EAAEyE,QAAQ,eAAgB,MAI1C,MAAOzE,IA2GX4H,EAAOoG,UAAY,WACf,MAAOpG,GAAO+F,aA4BlB/F,EAAOyP,KAAO,SAAUA,GACpB,MAAKlV,WAAU1D,QAGf+wB,EAAQnY,EACDzP,GAHI4nB,GAoBf5nB,EAAOmpB,WAAa,SAAUA,GAC1B,MAAK5uB,WAAU1D,QAGfmxB,EAAcmB,EACPnpB,GAHIgoB,GAefhoB,EAAOopB,SAAW,SAAUA,GACxB,MAAK7uB,WAAU1D,QAGfoxB,EAAYmB,EACLppB,GAHIioB,GAqFfjoB,EAAOqpB,QAAU,SAAUA,GACvB,MAAK9uB,WAAU1D,QAGfiwB,EAAWuC,EACJrpB,GAHI8mB,GAmBf9mB,EAAOspB,OAAS,SAAUA,GACtB,MAAK/uB,WAAU1D,QAGfkxB,EAAUuB,EACHtpB,GAHI+nB,GAmBf/nB,EAAOooB,MAAQ,SAAUA,GACrB,MAAK7tB,WAAU1D,QAGf6wB,EAASU,EACFpoB,GAHI0nB,GAmBf1nB,EAAOupB,WAAa,SAAUA,GAC1B,MAAKhvB,WAAU1D,QAGfywB,EAAciC,EACPvpB,GAHIsnB,GAMRtnB,EAAOuE,OAAO3G,EAAQ4G,IAuBjCrP,EAAGq0B,SAAW,SAAU5rB,EAAQ4G,GA6B5B,QAASoiB,KACL,GAAIvT,GAASrT,EAAOQ,OAAO8D,UAAU,OAASmlB,GACrC5lB,KAAKujB,IAAe,SAAU3tB,GAC3B,MAAOuG,GAAOsC,cAAc7I,KAGpCiwB,EAAYrW,EACPtG,QACA9O,OAAO,OACPmC,KAAK,QAASqpB,EAUvB,OARIE,IACAD,EACKpD,KAAK,SAAU7sB,GACZ,MAAOkwB,GAAWlwB,KAI9B4Z,EAAOpG,OAAOjI,SACP0kB,EAGX,QAAStC,KACL,GAAIK,GAAUznB,EAAOY,YAAYuI,IAAIye,EAErC,OAAO3yB,GAAG4yB,OACL5O,IAAIjZ,EAAO7J,SACX2xB,SAASJ,GACTD,QAAQA,EAAQlN,KAAK,SAAU7Z,EAAG8Z,GAC/B,MAAOkN,GAAOK,EAAQrnB,GAAIqnB,EAAQvN,MACnCnW,MAAM2jB,EAAaC,IAG9B,QAAS2B,GAAavW,GAClB,GAAIiG,GAAQjG,EAAO+U,QACV9jB,UAAU,OAASulB,GACnBhmB,KAAK,SAAUpK,GACZ,MAAOA,GAAE8c,QAYrB,OATA+C,GAAMvM,QACD9O,OAAO,OACPmC,KAAK,QAASypB,GACdvD,KAAK,SAAU7sB,GACZ,MAAO4sB,GAAM5sB,KAGrB6f,EAAMrM,OAAOjI,SAENsU,EA7EX,GAaqB2O,GAbjBT,EAAkB,gBAClBqC,EAAiB,eACjBtC,EAAkB,gBAClBkC,EAAiB,cAEjBzpB,EAAS7K,EAAG4K,cAEZ6nB,EAAQ,IACRvB,EAAQ,SAAU5sB,GAAK,MAAO,kDAAoDqwB,KAAKC,UAAUtwB,IACjGsuB,EAAU,SAAUtuB,GACpB,MAAOA,IAEPiuB,EAASzyB,EAAG0yB,UACZK,EAAc,EAEd2B,EAAa,SAAUlwB,GACvB,MAAO,eAAkB8tB,EAAkB,gBAAoBC,EAAkB,KAC7ExnB,EAAOsC,cAAc7I,GAAK,cAqNlC,OAlNAuG,GAAO+F,UAAY,WAKf,MAJA/F,GAAOsE,UAAU,OAASmlB,GAAgBzkB,SAE1C4kB,EAAYhD,KAEL5mB,GAuDXA,EAAOoG,UAAY,WACf,MAAOpG,GAAO+F,aA6BlB/F,EAAOmpB,WAAa,SAAUA,GAC1B,MAAK5uB,WAAU1D,QAGfmxB,EAAcmB,EACPnpB,GAHIgoB,GAefhoB,EAAOopB,SAAW,SAAUA,GACxB,MAAK7uB,WAAU1D,QAGfoxB,EAAYmB,EACLppB,GAHIioB,GAcfjoB,EAAOyP,KAAO,SAAUA,GACpB,MAAKlV,WAAU1D,QAGf+wB,EAAQnY,EACDzP,GAHI4nB,GAkBf5nB,EAAOsmB,KAAO,SAAUA,GACpB,MAAK/rB,WAAU1D,QAGfwvB,EAAQC,EACDtmB,GAHIqmB,GAgBfrmB,EAAOgqB,UAAY,SAAUA,GACzB,MAAKzvB,WAAU1D,QAGf8yB,EAAaK,EACNhqB,GAHI2pB,GAmBf3pB,EAAOspB,OAAS,SAAUW,GACtB,MAAK1vB,WAAU1D,QAGfkxB,EAAUkC,EACHjqB,GAHI+nB,GAkBf/nB,EAAOooB,MAAQ,SAAUA,GACrB,MAAK7tB,WAAU1D,QAGf6wB,EAASU,EACFpoB,GAHI0nB,GAMR1nB,EAAOuE,OAAO3G,EAAQ4G,IA8BjCrP,EAAG+0B,YAAc,SAAUtsB,EAAQ4G,GAgC/B,QAAS2lB,GAAaC,GAClB,GAAI7O,GAAe6O,EAAQrd,QAAQ9O,OAAO,IAE1Csd,GACKnb,KAAK,QAASJ,EAAOka,mBACrB9Z,KAAK,YAAaiqB,GAClBpsB,OAAO,UAAUmC,KAAK,QAAS,SAAU3G,EAAG7C,GACzC,MAAOoJ,GAAOma,aAAe,KAAOvjB,IAEvC+R,GAAG,QAAS3I,EAAO2H,SACnBvH,KAAK,OAAQJ,EAAO6K,UACpBzK,KAAK,IAAK,GACfjL,EAAG4C,WAAWqyB,EAASpqB,EAAO0F,qBAAsB1F,EAAO2F,mBACtD3H,OAAO,UAAYgC,EAAOma,cAC1B/Z,KAAK,IAAK,SAAU3G,GACjB,MAAOuG,GAAOib,QAAQxhB,KAEzB2G,KAAK,UAAW,SAAU3G,GACvB,MAAQuG,GAAOib,QAAQxhB,GAAK,EAAK,EAAI,IAG7CuG,EAAOsb,eAAeC,GAEtBvb,EAAO0b,gBAAgBH,GAG3B,QAAS+O,GAAaF,GAClBj1B,EAAG4C,WAAWqyB,EAASpqB,EAAO0F,qBAAsB1F,EAAO2F,mBACtDvF,KAAK,YAAaiqB,GAClBrsB,OAAO,UAAYgC,EAAOma,cAC1B/Z,KAAK,OAAQJ,EAAO6K,UACpBzK,KAAK,IAAK,SAAU3G,GACjB,MAAOuG,GAAOib,QAAQxhB,KAEzB2G,KAAK,UAAW,SAAU3G,GACvB,MAAQuG,GAAOib,QAAQxhB,GAAK,EAAK,EAAI,IAG7CuG,EAAOwb,eAAe4O,GACtBpqB,EAAO2b,eAAeyO,GAG1B,QAASG,GAAaH,GAClBA,EAAQnd,OAAOjI,SAGnB,QAASwlB,GAAS/wB,GACd,GAAIoG,GAAIG,EAAOH,IAAIG,EAAOsC,cAAc7I,GAIxC,OAHIyhB,OAAMrb,KACNA,EAAI,GAEDA,EAGX,QAAS4qB,GAAShxB,GACd,GAAIqG,GAAIE,EAAOF,IAAIE,EAAOuC,gBAAgB9I,GAI1C,OAHIyhB,OAAMpb,KACNA,EAAI,GAEDA,EA1FX,GAAIE,GAAS7K,EAAG0kB,YAAY1kB,EAAG4V,wBAE/B/K,GAAO0F,mBAAmB,KAE1B1F,EAAO2F,gBAAgB,EAEvB,IAAI0kB,GAAgB,SAAU5wB,GAC1B,MAAO,aAAgB+wB,EAAQ/wB,GAAM,IAAOgxB,EAAQhxB,GAAM,IA+F9D,OA5FAuG,GAAO8N,SAAW,WACd9N,EAAO8a,wBACP9a,EAAOrD,IAAI0C,OAAOW,EAAOoa,WAAYpa,EAAOgM,cAAgBhM,EAAOgc,yBAEnE,IAAInY,GAAO7D,EAAO6D,OACdumB,EAAUpqB,EAAO2S,aAAarO,UAAU,KAAOtE,EAAOka,mBACjDrW,KAAKA,EAAM,SAAUpK,GAAK,MAAOA,GAAEwf,KACxCjZ,GAAO4b,kBAEPwO,EAAQhC,QAGZ+B,EAAYC,GAEZE,EAAYF,GAEZG,EAAYH,GAEZpqB,EAAOqO,sBAiEXrO,EAAOmO,YAAc,aAIrBnO,EAAOoO,YAAc,WAEjBpO,EAAOqO,sBAGJrO,EAAOuE,OAAO3G,EAAQ4G,IAsBjCrP,EAAGu1B,eAAiB,SAAU9sB,EAAQ4G,GAuFlC,QAASmmB,GAAsBrhB,EAAMF,GACjC,GAAIwhB,GAAWC,EAAWC,EAAWC,EACjCC,CAgBJ,OAdI1hB,KACAshB,EAAYjX,IACZkX,EAAYjX,KAGZxK,IACA0hB,EAAYG,IACZF,EAAYG,KAGZlrB,EAAOmrB,cAAgB7hB,GAAQF,IAC/B4hB,EAASI,EAAiBR,EAAWC,EAAWC,EAAWC,IAGxDC,IACHJ,UAAWA,EACXC,UAAWA,EACXC,UAAWA,EACXC,UAAWA,GAInB,QAASK,GAAkBR,EAAWC,EAAWC,EAAWC,GASxD,GAAIM,IAAeN,EAAYD,IAAcD,EAAYD,EAEzD,QACIA,UAAW1xB,KAAKmE,IAAIutB,EAAWE,EAAYO,GAC3CR,UAAW3xB,KAAKoE,IAAIutB,EAAWE,EAAYM,GAC3CP,UAAW5xB,KAAKmE,IAAIytB,EAAWF,EAAYS,GAC3CN,UAAW7xB,KAAKoE,IAAIytB,EAAWF,EAAYQ,IAInD,QAASC,GAAmBN,GACxB,GAAIO,GAAiClzB,SAApB2H,EAAOwrB,UAA0BxrB,EAAOiO,WACrDwd,EAAYF,GAAcvrB,EAAO+R,UACb1Z,UAApB2H,EAAOwrB,UACPxrB,EAAOwrB,OAAOv2B,EAAG2U,MAAMS,UAEvBkhB,GACAvrB,EAAOwrB,SAASnyB,QAAQ2xB,EAAOF,UAAWE,EAAOD,YAEjDU,GACAzrB,EAAOwrB,SAAS3X,YAAY7T,EAAO0N,cAAe,IAGtD1N,EAAOwrB,SAASnsB,OAAOW,EAAO0N,cAAe,IAC7C1N,EAAO0rB,WAAW1rB,EAAO0rB,aAAa9hB,MAAM5J,EAAOwrB,WAEnDxrB,EAAO0rB,aAAa9a,OAAO,SAG/B,QAAS+a,GAAkBX,GACvB,GAAIO,GAA4BlzB,SAAf2H,EAAOF,KAAqBE,EAAOiO,WAChDwd,EAAYF,GAAcvrB,EAAO+R,UAClB1Z,UAAf2H,EAAOF,KACPE,EAAOF,EAAE7K,EAAG2U,MAAMS,UAElBkhB,GACAvrB,EAAOF,IAAIzG,QAAQ2xB,EAAOJ,UAAWI,EAAOH,YAE5CY,GACAzrB,EAAOF,IAAI+T,YAAY7T,EAAO0N,cAAe,IAGjD1N,EAAOF,IAAIT,OAAOW,EAAO0N,cAAe,IACxC1N,EAAO6U,MAAM7U,EAAO6U,QAAQjL,MAAM5J,EAAOF,MAEzCE,EAAO6U,QAAQjE,OAAO,QAG1B,QAASgb,GAAgBC,EAAOj1B,GAC5Bi1B,EAAMzZ,WAAWpS,EAAOqL,KACxBwgB,EAAMxgB,IAAIjL,KAAK,QAAS0rB,EAAkB,KAAOl1B,GAkOrD,QAASm1B,KACL,MAAOC,GAAUhwB,OAAO,SAAU6vB,GAC9B,OAAQA,EAAMzY,kBAItB,QAAS6Y,KACL,MAAOD,GAAUhwB,OAAO,SAAU6vB,GAC9B,MAAOA,GAAMzY,kBAIrB,QAAS8Y,GAAa30B,GAClB,MAAOA,GAAO+b,IAAI,SAAUwC,GACxB,MAAOA,GAAEnC,aAKjB,QAASA,KACL,MAAO1e,GAAGoI,IAAI6uB,EAAYH,MAG9B,QAASd,KACL,MAAOh2B,GAAGoI,IAAI6uB,EAAYD,MAG9B,QAASE,GAAa50B,GAClB,MAAOA,GAAO+b,IAAI,SAAUwC,GACxB,MAAOA,GAAElC,aAKjB,QAASA,KACL,MAAOze,GAAGwE,MAAM8C,IAAIxH,EAAGqI,IAAI6uB,EAAYJ,MAAuB/rB,EAAO+U,gBAGzE,QAASmW,KACL,MAAO/1B,GAAGwE,MAAM8C,IAAIxH,EAAGqI,IAAI6uB,EAAYF,MAAwBjsB,EAAO+U,gBAG1E,QAASqX,KACL,MAAOJ,GAAU1Y,IAAI,SAAUwC,GAC3B,MAAOA,GAAEpK,aAQjB,QAAS2gB,KACL,MAAOL,GAAU1Y,IAAI,SAAUwC,GAC3B,MAAOA,GAAEnK,aAlcjB,GAeI2gB,GAfAR,EAAkB,MAClBS,EAAqC,GAErCvsB,EAAS7K,EAAG4V,wBACZihB,KAEAQ,KAEAC,GAAe,EACfC,GAAc,EACdC,GAAc,EAEdC,EAAc33B,EAAG4P,IAAI8L,OACrBkc,EAAmB,EACnBC,EAA0BP,EAE1BQ,GAAsB,CAkf1B,OAhfA/sB,GAAO6C,yBACP7C,EAAO0F,mBAAmB,KAC1B1F,EAAO2F,gBAAgB,GAEvBxQ,EAAG6E,SAASgG,EAAQ,aAAc,WAG9B,IAAK,GAFDqL,GAAIrQ,KAAKgyB,cAEJp2B,EAAI,EAAGA,EAAIo1B,EAAUn1B,SAAUD,EAAG,CACvC,GAAIi1B,GAAQG,EAAUp1B,EAEtBg1B,GAAeC,EAAOj1B,GAEjBi1B,EAAMjrB,aACPirB,EAAMjrB,UAAUZ,EAAOY,aAEtBirB,EAAM11B,SACP01B,EAAM11B,MAAM6J,EAAO7J,SAGvB01B,EAAMrnB,WAAWxE,EAAOwE,cACxBqnB,EAAMhnB,IAAI7E,EAAO6E,OACjBgnB,EAAM/Y,OAAO9S,EAAO8S,UACpB+Y,EAAMnmB,mBAAmB1F,EAAO0F,qBAAsB1F,EAAO2F,mBAC7DkmB,EAAM9V,QAAQ/V,EAAO+V,WACrB8V,EAAMpjB,YAAYzI,EAAOyI,eACzBojB,EAAMtgB,SAASvL,EAAOuL,YAG1B,MAAOF,KAGXrL,EAAOiV,UAAY,WAIf,IAAK,GAHDzF,GAASxP,EAAOsV,cAChBC,EAAevV,EAAOuV,aAAa/F,GAE9B5Y,EAAI,EAAGA,EAAIo1B,EAAUn1B,SAAUD,EACpCo1B,EAAUp1B,GAAG2Q,cAAcgO,EAAe,KAAO/F,IAIzDxP,EAAO6N,cAAgB,WACnB,GAAIvE,GAAuC,IAA/ByiB,IAAoBl1B,OAC5BuS,EAAyC,IAAhC6iB,IAAqBp1B,OAC9Bm0B,EAASL,EAAqBrhB,EAAMF,EAEpCE,IAAQqiB,EAAiBX,GACzB5hB,GAASkiB,EAAkBN,GAE3Be,IAAoBl1B,OAAS,IAAMk2B,EACnC/sB,EAAO8T,kCAAkC9T,EAAOqL,IAAKrL,EAAOF,IAAKE,EAAO6U,SACjEoX,IAAqBp1B,OAAS,GACrCmJ,EAAO8T,kCAAkC9T,EAAOqL,IAAKihB,EAASM,IAItE5sB,EAAOkO,YAAc,WACkB,IAA/B6d,IAAoBl1B,SACpBmJ,EAAOqU,cAAc,IAAKrU,EAAO6U,QAAS7U,EAAOuJ,UAAUD,MAC3DtJ,EAAO+T,iBAAiB,IAAK/T,EAAO2U,cAAc,KAGlB,IAAhCsX,IAAqBp1B,SACrBmJ,EAAOqU,cAAc,KAAMrU,EAAO0rB,aAAc1rB,EAAOK,QAAUL,EAAOuJ,UAAUH,OAClFpJ,EAAO+T,iBAAiB,KAAM/T,EAAOitB,kBAAmB,GAAIjtB,EAAOK,QAAUysB,KA4FrF9sB,EAAO8N,SAAW,WACd,IAAK,GAAIlX,GAAI,EAAGA,EAAIo1B,EAAUn1B,SAAUD,EAAG,CACvC,GAAIi1B,GAAQG,EAAUp1B,EAEjBi1B,GAAMxgB,KACPugB,EAAeC,EAAOj1B,GAGtB61B,GACAZ,EAAM7hB,OAAOhK,EAAOgK,UAGxB6hB,EAAMhsB,EAAEG,EAAOH,KAEfgsB,EAAM9Y,MAAM/S,EAAO+S,SAEf8Y,EAAMzY,iBACNyY,EAAM/rB,EAAEE,EAAOwrB,UACfK,EAAMhX,MAAM7U,EAAO0rB,gBAEnBG,EAAM/rB,EAAEE,EAAOF,KACf+rB,EAAMhX,MAAM7U,EAAO6U,UAGvBgX,EAAM/d,WAEN+d,EAAM7lB,wBAcdhG,EAAOktB,sBAAwB,SAAUA,GACrC,MAAK3yB,YAILwyB,EAAsBG,EACfltB,GAJI+sB,GAgBf/sB,EAAOmtB,aAAe,SAAUA,GAC5B,MAAK5yB,WAAU1D,QAGf21B,EAAgBW,EAChBnB,EAAUnmB,QAAQ,SAAUgmB,GACxBA,EAAMhjB,QAAQ2jB,KAEXxsB,GANIwsB,GASfxsB,EAAOqO,mBAAqB,WACxB,IAAK,GAAIzX,GAAI,EAAGA,EAAIo1B,EAAUn1B,SAAUD,EAAG,CACvC,GAAIi1B,GAAQG,EAAUp1B,EACtBi1B,GAAMta,MAAMvR,EAAOuR,SACnBsa,EAAMxd,uBAadrO,EAAOitB,gBAAkB,SAAUA,EAAiBzf,GAChD,MAAKjT,WAAU1D,QAGfg2B,EAAmBI,EACnBjtB,EAAOuJ,UAAUH,OAAS0jB,EAC1BA,EAAuCz0B,SAAZmV,EAAyB+e,EAAqC/e,EACzFxN,EAAOuJ,UAAUH,OAAS0jB,EACnB9sB,GANI6sB,GAmCf7sB,EAAOotB,QAAU,SAAUC,GAavB,MAZArB,GAAYqB,EACZrB,EAAUnmB,QAAQ,SAAUgmB,GACxBA,EAAMvrB,OAAON,EAAOM,UACpBurB,EAAMxrB,MAAML,EAAOK,SACnBwrB,EAAMtiB,QAAQvJ,EAAOuJ,WAEjBmjB,GACAb,EAAMtjB,MAAMvI,EAAOuI,SAGvBsjB,EAAMhjB,QAAQ2jB,KAEXxsB,GAUXA,EAAOstB,SAAW,WACd,MAAOtB,IAcXhsB,EAAOutB,YAAc,SAAUA,GAC3B,MAAKhzB,WAAU1D,QAGf41B,EAAec,EACRvtB,GAHIysB,GAefzsB,EAAOwtB,WAAa,SAAUA,GAC1B,MAAKjzB,WAAU1D,QAGf61B,EAAcc,EACPxtB,GAHI0sB,GAgBf1sB,EAAOwrB,OAAS,SAAU5W,GACtB,MAAKra,WAAU1D,QAGfy1B,EAAU1X,EACV5U,EAAO8L,UACA9L,GAJIssB,GAgBftsB,EAAOmrB,WAAa,SAAUA,GAC1B,MAAK5wB,WAAU1D,QAGf81B,EAAcxB,EACdnrB,EAAO8L,UACA9L,GAJI2sB,SAyBR3sB,GAAO2T,eAeP3T,GAAO4T,SAedze,EAAG6E,SAASgG,EAAQ,WAAY,WAC5B,MAAO7K,GAAGwE,MAAMsD,SAAShI,EAAGoI,IAAI+uB,KAAkCpsB,EAAOgT,kBAS7E7d,EAAG6E,SAASgG,EAAQ,WAAY,WAC5B,MAAO7K,GAAGwE,MAAM8C,IAAIxH,EAAGqI,IAAI+uB,KAAkCrsB,EAAOgT,kBAGxEhT,EAAO8H,YAAc,WACjB,MAAOkkB,GAAUyB,OAAO,SAAUnU,EAAOuS,GAKrC,MAJIY,IACAZ,EAAM7hB,OAAOhK,EAAOgK,UAExBsP,EAAM5iB,KAAK+E,MAAM6d,EAAOuS,EAAM/jB,eACvBwR,QAIftZ,EAAO+H,gBAAkB,SAAUtO,GAC/B,IAAK,GAAIi0B,GAAI,EAAGA,EAAI1B,EAAUn1B,SAAU62B,EAAG,CACvC,GAAI7B,GAAQG,EAAU0B,EACtB7B,GAAM9jB,gBAAgBtO,KAI9BuG,EAAOgI,YAAc,SAAUvO,GAC3B,IAAK,GAAIi0B,GAAI,EAAGA,EAAI1B,EAAUn1B,SAAU62B,EAAG,CACvC,GAAI7B,GAAQG,EAAU0B,EACtB7B,GAAM7jB,YAAYvO,KAI1BuG,EAAOiI,aAAe,WAClB3J,QAAQC,IAAI,wDAuBhByB,EAAO0rB,WAAa,SAAUA,GAC1B,MAAKnxB,WAAU1D,QAGf+1B,EAAclB,EACP1rB,GAHI4sB,GAMR5sB,EAAOuE,OAAO3G,EAAQ4G,IAyBjCrP,EAAGw4B,YAAc,SAAU/vB,EAAQ4G,GAG/B,QAASopB,GAASltB,EAAG8Z,GACjB,MAAOvlB,GAAG0yB,UAAU3nB,EAAOsC,cAAc5B,GAAIV,EAAOsC,cAAckY,IAoDtE,QAASqT,GAAY/X,GACbgY,EAAQhY,GAAGzK,KACXyiB,EAAQhY,GAAGzK,IAAIrG,eAEZ8oB,GAAQhY,GAGnB,QAASiY,KACLrzB,OAAOszB,KAAKF,GAASxa,IAAIua,GACzBC,KAhEJ,GAQIG,GARAjuB,EAAS7K,EAAGu1B,eAAe9sB,EAAQ4G,GAMnCspB,KACAI,EAAiB/4B,EAAGytB,UAEpBuL,EAAcl5B,EAAG0yB,UACjByG,EAAaR,CAyJjB,OAvJA5tB,GAAO6C,uBAAuBnM,KAAK,iBAAkB,SACrDsJ,EAAOutB,aAAY,GAEnBvtB,EAAO2V,gBAAkB,WACrB,GACI0Y,GADAC,KAEAC,EAASt5B,EAAG4yB,OAAO5O,IAAIgV,EACvBE,IACAI,EAAOzG,SAASqG,GAEhBC,GACAG,EAAOC,WAAWJ,EAEtB,IAAIK,GAAUF,EAAO9G,QAAQznB,EAAO6D,QAChCypB,EACAmB,EAAQnb,IAAI,SAAUob,EAAK93B,GACvB,GAAI+3B,GAAWb,EAAQY,EAAIzV,MAAQiV,EAAev1B,KAAKqH,EAAQA,EAAQwE,EAAYkqB,EAAIzV,IAAKriB,EAM5F,OALKk3B,GAAQY,EAAIzV,OACboV,GAAkB,GAEtBP,EAAQY,EAAIzV,KAAO0V,EACnBL,EAAK53B,KAAKg4B,EAAIzV,KACP0V,EACF/tB,UAAUZ,EAAOY,aACjBzK,OAAOmN,IAAKrO,EAAGsO,QAAQmrB,EAAInY,SAAUmY,EAAIzV,KACzC3W,YAAYtC,EAAOsC,eACnBC,cAAcvC,EAAOuC,iBACrBwT,QAAQ/V,EAAO+V,YAI5Brb,QAAOszB,KAAKF,GACP9xB,OAAO,SAAU8Z,GAAI,MAAOwY,GAAK93B,QAAQsf,MAAO,IAChDjQ,QAAQ,SAAUiQ,GACf+X,EAAW/X,GACXuY,GAAkB,IAE1BruB,EAAO4uB,SAAStB,GACZe,GAAmBruB,EAAO4I,UAC1B5I,EAAO4I,SAASjR,UA6BxBqI,EAAO1J,MAAQ,SAAUu4B,GACrB,MAAKt0B,WAAU1D,QAGfq3B,EAAiBW,EACjBd,IACO/tB,GAJIkuB,GAqBfluB,EAAO8uB,eAAiB,SAAUzY,GAC9B,MAAK9b,WAAU1D,QAGfo3B,EAAkB5X,EAClB0X,IACO/tB,GAJIiuB,GAmBfjuB,EAAO+uB,WAAa,SAAUC,GAC1B,MAAKz0B,WAAU1D,QAGfs3B,EAAca,EACdjB,IACO/tB,GAJImuB,GAwBfnuB,EAAOivB,UAAY,SAAUD,GACzB,MAAKz0B,WAAU1D,QAGfu3B,EAAaY,EACbjB,IACO/tB,GAJIouB,GAQfpuB,EAAO4uB,SAAW5uB,EAAOotB,cAClBptB,GAAOotB,QAEPptB,GA0BX7K,EAAG+5B,mBAAqB,SAAUtxB,EAAQ4G,GAoCtC,QAASsJ,GAAUmT,GACf,GAAIpd,GAAOsrB,GAEX,IAAIC,EAAYnO,GAAa,CACzB,GAAIoO,GAAUC,EAAcrO,EAE5BsO,GAAYF,EAASpO,EAAYpd,GAEjC4E,EAAY4mB,EAASpO,EAAYpd,IAIzC,QAASsrB,KAGL,IAAK,GAFDtrB,MACA2rB,EAAWxvB,EAAO6D,OACbjN,EAAI,EAAGA,EAAI44B,EAAS34B,SAAUD,EACnCiN,EAAK7D,EAAOsC,cAAcktB,EAAS54B,KAAOoJ,EAAOuC,gBAAgBitB,EAAS54B,GAE9E,OAAOiN,GAGX,QAASurB,GAAanO,GAClB,MAAOwO,GAAQxO,GAAY3e,YAG/B,QAASgtB,GAAerO,GACpB,GAAIoO,GAAUrvB,EAAO6E,MAChBP,UAAUorB,EAAczO,IACxBxc,QAAQ,WAAY,SAAUhL,GAC3B,MAAOk2B,GAAW1O,EAAYxnB,KAEjCgL,QAAQ,aAAc,SAAUhL,GAC7B,MAAOm2B,GAAa3O,EAAYxnB,KAEnC2G,KAAK,QAAS,SAAU3G,GACrB,GAAIo2B,GAAiBJ,EAAQxO,GAAY9oB,KACrC23B,EAAc36B,EAAGwE,MAAM8D,SAASgyB,EAAQxO,GAAY3e,YAAY7I,IAChEs2B,EAAcF,EAAiB,IAAMC,CAOzC,OANIH,GAAW1O,EAAYxnB,KACvBs2B,GAAe,aAEfH,EAAa3O,EAAYxnB,KACzBs2B,GAAe,eAEZA,GAEf,OAAOV,GAGX,QAASK,GAAezO,GACpB,MAAO,UAAYA,EAAa,MAAQwO,EAAQxO,GAAY9oB,KAGhE,QAASw3B,GAAY1O,EAAYxnB,GAC7B,MAAOuG,GAAOgH,aAAehH,EAAOgH,UAAUgpB,EAAO/O,EAAYxnB,IAGrE,QAASm2B,GAAc3O,EAAYxnB,GAC/B,MAAOuG,GAAOgH,cAAgBhH,EAAOgH,UAAUgpB,EAAO/O,EAAYxnB,IAGtE,QAASu2B,GAAQ/O,EAAYxnB,GACzB,MAAOg2B,GAAQxO,GAAY3e,YAAY7I,GAG3C,QAASg2B,GAAS7X,GACd,MAAOqY,GAAUrY,GAGrB,QAAS2X,GAAaF,EAASpO,EAAYpd,GACvC,GAAIqsB,GAAQb,EACPrxB,OAAO,QACPoC,KAAK,OAAQ,WACV,GAAI+vB,GAAcl7B,EAAG+I,OAAOhD,MAAMoF,KAAK,OACvC,OAAI+vB,GACOA,EAEJ,SAEVxnB,GAAG,QAAS,SAAUlP,GACnB,MAAOuG,GAAO2H,QAAQlO,EAAGwnB,IAGjC9rB,GAAG4C,WAAWm4B,EAAOlwB,EAAO0F,qBAAsB1F,EAAO2F,mBAAmBvF,KAAK,OAAQ,SAAU3G,EAAG7C,GAClG,MAAOoJ,GAAO6K,SAAShH,EAAK4rB,EAAQxO,GAAY3e,YAAY7I,IAAK7C,KAYzE,QAAS6R,GAAa4mB,EAASpO,EAAYpd,GACnC7D,EAAOyI,eACP4mB,EAAQ/qB,UAAU,SAASkB,KAAK,SAAU/L,GACtC,GAAIwf,GAAM+W,EAAO/O,EAAYxnB,GACzB8F,EAAQsE,EAAKoV,EACjB,OAAOjZ,GAAOuI,SAAS0Q,IAAKA,EAAK1Z,MAAOA,MAxIpD,GAAIS,GAAS7K,EAAGuU,WAAWvU,EAAG4K,cAE9BC,GAAOwK,cAAc,SAAU/Q,GAC3B,MAAOA,IAAK,GAGhB,IACI22B,GADAC,EAAWp7B,EAAGq7B,IAAItQ,OAGlBiQ,IAoPJ,OAlPAjwB,GAAO+F,UAAY,WACf/F,EAAO+E,UACP,KAAK,GAAIkc,GAAa,EAAGA,EAAagP,EAAUp5B,SAAUoqB,EAAY,CAClE,GAAIsP,GAASvwB,EAAO6E,MAAM5G,OAAO,KAC5BmC,KAAK,QAAS,QAAU6gB,GAEzBoO,EAAUkB,EAAOjsB,UAAU,KAAOmrB,EAAQxO,GAAY9oB,MACrD0L,KAAK4rB,EAAQxO,GAAYpd,MACzBkJ,QACA9O,OAAO,KACPmC,KAAK,QAASqvB,EAAQxO,GAAY9oB,KAEvCk3B,GACKpxB,OAAO,QACPmC,KAAK,OAAQ,SACbA,KAAK,IAAKiwB,GAEfhB,EAAQpxB,OAAO,SAEf6P,EAASmT,GAEbmP,GAAkB,GA2FtBpwB,EAAO2H,QAAU,SAAUlO,EAAGwnB,GAC1B,GAAIuP,GAAiBf,EAAQxO,GAAY3e,YAAY7I,EACrDtE,GAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAOw0B,GACdxwB,EAAOsG,iBAcftG,EAAOoG,UAAY,WACf,IAAK,GAAI6a,GAAa,EAAGA,EAAagP,EAAUp5B,SAAUoqB,EACtDnT,EAASmT,GACLmP,GACApwB,EAAO6E,MAAMP,UAAU,KAAOmrB,EAAQxO,GAAY9oB,KAAO,SAASiI,KAAK,IAAKiwB,EAGpFD,IAAkB,GA0BtBpwB,EAAOywB,eAAiB,SAAUC,EAAMv4B,EAAMmK,GAC1C,IAAK,GAAI1L,GAAI,EAAGA,EAAIq5B,EAAUp5B,SAAUD,EACpC,GAAIq5B,EAAUr5B,GAAGuB,OAASA,EAGtB,MAFA83B,GAAUr5B,GAAGiN,KAAO6sB,EACpBT,EAAUr5B,GAAG0L,YAAcA,EACpBtC,CAIf,OADAiwB,GAAUv5B,MAAMyB,KAAMA,EAAM0L,KAAM6sB,EAAMpuB,YAAaA,IAC9CtC,GAcXA,EAAO2wB,WAAa,SAAUA,GAG1B,MAFAN,GAASM,WAAWA,GACpBP,GAAkB,EACXpwB,GAYXA,EAAO4wB,SAAW,WACd,MAAOX,IAaXjwB,EAAO6wB,QAAU,WACb,MAAOR,IAWXrwB,EAAO8wB,cAAgB,SAAU34B,GAG7B,IAAK,GAFDy4B,MAEKh6B,EAAI,EAAGA,EAAIq5B,EAAUp5B,SAAUD,EAAG,CACvC,GAAIsf,GAAQ+Z,EAAUr5B,EAClBsf,GAAM/d,OAASA,GACfy4B,EAASl6B,KAAKwf,GAMtB,MAFA+Z,GAAYW,EAEL5wB,GAGJA,EAAOuE,OAAO3G,EAAQ4G,IA2BjCrP,EAAG47B,cAAgB,SAAUnzB,EAAQ4G,GAgEjC,QAASwsB,KAKL,MAJA7gB,GAAKnQ,EAAOhC,OAAO,KAAOizB,GACtB9gB,EAAGzX,UACHyX,EAAKnQ,EAAO6E,MAAM5G,OAAO,KAAKmC,KAAK,QAAS6wB,IAEzC9gB,EAGX,QAAS+gB,KACL,GAAIrtB,GAAOstB,GACXnxB,GAAO8a,wBAEPsW,EAAQvrB,QAAQ,SAAUwrB,GACtB,GAAIC,GAAQC,EAASF,EAAOxtB,GAExB2tB,EAASF,EAAMtzB,OAAO,UAAYmc,EAElCqX,GAAO94B,UACP84B,EAASF,EAAMrzB,OAAO,UACjBmC,KAAK,QAAS+Z,GACd/Z,KAAK,IAAK,GACVA,KAAK,OAAQJ,EAAO6K,UACpBlC,GAAG,QAAS3I,EAAO2H,UAG5BxS,EAAG4C,WAAWy5B,EAAQxxB,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,IAAK,SAAU3G,GACjB,MAAOuG,GAAOib,QAAQxhB,KAG9BuG,EAAOsb,eAAegW,GAEtBtxB,EAAO0b,gBAAgB4V,KAI/B,QAASH,KACL,GAAIttB,KAIJ,OAHA7D,GAAO6D,OAAOgC,QAAQ,SAAU+B,GAC5B/D,EAAK7D,EAAOsC,cAAcsF,IAAUA,IAEjC/D,EAGX,QAAS0tB,GAAUF,EAAOxtB,GACtB,GAAI4tB,GAAkBvX,EAAoB,IAAM/kB,EAAGwE,MAAM8D,SAAS4zB,EAAMl5B,MAEpEm5B,EAAQnhB,EAAGnS,OAAO,KAAO7I,EAAGwE,MAAM8D,SAAS4zB,EAAMl5B,MAUrD,OARIm5B,GAAM54B,UACN44B,EAAQnhB,EAAGlS,OAAO,KACbmC,KAAK,QAASqxB,GACdrxB,KAAK,YAAa,aAAeixB,EAAMxxB,EAAI,IAAMwxB,EAAMvxB,EAAI,MAGpEwxB,EAAM1pB,MAAM/D,EAAKwtB,EAAMl5B,OAEhBm5B,EAWX,QAASI,KACL,GAAI7tB,GAAOstB,GACXnxB,GAAO8a,wBAEPsW,EAAQvrB,QAAQ,SAAUwrB,GACtB,GAAIC,GAAQC,EAASF,EAAOxtB,GAExB2tB,EAASF,EAAMtzB,OAAO,UAAYmc,EAEtChlB,GAAG4C,WAAWy5B,EAAQxxB,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,IAAK,SAAU3G,GACjB,MAAOuG,GAAOib,QAAQxhB,KAEzB2G,KAAK,OAAQJ,EAAO6K,UAEzB7K,EAAOwb,eAAe8V,GAEtBtxB,EAAO2b,eAAe2V,KApJ9B,GAoBInhB,GApBA8gB,EAAuB,iBACvB/W,EAAoB,OACpBC,EAAe,SAiBfna,EAAS7K,EAAG0kB,YAAY1kB,EAAG4K,eAE3BqxB,IAmKJ,OAjKApxB,GAAO0F,mBAAmB,KAE1B1F,EAAO2F,gBAAgB,GAEvB3F,EAAOsa,oBAAoB,SAAU7gB,GACjC,MAAOA,GAAE8F,QAkBbS,EAAOqxB,MAAQ,SAAUl5B,EAAM0H,EAAGC,GAE9B,MADAsxB,GAAQ16B,MAAMyB,KAAMA,EAAM0H,EAAGA,EAAGC,EAAGA,IAC5BE,GAGXA,EAAO+F,UAAY,WASf,MARAoK,GAAK6gB,IAELhxB,EAAOrD,IAAI0C,OAAOW,EAAOoa,WAAYpa,EAAOK,QAAUL,EAAOgc,0BAE7DkV,IAEAlxB,EAAOqO,qBAEArO,GA+DXA,EAAOoG,UAAY,WAKf,MAJAsrB,KAEA1xB,EAAOqO,qBAEArO,GAwBXA,EAAOxB,MAAQ,SAAUmzB,GACrB,GAAIA,EAAM,CACN,GAAIC,GAAS5xB,EAAOhC,OAAO,KAAO7I,EAAGE,UAAUE;AAE3Cq8B,EAAOl5B,UACPk5B,EAAS5xB,EAAO6E,MACX5G,OAAO,KACPmC,KAAK,QAASjL,EAAGE,UAAUE,mBAGpC,IAAIs8B,GAAYD,EAAO3zB,OAAO,QACzBmC,KAAK,IAAK,IACVA,KAAK,IAAK,GAEfwxB,GACK3zB,OAAO,QACPmC,KAAK,QAASJ,EAAOK,SACrBD,KAAK,SAAUJ,EAAOM,UACtBqI,GAAG,YAAa,WACb,GAAI2L,GAAWrf,EAAG68B,MAAMF,EAAOpuB,QAC3B1I,EAAMwZ,EAAS,GAAK,KAAOA,EAAS,EACxCud,GAAUrsB,KAAK1K,SAGvBkF,GAAOsE,UAAU,UAAUU,QAG/B,OAAOhF,IAGXA,EAAOuE,OAAO3G,EAAQ4G,GAEfxE,GA0BX7K,EAAG48B,SAAW,SAAUn0B,EAAQ4G,GA6B5B,QAASwtB,KACL,IAAKxmB,GAAMymB,EAAW,CAClB,GAAIziB,GAASva,EAAGua,OAAO0iB,EAAUlyB,EAAOoZ,oBACpC5J,GAAO,GAAK,IACZA,EAAO,GAAK,GAEZA,EAAO,GAAK,IACZA,EAAO,GAAK,GAEhBhE,EAAKvW,EAAG2U,MAAMS,SAAShR,OAAOmW,GACzBnQ,OAAO,EAAGW,EAAOwJ,mBAE1B4C,EAAOxC,MAAM4B,GAGjB,QAAS2mB,KACL,GAAIC,GAAQjiB,EAAGnS,OAAO,SAEtBg0B,KAEII,EAAM15B,UACN05B,EAAQjiB,EAAGlS,OAAO,KAAKmC,KAAK,QAAS,SAEzCgyB,EAAMhyB,KAAK,YAAa,gBAAkBJ,EAAOyJ,kBAAoB,KAErEtU,EAAG4C,WAAWq6B,EAAOpyB,EAAO0F,qBAAsB1F,EAAO2F,mBACpDhN,KAAKyT,GAuCd,QAASimB,KACLliB,EAAG7L,UAAU,UACRtG,OAAO,kBACPgH,SAELmL,EAAG7L,UAAU,UACRrG,OAAO,QACPmC,KAAK,QAAS,aACdA,KAAK,KAAM,GACXA,KAAK,KAAM,GACXA,KAAK,KAAM,GACXA,KAAK,KAAM,WACR,OAAQJ,EAAOyJ,oBAI3B,QAASkE,KACLukB,EAAWlyB,EAAO6D,OAElBsuB,IACAE,GAEA,IAAIlK,GAAOhY,EAAG7L,UAAU,KAAOguB,GAC1BzuB,KAAKquB,EAEV/U,GAAegL,GACf9K,EAAe8K,GACf/K,EAAe+K,GAGnB,QAAShL,GAAgBgL,GACrB,GAAIG,GAAWH,EAAKpb,QACf9O,OAAO,KACPmC,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAO07B,GAAe,KAAO17B,GAGrC0xB,GAASrqB,OAAO,QAAQmC,KAAK,QAAS,GAEtCyd,EAAayK,GAGjB,QAASjL,GAAgB8K,GACrBA,EAAKlb,OAAOjI,SAGhB,QAASutB,KACL,GAAI/xB,GAAOgL,EAAG,EACd,OAAQhL,OAAUZ,EAAAA,IAAYY,IAASA,EAAQgL,EAAG,GAAKhL,EAG3D,QAAS4c,GAAgB+K,GACrB,GAEI7nB,GAFA1H,EAAIs5B,EAASr7B,MAMbyJ,GAHCkyB,EAGQA,GAFCxyB,EAAOyJ,mBAAqB7Q,EAAI,GAAK2oB,GAAQ3oB,EAMtD65B,IACDC,EAAgBpyB,EAAS,EAG7B,IAAIqyB,GAAOxK,EAAK/nB,KAAK,YAAa,SAAU3G,EAAG7C,GACvC,MAAO,iBAAmBA,EAAI,GAAK2qB,EAAO3qB,EAAI0J,GAAU,MACzDtC,OAAO,QACToC,KAAK,SAAUE,GACfF,KAAK,OAAQJ,EAAO6K,UACpBlC,GAAG,QAAShB,GACZlD,QAAQ,aAAc,SAAUhL,GAC7B,QAAQuG,EAAOgH,cAAgB4rB,EAAcn5B,KAEhDgL,QAAQ,WAAY,SAAUhL,GAC3B,QAAQuG,EAAOgH,aAAe4rB,EAAcn5B,IAGpDtE,GAAG4C,WAAW46B,EAAM3yB,EAAO0F,qBAAsB1F,EAAO2F,mBACnDvF,KAAK,QAAS,SAAU3G,GACrB,MAAOP,MAAKC,IAAIo5B,IAAc/mB,EAAGxL,EAAOuC,gBAAgB9I,OAE3D2G,KAAK,YAAayyB,GAEvBjV,EAAauK,GACb7I,EAAa6I,GAGjB,QAASvK,GAAcuK,GACfnoB,EAAOyI,gBACP0f,EAAKnqB,OAAO,SAASgH,SACrBmjB,EAAKlqB,OAAO,SAASuH,KAAKxF,EAAOuI,UAIzC,QAASsV,GAAcyK,GACftoB,EAAOsI,eACPggB,EAASrqB,OAAO,QACX0K,GAAG,QAAShB,GAEjB3H,EAAO8yB,oBACPxK,EAASrqB,OAAO,QACXmC,KAAK,QAAS2yB,GACdpqB,GAAG,QAAShB,GAIzB,QAAS2X,GAAc6I,GACnB,GAAInoB,EAAOsI,cAAe,CACtB,GAAI0qB,GAAM7K,EAAKnqB,OAAO,QACjBoC,KAAK,IAAK6yB,GACV7yB,KAAK,IAAKsyB,GACVtyB,KAAK,KAAM8yB,GACXvqB,GAAG,QAAShB,GACZvH,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAO07B,GAAe,KAAO17B,IAEhC4O,KAAK,SAAU/L,GACZ,MAAOuG,GAAOmI,QAAQ1O,IAE9BtE,GAAG4C,WAAWi7B,EAAKhzB,EAAO0F,qBAAsB1F,EAAO2F,mBAClDvF,KAAK,YAAayyB,GAE3B,GAAI7yB,EAAO8yB,mBAAoB,CAC3B,GAAIK,GAAWhL,EAAKnqB,OAAO,IAAM+0B,GACxB3yB,KAAK,IAAKJ,EAAOwJ,iBAAmB4pB,GACpChzB,KAAK,IAAKsyB,GACVtyB,KAAK,KAAM8yB,GACX9yB,KAAK,cAAe,OACpBuI,GAAG,QAAShB,GACZvH,KAAK,QAAS,SAAU3G,EAAG7C,GACxB,MAAOm8B,GAAoB,KAAOn8B,IAErC4O,KAAK,SAAU/L,GACZ,MAAOuG,GAAOuI,QAAQ9O,IAElCtE,GAAG4C,WAAWo7B,EAAUnzB,EAAO0F,qBAAsB1F,EAAO2F,mBACvDvF,KAAK,YAAayyB,IAoB/B,QAASlrB,GAASlO,GACduG,EAAO2H,QAAQlO,GAGnB,QAASo5B,GAAYp5B,GACjB,GAAIoG,GAAI2L,EAAGxL,EAAOoZ,oBAAoB3f,IAClC45B,EAAKd,IACLn6B,EAAIyH,EAAIwzB,EAAKA,EAAKxzB,CACtB,OAAO,aAAezH,EAAI,MAkI9B,QAASw6B,GAAen5B,GACpB,MAAOuG,GAAOgH,UAAUhH,EAAOmZ,kBAAkB1f,IArYrD,GAAI0W,GAiBA3E,EAEAymB,EAIAC,EArBAe,EAAgB,GAChBP,EAAgB,GAChBD,GAAmB,EACnBS,EAAY,SACZE,EAAqB,EAErB7R,EAAO,EAEPiR,GAAkB,EAClBF,EAAe,MACfS,EAAoB,WACpBO,GAAoB,EAEpBtzB,EAAS7K,EAAGkjB,SAASljB,EAAG8T,YAAY9T,EAAGuU,WAAWvU,EAAG4K,iBAMrDqM,EAASnX,EAAG4P,IAAI8L,OAAOC,OAAO,SAmXlC,OA/WA5Q,GAAOuzB,QAAUvzB,EAAOuZ,IA+BxBvZ,EAAO+F,UAAY,WASf,MARA/F,GAAO+E,WAEPoL,EAAKnQ,EAAO6E,MACP5G,OAAO,KACPmC,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOuJ,UAAUJ,IAAM,KAE3FwE,IAEO3N,GAGXA,EAAOuI,MAAM,SAAU9O,GACnB,MAAOuG,GAAOmZ,kBAAkB1f,GAAK,KAAOuG,EAAOoZ,oBAAoB3f,KAG3EuG,EAAOmI,MAAMnI,EAAOmZ,mBAYpBnZ,EAAOH,EAAI,SAAU+J,GACjB,MAAKrP,WAAU1D,QAGf2U,EAAK5B,EACE5J,GAHIwL,GA4JfxL,EAAO8yB,iBAAmB,SAAUA,GAChC,MAAKv4B,WAAU1D,QAGfy8B,EAAoBR,EACb9yB,GAHIszB,GAiBftzB,EAAOoG,UAAY,WAEf,MADAuH,KACO3N,GAkBXA,EAAO+S,MAAQ,WACX,MAAO3G,IAgBXpM,EAAOwzB,eAAiB,SAAUA,GAC9B,MAAKj5B,WAAU1D,QAGf27B,EAAkBgB,EACXxzB,GAHIwyB,GAcfxyB,EAAOwiB,IAAM,SAAUA,GACnB,MAAKjoB,WAAU1D,QAGf0qB,EAAOiB,EACAxiB,GAHIuhB,GAefvhB,EAAOuL,SAAW,SAAUA,GACxB,MAAKhR,WAAU1D,QAGfo7B,EAAY1mB,EACLvL,GAHIiyB,GAcfjyB,EAAOyzB,aAAe,SAAUA,GAC5B,MAAKl5B,WAAU1D,QAGfo8B,EAAgBQ,EACTzzB,GAHIizB,GAcfjzB,EAAO0zB,aAAe,SAAUC,GAC5B,MAAKp5B,WAAU1D,QAGf67B,EAAgBiB,EAChBlB,GAAmB,EACZzyB,GAJI0yB,GAef1yB,EAAO4zB,kBAAoB,SAAUA,GACjC,MAAKr5B,WAAU1D,QAGfu8B,EAAqBQ,EACd5zB,GAHIozB,GAURpzB,EAAOuE,OAAO3G,EAAQ4G,IAgBjCrP,EAAGyT,OAAS,WAoGR,QAASirB,KACL,MAAOtS,GAAOuS,EApGlB,GAGIxmB,GAUAymB,EAEA5jB,EAfA6jB,EAAY,EAEZzyB,KAEAiK,EAAK,EACL8E,EAAK,EACLwjB,EAAc,GACdvS,EAAO,EACP0S,GAAc,EACdC,EAAe,IACfC,EAAa,GACbC,GAAiB,EACjBC,EAAcl/B,EAAGgH,MAAM,OAuQ3B,OAlQAoF,GAAQ3D,OAAS,SAAUgZ,GACvB,MAAKrc,WAAU1D,QAGfyW,EAAUsJ,EACHrV,GAHI+L,GAMf/L,EAAQ5J,OAAS,WACb2V,EAAQzI,MAAM7G,OAAO,eAAegH,SACpCmL,EAAK7C,EAAQzI,MAAM5G,OAAO,KACrBmC,KAAK,QAAS,aACdA,KAAK,YAAa,aAAeoL,EAAK,IAAM8E,EAAK,IACtD,IAAIxI,GAAcwF,EAAQxF,aAERzP,UAAd07B,IACAjsB,EAAcA,EAAYzD,MAAM,EAAG0vB,GAGvC,IAAIO,GAAYnkB,EAAG7L,UAAU,oBACxBT,KAAKiE,GACLiF,QACA9O,OAAO,KACPmC,KAAK,QAAS,kBACduI,GAAG,YAAa,SAAUlP,GACvB6T,EAAQvF,gBAAgBtO,KAE3BkP,GAAG,WAAY,SAAUlP,GACtB6T,EAAQtF,YAAYvO,KAEvBkP,GAAG,QAAS,SAAUlP,GACnBA,EAAEnD,MAAM2R,aAAaxO,IAG7B0W,GAAG7L,UAAU,oBACRG,QAAQ,UAAW,SAAUhL,GAC1B,MAAOA,GAAEnD,MAAM4R,mBAAmBzO,KAGtCqO,EAAYhB,KAAK3R,EAAGgH,MAAM,cAC1Bm4B,EACKr2B,OAAO,QACPmC,KAAK,KAAM,GACXA,KAAK,KAAM0zB,EAAc,GACzB1zB,KAAK,KAAM0zB,GACX1zB,KAAK,KAAM0zB,EAAc,GACzB1zB,KAAK,eAAgB,GACrBA,KAAK,mBAAoBjL,EAAGgH,MAAM,cAClCiE,KAAK,SAAUjL,EAAGgH,MAAM,UAE7Bm4B,EACKr2B,OAAO,QACPmC,KAAK,QAAS0zB,GACd1zB,KAAK,SAAU0zB,GACf1zB,KAAK,OAAQ,SAAU3G,GAAI,MAAOA,GAAIA,EAAE2e,MAAQ,SAGzDkc,EAAUr2B,OAAO,QACRuH,KAAK6uB,GACLj0B,KAAK,IAAK0zB,EAAcE,GACxB5zB,KAAK,IAAK,WACP,MAAO0zB,GAAc,GAAK94B,KAAKu5B,aAAev5B,KAAKu5B,aAAe,IAAM,EAAI,GAGxF,IAAIC,GAA6B,EAC7BC,EAAM,CACVH,GAAUl0B,KAAK,YAAa,SAAU3G,EAAG7C,GACrC,GAAIq9B,EAAa,CACb,GAAIS,GAAcN,KAAmB,EAAOp5B,KAAK25B,UAAUt0B,MAAQkhB,EAAO4S,CACrEK,GAA6BE,EAAaR,GAAgBM,EAA6B,MACtFC,EACFD,EAA6B,EAEjC,IAAII,GAAc,aAAeJ,EAA6B,IAAMC,EAAMZ,IAAqB,GAE/F,OADAW,IAA8BE,EACvBE,EAEP,MAAO,eAAiBh+B,EAAIi9B,IAAqB,OAiB7DtyB,EAAQ1B,EAAI,SAAUA,GAClB,MAAKtF,WAAU1D,QAGf2U,EAAK3L,EACE0B,GAHIiK,GAcfjK,EAAQzB,EAAI,SAAUA,GAClB,MAAKvF,WAAU1D,QAGfyZ,EAAKxQ,EACEyB,GAHI+O,GAcf/O,EAAQihB,IAAM,SAAUA,GACpB,MAAKjoB,WAAU1D,QAGf0qB,EAAOiB,EACAjhB,GAHIggB,GAcfhgB,EAAQszB,WAAa,SAAUA,GAC3B,MAAKt6B,WAAU1D,QAGfi9B,EAAce,EACPtzB,GAHIuyB,GAcfvyB,EAAQuzB,WAAa,SAAUA,GAC3B,MAAKv6B,WAAU1D,QAGfo9B,EAAca,EACPvzB,GAHI0yB,GAcf1yB,EAAQwzB,YAAc,SAAUA,GAC5B,MAAKx6B,WAAU1D,QAGfq9B,EAAea,EACRxzB,GAHI2yB,GAcf3yB,EAAQmzB,UAAY,SAAUA,GAC1B,MAAKn6B,WAAU1D,QAGfs9B,EAAaO,EACNnzB,GAHI4yB,GAef5yB,EAAQyzB,cAAgB,SAAUA,GAC9B,MAAKz6B,WAAU1D,QAGfu9B,EAAiBY,EACVzzB,GAHI6yB,GAyBf7yB,EAAQ0zB,WAAa,SAAUA,GAC3B,MAAK16B,WAAU1D,QAGfw9B,EAAcY,EACP1zB,GAHI8yB,GAcf9yB,EAAQ2zB,SAAW,SAAUA,GACzB,MAAK36B,WAAU1D,QAGfk9B,EAAY5+B,EAAGwE,MAAMuD,SAASg4B,GAAYA,EAAW78B,OAC9CkJ,GAHIwyB,GAMRxyB,GA0BXpM,EAAGggC,YAAc,SAAUv3B,EAAQ4G,GAkC/B,QAAS4wB,GAAa37B,EAAG7C,GACrB,MAAKy+B,GAAmB57B,GAEb67B,EAAU1+B,GACVsC,KAAKq8B,IAAIC,EAAa,GAEtBt8B,KAAKq8B,IAAIE,EAAe,GAJxBv8B,KAAKq8B,IAAIG,EAAY,GA6DpC,QAASC,GAAcC,EAAQn8B,GACvBuG,EAAOyI,gBACPmtB,EAAOtxB,UAAU,SAASU,SAC1B4wB,EAAO33B,OAAO,SAASuH,KAAK,SAAU/L,GAClC,MAAOuG,GAAOuI,QAAQ9O,MA4PlC,QAASo8B,GAAoBC,EAAWrmB,GACpC,GAAIsmB,GAAU/1B,EAAO2S,aAAarO,UAAU,2BAA2BtI,OAAO,WAC1E,MAAO85B,GAAU7gC,EAAG+I,OAAOhD,SAE3Bg7B,EAAUC,EAAQxmB,MACtBwmB,GAAQxmB,KAAKvW,KAAKq8B,IAAI9lB,EAAM,IAC5Bta,EAAG4C,WAAWg+B,EAAS/1B,EAAO0F,qBAAsB1F,EAAO2F,mBAAmBvF,KAAK,IAAK61B,GACxFA,EAAQxmB,KAAKumB,GAvWjB,GAAIh2B,GAAS7K,EAAG4V,wBACZkrB,EAAUhhC,EAAG4P,IAAI+wB,SAEjBP,EAAqB,SAAU57B,GAAK,MAAOA,GAAE8F,OAE7C22B,EAAsBl2B,EAAOsC,aACjCtC,GAAOsC,YAAY,SAAU7I,GAAK,MAAOy8B,GAAoBz8B,GAAG,KAChEuG,EAAOuC,cAAc,SAAU9I,GAAK,MAAOy8B,GAAoBz8B,GAAG,KAClEuG,EAAOwK,cAAc,WAAc,MAAOxK,GAAO8D,aAEjD9D,EAAOuI,MAAM,SAAU9O,GAGnB,MAAOuG,GAAOsC,cAAc7I,GAAK,IAAMuG,EAAOuC,gBAAgB9I,GAAK,KAC/DuG,EAAOm2B,oBAAoB18B,IAGnC,IAAI28B,GAAW,SAAU38B,GACrB,MAAO,aAAeuG,EAAOH,IAAIG,EAAOsC,cAAc7I,IAAM,IACtCuG,EAAOF,IAAIE,EAAOuC,gBAAgB9I,IAAM,KAG9D48B,EAAmB,EACnBb,EAAc,EACdC,EAAgB,EAChBa,EAAiB,KACjBC,EAAmB,EACnBb,EAAa,EACbc,EAAgB,EAChBC,EAAmB,EACnBC,EAAc,KACdpB,IAyXJ,OA9WAW,GAAQxmB,KAAK2lB,GAEbjgC,EAAG6E,SAASgG,EAAQ,UAAW,SAAUhE,GACrC,MAAKzB,WAAU1D,OAIRmJ,EAAO22B,SAASxhC,EAAG4G,QAAQ2D,2BAA2B1D,IAHlDgE,EAAO22B,aAMtB32B,EAAO8N,SAAW,WACd,GAAIioB,GAAU/1B,EAAO2S,aAAarO,UAAU,eACvCT,KAAK7D,EAAO6D,OAEjBkyB,GACKhpB,QACJ9O,OAAO,QACHmC,KAAK,QAAS,UACdA,KAAK,UAAW,GAChBA,KAAK,OAAQJ,EAAO6K,UACpBzK,KAAK,YAAag2B,GAEvBL,EAAQp9B,KAAKg9B,EAAc31B,EAAO6D,QAElCkyB,EAAQl9B,KAAK,SAAUY,EAAG7C,GACtB0+B,EAAU1+B,IAAMoJ,EAAOhE,UAAYgE,EAAOhE,SAASsD,YAAY7F,EAAEwf,IAAI,GAAIxf,EAAEwf,IAAI,OAGnF9jB,EAAG4C,WAAWg+B,EAAS/1B,EAAO0F,qBAAsB1F,EAAO2F,mBACtDvF,KAAK,UAAW,SAAU3G,EAAG7C,GAC1B,MAAKy+B,GAAmB57B,GAEb67B,EAAU1+B,GACV6/B,EAEAz2B,EAAO42B,kBAJPJ,IAOdp2B,KAAK,OAAQ,SAAU3G,EAAG7C,GACvB,MAAI8/B,KAAgBrB,EAAmB57B,GAC5Bi9B,EACA12B,EAAO62B,kBAAoBvB,EAAU1+B,GACrCoJ,EAAO62B,gBAEP72B,EAAO6K,SAASpR,KAG9B2G,KAAK,YAAag2B,GAClBh2B,KAAK,IAAK61B,GAEf9gC,EAAG4C,WAAWg+B,EAAQ9oB,OAAQjN,EAAO0F,qBAAsB1F,EAAO2F,mBAC7DvF,KAAK,UAAW,GAAG4E,UA6B5BhF,EAAOm2B,kBAAoB,SAAU9f,GACjC,MAAK9b,WAAU1D,QAGfw+B,EAAqBhf,EACdrb,MAHIq6B,GAqBfr1B,EAAO41B,OAAS,SAAUkB,GACtB,MAAKv8B,WAAU1D,QAGfo/B,EAAQa,KAAKA,GACN92B,GAHIi2B,EAAQa,QAoBvB92B,EAAO+2B,aAAe,SAAUA,GAC5B,MAAKx8B,WAAU1D,QAGfo/B,EAAUc,EACVd,EAAQxmB,KAAK2lB,GACNp1B,GAJIi2B,GAgBfj2B,EAAOg3B,WAAa,SAAUA,GAC1B,MAAKz8B,WAAU1D,QAGf2+B,EAAcwB,EACPh3B,GAHIw1B,GAefx1B,EAAOi3B,gBAAkB,SAAUA,GAC/B,MAAK18B,WAAU1D,QAGfw/B,EAAmBY,EACZj3B,GAHIq2B,GAgBfr2B,EAAOk3B,aAAe,SAAUA,GAC5B,MAAK38B,WAAU1D,QAGf4+B,EAAgByB,EACTl3B,GAHIy1B,GAefz1B,EAAO62B,cAAgB,SAAUA,GAC7B,MAAKt8B,WAAU1D,QAGfy/B,EAAiBO,EACV72B,GAHIs2B,GAcft2B,EAAO42B,gBAAkB,SAAUA,GAC/B,MAAKr8B,WAAU1D,QAGf0/B,EAAmBK,EACZ52B,GAHIu2B,GAefv2B,EAAOm3B,WAAan3B,EAAOo3B,UAAY,SAAUA,GAC7C,MAAK78B,WAAU1D,QAGf6+B,EAAa0B,EACNp3B,GAHI01B,GAgBf11B,EAAOq3B,WAAa,SAAUA,GAC1B,MAAK98B,WAAU1D,QAGf6/B,EAAcW,EACPr3B,GAHI02B,GAef12B,EAAOs3B,aAAe,SAAUA,GAC5B,MAAK/8B,WAAU1D,QAGf2/B,EAAgBc,EACTt3B,GAHIw2B,GAefx2B,EAAOu3B,gBAAkB,SAAUA,GAC/B,MAAKh9B,WAAU1D,QAGf4/B,EAAmBc,EACZv3B,GAHIw2B,GAMfx2B,EAAO8H,YAAc,WACjB,QAASxR,MAAO0J,EAAQ7H,KAAM6H,EAAO8D,WAAYsU,MAAOpY,EAAO6K,cAGnE7K,EAAO+H,gBAAkB,SAAUtO,GAC/Bo8B,EAAmB,SAAUD,GACzB,MAAOA,GAAOx1B,KAAK,UAAY3G,EAAE2e,OAClCie,GACHr2B,EAAO2S,aAAarO,UAAU,2BAA2BtI,OAAO,WAC5D,MAAO/G,GAAG+I,OAAOhD,MAAMoF,KAAK,UAAY3G,EAAE2e,QAC3C3T,QAAQ,WAAW,IAG1BzE,EAAOgI,YAAc,SAAUvO,GAC3Bo8B,EAAmB,SAAUD,GACzB,MAAOA,GAAOx1B,KAAK,UAAY3G,EAAE2e,OAClCod,GACHx1B,EAAO2S,aAAarO,UAAU,2BAA2BtI,OAAO,WAC5D,MAAO/G,GAAG+I,OAAOhD,MAAMoF,KAAK,UAAY3G,EAAE2e,QAC3C3T,QAAQ,WAAW,IAa1BzE,EAAOoV,eAAiB,aAIxBpV,EAAOsV,YAAc,WACjB,GAAI9F,GAASxP,EAAOuR,QAAQ/B,QAQ5B,OAPIxP,GAAOjG,UACPyV,EAAO,GAAKA,EAAO,GAAG8D,IAAItT,EAAOjG,SACjCyV,EAAO,GAAKA,EAAO,GAAG8D,IAAItT,EAAOjG,SAEjCiG,EAAOqL,IAAIrN,OAAO,UACbrF,KAAKqH,EAAOuR,QAAQ/B,OAAOA,KAE7BA,GAGXxP,EAAOuV,aAAe,SAAU/F,GAC5B,MAAOxP,GAAOuR,QAAQ7Y,UAAY8W,GAAUA,EAAO,GAAG,IAAMA,EAAO,GAAG,IAAMA,EAAO,GAAG,IAAMA,EAAO,GAAG,IAG1GxP,EAAOiV,UAAY,WACf,GAAIzF,GAASxP,EAAOsV,aAIpB,IAFAtV,EAAOoO,YAAYpO,EAAOqL,KAEtBrL,EAAOuV,aAAa/F,GACpBra,EAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAO,MACdgE,EAAOsG,oBAGR,CACH,GAAIkxB,GAAiBriC,EAAG4G,QAAQ2D,2BAA2B8P,EAC3Dra,GAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAO,MACdgE,EAAOhE,OAAOw7B,GACdx3B,EAAOsG,eACRnR,EAAGE,UAAUS,eAKxBkK,EAAOmV,UAAY,SAAUD,GACzBA,EAAOvc,KAAKqH,EAAOuR,QAAQzR,EAAEE,EAAOF,OAGjCE,EAAOuE,OAAO3G,EAAQ4G,IAoBjCrP,EAAGsiC,cAAgB,SAAU75B,EAAQ4G,GAiEjC,QAASkzB,GAAQp0B,GACb,IAAKA,EAAIzM,OACL,MAAO,KAEX,IAAI8gC,GAAS33B,EAAOmE,sBAAsBb,EAC1C,OAAOq0B,GAAOA,EAAO9gC,OAAS,GArElC,GAII+gC,GAJAC,EAAa,iBACbzR,EAAgBnxB,EAAG4G,OAAO,OAC1BmE,EAAS7K,EAAG4K,cACZsmB,GAASyR,IAAK,GAAIhxB,KAAM,GAAIixB,KAAM,GAmItC,OA/HA/3B,GAAO6C,sBAAsB,UAG7B7C,EAAO+D,SAAS,SAAU0U,GAAM,MAAOA,GAAGlZ,QAmB1CS,EAAOsmB,KAAO,SAAUA,GACpB,MAAK/rB,WAAU1D,QAGXyvB,EAAKyR,KACL1R,EAAM0R,KAAOzR,EAAKyR,KACXzR,EAAKwR,IACZzR,EAAM0R,KAAOzR,EAAKwR,IACXxR,EAAKxf,OACZuf,EAAM0R,KAAOzR,EAAKxf,MAElBwf,EAAKwR,IACLzR,EAAMyR,IAAMxR,EAAKwR,IACVxR,EAAKxf,OACZuf,EAAMyR,IAAMxR,EAAKxf,MAEjBwf,EAAKxf,KACLuf,EAAMvf,KAAOwf,EAAKxf,KACXwf,EAAKwR,MACZzR,EAAMvf,KAAOwf,EAAKwR,KAEf93B,GAnBIqmB,GA6BfrmB,EAAOT,MAAQ,WACX,MAAOS,GAAO6D,QAUlB7D,EAAO6D,KAAK,SAAU1N,GAClB,GAAI6hC,GAAS7hC,EAAMoJ,MAAQpJ,EAAMoJ,QAAUm4B,EAAOvhC,EAAMmN,MACxD,OAAOtD,GAAOuC,gBAAgBy1B,KAGlCh4B,EAAO0F,mBAAmB,KAC1B1F,EAAO2F,gBAAgB,GAEvB3F,EAAO+F,UAAY,WACf,GAAIkyB,GAAWj4B,EAAOT,QAClB24B,EAAOl4B,EAAOsE,UAAU,IAAMuzB,EAE9BK,GAAKx/B,UACLw/B,EAAOA,EAAKr0B,MAAM,IACbkJ,QACA9O,OAAO,QACPmC,KAAK,QAASy3B,IAGvBK,EAAKngC,aACAE,SAAS+H,EAAO0F,sBAChBxN,MAAM8H,EAAO2F,mBACbwyB,KAAK,eACLC,MAAM,OAAQ,WAEX,GAAIC,GAAcC,SAASV,GAAcA,EAAa,EAClDW,EAAStjC,EAAGujC,kBAAkBH,GAAe,EAAGJ,EAEpD,OADAL,GAAaK,EACN,SAAUr7B,GACb,GAAI0pB,GAAO,KAAMmS,EAAMz4B,EAAOumB,eAAegS,EAAO37B,GACnC,KAAbq7B,GAAkC,KAAf5R,EAAM0R,KACzBzR,EAAOD,EAAM0R,KACO,IAAbE,GAAiC,KAAd5R,EAAMyR,IAChCxR,EAAOD,EAAMyR,IACS,KAAfzR,EAAMvf,OACbwf,EAAOD,EAAMvf,MAEjB9L,KAAK09B,UAAYpS,EAAOA,EAAKzpB,QAAQ,UAAW47B,GAAOA,MAKvEz4B,EAAOoG,UAAY,WACf,MAAOpG,GAAO+F,aAYlB/F,EAAOumB,aAAe,SAAUC,GAC5B,MAAKjsB,WAAU1D,QAGfuvB,EAAgBI,EACTxmB,GAHIomB,GAMRpmB,EAAOuE,OAAO3G,EAAQ4G,IAsBjCrP,EAAGwjC,QAAU,SAAU/6B,EAAQ4G,GA6E3B,QAASo0B,GAAYjoB,EAAMpR,GACvB,GAAIs5B,GAAc74B,EAAOsE,UAAU,cAActI,OAAO,SAAUvC,GAC9D,MAAOA,GAAEwf,IAAItI,KAAUpR,IAEvBu5B,EAAwBD,EAAY78B,OAAO,SAAUvC,GACrD,OAAQuG,EAAOgH,UAAUvN,EAAEwf,MAE/B9jB,GAAG0J,OAAOE,QAAQ,WACd,GAAI/G,GAAY8gC,EAAsBpgC,QAAUmgC,EAAcC,EAC1D/8B,EAAU/D,EAAU6L,OAAOyP,IAAI,SAAUmF,GACzC,MAAOtjB,GAAG4G,QAAQ0D,qBAAqBgZ,EAAGQ,MAE9CjZ,GAAOgV,SAASjZ,IAChBiE,EAAOsG,gBAxFf,GAEIyyB,GAEAC,EACAC,EALAC,EAAwB,KAMxBC,EAAelkC,EAAG0yB,UAClByR,EAAenkC,EAAG0yB,UAClB0R,EAAYpkC,EAAG2U,MAAMxQ,UACrBkgC,EAAYrkC,EAAG2U,MAAMxQ,UAErBmgC,EAAiBL,EACjBM,EAAiBN,EAEjBl5B,EAAS7K,EAAGuU,WAAWvU,EAAG8T,YAAY9T,EAAG4K,eAC7CC,GAAO6C,sBAAsB,UAC7B7C,EAAOuI,MAAMvI,EAAOwK,gBAEpB,IAAIivB,GAAa,SAAUhgC,GACvB,MAAOA,IAEPigC,EAAa,SAAUjgC,GACvB,MAAOA,GAeXuG,GAAO25B,UAAY,SAAUvxB,GACzB,MAAK7N,WAAU1D,QAGf4iC,EAAarxB,EACNpI,GAHIy5B,GAkBfz5B,EAAO45B,UAAY,SAAUxxB,GACzB,MAAK7N,WAAU1D,QAGf6iC,EAAatxB,EACNpI,GAHI05B,EAMf,IAAIG,GAAgB,SAAUpgC,GAAKm/B,EAAW,EAAGn/B,IAC7CqgC,EAAgB,SAAUrgC,GAAKm/B,EAAW,EAAGn/B,IAC7CsgC,EAAc,SAAUtgC,GACxB,GAAIuC,GAASvC,EAAEwf,GACf9jB,GAAG0J,OAAOE,QAAQ,WACdiB,EAAOhE,OAAOA,GACdgE,EAAOsG,gBAuSf,OAlRAnR,GAAG6E,SAASgG,EAAQ,SAAU,SAAUhE,GACpC,MAAKzB,WAAU1D,OAIRmJ,EAAOgV,QAAQ7f,EAAG4G,QAAQ0D,qBAAqBzD,IAH3CgE,EAAOgV,YAgBtBhV,EAAOmoB,KAAO,SAAUA,GACpB,MAAK5tB,WAAU1D,QAGfoiC,EAAQ9Q,EACDnoB,GAHIi5B,GAUfj5B,EAAOg6B,YAAc,SAAU1/B,GAC3B,MAAKC,WAAU1D,QAGfuiC,EAAe9+B,EACR0F,GAHIo5B,GAefp5B,EAAOi6B,KAAO,SAAUA,GACpB,MAAK1/B,WAAU1D,QAGfmiC,EAAQiB,EACDj6B,GAHIg5B,GAUfh5B,EAAOk6B,YAAc,SAAU5/B,GAC3B,MAAKC,WAAU1D,QAGfsiC,EAAe7+B,EACR0F,GAHIm5B,GAMfn5B,EAAO+F,UAAY,WAQf,MAPA/F,GAAO+E,WAEPg0B,EAAa/4B,EAAO6E,MACf5G,OAAO,KACPmC,KAAK,QAAS,WACdA,KAAK,YAAa,aAAeJ,EAAOuJ,UAAUD,KAAO,IAAMtJ,EAAOuJ,UAAUJ,IAAM,KAEpFnJ,EAAOoG,aAGlBpG,EAAOoG,UAAY,WACf,GAAIvC,GAAO7D,EAAO6D,OACdskB,EAAOnoB,EAAOmoB,QAAUtkB,EAAKyP,IAAItT,EAAOuC,iBACxC03B,EAAOj6B,EAAOi6B,QAAUp2B,EAAKyP,IAAItT,EAAOsC,cACxC82B,KACAjR,EAAOA,EAAK5N,KAAK6e,IAEjBD,IACAc,EAAOA,EAAK1f,KAAK4e,IAErBhR,EAAOmR,EAAUjgC,OAAO8uB,GACxB8R,EAAOZ,EAAUhgC,OAAO4gC,EAExB,IAAIE,GAAWhS,EAAK9uB,SAASxC,OACzBujC,EAAWH,EAAK5gC,SAASxC,OACzBwjC,EAAWnhC,KAAKW,MAAMmG,EAAOwJ,iBAAmB4wB,GAChDE,EAAYphC,KAAKW,MAAMmG,EAAOyJ,kBAAoB0wB,EAEtDF,GAAKM,iBAAiB,EAAGv6B,EAAOwJ,mBAChC2e,EAAKoS,iBAAiBv6B,EAAOyJ,kBAAmB,GAEhD,IAAI+wB,GAAQzB,EAAWz0B,UAAU,eAAeT,KAAK7D,EAAO6D,OAAQ,SAAUpK,EAAG7C,GAC7E,MAAOoJ,GAAOsC,cAAc7I,EAAG7C,GAAK,KAAOoJ,EAAOuC,gBAAgB9I,EAAG7C,KAErE6jC,EAASD,EAAMztB,QAAQ9O,OAAO,KAC7BmC,KAAK,QAAS,YAEnBq6B,GAAOx8B,OAAO,QACTmC,KAAK,QAAS,YACdA,KAAK,OAAQ,SACbuI,GAAG,QAAS3I,EAAO06B,cAEpB16B,EAAOyI,gBACPgyB,EAAOx8B,OAAO,SACdu8B,EAAMx8B,OAAO,SAASwH,KAAKxF,EAAOuI,UAGtCpT,EAAG4C,WAAWyiC,EAAMx8B,OAAO,QAASgC,EAAO0F,qBAAsB1F,EAAO2F,mBACnEvF,KAAK,IAAK,SAAU3G,EAAG7C,GAAK,MAAOqjC,GAAKj6B,EAAOsC,cAAc7I,EAAG7C,MAChEwJ,KAAK,IAAK,SAAU3G,EAAG7C,GAAK,MAAOuxB,GAAKnoB,EAAOuC,gBAAgB9I,EAAG7C,MAClEwJ,KAAK,KAAMm5B,GACXn5B,KAAK,KAAMo5B,GACXp5B,KAAK,OAAQJ,EAAO6K,UACpBzK,KAAK,QAASi6B,GACdj6B,KAAK,SAAUk6B,GAEpBE,EAAMvtB,OAAOjI,QAEb,IAAI21B,GAAQ5B,EAAW/6B,OAAO,SAC1B28B,GAAMjiC,UACNiiC,EAAQ5B,EAAW96B,OAAO,KAAKmC,KAAK,QAAS,aAEjD,IAAIw6B,GAAYD,EAAMr2B,UAAU,QAAQT,KAAKo2B,EAAK5gC,SAClDuhC,GAAU7tB,QAAQ9O,OAAO,QAClBmC,KAAK,IAAK,SAAU3G,GAAK,MAAOwgC,GAAKxgC,GAAK4gC,EAAW,IACrD90B,MAAM,cAAe,UACrBnF,KAAK,IAAKJ,EAAOyJ,mBACjBrJ,KAAK,KAAM,IACXuI,GAAG,QAAS3I,EAAO66B,gBACnBr1B,KAAKxF,EAAO25B,aACnBxkC,EAAG4C,WAAW6iC,EAAW56B,EAAO0F,qBAAsB1F,EAAO2F,mBACrDH,KAAKxF,EAAO25B,aACZv5B,KAAK,IAAK,SAAU3G,GAAK,MAAOwgC,GAAKxgC,GAAK4gC,EAAW,IACrDj6B,KAAK,IAAKJ,EAAOyJ,mBACzBmxB,EAAU3tB,OAAOjI,QACjB,IAAI81B,GAAQ/B,EAAW/6B,OAAO,SAC1B88B,GAAMpiC,UACNoiC,EAAQ/B,EAAW96B,OAAO,KAAKmC,KAAK,QAAS,aAEjD,IAAI26B,GAAYD,EAAMx2B,UAAU,QAAQT,KAAKskB,EAAK9uB,SA0BlD,OAzBA0hC,GAAUhuB,QAAQ9O,OAAO,QAClBmC,KAAK,KAAM,GACXmF,MAAM,cAAe,OACrBnF,KAAK,IAAK,GACVA,KAAK,MAAM,GACXuI,GAAG,QAAS3I,EAAOg7B,gBACnBx1B,KAAKxF,EAAO45B,aACnBzkC,EAAG4C,WAAWgjC,EAAW/6B,EAAO0F,qBAAsB1F,EAAO2F,mBACtDH,KAAKxF,EAAO45B,aACZx5B,KAAK,IAAK,SAAU3G,GAAK,MAAO0uB,GAAK1uB,GAAK6gC,EAAY,IAC7DS,EAAU9tB,OAAOjI,SAEbhF,EAAOgH,YACPhH,EAAOsE,UAAU,eAAezL,KAAK,SAAUY,GACvCuG,EAAOkc,eAAeziB,GACtBuG,EAAOwH,kBAAkBxM,MAEzBgF,EAAOyH,eAAezM,QAI9BgF,EAAOsE,UAAU,eAAezL,KAAK,WACjCmH,EAAO0H,eAAe1M,QAGvBgF,GAqBXA,EAAO06B,WAAa,SAAUO,GAC1B,MAAK1gC,WAAU1D,QAGfkjC,EAAckB,EACPj7B,GAHI+5B,GAgBf/5B,EAAO66B,aAAe,SAAUI,GAC5B,MAAK1gC,WAAU1D,QAGfgjC,EAAgBoB,EACTj7B,GAHI65B,GAgBf75B,EAAOg7B,aAAe,SAAUC,GAC5B,MAAK1gC,WAAU1D,QAGfijC,EAAgBmB,EACTj7B,GAHI85B,GAcf95B,EAAOk7B,cAAgB,SAAUA,GAC7B,MAAK3gC,WAAU1D,QAGf0iC,EAAiB2B,EACVl7B,GAHIu5B,GAcfv5B,EAAOm7B,cAAgB,SAAUA,GAC7B,MAAK5gC,WAAU1D,QAGf2iC,EAAiB2B,EACVn7B,GAHIw5B,GAMfx5B,EAAOkc,eAAiB,SAAUziB,GAC9B,MAAOuG,GAAOgH,UAAUvN,EAAEwf,MAGvBjZ,EAAOuE,OAAO3G,EAAQ4G,IAIjC,WA4UI,QAAS42B,GAAa3hC,GAClB,OAAQ,EAAGA,EAAE5C,OAAS,GAG1B,QAASwkC,GAAc5hC,GACnB,OACIxE,EAAGqmC,SAAS7hC,EAAG,KACfxE,EAAGqmC,SAAS7hC,EAAG,IACfxE,EAAGqmC,SAAS7hC,EAAG,MAjVvBxE,EAAGsmC,IAAM,WAYL,QAASA,GAAKlwB,GACVA,EAAExS,KAAK,SAAUY,EAAG7C,GAChB6C,EAAIA,EAAE6Z,IAAI/T,GAAOgb,KAAKtlB,EAAG0yB,UACzB,IAAItc,GAAIpW,EAAG+I,OAAOhD,MACdpC,EAAIa,EAAE5C,OACNwG,EAAM5D,EAAE,GACR6D,EAAM7D,EAAEb,EAAI,GAGZ4iC,EAAe/hC,EAAEgiC,UAAYA,EAAUhiC,GAGvCiiC,EAAiBC,GAAYA,EAAShjC,KAAKqC,KAAMvB,EAAG7C,GACpDglC,EAAcF,GAAkBA,EAAepoB,IAAI,SAAU1c,GAAK,MAAO6C,GAAE7C,KAI3EilC,EAAiBH,EACjBzmC,EAAGoK,MAAM,EAAGq8B,EAAe,IAAIzkB,OAAOhiB,EAAGoK,MAAMq8B,EAAe,GAAK,EAAG9iC,IAAM3D,EAAGoK,MAAMzG,GAGrFkjC,EAAK7mC,EAAG2U,MAAMS,SACbhR,OAAOA,GAAUA,EAAOV,KAAKqC,KAAMvB,EAAG7C,KAAOyG,EAAKC,IAClD+B,OAAOiB,EAAQ,IAGhB+yB,EAAKr4B,KAAK+gC,WAAa9mC,EAAG2U,MAAMS,SAC/BhR,QAAQ,EAAGuG,EAAAA,IACXP,MAAMy8B,EAAGz8B,QAGdrE,MAAK+gC,UAAYD,CAQjB,IAAIE,GAAS3wB,EAAE/G,UAAU,eACpBT,KAAK+3B,GAAeA,MAEzBI,GAAOjvB,QAAQN,OAAO,OAAQ,QACzBrM,KAAK,QAAS,UACdA,KAAK,KAAMC,EAAQ,GACnBD,KAAK,KAAM,SAAU3G,GAAK,MAAO45B,GAAG55B,EAAE,MACtC2G,KAAK,KAAMC,EAAQ,GACnBD,KAAK,KAAM,SAAU3G,GAAK,MAAO45B,GAAG55B,EAAE,MACtC8L,MAAM,UAAW,MACjBxN,aACAE,SAASA,GACTC,MAAMA,GACNqN,MAAM,UAAW,GACjBnF,KAAK,KAAM,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MACtC2G,KAAK,KAAM,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MAE3CuiC,EAAOjkC,aACFE,SAASA,GACTC,MAAMA,GACNqN,MAAM,UAAW,GACjBnF,KAAK,KAAMC,EAAQ,GACnBD,KAAK,KAAMC,EAAQ,GACnBD,KAAK,KAAM,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MACtC2G,KAAK,KAAM,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MAE3CuiC,EAAO/uB,OAAOlV,aACTE,SAASA,GACTC,MAAMA,GACNqN,MAAM,UAAW,MACjBnF,KAAK,KAAM,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MACtC2G,KAAK,KAAM,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MACtCuL,QAGL,IAAIu2B,GAAMlwB,EAAE/G,UAAU,YACjBT,MAAM23B,GAEXD,GAAIxuB,QAAQ9O,OAAO,QACdmC,KAAK,QAAS,OACdA,KAAK,IAAK,GACVA,KAAK,IAAK,SAAU3G,GAAK,MAAO45B,GAAG55B,EAAE,MACrC2G,KAAK,QAASC,GACdD,KAAK,SAAU,SAAU3G,GAAK,MAAO45B,GAAG55B,EAAE,IAAM45B,EAAG55B,EAAE,MACvD1B,aACEE,SAASA,GACTC,MAAMA,GACNkI,KAAK,IAAK,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MACrC2G,KAAK,SAAU,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,IAAMqiC,EAAGriC,EAAE,MAE1D8hC,EAAIxjC,aACCE,SAASA,GACTC,MAAMA,GACNkI,KAAK,QAASC,GACdD,KAAK,IAAK,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,MACrC2G,KAAK,SAAU,SAAU3G,GAAK,MAAOqiC,GAAGriC,EAAE,IAAMqiC,EAAGriC,EAAE,KAG1D,IAAIwiC,GAAa5wB,EAAE/G,UAAU,eACxBT,MAAM23B,EAAa,IAExBS,GAAWlvB,QAAQ9O,OAAO,QACrBmC,KAAK,QAAS,UACdA,KAAK,KAAM,GACXA,KAAK,KAAMizB,GACXjzB,KAAK,KAAMC,GACXD,KAAK,KAAMizB,GACXt7B,aACAE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM07B,GACX17B,KAAK,KAAM07B,GAEhBG,EAAWlkC,aACNE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM,GACXA,KAAK,KAAMC,GACXD,KAAK,KAAM07B,GACX17B,KAAK,KAAM07B,EAGhB,IAAII,GAAU7wB,EAAE/G,UAAU,gBACrBT,KAAK+3B,MAEVM,GAAQnvB,QAAQN,OAAO,OAAQ,gBAC1BrM,KAAK,QAAS,WACdA,KAAK,KAAM,GACXA,KAAK,KAAMizB,GACXjzB,KAAK,KAAMC,GACXD,KAAK,KAAMizB,GACX9tB,MAAM,UAAW,MACnBxN,aACEE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM07B,GACX17B,KAAK,KAAM07B,GACXv2B,MAAM,UAAW,GAEtB22B,EAAQnkC,aACHE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM,GACXA,KAAK,KAAMC,GACXD,KAAK,KAAM07B,GACX17B,KAAK,KAAM07B,GACXv2B,MAAM,UAAW,GAEtB22B,EAAQjvB,OAAOlV,aACVE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM07B,GACX17B,KAAK,KAAM07B,GACXv2B,MAAM,UAAW,MACjBP,QAGL,IAAIm3B,GAAU9wB,EAAE/G,UAAU,kBACrBT,KAAKg4B,EAAgBO,OAE1BD,GAAQpvB,QAAQN,OAAO,SAAU,QAC5BrM,KAAK,QAAS,WACdA,KAAK,IAAK,GACVA,KAAK,KAAMC,EAAQ,GACnBD,KAAK,KAAM,SAAUxJ,GAAK,MAAOy8B,GAAG55B,EAAE7C,MACtC2O,MAAM,UAAW,MACjBxN,aACAE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM,SAAUxJ,GAAK,MAAOklC,GAAGriC,EAAE7C,MACtC2O,MAAM,UAAW,GAEtB42B,EAAQpkC,aACHE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAMC,EAAQ,GACnBD,KAAK,KAAM,SAAUxJ,GAAK,MAAOklC,GAAGriC,EAAE7C,MACtC2O,MAAM,UAAW,GAEtB42B,EAAQlvB,OAAOlV,aACVE,SAASA,GACTC,MAAMA,GACNkI,KAAK,KAAM,SAAUxJ,GAAK,MAAOklC,GAAGriC,EAAE7C,MACtC2O,MAAM,UAAW,MACjBP,QAGL,IAAInJ,GAASwgC,GAAcP,EAAGO,WAAW,GAGrCC,EAAUjxB,EAAE/G,UAAU,YACrBT,KAAK23B,EAEVc,GAAQvvB,QAAQ9O,OAAO,QAClBmC,KAAK,QAAS,OACdA,KAAK,KAAM,QACXA,KAAK,KAAM,SAAU3G,EAAG7C,GAAK,MAAW,GAAJA,EAAQ,GAAI,IAChDwJ,KAAK,IAAK,SAAU3G,EAAG7C,GAAK,MAAW,GAAJA,EAAQyJ,EAAQ,IACnDD,KAAK,IAAKizB,GACVjzB,KAAK,cAAe,SAAU3G,EAAG7C,GAAK,MAAW,GAAJA,EAAQ,QAAU,QAC/D4O,KAAK3J,GACL9D,aACAE,SAASA,GACTC,MAAMA,GACNkI,KAAK,IAAK07B,GAEfQ,EAAQvkC,aACHE,SAASA,GACTC,MAAMA,GACNsN,KAAK3J,GACLuE,KAAK,IAAK,SAAU3G,EAAG7C,GAAK,MAAW,GAAJA,EAAQyJ,EAAQ,IACnDD,KAAK,IAAK07B,EAKf,IAAIS,GAAclxB,EAAE/G,UAAU,gBACzBT,KAAK+3B,MAEVW,GAAYxvB,QAAQ9O,OAAO,QACtBmC,KAAK,QAAS,WACdA,KAAK,KAAM,QACXA,KAAK,KAAM,GACXA,KAAK,IAAKC,GACVD,KAAK,IAAKizB,GACV7tB,KAAK3J,GACL0J,MAAM,UAAW,MACjBxN,aACAE,SAASA,GACTC,MAAMA,GACNkI,KAAK,IAAK07B,GACVv2B,MAAM,UAAW,GAEtBg3B,EAAYxkC,aACPE,SAASA,GACTC,MAAMA,GACNsN,KAAK3J,GACLuE,KAAK,IAAKC,GACVD,KAAK,IAAK07B,GACVv2B,MAAM,UAAW,GAEtBg3B,EAAYtvB,OAAOlV,aACdE,SAASA,GACTC,MAAMA,GACNkI,KAAK,IAAK07B,GACVv2B,MAAM,UAAW,MACjBP,WAET/P,EAAGunC,MAAMC,QAlQb,GAAIp8B,GAAQ,EACRC,EAAS,EACTrI,EAAW,EACXC,EAAQ,EACRmB,EAAS,KACTkG,EAAQ68B,OACRT,EAAWP,EACXK,EAAYJ,EACZgB,EAAa,IA6TjB,OAhEAd,GAAIl7B,MAAQ,SAAUR,GAClB,MAAKtF,WAAU1D,QAGfwJ,EAAQR,EACD07B,GAHIl7B,GAMfk7B,EAAIj7B,OAAS,SAAUT,GACnB,MAAKtF,WAAU1D,QAGfyJ,EAAST,EACF07B,GAHIj7B,GAMfi7B,EAAIc,WAAa,SAAUx8B,GACvB,MAAKtF,WAAU1D,QAGfwlC,EAAax8B,EACN07B,GAHIc,GAMfd,EAAItjC,SAAW,SAAU4H,GACrB,MAAKtF,WAAU1D,QAGfoB,EAAW4H,EACJ07B,GAHItjC,GAMfsjC,EAAIliC,OAAS,SAAUwG,GACnB,MAAKtF,WAAU1D,QAGfwC,EAAe,OAANwG,EAAaA,EAAI5K,EAAGsO,QAAQ1D,GAC9B07B,GAHIliC,GAMfkiC,EAAIh8B,MAAQ,SAAUM,GAClB,MAAKtF,WAAU1D,QAGf0I,EAAQM,EACD07B,GAHIh8B,GAMfg8B,EAAII,SAAW,SAAU97B,GACrB,MAAKtF,WAAU1D,QAGf8kC,EAAW97B,EACJ07B,GAHII,GAMfJ,EAAIE,UAAY,SAAU57B,GACtB,MAAKtF,WAAU1D,QAGf4kC,EAAY57B,EACL07B,GAHIE,GAMRF,MAuCfpmC,EAAGunC,QAAU,SAAU9+B,EAAQ4G,GAI3B,QAASm4B,GAAsBC,GAC3B,MAAO,UAAUnjC,GACb,GAAIojC,GAAKpjC,EAAEgiC,UAAU,GACjBqB,EAAKrjC,EAAEgiC,UAAU,GACjBsB,GAAOD,EAAKD,GAAMD,EAClBhmC,GAAI,EACJ82B,EAAIj0B,EAAE5C,MACV,KAAOD,QAAY6C,EAAE7C,GAAKimC,EAAKE,EAC/B,KAAOrP,QAAYj0B,EAAEi0B,GAAKoP,EAAKC,EAC/B,QAAQnmC,EAAG82B,IAwHnB,QAASsP,GAAaC,GAClB,GAAIC,GAAcD,EAAOlwB,QAAQ9O,OAAO,IAExCi/B,GACK98B,KAAK,QAAS,OACdA,KAAK,YAAa+8B,GAClBxkC,KAAKykC,GACLz0B,GAAG,QAAS,SAAUlP,GACnBuG,EAAOhE,OAAOgE,EAAOsC,cAAc7I,IACnCuG,EAAOsG,gBAInB,QAAS+2B,GAAaJ,GAClB9nC,EAAG4C,WAAWklC,EAAQj9B,EAAO0F,qBAAsB1F,EAAO2F,mBACrDvF,KAAK,YAAa+8B,GAClBxkC,KAAKykC,GACLvkC,KAAK,WACF5D,EAAG+I,OAAOhD,MAAMgD,OAAO,YAAYoC,KAAK,OAAQJ,EAAO6K,YAInE,QAASyyB,GAAaL,GAClBA,EAAOhwB,OAAOjI,SAASrM,KAAKykC,GA3JhC,GAAIp9B,GAAS7K,EAAG4V,wBAgBZwyB,EAAoB,IACpBC,EAAeb,EACfc,EAAYD,EAAaD,GAEzBH,EAAOnoC,EAAGsmC,MACVmC,EAAc,KAEdC,EAAY,SAAUC,EAAiB9qB,GACvC,MAAI9S,GAAOsL,YACAtL,EAAOH,IAAI6hB,YAEXkc,GAAmB,EAAI59B,EAAO69B,cAAgB/qB,EAK7D9S,GAAO+U,aAAa,IAGpB/U,EAAOH,EAAE5K,EAAG2U,MAAMxQ,WAClB4G,EAAO8S,OAAO3d,EAAG2D,MAAMM,SAKvB4G,EAAO6D,KAAK,SAAU1N,GAClB,MAAOA,GAAMmN,MAAMgQ,IAAI,SAAU7Z,GAE7B,MADAA,GAAE6Z,IAAM,SAAU+C,GAAY,MAAOA,GAAS1d,KAAKc,EAAGA,IAC/CA,IACRuC,OAAO,SAAUvC,GAChB,GAAI8c,GAASvW,EAAOuC,gBAAgB9I,EACpC,OAAyB,KAAlB8c,EAAO1f,WAetBmJ,EAAO69B,WAAa79B,EAAOiM,kBAC3BjM,EAAO69B,WAAW,IAYlB79B,EAAOuiB,aAAeviB,EAAOmM,uBAC7BnM,EAAOuiB,aAAa,IAiBpBviB,EAAOq6B,SAAW,SAAUA,GACxB,MAAK9/B,WAAU1D,QAGf8mC,EAAY1oC,EAAGsO,QAAQ82B,GAChBr6B,GAHI29B,EAMf,IAAIR,GAAe,SAAU1jC,EAAG7C,GAC5B,GAAIknC,GAAU99B,EAAOH,IAAIG,EAAOsC,cAAc7I,EAAG7C,GACjD,OAAO,aAAeknC,EAAU,OA4HpC,OAzHA99B,GAAO2V,gBAAkB,WACjB3V,EAAOuL,YACPvL,EAAOH,IAAIxG,YAInB2G,EAAO8N,SAAW,WACd,GAAIiwB,GAAsBJ,EAAU39B,EAAOwJ,iBAAkBxJ,EAAOmT,aAEpEiqB,GAAKzB,SAAS8B,GACTp9B,MAAM09B,GACNz9B,OAAON,EAAOyJ,mBACdlK,MAAMS,EAAOuC,iBACblJ,OAAO2G,EAAOF,IAAIzG,UAClBpB,SAAS+H,EAAO0F,sBAChB22B,WAAWqB,EAEhB,IAAIT,GAASj9B,EAAO2S,aAAarO,UAAU,SAAST,KAAK7D,EAAO6D,OAAQ7D,EAAOsC,cAE/E06B,GAAYC,GACZI,EAAYJ,GACZK,EAAYL,GAEZj9B,EAAOqO,sBA6BXrO,EAAOqO,mBAAqB,WACxB,GAAIrO,EAAOgH,YACP,GAAIhH,EAAOsL,YACPtL,EAAOqL,IAAI/G,UAAU,SAASzL,KAAK,SAAUY,GACrCuG,EAAOkc,eAAeziB,GACtBuG,EAAOwH,kBAAkBxM,MAEzBgF,EAAOyH,eAAezM,YAG3B,CACH,GAAIwU,GAASxP,EAAOuR,QAAQ/B,SACxBxW,EAAQwW,EAAO,GACfvW,EAAMuW,EAAO,GACblN,EAActC,EAAOsC,aACzBtC,GAAOqL,IAAI/G,UAAU,SAASzL,KAAK,SAAUY,GACzC,GAAIwf,GAAM3W,EAAY7I,EAClBwf,GAAMjgB,GAASigB,GAAOhgB,EACtB+G,EAAOyH,eAAezM,MAEtBgF,EAAOwH,kBAAkBxM,YAKrCgF,GAAOqL,IAAI/G,UAAU,SAASzL,KAAK,WAC/BmH,EAAO0H,eAAe1M,SAKlCgF,EAAOkc,eAAiB,SAAUziB,GAC9B,MAAOuG,GAAOgH,UAAUhH,EAAOsC,cAAc7I,KAGjDuG,EAAO2T,SAAW,WACd,GAAItW,GAAMpI,EAAGoI,IAAI2C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOtB,GAAGoI,IAAI2C,EAAOuC,gBAAgBhM,KAEzC,OAAOpB,GAAGwE,MAAMsD,SAASI,EAAK2C,EAAO+U,iBAGzC/U,EAAO4T,SAAW,WACd,GAAItW,GAAMrI,EAAGqI,IAAI0C,EAAO6D,OAAQ,SAAUtN,GACtC,MAAOtB,GAAGqI,IAAI0C,EAAOuC,gBAAgBhM,KAEzC,OAAOpB,GAAGwE,MAAM8C,IAAIa,EAAK0C,EAAO+U,iBAepC/U,EAAOq8B,WAAa,SAAUA,GAC1B,MAAK9hC,WAAU1D,QAGf6mC,EAAcrB,EACPr8B,GAHI09B,GAMR19B,EAAOuE,OAAO3G,EAAQ4G,IA0BjCrP,EAAG6oC,WAAa,SAAUpgC,EAAQ4G,GA4D9B,QAASy5B,KACL,GAAIp1B,GAAUq1B,EAAQ55B,UAAU,UAAY65B,GACzCt6B,KAAK7D,EAAO6D,OAAQ,SAAUpK,GAAK,MAAOuG,GAAOsC,cAAc7I,IAYlE,OAVAoP,GAAQkE,QACD9O,OAAO,UACPwG,QAAQ05B,GAAkB,GAC1B/9B,KAAK,QAAS,SAAU3G,GAAK,MAAOuG,GAAOsC,cAAc7I,KAEhEoP,EAAQrD,KAAKxF,EAAOuI,SACpBM,EAAQoE,OAAOjI,SACfk5B,EAAQ55B,UAAU,UAAY65B,GAAkB5jB,KAAKmN,GAErDwW,EAAQv1B,GAAG,SAAUy1B,GACdv1B,EAGX,QAASu1B,GAAU3kC,EAAG7C,GAClB,GAAI2f,GACA8nB,EAASppC,EAAGgR,MAAMo4B,MACtB,IAAIA,EAAOC,gBAAiB,CACxB,GAAIA,GAAkBriC,MAAMZ,UAAUgJ,MAAM1L,KAAK0lC,EAAOC,gBACxD/nB,GAAS+nB,EAAgBhrB,IAAI,SAAU7Z,GACnC,MAAOA,GAAE8F,YAEV,CAEH,GAAIsJ,MAAaxE,MAAM1L,KAAK1D,EAAGgR,MAAMo4B,OAAOx1B,QAC5C0N,GAAS1N,EAAQ7M,OAAO,SAAUuiC,GAC9B,MAAOA,GAAO7X,WACfpT,IAAI,SAAUirB,GACb,MAAOA,GAAOh/B,QAKA,IAAlBgX,EAAO1f,QAA8B,KAAd0f,EAAO,GAC9BA,EAASioB,GAAgB,KACjBC,GAA+B,IAAlBloB,EAAO1f,SAC5B0f,EAASA,EAAO,IAEpBvW,EAAOo+B,SAAS7nB,GAgBpB,QAASmoB,KACDD,EACAP,EAAQ99B,KAAK,YAAY,GAEzB89B,EAAQ99B,KAAK,WAAY,MAEN,OAAnBu+B,EACAT,EAAQ99B,KAAK,OAAQu+B,GAErBT,EAAQ99B,KAAK,OAAQ,MA7H7B,GAKI89B,GALAU,EAAmB,iBACnBT,EAAmB,mBAEnBn+B,EAAS7K,EAAG4K,cAGZ8+B,EAAc,aACdJ,GAAY,EACZD,EAAe,KACfG,EAAiB,KACjBjX,EAAS,SAAUhnB,EAAG8Z,GACtB,MAAOxa,GAAOsC,cAAc5B,GAAKV,EAAOsC,cAAckY,GACjD,EAAIxa,EAAOsC,cAAckY,GAAKxa,EAAOsC,cAAc5B,IACpD,EAAK,GAGTo+B,EAAmB,SAAUrlC,GAC7B,MAAOuG,GAAOuC,gBAAgB9I,GAAK,EAGvCuG,GAAO6D,KAAK,SAAU1N,GAClB,MAAOA,GAAMmN,MAAMtH,OAAO8iC,KAG9B9+B,EAAO+F,UAAY,WAOf,MANA/F,GAAOhC,OAAO,UAAUgH,SACxBk5B,EAAUl+B,EAAOQ,OAAOvC,OAAO,UACdwG,QAAQm6B,GAAkB,GAC3CV,EAAQjgC,OAAO,UAAUuH,KAAKq5B,GAAaz+B,KAAK,QAAS,IAEzDJ,EAAOoG,YACApG,EAKX,IAAI++B,GAAKzsB,OAAO0sB,UAAUC,SAqN1B,OAnNIF,GAAGvoC,QAAQ,YAAc,GAAKuoC,EAAGvoC,QAAQ,WAAY,IACrDwJ,EAAOnI,OAASmI,EAAOrI,QAG3BqI,EAAOoG,UAAY,WAcf,MAbAs4B,KACAT,IAEIj+B,EAAOgH,aAAey3B,EACtBP,EAAQ55B,UAAU,UACb46B,SAAS,WAAY,SAAUzlC,GAC5B,MAAoB,mBAANA,IAAqBuG,EAAOjE,UAAUvF,QAAQ8f,OAAOtW,EAAOsC,cAAc7I,MAAQ,IAEjGuG,EAAOgH,YACdk3B,EAAQgB,SAAS,QAASl/B,EAAOhE,UAEjCkiC,EAAQgB,SAAS,QAAS,IAEvBl/B,GA+CXA,EAAOo+B,SAAW,SAAUhhC,GACpBA,GAAOqhC,EACPz+B,EAAOuH,eAAenK,IACfA,EACP4C,EAAOuH,cAAcnK,GAErB4C,EAAO1I,YAEXnC,EAAG0J,OAAOE,QAAQ,WACdiB,EAAOsG,iBA+BftG,EAAOooB,MAAQ,SAAUA,GACrB,MAAK7tB,WAAU1D,QAGf6wB,EAASU,EACFpoB,GAHI0nB,GAef1nB,EAAOm/B,WAAa,SAAU7kC,GAC1B,MAAKC,WAAU1D,QAGfgoC,EAAcvkC,EACP0F,GAHI6+B,GAmBf7+B,EAAOo/B,gBAAkB,SAAUA,GAC/B,MAAK7kC,WAAU1D,QAGfioC,EAAmBM,EACZp/B,GAHI8+B,GAgBf9+B,EAAOq/B,SAAW,SAAUA,GACxB,MAAK9kC,WAAU1D,QAGf4nC,EAAYY,EAELr/B,GAJIy+B,GAiBfz+B,EAAOs/B,YAAc,SAAUA,GAC3B,MAAK/kC,WAAU1D,QAGf2nC,EAAec,EAERt/B,GAJIw+B,GAkBfx+B,EAAOu/B,cAAgB,SAAUA,GAC7B,MAAKhlC,WAAU1D,QAGf8nC,EAAiBY,EAEVv/B,GAJI2+B,GAOf3+B,EAAOyP,KAAOta,EAAGgJ,OAAOM,UAAUuB,EAAOu/B,cAAe,4DAEjDv/B,EAAOuE,OAAO3G,EAAQ4G,IAKjCrP,EAAGqqC,oBAAsBrqC,EAAG0kB,YAC5B1kB,EAAGsqC,UAAYtqC,EAAG4K,UAClB5K,EAAGuqC,OAASvqC,EAAGkjB,SACfljB,EAAGwqC,WAAaxqC,EAAGuU,WACnBvU,EAAGyqC,oBAAsBzqC,EAAG4V,oBAC5B5V,EAAG0qC,WAAa1qC,EAAG8T,YACnB9T,EAAG2qC,eAAiB3qC,EAAG6gB,WAIvB7gB,EAAGF,GAAKA,EACRE,EAAGD,YAAcA,EAEVC,EACH,GAAqB,kBAAX4qC,SAAyBA,OAAOC,IACtCD,QAAQ,KAAM,gBAAiB/qC,OAC5B,IAAqB,gBAAXirC,SAAuBA,OAAOC,QAAS,CACpD,GAAIC,GAAMC,QAAQ,MACdC,EAAeD,QAAQ,eAMC,mBAAjBC,KACPA,EAAeA,EAAanrC,aAEhC+qC,OAAOC,QAAUlrC,EAAImrC,EAAKE,OAE1BrlC,MAAK7F,GAAKH,EAAIC,GAAIC","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 69ba102964..2373c86bc6 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 34ca12d1b3..d8d3a6503a 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 5ac5d6427d..9d81135dbb 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 7a81794d05..0cce99a2a8 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 c459281324..6b2fdcd184 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 17ac199703..6c44806754 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 e151ccbd40..b91fe66a32 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 0000000000..155bc0c707 --- /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 6ecfa96b7c..d19c7b2dda 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 37a8b8a8dc..b701b35230 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 a00045e658..a3a5a5025e 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 6fe8de34e0..8b71665041 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 ef346cc355..7cbfb29405 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 d145d85929..d844e88e51 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 c30d78c4ad..9eaf66dbc8 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 b6a96c19ee..eed5ed0fc3 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 801b7f3567..902218a035 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 c3289aee88..eea7805635 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 d6772743da..21dc63d64d 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 b2cbfed984..8c73d8eb18 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 b1e9bca92f..80d3dc6faa 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 6d154b0648..c9c122bacf 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 4a7e7ade58..5875cdaf90 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 1466b95a2c..11f9141469 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 25c4b7193f..e8b6dbe32e 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 0cd025ed4d..816b507a57 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 8fb3ae03d8..e7c0945a3d 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 a3b2332d81..7289080ac4 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 b9770b53f8..f5a71a739d 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 59cffaa743..6294f89ed6 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 df9923c00f..e4b83eca7a 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 09ec65c321..ea7dfcd9b1 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 cec452a156..a0cefd052e 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 261f8f94b6..2975e9590e 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 192dde4b9e..e85c7ad614 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 e57a71bcc3..681b977432 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 02ad552fcc..b758f5a729 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 aaed296b1b..9b7a13ada8 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 04a3474f33..07c9bae6bb 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 1731894a2d..fcc11e968d 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 9fb90630c3..7865ddc48f 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 0f08bd8d37..cd18d4ebb1 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 02de88e4e7..d26cc18a4c 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 ebc404fa9e..805e94166d 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 3f9df6a5df..1480afe853 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 75ae807a1c..329be7992c 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 ce306201af..939c265318 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 ad3ee806c1..a8af2f2009 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 07e006b53d..13af32e267 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 a59bb6caae..b3ff141a24 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 aff0c3ac83..2da3ff5621 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 a5daa10cf6..a7b4ed2774 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 c183ed9d4d..4d9de96e75 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 32ba0bbda6..84ea3e12d9 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 d934a36b55..a9a7c88399 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 07c3f11228..8652253d7e 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 a579ffe227..29b7dbf8c1 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 9f26cb07ca..a55c3748d4 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 4d4d2f10d9..576266e313 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 3e2a5370e2..cc6bbb250f 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 0175b060a0..b6d77db43d 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 02a4ebdc68..45ea2f1e5c 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 d3add4b05b..9ef2c6c860 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 b5102b17c9..c66f5b7526 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 2ab70a8bf4..04de18f62c 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 d3ac30bb34..40ffd2f307 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 4bf0bfee8b..cf06414e87 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 1faf7c7fd8..1831c99977 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 ae16c9cfd0..4fd720e8f8 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 b656a94d31..8cc89f58fa 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 74861621f7..2da099ab11 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 0bb88cc93e..2ea927ed22 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 63ccb8a3b0..491ca38e96 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 5008106650..8e36068e84 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 63ccb8a3b0..491ca38e96 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 197f0de13d..3d2777dc9c 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 04c7263d4e..1ac6cb910c 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 63ccb8a3b0..491ca38e96 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 63ccb8a3b0..491ca38e96 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 63ccb8a3b0..491ca38e96 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 63ccb8a3b0..491ca38e96 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 6937587271..a5dbd44a27 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 cda0323be9..4de2bc249b 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 259148dafb..6e375712ba 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 820f2607d5..9eb9d2bd8d 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 e7587203ec..aa212527a8 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 4e1b446ac9..53854c913c 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 96a0a06e66..5fc76319dc 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 3ed4b08651..7eef5127ca 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 cff7547065..35b9595ad5 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 45a1edbc18..721d7ef13e 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 610c110494..fab4552f0c 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 05934a98ab..081d68b55f 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 585b09a61b..7089c61f24 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 86194e7c6a..3235e35dfe 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 8a62509a81..f353b8792a 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 2f87771b35..8088ed1d0c 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 f58f79590c..b039442919 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 f94e3831cc..463b758c29 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 aa5a8766f3..000faab744 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 7e3b4e675b..cd36044efc 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 ed5f9fd466..aedfd8224f 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 8ab910f8ab..cccc0eb97e 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 a38feec15b..68439d61a2 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 6e11eabb16..59dfaf64d9 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 d7a6965eac..e16e34fe46 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 22fe60364e..d10cac3cab 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 e69c1bfd6a..86c67c7cd8 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 083b10c778..d1f451b2fb 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 0918768f59..9e9acf2e8f 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 2aa5c85b5e..e7cd0181fd 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 96215fe803..5759af62c4 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 0a00fa7e4e..a6d9e0b3cc 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 9011381c78..b92082c3bd 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 0c665420d3..242eb8956a 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 57a923e455..e6b4f5079d 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 155a79deb3..067d503f64 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 47f8091a4f..5cb3ce91da 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 7d7144f9fc..c802208a85 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 049a07c840..a02830cf57 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 5dc9970b1d..3f74f1df93 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 c2d58ff333..1cbbd6e0ad 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 a8f7b004b2..a5f543cc85 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 73781c95bf..7688948d6a 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 80aea46229..fab9d1b876 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 a2795be12e..cabc8ba2a3 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 d8e791670e..57dc2097b5 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 53df3b70d2..440a975df0 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 f67463f97b..38de6bd8ff 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 394dd296fe..236467022e 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 ca300b89dd..d1e7af21c8 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 bdf46dc1eb..91c531dfad 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 9875d3700e..fe18f2e252 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 ecd5c89df2..a3d030274e 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 0a0180e385..3176c492ec 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 490970325b..f70c19badc 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 eab7b4b696..a5f89154a9 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 3ec94d09b1..4d034ecb4c 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 af3c2f86f7..dc4a1a9a98 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 a9c7a8926f..498208502d 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 d28c95252e..af36c4a4ab 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 7690c70850..ef528e81ff 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 fdbc51ee01..e156a2b42c 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 a53d6c963c..788a05800f 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 b91d10396c..90ef4226f3 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 9d53dafcca..d426c1d781 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 02cd72c2e5..ee625a297c 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 017938abdc..60340e1fa9 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 e13b309016..7241500a49 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 2d4f541b68..bf7f4faa48 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 865e7285fa..cec066bf29 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 bd82dc3968..cb7e906b52 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 ad954ba27d..75f7af708b 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 42cf14587d..fd3d3ba97a 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 d564a8dc30..9bb253c0a4 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 9f79c75380..2d7f37429e 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 571bf07520..3de450d55a 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 f7b81d1a9a..b005cd380a 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 568cb928d3..bef5624078 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 e2616f14ac..c8745a4087 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 9095904cb1..415a8c1594 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 f77d140214..7d06418585 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 b8e88fbf92..8041650204 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 ef723b9349..3150296f84 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 1606a0392f..5d6e53c854 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 067c6b2e9e..d2a792a869 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 4869ce8f37..9c3b2c7891 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 68a109957e..93c6b82b96 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 3bc931d8f6..ff43a3d931 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 c4de9a9c2c..ae6b84317a 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 7f90661191..ab42135866 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 983d58a9f4..b222f39e0c 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 786b327659..bafe38402a 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 e6c27a1243..e8d9201443 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 863b17c47e..95424e10f4 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 9f64b2e65a..20e69d9267 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 e05ad166d0..6661217d8f 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 7919c41ab1..a538e12efa 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 613b9bb622..316755747b 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 80dc5b63c8..305815b639 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 41e2af425d..466bee7e8d 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 1cc90f375a..0f3fb85d8a 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 d6eb0c9e7d..db652698de 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 6a91d2ad43..af10925dca 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 aeb205b9f3..67cf67ef19 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 6405886837..d05ed19df0 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 f0b5537e1a..3e9879c8f0 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 f69bf02b83..7590a03286 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 6cbc3d3ef9..a610e9ea9a 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 3ee462da20..c30c34f143 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 9caba89b1d..e07aebd8a2 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 5070b1d57c..4eee696216 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 283c323adb..09427e9d99 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 5d8abd125e..69bd93d9f4 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 ab9ba07df3..d2675f99b3 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 b1cedf4f08..14796de461 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 c7f1eaf53e..2a24cf7639 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 7d1ea9569a..0d4194dd27 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 043624d986..d9fbedebf7 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 f16c78fdff..8f1339ce66 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 fdf156d91c..b2b7ce348e 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 351ee62afb..21704601c8 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 ffd232200c..9bb2efe566 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 9a28ebd764..57304bf926 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 a5b3795519..b0ffe221d2 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 630f1a3ffc..b3f9c6f9a8 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 4402387c85..1744c25ac1 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 4423f75d79..9050c4dc16 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 0a30c00218..01181d11d7 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 2bfd6d26cb..b465a5ef9d 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 e633e5b7e1..c8703ed020 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 0000000000..cb492e4c43 --- /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 f74bd879a2..c5e75b66f7 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 f47d7cefbf..2969b3b8a0 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 0000000000..76ef91896a --- /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 ed5d271f83..813405f0cb 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 7845258988..264d499166 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 7b6b0efc01..493087853f 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 09aa34a16d..eeee9e8e17 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 846b3696b4..6e16d6457e 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 e1f68b9b76..e00108d734 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 082b0323b5..e42331b529 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 70349625ff..4681a7fb50 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 a5ff8653d8..465feefdbc 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 bbe76d94a0..53a5d66c9e 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 7d300a5120..2fe6220c6a 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 e6c56f2608..6b59ec94f8 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 ef8eeb320e..fe03951dba 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 7c10342077..90570703f8 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 bb91f94922..97e87f6cf8 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 0a41cc9232..1487060b4f 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 81affcc9d3..614820741a 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 7d631c233b..f349211b2f 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 c3640271df..5f2b6a2f3d 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 06febd14c9..3ce814cc99 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 49cf298598..c880bd91c6 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 4c5d316b9f..dcc3a6c477 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 dcc38f151d..d5e563b9b9 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 7ee8c1b29e..137f74ac1d 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 e4d9846306..052d4cc86b 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 39c3496a88..d635797bab 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 e0159ab024..871edb93b8 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 634a1feec8..36c44a361f 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 ec46b6053b..2c98345031 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 589006c980..a6d8c8b4d9 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 054e87c812..e9c4e3c3a9 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 243504eb58..73d994396b 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 1b6113be30..afcb2731c2 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 59d122b16a..94323e8daf 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 3cd7716f35..20adf26f83 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 49226dcb51..996133e122 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 39d18e6d71..75e64e8e03 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 1962120993..60e80f9387 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 21da9a4d6c..d5f286a4e3 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 6ae0e5b0d8..c42419fac9 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 55f08926f8..184c0a4608 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 e13c4c50d2..dd726fc421 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 cc5a884934..7866184299 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 c4ec37f6fd..f4cae01a1f 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 b66e704a73..95e2eb37d9 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 6ff608b53e..75042ca6ec 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 bde538b1e3..ff8b07cd60 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 685ec6983a..e91e157f7e 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 ab0696fac5..d2f8ebe784 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 1af9950866..02d657b2fe 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 dbc3b9dbc1..2e6605f9f0 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 d70c3d44c0..be0767213e 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 9ec782d773..22a6b2424c 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 3070fd607c..972e280ad6 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 627aeba3a0..074c9afee7 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 5e26115865..a3060909ca 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 bedfc7b3d8..8a39a0c98b 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 ca2de4c87a..ce3a6ebd3b 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 653420f739..207e9c0654 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 4f9cd7618b..947bac84c9 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 28f496c22a..77a3244014 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 d9e25dd5f9..b183ab6b85 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 112a044df0..a9a3f61a47 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 76da30fc35..8f2f0acb8c 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 f6e7d08a00..d7580546b2 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 c5f5d2cef6..ea9c893261 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 c27f0f086c..0e48d148c6 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 e633bcf752..3a7d844650 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 694d457872..0c86a8ef1c 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 53aef6858c..dded60f42c 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 d4e47ed95e..931405104f 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 2e95739124..212655dd57 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 b0ee382864..42d294d6ad 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 039bd58389..c6b1f4fc35 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 586d627a0f..fe16f5163a 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 967c8fd56a..a3014e3e6a 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 65b5cc38ca..6d72f6ba12 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 ad15a412f9..44c8367eee 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 f0c3aef3c2..21f68c2696 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 7fd028c831..8c4c533324 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 9f876b4912..a47c940c2b 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 27be968bcf..fbab9251ee 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 32368a6d79..a9bd1cc549 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 c1df9210d9..77e905180c 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 f511700d81..c1c045a85f 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 5522021bb6..939cc87446 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 a0a650654d..ca4cee3d36 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 1fb7b56462..57c42b6da6 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 fe38f6f0ee..c3e4e9bc7d 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 aa8a94af35..f7a479e9be 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 309c001202..cf0f376ca5 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 03995482fa..692c245c16 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 1f6c9cd171..8e16a4a2d2 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 eb4f6e7422..c75a172977 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 d0d8b616e2..e50d86464e 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 65508b9d29..777f54525d 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 e49d7e54c2..e90648834a 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 cd39230c46..d74f44b43d 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 3ce4502cb5..170096b790 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 f1f35395f0..9973398771 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 c48d57431e..a11a6c9507 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 f9c3741eae..ad75b414f9 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 c48d57431e..a11a6c9507 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 090c65b9a3..9b903698f9 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 a31dd18fac..9dbf3a06b1 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 6feba629dc..b9dd0fb7c8 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 1653ecb883..c21611add9 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 005d6b6bf7..1a0c95e7b5 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 8120ca316f..37a5ddecfa 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 e3ca4f8e61..107d23f7dc 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 d3b3b1cd43..6a8c4f10d4 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 cd770ffe34..dc9b5b74e9 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 5c9f7c693d..da42f18dd1 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 c3f297da72..e92df216f5 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 1948550ed8..bbb001f165 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 c765c01767..6de47fef8f 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 d7033caa12..b306ffb692 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 190a27fe89..45b59cfd4d 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 5391f478c5..caec382238 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 e9e216978b..4c1e0b961b 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 26879dd6fe..a93b7712b0 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 a1ad901ef4..8d1f9d60b7 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 208835044d..e31c5da224 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 b3347e6e20..cddbdd3cb0 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 ccc917c086..f8d6867638 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 53c222212f..13b28ce4b7 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 043660b41d..7dc476b172 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 ee804ad10c..7bddfed1ab 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 18b6a22d4f..8ddbd87a3f 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 de47b1e394..e1dd8981d1 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 cb59778021..99cc1c57d7 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 5e12f51dc3..670b08ace0 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 c4256275df..6d9ecc8b7b 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 e418c12a7c..451c23ae03 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 ab34cead73..e46f313a30 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 d1f3401049..bc9566fdba 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 528fb142bf..336041f9c9 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 dc0fb0afbc..41311a389d 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 a8d7b78d0b..da703a12ad 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 fc8f617e61..63951daa61 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 6e33513d04..7ccc2ae3a2 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 73be89f8b3..0837c6be66 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 e87730a625..f6b405c1c7 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 009d8fb79f..9cab7b26ee 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 831621bb0f..811c9a7243 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 22a98f89f9..6256458ad8 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 e3cb4a324a..9d9d6f5b3f 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 65e5676707..aea2cd1f7a 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 17e2edc09d..7e3a10d6a1 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 155e5ddab3..e362ce913e 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 6f0277a02b..26e6a817a6 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 80ae56b536..ad53b5eb68 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 788bfbf13c..fdd790a107 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 7aeab90fc8..195a6d8414 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 9a10f58e7f..85585db1b2 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 4d4b0b38ad..02f31adab1 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 768282b912..ddb734b353 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 4e691ef770..d3b80bdc21 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 672324d217..0953b70c96 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 397cb0bd53..20bd837209 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 2f41e389cd..2a59796c5d 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 e30e04da24..0310a7c6bf 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 496b6bcbe9..cc81dcc873 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 68ad1e6b5f..622ba32c51 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 ae7ee86661..f75810e15e 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 bec99b27fe..42b4c3add5 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 cb0df26cc7..3fc2f1c847 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 ad3cc5637c..26f28865e2 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 1b90c51139..22a9dd43c5 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 c90959814c..7bc43b4fd8 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 91bff98741..7fb9fb0c21 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 1656e815e8..e9552edf91 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 8e6b39ca8c..a674411f9c 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 5f81d002f2..fbe116c23e 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 14b779b575..b568da406e 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 f57029b6d5..52e23f3672 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 7eb8d8351d..b59356d63b 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 a4dea02977..6bd2fc793e 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 a2644a6cba..0b041e49da 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 f1cbcbbd5b..c1487ec4ca 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 2058cc512c..b5f953c8e3 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 4b22d38dd7..dd4a7f7eb9 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 d90e8e0f54..ddff9679dd 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 2560434350..c10a9f832c 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 142b3f8bb0..11ebb6f812 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 d40ccbca08..daf305c586 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 150b0cac9c..c59077b375 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 f36c270e63..99e241fda9 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 22739276db..394ebeae08 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 a03244076c..d3b103ef8f 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 aa8390a73f..848661c874 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 639bad971e..ba95ee588a 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 00aeba8f8d..7cb5d1f390 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 4e9eb99574..a4b8306c04 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 baff6385f7..754c786f61 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 7ce5ff415b..9b08f22d1c 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 48366d857b..da7bb1bb8f 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 1751ccf259..f367fd30ca 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 30ec86d4f5..9fed548865 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 235bd9334f..4a270e537b 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 a2c40a1696..641d8132e9 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 3b902015a3..0cfc9a5bc3 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 2c91853c39..e482bf0ab2 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 8eb3fcf11b..76988f10e2 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 ff72021a81..da1b338521 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 0e4d3e4e8a..d35e509310 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 4255ea5aef..5df4783565 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 4eba4c5d7f..d05b937d9f 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 43de518f8d..78eb734c50 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 698aab108f..07bff15b30 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 56b7935bb8..d25dc7e62c 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 a3d2894ca9..eb00cfb265 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 c98363e188..2732ec772d 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 f52afdcfef..6892b00ea9 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 4045fff7a2..36dafc03c4 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 9a41c14271..c046f62931 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 d7d4b268c4..d9b4ab8fab 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 47f2628004..82e897b44d 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 b895be5805..35ba31b686 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 f79ab78495..b1a25f34b8 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 7ade4e5179..25a831a5cf 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 5265a84207..c7b1819b12 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 e3edf85b3f..305cbeaff8 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 954b548cbb..062cfd8c6c 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 1b137b5441..12ba501a7c 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 18bf62fe57..0bf01f12a5 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 67c7ea8e44..38541162b7 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 fc2ebc3b9a..ed9a751285 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 e4b0d54d83..4c4930e86f 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 2d6e7d8a56..0b9cf79c39 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 1717c38406..e56c7409d9 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 a40cd38ff8..effab15708 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 aa54b7f8a0..7cc4c89bb4 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 2a56e33435..0c3bf95545 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 2abec7d4d7..01295160d5 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 0da3209080..831c8c5fb7 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 af2bd959eb..12dfc8e790 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 05e7392589..bdc4f25ea6 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 e4565b1b25..57b961e702 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 eb9ea2b1da..69fad09a61 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 387d732003..71851c3d91 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 b351c52c5f..d32045069b 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 d9c0a6349a..cbd820a813 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 aaed296b1b..9b7a13ada8 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 8e9fb84ec5..243d06e4eb 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 fd2a6cb918..9ef3b0cc8c 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 a198d00a58..897d88a284 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 187b5565ae..aafc8bb6a0 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 e742876825..d3ea86506c 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 fcaf5ad1bb..6a78ba526f 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 aa4db527c0..c33fde8f94 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 7957fae6f7..87c0cca0e2 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 b151869b31..3e15ecf1df 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 c4ddd70878..88b4a40f8a 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 dc9c72f146..a06f23cae1 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 8559bcdba3..c4963e8089 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 9306ad4e26..ec80b0e014 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 8d7b66cf84..4fa94d704f 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 586fa32a59..4648d6a8d8 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 9031b3d72f..f69fc1f9ec 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 4e53ab30f7..eb39d80748 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 e52c16e6b8..b349636cc7 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 93154a1847..02506aef6e 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 6ab8e22594..d825557da9 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 62ca07c907..714195c1cd 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 bc63153a03..20936373ec 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 fc8c8d5845..0e101fb2ed 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 1e2edb384f..d034589210 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 c1edbd405e..0062ea8308 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 eb2eb717d1..9c5a68f81c 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 065b16eb79..b27cad046c 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 1ac7cc2f64..6a519d0228 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 2e1b9ff50f..ac2ddb78ef 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 631592b7e5..19bfa2cef2 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 96ce030207..630a0fb4c7 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 ce182cb383..68690af559 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 aca4d26a45..9012101ebf 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 ab6164c19d..b7ac7496a3 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 1f4d394a89..57a0bf8fda 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 37a7d31acd..318de176cf 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 549cd83304..c519c7778e 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 5d47eec4b3..b576a317d9 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 0fd60f0de3..7f0a1bc82f 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 72e017406b..df0afc92cf 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 723f3286fc..60b6419f16 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 ab164488cd..e25bd79a14 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 ab83fcd844..d697566ad8 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 4458d53ddf..741c04f62d 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 0000000000..ecb0636860 --- /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 0000000000..e1c021788e --- /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 335bd4d14c..0108e8b123 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 ec9a83016b..3553ec9909 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 ca656fbc5d..ccbf5dc3ce 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 975d183345..da35656560 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 26a5f38478..c92b1967ba 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 c8f7982a5e..d06e35c438 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 599c9ad4da..7f1e3bde97 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 2bb5ac0744..7dc3cd2938 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 47dbd8c1ce..f37ff90c6c 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 f93257017b..1fdbb440c8 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 bf8714b605..a66b17c7ac 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 91e75dcfb8..0cb6f112ea 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 9831b3023a..040c3d786b 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 a2e5f44606..467063de5a 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 11fdafc1c5..40ba0c022b 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 c8f6d43172..dabc57c1c0 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 ac2a45ac22..67da170999 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 282d4bdab4..076cc61753 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 1f21fc3380..7d5d962013 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 6a028eb26b..345b4019b5 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 8921d73bdf..98eb6f8de4 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 8fae1b4bb0..2c4a750b5f 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 0ffcb951da..ba9c298cd5 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 2224ab0d82..6b1b6c02e0 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 5b145255dd..76b0a81ceb 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 7ca5676697..021c3ae5d2 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 d838dfeece..2bb4e2fdda 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 93dd782327..fd54d36ce3 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 d0dd3091ba..b5710cd13b 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 6ccc8a6206..f388d80ff5 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 dcecb83055..458d17488a 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 0431db42fa..ba881f178f 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 e95fc2941d..6eeab135bc 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 d7198e883c..2795b321d8 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 32b76adc7e..9892b72214 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 8380910399..5636bc47b0 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 41a1e385ea..3a8a6ccccf 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 434848bf50..581009d461 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 5c028b7901..791a8b1167 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 3fe1a574e6..82cd829aaf 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 51def725cf..1f97ec54fc 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 72403c31a4..aa3ee18c39 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 6ba2f04cf6..b3dcbce4f7 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 f2d512138f..23833b625a 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 cd7ba714d8..edd0d44847 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 2860441107..3d4471891f 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 2fba708333..3b43da41a6 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 7ff1f077d6..d011a91297 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 e19415cc5a..a29fba4f98 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 59694d4adf..eef62491ec 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 3fa67abf76..8cb1428c54 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 ddd25477ac..4fcada8daf 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 be71a99554..be11d59795 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 bbb719f49d..df82d7e575 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 7f31e6781b..8f58cdbd8d 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 486d237f21..d675f8a1f7 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 fedf18ce9b..15a4df44a7 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 f9be9abeb6..cf426ce7a1 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 f2c9304814..24d684b1bd 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 9d0d70fa72..a5f659f060 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 624702e39d..5ab1d084dc 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 986a84ac6b..b58d7a836f 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 53439c3c8e..db08ceaee8 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 151ed8434f..d020050c77 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 5f36a890fa..26ef592a86 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 afc6b080f0..b7b103a9e4 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 d359fcf3a9..3c89dbee76 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 bf56366f14..0481a84b55 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 6792392148..d1937b59c7 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 8cad7a34c2..bdc8970337 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 ffb49d9508..02361f80a7 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 122e4b61f2..b319bbd3bd 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 d5f5f04255..8821f9342c 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 f4f98ae326..33949de20a 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 9871e267e6..dba6b54405 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 aaed296b1b..9b7a13ada8 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 f82ba1c772..536d3e01ab 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 dbb6240332..0a97e667e1 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 84a087ac73..36011596a3 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 46677e769f..c7d221f973 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 5e6f3e8d2b..ede308a548 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 330a8114a6..9c7830d793 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 0a1da31376..81887a6bbd 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 d4a50d8dd3..ce1d6fb332 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 b9cc3db414..206e5b062c 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 89c025414e..7b75ae8002 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 3af808265d..2056e8171e 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 5543b320dc..4c5857170a 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 d669db53fa..f9a6ff245b 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 4c5a7dc1fe..875de68cc2 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 86fb4d73e6..4f8af44d5e 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 fd97cba3a8..edd1cbee82 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 d19625cb92..0e7d677b21 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 91c2ec3bb2..ae44eaa9a4 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 2e56f1e966..ea344c2b48 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 eb1295786c..cd65971797 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 49c02ead1a..23f0036d84 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 36b2b526f1..d4d6ad0459 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 6440bf725d..23f0b19091 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 61f464f1fd..df3edc32b0 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 48cb6da689..a120d51e1c 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 8f5a130613..fe602ccbba 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 f288d2ddf8..2a65eddd88 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 751e4926a7..c84d30be76 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 c7dc7286ba..768cc884e1 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 9179a626df..148eac9c87 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 95fd984f07..3e62c44530 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 cd2b2fd14b..0d811cd84d 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 549ef0c2b3..ba5f2963fd 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 e47c2c693d..b07e5ee568 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 fab6053032..4905cfa49e 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 90952e1da4..cf15ba115c 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 2d2b319d46..eda15edb1b 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 3248b7132f..0c7ca06dff 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 9dfc159365..0c538c83b8 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 cb9a389569..7761bbc36f 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 ff9ed37fca..52588128a8 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 5df3040f49..da001b961c 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 6185b1a321..971ac2e649 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 43098c7e47..4fbc45c99e 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 7934c28e69..126b2b2595 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 3176c35261..0126d2299b 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 010533c949..d15b3f05c0 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 a41e5d261a..be80f92cfc 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 d9d29896fe..4e793fd392 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 988796e536..dd83829589 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 2b15663b41..ab7d258cf3 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 bd3ee37294..2afde37e22 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 47e5a46376..097a6fad20 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 81bf4696a1..977a04cd3e 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 960d15c467..a155471069 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 8e32bc46cc..13ec4d6737 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 c71da55cf6..2aa73d83e3 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 f3bbceb723..1397896d58 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 69bae15c91..7df3a37257 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 4097e876ff..f031f19663 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 0e3d512f85..20c8363862 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 f969dd3d73..63310eb07f 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 74d09b7c36..80c69246ca 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 dbb55aa6bb..e9fef1fbaf 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 31f69926ff..f4a2b78550 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 908b78b844..909ca0b773 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 56f54184b4..710be206ac 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 82fc3c676f..f5320ad5f3 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 664a0cf2a7..84f12e5ade 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 cb948210d2..e29721ef6f 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 afdb3aec59..aeba8ee708 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 838b10815b..9a68a5c69a 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 c4f6f68552..ca837169fc 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 33f11c175e..29146a5a7c 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 dc2d9a58aa..6fef82a654 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 99ae83830d..d867c80e5c 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 5abce7d219..e515ef3f0f 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 934a8070b7..655c13f136 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 5a59dd1a90..5034d45474 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 d354852951..5a52d3494e 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 00dbdade33..1df7d291a0 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 62f4888e93..96bdf81af8 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 6a263d112b..3ded328341 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 f83b753789..21b6461e95 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 07b393a04d..6bea966313 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 689a447f48..387435bbd0 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 335e509fd0..fec5c6115e 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 a2b898dfce..0a44f110b3 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 70225d42bf..12b8fe6a84 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 721b55e0d1..003aafab6b 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 2d848ce575..97ab609f19 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 055c56a137..4ad45a76b1 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 8630ca1033..b25b50cb11 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 6eb937c09b..6d0861a3e3 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 88582d3d25..dc9c90505b 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 56b4455477..2804e4bf7b 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 2c559fc8b8..7a0882878d 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 7a254eaa99..c0189d4b85 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 f07437ef2c..4ca3be00d1 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 5a6ab94b31..fab4ce7501 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 5abbd178f1..9f72fdeb34 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 9500d9e918..6847719cf3 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 9072ee39fe..2a92d6100a 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 1ee085c09b..8a9eed15f5 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 0e1c52f89e..2aa1fa73ef 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 838d37ca6c..be9055dc41 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 9d1f30d677..de3903d789 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 010c104da8..7993bb00f7 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 d50af58bb5..4a3d13c47d 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 71f759bb58..5cf4294d6b 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 4289682819..d0489f6b96 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 d144ccae24..a70e0e91d1 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 ef5c2a00e1..3a31c03792 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 b75cc380bd..45181ecd2f 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 d0d5881107..3473440ef4 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 e3d5297a2d..b6fd9eb7bf 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 460d3b712d..b09a75b69c 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 392f175a8c..7476022cc1 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 4886e788ab..7f7a4c5bd3 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 0e45bac75f..3b7ec032a2 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 d82d42477d..c9e69e4b07 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 15a2e6b0da..bff7a6a797 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 a01c610759..e33b6c8757 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 bb1ee2ff3a..2503a60f60 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 eca6f27a25..ccbfaa0d91 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 705df016aa..5446a99069 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 2e7ba5aff6..02497f821f 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 d2c58fbdab..90e3a1e82b 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 e2c14f58f2..68fdb60ff7 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 b5ab5f59d6..53d0de976f 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 ad9cfff7c8..dcccebb6aa 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 9a7aaad8e1..6814f18431 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 ff52e1e2a2..c000a94dc5 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 aaed296b1b..9b7a13ada8 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 2540cc27c5..18f3004ad2 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 4010eed4b5..8355ff207f 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 b2ed265751..faf45d8705 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 fd1501f7a0..b1cf554e52 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 c29b65a2e5..12a8d7ce50 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 8fe39a0d07..7198fa3e79 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 0b62ae8c3d..b5e3536c03 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 0600210c7a..83921e5a9b 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 629996cede..75e441fd7f 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 22178c0fad..7485b15b59 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 a450af73dc..a5b18ea717 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 1cf37780d8..93f81e85f0 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 3bea0f1ce6..58a6116394 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 fd63d4ea20..bdfc5c2e43 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 315c445e2f..f18985f4ef 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 55e0c74d4a..245643ca09 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 0be22e287f..4302d77dd5 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 05391e53b2..f746790870 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 208d37e323..a1a28ef3c6 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 2bb031cf83..79494a86c8 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 474c8dbe0c..8bd17e3382 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 57d1ba9876..9f1d7fd4e1 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 b6121e7f80..5f89729bf5 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 5c336bfecf..a51275cf0c 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 1aba7cdad9..3d51ffca46 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 b6b05a345a..258d6f91ca 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 67c7ea8e44..38541162b7 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 c8303c1fef..64989485c4 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 2dc28c4c78..099689f09a 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 a68314c9d7..75f0eaa5fa 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 f183768fd2..21bbf92621 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 7a10a6180c..00196a83a4 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 ea1cdf307e..91ae960b9d 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 bb82ef1b16..75e408669e 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 8ec836cee7..c770a61d7c 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 60ce62cbc1..f9c7b4e781 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 588a35a77a..aa8c74ff80 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 d5f205f1ce..2bc1436803 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 0bc7290ee5..1596dde636 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 1e14016fd9..18c5e04a71 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 4cd6a139c2..d861f01d6e 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 31f8c81cd4..4099d60729 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 210a723020..b61fefe3ce 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 e77ec11ef9..fbc9453e40 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 8c2d24bd3e..2b38e19538 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 ec1f567497..58b48aff86 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 61519168bb..76706a15cb 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 d4a50d8dd3..ce1d6fb332 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 86f41c7b3e..83316c7cc5 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 f2bce0106c..b6edafa3d3 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 488ca33f78..c5ea318737 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 9ee89d7396..e2188a5765 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 d047ca81bc..52d847f9f4 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 d1f5f94dbe..3c945cd6ce 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 5408df48c6..6e3f807c95 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 78e770c5fe..77f684b45d 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 f512408adc..7ec9b46838 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 8e18ab3e55..8ee57cec2f 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 4731a0de2b..a6bec8ecae 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 767c02c6dd..f590adc502 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 2cc2b7e006..b5802d62ac 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 3aa175ec2f..b2addfb641 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 b60b9aeaa9..5042c3998c 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 4979744ab1..eacf241ae7 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 6dc52777fb..427533e89d 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 ec2097e4c2..2551404905 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 d917521c80..8f9166a33c 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 6309cab0a1..23d6ff24ec 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 1e337c2c6d..4f52d233fa 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 f9eb0b300b..9a8d1b8ae0 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 d1f9427b17..e17300052f 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 01ec383133..d773d925d5 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 26ce3092c1..f4fda46f7b 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 7ea9d842fd..e89758156a 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 02ad086f04..64352f647a 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 19c23bd968..1d89dbdd61 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 af37cf2936..8eb2c90de3 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 06a10603ba..fa46b57d3f 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 88af52e99c..ab5718ff07 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 cd96900374..e48b0c7802 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 8fd71c5f1e..5900c3923c 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 a26ba82b0e..92120287b9 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 cd29e5a768..468ee2beba 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 093c0964d9..779726ce43 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 f83b753789..21b6461e95 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 095423b197..de408e8070 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 008d89c732..de2530b428 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 f83b753789..21b6461e95 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 aa0aa60c73..063fa31e41 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 f83b753789..21b6461e95 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 e949d4ddf2..5d870a48da 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 095423b197..de408e8070 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 008d89c732..de2530b428 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 c3f3c7e4f0..5ad91b1ff3 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 adf9794581..62b52d20a0 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 4dfe5ab07f..e38b674358 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 76bcff1c5f..c8a15b53dd 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 bf773d1129..262ab5f6ea 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 bf773d1129..262ab5f6ea 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 aa0aa60c73..063fa31e41 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 f83b753789..21b6461e95 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 7b8619b872..8528d6ff97 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 f83b753789..21b6461e95 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 4a042bc11e..d6d5bf0c58 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 9a805cf850..ec59ff507a 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 5e06606d7f..19ab0189b4 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 7897172f2a..52a2ae5cf7 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 f83b753789..21b6461e95 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 7d9472ab29..59d503416a 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 c91dac3e6a..5dc7ee43d5 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 c3d1071bbb..e0819a79a0 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 aee577ea40..4177f06764 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 800a080b53..9d7c6aa1de 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 79f45713d3..02dcae650a 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 81b931e382..fef2834d43 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 80aed3d83b..0c76f5acff 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 32f2d65e8e..21d57913c8 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 f83b753789..21b6461e95 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 b0d470e342..19e6919f9f 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 4d433a0bd2..b7035f21da 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 ffe2d50db6..93c4e857d2 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 9cd389c837..cbbf5eee1d 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 378dddf5a4..0635001612 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 e13551186f..899cccbc29 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 ccbf2c3690..0a8aacbe32 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 2754e31bb3..c96bad1edf 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 ae4edcd7f9..a6311fa92c 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 33cfb42b8c..d31aa8ac90 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 e998e2024d..9c7d256fb6 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 526971f69a..d5e21bbfe4 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 0f78e0f839..ebc709d783 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 a62e200a16..63946037cb 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 bad26d491b..64f59eec70 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 ff60e77953..59dbe96d59 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 1651ad7f0b..9905b2326f 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 ff852d85ba..9188400c52 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 da77dda5d1..c91b603916 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 ce6bf9aff2..53466462f5 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 523a073e77..c2049c444a 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 68d82fcb11..36078989c2 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 cc4b5cf7d9..7c7b1af18c 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 07b2ac83f7..d513f4744d 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 acb280e81b..24fb560d00 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 557d07e5d3..9186f52164 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 bcb8719dcb..f8ec3ed12b 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 67719e3076..52fc5c6e61 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 dbe138ef5d..387db9c772 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 d580fb82bb..06200209e1 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 983ae5b4f7..ec567e0e64 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 0cb8771e1d..9242953f0d 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 f786ea142b..feb19cd60a 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 930ed44337..acda27307c 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 c7fef8b1e4..1e7d86283c 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 65c1cc1044..3220b2edf4 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 b086d17ca1..ffcde05a31 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 52e804f52e..db6d61cf0e 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 2de945079b..8e3a1faba5 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 b7bd61cfe6..d078faa0e3 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 251574d156..b4476dd8a3 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 a2905af227..8da8ecdf1c 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 e7b88fb624..e2993b81bd 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 54ef00e502..c8f5d9560c 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 278e7f8c33..81be93229d 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 92ed4837e9..b1d91532c1 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 c2cee3b9e0..0af73fe709 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 3185321d6d..53836eb101 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 2258bfd53b..0e4daabd86 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 b7bd61cfe6..d078faa0e3 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 bf3cecaea2..ba75cd3ddc 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 b7bd61cfe6..d078faa0e3 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 cb359af23c..ed9f284247 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 9b9a5071f4..7a801cbcfb 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 ce72a7ca93..62ae51abf5 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 1ecc3cbc1b..54291e541c 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 c09aa7e9bb..6856e8f3e1 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 b5600befd6..c3ab07ad9e 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 ae94d7b0d2..92e3bd1e60 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 4365b5a3b2..60ed995491 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 88ddb96f06..41fb3d9151 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 d06321798f..f885333f93 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 6f2e7194fe..9663e33f61 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 47231df87a..11f082cd0b 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 c4646325d1..5189101478 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 f1d73bc933..ba634bd8c5 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 0d80295e03..5661bcbb8f 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 90f980761c..63a63b19bc 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 5852bdc528..d725ccc261 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 8436164bff..53765c02af 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 722fe5314d..8d63a94ad0 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 3f441feb2b..c406a9ec0e 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 9d54a71093..43b771e62e 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 54648bcbea..30eba6ca2c 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 3a820f594b..09bbde4943 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 b104d46c70..df878e3ce3 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 5f342d649b..62dd871d81 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 5e9206a5b8..f3581801cc 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 31103b90ec..43ea47210b 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 81c8d895dc..697d022af7 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 b7bd61cfe6..d078faa0e3 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 b4855b4a38..c47599fe50 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 7568d21055..0000000000 --- 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 bbb3476353..aa80596bb9 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 9bc7f42f2c..7e8097a9a5 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 ac67d302a1..dc02dfb114 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 1a28124886..f27399a042 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 af13a03ad6..03f050c0be 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 5616bfd3f4..51d1856808 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 2f109becf7..f76ba7ac7d 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 67afe7a058..47c9be8dad 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 cf3834ce38..b7c16788d4 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 65a17accbc..0000000000 --- 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 a1b41c52c7..0000000000 --- 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 3572571ad8..0000000000 --- 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 e206d70d85..0000000000 --- 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 4a98b0f813..0000000000 --- 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 3b312839bf..0000000000 --- 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 baa89dc6a7..0000000000 --- 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 905e8f1400..0000000000 --- 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 a65db31b37..0000000000 --- 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 05617026f9..0000000000 --- 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 c80f2198b5..0000000000 --- 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 0000000000..b265cbcd1a --- /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 0000000000..ea7f07c54c --- /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 0000000000..2f614d6f3a --- /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 0000000000..91d1dcc993 --- /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 0000000000..65687a5821 --- /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 0000000000..de4df8a5ca --- /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 0000000000..5a67b66bf8 --- /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 0000000000..1c17b5a436 --- /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 0000000000..2cf298a867 --- /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 0000000000..9887c1d54b --- /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 0000000000..e4bfafd4fb --- /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 0000000000..c911e2a3fc --- /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 0000000000..427d896fb2 --- /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 0000000000..f95c09f2b1 --- /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 0000000000..d33b0cc19d --- /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 0000000000..c82998e0d7 --- /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 0000000000..39de327e7b --- /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 0000000000..a77c28926c --- /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 0000000000..7cdd340866 --- /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 0000000000..b60a9678d6 --- /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 0000000000..b92071ca20 --- /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 0000000000..49808e5c44 --- /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 0000000000..b0fc236850 --- /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 0000000000..43577da66e --- /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 0000000000..945d06ee4e --- /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 0000000000..7754e9111b --- /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 0000000000..d892061c7a --- /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 0000000000..f8b00be0b9 --- /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 0000000000..b12bfd9423 --- /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 0000000000..a72e38a532 --- /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 0000000000..6b090a9773 --- /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 0000000000..9d79bd26e8 --- /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 0000000000..8f1be33cd3 --- /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 0000000000..2eb95f9b2d --- /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 0000000000..131b77179a --- /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 0000000000..c6aacfb157 --- /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 0000000000..f27090fd19 --- /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 0000000000..15f717e1ea --- /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 0000000000..0b1623ecac --- /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 0000000000..59e212edfa --- /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 0000000000..a93393acc4 --- /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 0000000000..551929f6bd --- /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 0000000000..67f91a14c0 --- /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 0000000000..8d5b3ef95e --- /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 0000000000..7b607e28b1 --- /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 0000000000..ec41a61e6e --- /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 0000000000..6a5690c376 --- /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 0000000000..cb360b8056 --- /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 0000000000..6aa0958702 --- /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 0000000000..d0ddf603fb --- /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 0000000000..dbbeeb9f71 --- /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 0000000000..844ada073c --- /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 0000000000..8f5f4b99b2 --- /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 0000000000..b07fe32bc1 --- /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 0000000000..2bc6508e7b --- /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 0000000000..07c1136da1 --- /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 0000000000..6e8a2a083c --- /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 0000000000..ac8306e197 --- /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 0000000000..4e27709af3 --- /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 0000000000..34cd1710aa --- /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 0000000000..5c252b3a20 --- /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 0000000000..581d95f920 --- /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 0000000000..16499358ea --- /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 0000000000..b1c5a90ba7 --- /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 0000000000..23039fd794 --- /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 0000000000..af4d4c2277 --- /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 0000000000..ed68f0861a --- /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 0000000000..8935c80d72 --- /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 0000000000..cc9b4453f7 --- /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 0000000000..0051d3fec5 --- /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 0000000000..02cec3af49 --- /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 0000000000..3c13d4f411 --- /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 0000000000..1e4da649ad --- /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 0000000000..c0fd584f75 --- /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 0000000000..233221805e --- /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 0000000000..ffb5440da1 --- /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 0000000000..08285484da --- /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 0000000000..2830c6c9ee --- /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 0000000000..575aab8489 --- /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 0000000000..e33662879f --- /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 0000000000..daec6f52ea --- /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 0000000000..cf7b2232e4 --- /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 0000000000..e62bd5c807 --- /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 0000000000..f46c1db9e0 --- /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 0000000000..384c29e508 --- /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 0000000000..c1cb8a275a --- /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 0000000000..e40348d6ab --- /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 0000000000..96a4a83a01 --- /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 18288789b4..2f1ee525f2 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 0000000000..9b95f1b397 --- /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 1bdc4bbc4a..b80ed8a311 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 0db7b0b85e..5c80af9517 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 6277de924b..d67ee2ffd2 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 fc78e3e624..7c240dbf3c 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 4306afa687..ae3698a895 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 892d0a11af..0000000000 --- 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 7bb54d6253..e6c096ee55 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 e5deb64387..2ac6e2b5c7 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 0000000000..895ed80f56 --- /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 6f982d8e89..c8fe57cf63 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 0712f73461..d63b7bb22c 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 35c7a338b9..1272852619 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 66f38ddaca..93945189a9 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 949238a79b..ac5f3b958b 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 11939feefd..362e8b74e9 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 c49eb9cd28..3cc4b131cf 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 0000000000..5ae6d0f28a --- /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 beff290eb0..61709a5001 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 b263cda725..7210fb034e 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 01f3f72e85..56d92c9411 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 0000000000..f2fe82d921 --- /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 083142ed3f..52a56d3130 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 0c094a53c1..63989f53cd 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 80e2d9d76b..9e4f12cd60 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 0000000000..8cb3a869ee --- /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 0000000000..6a915da1ba --- /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 0000000000..3fc16298c1 --- /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 a3872e0b94..e3022b50f2 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 b0ed8ae27a..a65c50f4d2 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 c865893fad..2eceb5ed89 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 28e517fd83..b5250cd6c3 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 f98c1d7426..c340da4058 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 3fc578ef37..e0a94fdfcd 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 0000000000..188369292c --- /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 2d8e473179..b6e94fba14 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 48dc1d2eba..7b33a4799d 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 01c6d25c9e..08ff525a1f 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 73350bb785..e9a1bfc266 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 c7cb44d240..598d61dc2f 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 d4afdb867f..ee8208773a 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 2cce610d94..f1f6bab542 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 3e94a3a6bf..eba664730f 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 4a72e167f0..4637120ab5 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 25ace0905b..7f665b1b9f 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 53440db617..e311dc2470 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 7285030c0c..8fe83224bb 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 d9d4bc641b..e41e807bef 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 65e17e35b5..ad20d7a30e 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 05fde7e43d..2e89b35495 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 58a477d92b..86f445cc46 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 1e926d2f57..06acf1f9b2 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 4717afb8f8..b553a4ac5e 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 54ae384433..e3ca0a08c2 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 357af37ae5..3a045031aa 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 0de9cdeaf2..4de12176ca 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 4a1e51310b..8058d0c983 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 893fa87531..4cf65f35c1 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 c2ce4f9981..6d9ae9f4a1 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 eabb1feb82..808af55ebb 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 0000000000..44327f263f --- /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 6ddcbb51b2..8207e2c67f 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 c34cf370af..1ef35c1b06 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 de510bcf01..2f4e12ecde 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 6f83604d38..35f91ada5b 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 274cade5b0..81cedaa956 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 c172657f4d..a5c1da6a84 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 67d969baad..fafc8dac5a 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 a9c49f7fd6..b94ed1befb 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 21c885eebc..0a7b8fedd4 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 ad564d4799..540155065d 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 44980842ea..e697f6cff6 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 1b09bc8f69..73b41d049c 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 c868841a12..eed1f1630f 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 df3378545e..d987901054 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 eb93274dd3..69f6f98a70 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 63a7d51539..09714f9e0c 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 0e2ee7c140..39ebc3dead 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 0000000000..728cc823fd --- /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 0fa76b2fc6..d7c2348a63 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 93288c3b05..f59a955683 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 824573e905..4e8b5e8227 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 2f8c7e1a55..c134377ad7 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 e8c868861c..5a22b4bac0 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 5ec2f22d7a..bdac3b6fdb 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 7362b02ca2..8843d8a276 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 9533c38bd8..98832d175c 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 b6d2e21eeb..2d09a04d2c 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 4e0f2c3559..be16d707ba 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 4f5231a767..3b2e357b71 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 da20eb8763..6c2178ad9a 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 f429ff7519..6a48fd4681 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 6b1410a56a..df34c9c37b 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 417a93bd3f..f82c6b4bf5 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 979a244197..a3d6b90bd2 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 b89a99ad14..ff094bcc29 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 7bcafc6a10..0f46cb2f47 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 3d85af716c..61988723d9 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 a00a630740..c2a81dd5ac 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 0000000000..ccdbed2542 --- /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 645c9830c2..b8e6f22bfa 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 e049c46ed1..22b8ba1f5e 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 0000000000..442d8251b3 --- /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 e5cb5b25f0..56687c986a 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 d03d0adf0d..d8a10b5702 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 0000000000..1c7b4c6c8e --- /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 cf9b15d3e6..bcdda0c379 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 4e2a496f20..3fbc932744 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 4dc4af4e14..3d8d0a4133 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 0000000000..cffa0003ed --- /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 e90674a449..5d0ee33b83 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 d9648477d3..71e073977c 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 0000000000..f2cc5e638b --- /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 0000000000..480d85399a --- /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 0000000000..de36b10852 --- /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 0000000000..111e4ea16d --- /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 57d9d69208..1939aabac6 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 05c79ea2da..76ebd591c5 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 d3bc2e571c..ab6aef18b9 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 7bab8b56c2..c281f99872 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 8e1f4b61b5..694fcddccc 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 d8c5e65ffc..11c03edada 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 cf6ffb4115..9b4730093b 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 b625e3b8a9..8bfb3ac5d0 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 97faacfb91..a8e1c69d20 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 f2c88b5f0f..e0b972158d 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 0408929b8f..9621714c74 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 0000000000..e09421e05e --- /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 f8cc4026f0..16d15950a2 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 e125f47717..b5f3c263e7 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 18ea0bf264..444341dc19 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 0d4fd85d3e..80ed5dca66 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 51ae61486c..33c151e490 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 8628c4c5fb..fb7e028a8b 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 ed1c59ebeb..09e4769e90 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 c6e60efb27..c00dc97c1c 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 5be03b6972..b56c6f5fa9 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 62eb8f1158..476846f5f2 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 ab4fce8214..eeb055b2c8 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 f8f693a97f..71d1e3e009 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 01b6158873..fc84241d75 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 8d7cfeb221..489eb5d707 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 eb4b2253ff..938e6de166 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 33e518c8b5..09e49e02c0 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 91809528a7..a3d454f3aa 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 600fb8eabf..91adc0afd2 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 87ccd8ed0b..a4769927a0 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 e7a8d039c4..c46038ee9f 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 78ec5acd85..884769d724 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 5668f18436..9b098dd8cd 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 294d6de7f2..47f0f93cb9 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 88384a12d4..677b6173b4 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 b049e43766..c4a3e4365a 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 b5aa0a0afc..60b246f878 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 9c69d41f1f..3e516b53a1 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 bff57cfc20..bdea985a18 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 d8b1e4ed89..02b25eb98a 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 8b332dcfaf..5cab272479 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 9025f01aac..c7d8670b16 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 874515958c..71cb75669a 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 9b23d739b8..93ab924a50 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 492f7597e3..d7461539d9 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 23c2993804..ee8f271b19 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 638f846b98..7b6e0c3ea3 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 0d852a57fd..eea173500d 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 fa4c383346..f4d630145f 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 10a0a9addf..fa27c085ca 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 c202af9397..8daa8823c8 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 e3d2b3522a..73830707b1 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 36a9fecaad..178b14348e 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 593c6dca93..57e44e8594 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 40bc6c2fbe..7158874c11 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 0ca43e4fc1..481995ff80 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 212cd184b8..112e71e87f 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 c6b16cfce5..2c0b4727d2 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 cb0226a3b0..34d72c1ac7 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 0000000000..6eee6cfc94 --- /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 f6a2f8456d..cdc2a0e3cd 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 cff684812b..1fc0b80028 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 b0f5009e19..f7642e3b28 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 037170163a..f5c855fe33 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 b20ba9447a..769d293f5d 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 dc377e0f99..74412fd42b 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 61f8e7e27b..8ae4dca9c7 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 237c1a11d5..d916ccdfb4 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 f16db161ea..f592c5f034 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 7cf78b4b08..6e45b8485f 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 b50be0e804..e49fa25e34 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 7bc49cb36c..26b9905bd5 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 5d8e5753d6..50de32adad 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 447f449ce3..b85d4d70a6 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 1d82181071..14a811a52d 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 79d57adb8b..bef023e9f3 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 ff3cc423fe..7d66899ac7 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 5e5d9d71cf..45fe8f3518 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 2778aa5243..7b668e0b89 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 e31f3aae95..be282d2026 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 028ffac725..e238057b1f 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 e1e1900604..85e3614c08 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 887b1c67b3..7756253ab7 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 289733dca5..1013ee3685 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 7a1b0b07f7..4850c8bf2d 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 e950d30b39..fb96baffe5 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 f106d57dd7..91a75720dc 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 b2ba612d4f..e628bffd36 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 ac2bb8ecb6..0adbe06e96 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 c65d724871..d0bc08457e 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 b5a28adf74..2fac052088 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 0f76aea2fa..2009fcfff1 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 f63f338ddc..d4e5676552 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 894f52cc2e..18bad9fd6a 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 152493db7b..7569a105aa 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 24ee7b0add..465872eade 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 56a5034995..73f1351f8a 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 417be9cff9..8052361092 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 9f7ee2c0ae..0ba9f60254 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 6567ec33bd..3338368ad4 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 046adc8c67..61b61fd73c 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 dcdc0aaf3b..8f073716ba 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 8e10f5f604..fcef982fe2 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 f5a454d297..8c9f0bb7a6 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 424fb0ab79..4b0b78a73a 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 12602532a9..591799ab5b 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 7424985cfc..ab888f6757 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 0efd0ebc43..47dae29be0 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 9363489e45..ebfe35c18d 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 ae4c66ba8e..75d4983fef 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 53fcd6a045..65ef40c7f4 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 27df756f06..c77ca37898 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 914c78ea49..7e33f75e4f 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 ade91fb84f..9b1a160d4e 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 5f7ad278c9..dc708a618d 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 53644ffa67..c1aa0ce3e5 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 1ac17a98a9..e6ed2b46d2 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 4fdf6feda8..8231ec0c43 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 363a8c2c3a..04ff29d487 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 2c775d1445..0dafa4a057 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 82c6f87b0f..138878663c 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 313bf7e07b..6a2025649b 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 f282c4a536..e384db0665 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 996edb64e5..36ed7f88bc 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 093666ee22..c0590772bf 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 45459a388c..44450fd63b 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 2df4892bfe..e714943222 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 3c4f48c27f..3780c698f0 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 a9e6f613ac..161a528e01 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 1e95ab5ccf..9fd70b135f 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 925d4c433f..f204ab1617 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 26734aa097..038eb21dc8 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 3dd3968b49..c3703f9f6d 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 0000000000..2b8f9267a2 --- /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 1c81f34366..9be988d345 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 adfe752f80..dbd551873f 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 afb6f286e7..fdabee36d0 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 63ed8edeea..8ee2f0284e 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 411946f51c..72e4fcd8d1 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 bc15cf1e13..289119db74 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 08f0ad0e05..065a318ec0 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 3e4e4fee2c..cfc9dd40fa 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 fd69214980..c9e3bcac20 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 438e503eca..5853d92fe3 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 c5c9b4c724..6233a6b7b1 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 4a3b5b673d..154c7e8943 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 c60dba286f..505aa22382 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 e8939c7fa1..e639c041cb 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 5c6f646cae..e56e2612bd 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 7bcb8d92a4..126cda4fd1 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 e9b16bfcc2..c264140e94 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 ce42063da7..9f18e3566c 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 d0ee5a0def..d775693351 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 c9156de133..b889aa551e 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 3ecd76e4fe..e3a86a587c 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 7ce6810635..de64313bbf 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 97cf3088b9..9c2714dc71 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 9c6ddaefad..9bd5db6622 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 3bbe751eba..271b99dfec 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 a7edaee188..c5a598ffb5 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 3407c2523c..f065e52115 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 592fb7bb97..3ed577c62a 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 68ba70d2df..5c3ecde2e2 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 620720b399..9ae61f396a 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 2cb08bee17..424b87f8c8 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 e8b7e1a5b1..f57094db6c 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 60b5d86967..ef50c111e5 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 c3594b24fd..0068068791 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 239c161d5e..5efc38c437 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 4ed1469d5d..aad42ae754 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 bd2d06aa02..c18339bdbb 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 9867023f6e..7b0a0ab55d 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 570e85bb7b..620e4fbf62 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 f8f94da37f..cd92f84550 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 1ccdf3213d..b5f08199d2 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 0000000000..74b1ef923c --- /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 0000000000..c2d8e452de --- /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 0000000000..28185338f7 --- /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 0000000000..b0d2937a03 --- /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 0000000000..dd46e5ec81 --- /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 0000000000..a96d4fd636 --- /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 0000000000..c306514e6b --- /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 0000000000..02512340ad --- /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 0000000000..f68f391269 --- /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 0000000000..f8a6901e01 --- /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 0000000000..9d7ab9eae8 --- /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 0000000000..8fef7b0d41 --- /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 0000000000..a610ec0901 --- /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 0000000000..8353d97944 --- /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 0000000000..d73ea8a08a --- /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 0000000000..5d7958b729 --- /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 0000000000..2c156ee04c --- /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 0000000000..6b6da12249 --- /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 0000000000..f3df06bb54 --- /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 0000000000..351b22e047 --- /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 0000000000..6b5cba7867 --- /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 0000000000..7a5413c80d --- /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 0000000000..24fdbf4f61 --- /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 0000000000..462c40d1a7 --- /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 0000000000..2cf3e3c278 --- /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 0000000000..14256e1f49 --- /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 0000000000..52f01cde2a --- /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 0000000000..d6ce987b2d --- /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 0000000000..da4ec8cbb0 --- /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 0000000000..dda4c7dc80 --- /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 0000000000..4e810ccb85 --- /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 0000000000..25f8cce5fd --- /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 0000000000..beeaaa9874 --- /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 0000000000..0ae6710e4d --- /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 0000000000..f4ae08f187 --- /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 0000000000..8af587a5b5 --- /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 0000000000..ab66c82031 --- /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 0000000000..d544de4050 --- /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 0000000000..cfc14f5bd1 --- /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 0000000000..8a701d53e0 --- /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 0000000000..6e3f0599b9 --- /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 0000000000..4deea9bf96 --- /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 0000000000..304be14a0a --- /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 0000000000..22e92fd4bd --- /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 0000000000..cad890eb27 --- /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 0000000000..938717148f --- /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 0000000000..89f4216792 --- /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 0000000000..45f2720677 --- /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 0000000000..bb5c88b827 --- /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 0000000000..92e7ec4490 --- /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 0000000000..f530b03211 --- /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 0000000000..4da3530787 --- /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 0000000000..4e93766e70 --- /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 0000000000..fd9cfb946f --- /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 0000000000..edcb3befa4 --- /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 0000000000..ace8c0f500 --- /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 0000000000..ce6865ec5d --- /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 0000000000..26407dcc93 --- /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 0000000000..cf9d3f384e --- /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 0000000000..039d1921a9 --- /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 0000000000..7f9b866047 --- /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 0000000000..e0095082ab --- /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 0000000000..22ffb11709 --- /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 0000000000..f4717f7957 --- /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 0000000000..9bfc8cbcd4 --- /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 0000000000..5ce84e6611 --- /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 0000000000..98d8c55dcb --- /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 0000000000..878b446df8 --- /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 0000000000..ae678018b9 --- /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 0000000000..29445f1aa9 --- /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 0000000000..0a9f7e13f2 --- /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 0000000000..bdfac28f11 --- /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 0000000000..edd4513ff8 --- /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 0000000000..d9ee5bb74c --- /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 0000000000..de3a4d70f1 --- /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 0000000000..41ed111374 --- /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 0000000000..16cde71afd --- /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 0000000000..f947878559 --- /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 0000000000..bc9cedb877 --- /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 0000000000..b4a0f2387b --- /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 0000000000..1f3543dcf0 --- /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 0000000000..673b379291 --- /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 0000000000..b11c3da0f6 --- /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 0000000000..ce4e3961e6 --- /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 0000000000..45429a4aff --- /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 0000000000..b47a752bbf --- /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 0000000000..75a80185d5 --- /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 0000000000..83caa4802f --- /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 0000000000..d7892395c7 --- /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 0000000000..0dea26c13b --- /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 0000000000..9fdb1bc353 --- /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 0000000000..f488d598fe --- /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 0000000000..30f58d69c9 --- /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 0000000000..303ae57f57 --- /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 0000000000..b400d66eea --- /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 0000000000..8a60e33165 --- /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 0000000000..b6e60dfb17 --- /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 0000000000..a7b2e2aba9 --- /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 0000000000..013e76dde9 --- /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 0000000000..ac469d7cdc --- /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 0000000000..4ea044d140 --- /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 0000000000..29b17c1df3 --- /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 0000000000..985b71ab3c --- /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 0000000000..90949567ec --- /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 0000000000..5fda09bd84 --- /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 0000000000..06b1684163 --- /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 0000000000..f90c5e4092 --- /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 0000000000..0a5263fab7 --- /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 0000000000..53f7aba31f --- /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 0000000000..7e924e641a --- /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 0000000000..e50a7e4d54 --- /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 0000000000..2b7b047f18 --- /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 0000000000..a7930d8609 --- /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 0000000000..55eb156e60 --- /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 0000000000..22faceb79c --- /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 0000000000..368a3e0c0a --- /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 0000000000..fb3a05425d --- /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 0000000000..7eda447a10 --- /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 0000000000..e3a544ce29 --- /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 0000000000..5b0f06706b --- /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 0000000000..51a0ba7ebe --- /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 0000000000..f8d7ee2c22 --- /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 0000000000..d11fb7d298 --- /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 0000000000..bf65f319de --- /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 0000000000..858c0ff8c4 --- /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 0000000000..6adbe3dba4 --- /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 0000000000..7321e4ce9a --- /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 0000000000..35a96bfb3a --- /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 0000000000..6fd487202d --- /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 0000000000..221e1d1004 --- /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 0000000000..200eed0159 --- /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 0000000000..1969f61910 --- /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 0000000000..5d341014f2 --- /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 0000000000..00edfcde04 --- /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 0000000000..17dad28221 --- /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 0000000000..56a732e75e --- /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 0000000000..28060cd1c2 --- /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 0000000000..9d20ca8d2e --- /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 0000000000..653fc792d5 --- /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 0000000000..eedf5c6210 --- /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 0000000000..c9c241f9a3 --- /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 0000000000..d0d9ce8572 --- /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 0000000000..f5a7197155 --- /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 0000000000..0538fcc698 --- /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 0000000000..3e5de52682 --- /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 0000000000..fd7c2b60b8 --- /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 0000000000..6792a8401a --- /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 0000000000..1894e806a0 --- /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 0000000000..ac64ed08f5 --- /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 0000000000..9d09f0c13c --- /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 0000000000..b87a6e51c6 --- /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 0000000000..3715febd2d --- /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 0000000000..e24f7fe44c --- /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 0000000000..76a27f027b --- /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 0000000000..c2b6aa40e4 --- /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 0000000000..338b06eebb --- /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 0000000000..a38b0c5b77 --- /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 0000000000..442d8c8b95 --- /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 0000000000..814fcb365f --- /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 0000000000..db4774035a --- /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 0000000000..d4084592e9 --- /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 0000000000..67f50439ef --- /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 0000000000..fd1150f463 --- /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 0000000000..1dde5f0986 --- /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 0000000000..6d82160452 --- /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 0000000000..0ef0930f0a --- /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 0000000000..8bacee1aa7 --- /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 0000000000..0bb3bde4e6 --- /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 0000000000..07319d16c4 --- /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 0000000000..729354c184 --- /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 0000000000..a3f26cf950 --- /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 0000000000..f1b510a1d4 --- /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 0000000000..22a924c9ba --- /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 0000000000..3be8131490 --- /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 0000000000..89503bb66b --- /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 0000000000..51dd870a1f --- /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 0000000000..3f8a7399cd --- /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 0000000000..b25d44f453 --- /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 0000000000..6b6f926822 --- /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 0000000000..3558767055 --- /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 0000000000..9ccd2b3c40 --- /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 0000000000..b07bc5b035 --- /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 0000000000..f647624e24 --- /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 0000000000..6d4e15e519 --- /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 0000000000..6dd3b8a659 --- /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 0000000000..a428661d59 --- /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 0000000000..cbed05c34e --- /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 0000000000..a1f006c9b5 --- /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 0000000000..ea9bd977aa --- /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 0000000000..03cc83453d --- /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 0000000000..27b8852eb9 --- /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 0000000000..3ec1dbd058 --- /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 0000000000..450952f69d --- /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 0000000000..e67bca990a --- /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 0000000000..50b023f899 --- /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 0000000000..9961b9028e --- /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 0000000000..a52670f401 --- /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 0000000000..0cd60b2ae4 --- /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 0000000000..354c14cf17 --- /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 0000000000..3cb65b07bf --- /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 0000000000..19def883b4 --- /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 0000000000..b4f693fbe9 --- /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 0000000000..60b502a1e2 --- /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 0000000000..a1ae573cdf --- /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 0000000000..13a9593f17 --- /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 0000000000..cdcb7e3f61 --- /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 0000000000..9ee1d39568 --- /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 0000000000..5a1779cfb8 --- /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 0000000000..09d0c033f9 --- /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 0000000000..fd913a1050 --- /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 0000000000..a62d100245 --- /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 0000000000..d899208911 --- /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 0000000000..50bdcdb81b --- /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 0000000000..f9b95d4673 --- /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 0000000000..a91c1c26ec --- /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 0000000000..3a199a484c --- /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 0000000000..222ffbb309 --- /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 0000000000..c851acc3f7 --- /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 0000000000..f51a8cba80 --- /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 0000000000..e14eb8a860 --- /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 0000000000..32d6313ec2 --- /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 0000000000..0dcc6c4765 --- /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 0000000000..bad8753838 --- /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 0000000000..0bfa04a85b --- /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 0000000000..0f782a9c98 --- /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 0000000000..3e255fa5fb --- /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 0000000000..28b2a37f22 --- /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 0000000000..75d7bf006c --- /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 0000000000..f99fe44750 --- /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 0000000000..37e2edf09d --- /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 0000000000..8a840cef62 --- /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 0000000000..a2e2f61c76 --- /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 0000000000..6b46e34259 --- /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 0000000000..ec976ed0e5 --- /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 0000000000..32d4e402a8 --- /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 0000000000..c6328bc46e --- /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 0000000000..f2b9d48842 --- /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 0000000000..69d9c90129 --- /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 0000000000..37e7ed7502 --- /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 0000000000..674333e079 --- /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 0000000000..d389480e14 --- /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 0000000000..f10d37432f --- /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 0000000000..0ef701f9c2 --- /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 0000000000..d4a5da1aea --- /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 0000000000..b1e038b5da --- /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 0000000000..3ed5eb713e --- /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 0000000000..0dfee3ad39 --- /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 0000000000..46aa380a37 --- /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 0000000000..58ff6f1fd1 --- /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 0000000000..5cbe60c144 --- /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 0000000000..ceb48e0c20 --- /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 0000000000..f7ebf3663e --- /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 0000000000..c847397dbb --- /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 0000000000..b0233b41ea --- /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 0000000000..3436a19034 --- /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 0000000000..faed123a7f --- /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 0000000000..695b53d604 --- /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 0000000000..8ebd8c2a6d --- /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 0000000000..c628fa3e4b --- /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 0000000000..2712ae35d9 --- /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 0000000000..a8ec69f116 --- /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 0000000000..c03dab7845 --- /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 0000000000..8df337a3a2 --- /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 0000000000..77e11ff632 --- /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 0000000000..ccfb0de98f --- /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 0000000000..51cec8cff6 --- /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 0000000000..8d5347a721 --- /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 0000000000..ccc8b3cfa6 --- /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 0000000000..7df285af46 --- /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 0000000000..2e6136414f --- /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 0000000000..32d4e402a8 --- /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 0000000000..aebd6d484e --- /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 0000000000..4a882c1259 --- /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 0000000000..e45a6be64c --- /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 0000000000..b4430b33d1 --- /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 0000000000..ca6816d166 --- /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 0000000000..2f3b947972 --- /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 0000000000..e8f90132b5 --- /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 0000000000..a11ff72685 --- /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 0000000000..aeb56d3204 --- /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 0000000000..be649c11da --- /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 0000000000..26cbf37e15 --- /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 0000000000..6488ece90b --- /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 0000000000..aeac8a7ba1 --- /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 0000000000..709d7915d9 --- /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 0000000000..ef17a4ce55 --- /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 0000000000..c713864c05 --- /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 0000000000..6e8e8b230d --- /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 0000000000..d75d4601d0 --- /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 0000000000..52f9761e58 --- /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 0000000000..9e4b6d29d6 --- /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 0000000000..83d9e8f933 --- /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 0000000000..4c7f7841af --- /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 0000000000..1e69086fb2 --- /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 0000000000..dc5bc5ee1f --- /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 0000000000..abcd54640a --- /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 0000000000..d0e429b5cb --- /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 0000000000..dc5bc5ee1f --- /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 0000000000..6f00d5cc0d --- /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 0000000000..2d30dc11c7 --- /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 0000000000..8f86ab9231 --- /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 0000000000..8549b39b4c --- /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 0000000000..6dfbaab34d --- /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 0000000000..49edf1e89b --- /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 0000000000..8e8a555dfb --- /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 0000000000..c0727c4078 --- /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 0000000000..9648c9c71b --- /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 0000000000..571f1b1bea --- /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 0000000000..c2e42a5774 --- /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 0000000000..9e06198c34 --- /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 0000000000..2761c3d36a --- /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 0000000000..d5053437b6 --- /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 0000000000..bddc84c855 --- /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 0000000000..5181c7a491 --- /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 0000000000..131da32e6e --- /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 0000000000..20cc6a1050 --- /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 0000000000..5821007a01 --- /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 0000000000..5ef389725c --- /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 0000000000..0da62f65d2 --- /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 0000000000..be3d1f615d --- /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 0000000000..b772a2ab2a --- /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 0000000000..92bd020ab0 --- /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 0000000000..04e2b2d93f --- /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 4559e38f4b..78762ba068 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 6cc59eb3a1..d606a8a0b4 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 1ff858b834..cf3068d5ff 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 6557fa8613..6c387d7818 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 24d0eaa385..7579c21f70 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 1c2176a064..8d8e2caa03 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. | | | -- GitLab