From 042df04833a3efd546277aa29b04d143a04d40ff Mon Sep 17 00:00:00 2001 From: Kevin Cristiano <kcristiano@kcristiano.com> Date: Thu, 8 Jul 2021 08:01:31 -0400 Subject: [PATCH] civicrm release --- .github/FUNDING.yml | 1 + civicrm.php | 4 +- civicrm/CRM/ACL/BAO/ACLEntityRole.php | 78 + civicrm/CRM/ACL/BAO/EntityRole.php | 69 +- civicrm/CRM/ACL/DAO/ACLEntityRole.php | 273 + civicrm/CRM/ACL/DAO/EntityRole.php | 263 +- civicrm/CRM/Activity/BAO/Activity.php | 6 +- civicrm/CRM/Activity/Import/Parser.php | 2 +- .../CRM/Activity/Import/Parser/Activity.php | 2 +- civicrm/CRM/Activity/Selector/Activity.php | 2 +- civicrm/CRM/Activity/Selector/Search.php | 2 +- civicrm/CRM/Admin/Form/ContactType.php | 2 +- civicrm/CRM/Admin/Form/Generic.php | 6 - civicrm/CRM/Admin/Form/Preferences.php | 3 - civicrm/CRM/Admin/Form/PreferencesDate.php | 3 - civicrm/CRM/Admin/Form/Setting.php | 6 - .../CRM/Admin/Form/Setting/Localization.php | 4 +- civicrm/CRM/Admin/Form/Setting/Search.php | 1 + civicrm/CRM/Admin/Form/Setting/UF.php | 6 +- civicrm/CRM/Admin/Form/SettingTrait.php | 25 +- civicrm/CRM/Admin/Page/MessageTemplates.php | 2 +- civicrm/CRM/Admin/Page/ScheduleReminders.php | 38 +- civicrm/CRM/Api4/Services.php | 13 +- civicrm/CRM/Batch/BAO/Batch.php | 2 +- civicrm/CRM/Batch/Form/Entry.php | 323 +- civicrm/CRM/Campaign/BAO/Petition.php | 2 + civicrm/CRM/Campaign/Form/Campaign.php | 2 +- civicrm/CRM/Campaign/Selector/Search.php | 2 +- civicrm/CRM/Case/BAO/Case.php | 6 +- civicrm/CRM/Case/Selector/Search.php | 2 +- civicrm/CRM/Contact/AccessTrait.php | 44 + civicrm/CRM/Contact/BAO/Contact.php | 71 + .../CRM/Contact/BAO/Contact/Permission.php | 43 +- civicrm/CRM/Contact/BAO/Contact/Utils.php | 4 +- civicrm/CRM/Contact/BAO/Group.php | 4 +- civicrm/CRM/Contact/BAO/GroupContactCache.php | 357 +- civicrm/CRM/Contact/BAO/Query.php | 9 +- civicrm/CRM/Contact/BAO/Relationship.php | 19 + civicrm/CRM/Contact/BAO/RelationshipCache.php | 4 +- civicrm/CRM/Contact/BAO/SavedSearch.php | 2 + civicrm/CRM/Contact/DAO/Relationship.php | 12 +- civicrm/CRM/Contact/DAO/RelationshipCache.php | 13 +- civicrm/CRM/Contact/DAO/SavedSearch.php | 4 +- civicrm/CRM/Contact/Form/Contact.php | 2 +- civicrm/CRM/Contact/Form/DedupeRules.php | 14 +- .../Form/Edit/CommunicationPreferences.php | 7 +- .../Form/Inline/CommunicationPreferences.php | 7 +- civicrm/CRM/Contact/Form/Inline/Email.php | 12 +- civicrm/CRM/Contact/Form/Merge.php | 2 +- civicrm/CRM/Contact/Form/Search/Advanced.php | 2 +- .../Contact/Form/Search/Custom/FullText.php | 2 +- .../CRM/Contact/Form/Search/Custom/Group.php | 6 +- civicrm/CRM/Contact/Form/Task/Useradd.php | 23 +- civicrm/CRM/Contact/Import/Form/MapField.php | 2 +- civicrm/CRM/Contact/Import/Parser.php | 48 +- civicrm/CRM/Contact/Import/Parser/Contact.php | 53 +- civicrm/CRM/Contact/Page/AJAX.php | 4 +- civicrm/CRM/Contact/Page/DedupeException.php | 2 +- civicrm/CRM/Contact/Page/DedupeFind.php | 2 +- civicrm/CRM/Contact/Page/DedupeMerge.php | 2 +- civicrm/CRM/Contact/Page/DedupeRules.php | 8 +- civicrm/CRM/Contact/Page/ImageFile.php | 4 +- civicrm/CRM/Contact/Selector.php | 2 +- civicrm/CRM/Contact/Selector/Custom.php | 2 +- civicrm/CRM/Contact/Task.php | 134 +- civicrm/CRM/Contribute/BAO/Contribution.php | 252 +- .../CRM/Contribute/BAO/ContributionPage.php | 3 +- .../Contribute/Form/Contribution/Confirm.php | 278 +- .../CRM/Contribute/Import/Form/MapField.php | 2 +- civicrm/CRM/Contribute/Import/Parser.php | 2 +- .../Contribute/Import/Parser/Contribution.php | 2 +- .../CRM/Contribute/Page/ContributionPage.php | 2 +- .../CRM/Contribute/Page/ContributionRecur.php | 2 +- civicrm/CRM/Contribute/Page/Tab.php | 117 +- civicrm/CRM/Contribute/Page/UserDashboard.php | 9 +- civicrm/CRM/Contribute/Selector/Search.php | 2 +- civicrm/CRM/Core/BAO/ActionSchedule.php | 8 +- civicrm/CRM/Core/BAO/Address.php | 1 + civicrm/CRM/Core/BAO/Block.php | 5 +- civicrm/CRM/Core/BAO/CustomField.php | 42 +- civicrm/CRM/Core/BAO/CustomGroup.php | 17 + civicrm/CRM/Core/BAO/CustomValue.php | 59 +- civicrm/CRM/Core/BAO/CustomValueTable.php | 25 +- civicrm/CRM/Core/BAO/Dashboard.php | 5 +- civicrm/CRM/Core/BAO/Email.php | 22 + civicrm/CRM/Core/BAO/EntityTag.php | 1 + civicrm/CRM/Core/BAO/IM.php | 1 + civicrm/CRM/Core/BAO/Note.php | 1 + civicrm/CRM/Core/BAO/OpenID.php | 1 + civicrm/CRM/Core/BAO/Phone.php | 1 + civicrm/CRM/Core/BAO/RecurringEntity.php | 10 +- civicrm/CRM/Core/BAO/Setting.php | 2 +- civicrm/CRM/Core/BAO/Translation.php | 107 + civicrm/CRM/Core/BAO/UFGroup.php | 2 +- civicrm/CRM/Core/BAO/UFJoin.php | 11 + civicrm/CRM/Core/BAO/Website.php | 1 + civicrm/CRM/Core/CodeGen/GenerateData.php | 8 +- civicrm/CRM/Core/CodeGen/Specification.php | 8 +- civicrm/CRM/Core/Config.php | 12 - civicrm/CRM/Core/DAO.php | 139 +- civicrm/CRM/Core/DAO/AllCoreTables.data.php | 29 +- civicrm/CRM/Core/DAO/AllCoreTables.php | 19 +- civicrm/CRM/Core/DAO/CustomField.php | 6 +- civicrm/CRM/Core/DAO/CustomGroup.php | 3 +- civicrm/CRM/Core/DAO/Translation.php | 323 + civicrm/CRM/Core/DynamicFKAccessTrait.php | 47 + civicrm/CRM/Core/Form/RecurringEntity.php | 2 +- civicrm/CRM/Core/I18n/Schema.php | 4 +- civicrm/CRM/Core/Invoke.php | 7 +- civicrm/CRM/Core/ManagedEntities.php | 38 +- civicrm/CRM/Core/OptionValue.php | 2 +- civicrm/CRM/Core/Payment.php | 2 + civicrm/CRM/Core/Payment/AuthorizeNet.php | 89 +- civicrm/CRM/Core/Payment/AuthorizeNetIPN.php | 5 +- civicrm/CRM/Core/Payment/BaseIPN.php | 6 +- civicrm/CRM/Core/Payment/Dummy.php | 3 +- civicrm/CRM/Core/Payment/Elavon.php | 24 +- civicrm/CRM/Core/Payment/FirstData.php | 27 +- civicrm/CRM/Core/Payment/PayJunction.php | 62 +- civicrm/CRM/Core/Payment/PayPalIPN.php | 143 +- civicrm/CRM/Core/Payment/PayPalImpl.php | 6 +- civicrm/CRM/Core/Payment/PayPalProIPN.php | 406 +- civicrm/CRM/Core/Payment/Realex.php | 23 +- civicrm/CRM/Core/Permission.php | 4 +- civicrm/CRM/Core/Permission/UnitTests.php | 3 +- civicrm/CRM/Core/Reference/OptionValue.php | 2 +- civicrm/CRM/Core/Resources.php | 22 +- civicrm/CRM/Core/Resources/Common.php | 38 +- civicrm/CRM/Core/SelectValues.php | 2 +- civicrm/CRM/Core/Selector/Controller.php | 2 +- civicrm/CRM/Core/Session.php | 2 +- .../Core/Smarty/plugins/block.localize.php | 4 +- .../Smarty/plugins/function.crmResURL.php | 2 +- civicrm/CRM/Core/xml/Menu/Misc.xml | 6 - civicrm/CRM/Custom/Form/Group.php | 2 +- civicrm/CRM/Dedupe/BAO/DedupeException.php | 59 + civicrm/CRM/Dedupe/BAO/DedupeRule.php | 252 + civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php | 517 + civicrm/CRM/Dedupe/BAO/Exception.php | 37 +- civicrm/CRM/Dedupe/BAO/Rule.php | 232 +- civicrm/CRM/Dedupe/BAO/RuleGroup.php | 497 +- civicrm/CRM/Dedupe/DAO/DedupeException.php | 231 + civicrm/CRM/Dedupe/DAO/DedupeRule.php | 284 + civicrm/CRM/Dedupe/DAO/DedupeRuleGroup.php | 304 + civicrm/CRM/Dedupe/DAO/Exception.php | 218 +- civicrm/CRM/Dedupe/DAO/Rule.php | 276 +- civicrm/CRM/Dedupe/DAO/RuleGroup.php | 296 +- civicrm/CRM/Dedupe/Finder.php | 8 +- civicrm/CRM/Dedupe/Merger.php | 2 +- civicrm/CRM/Event/BAO/Event.php | 1 + civicrm/CRM/Event/BAO/Participant.php | 2 +- civicrm/CRM/Event/DAO/Event.php | 4 +- .../Event/Form/ManageEvent/Registration.php | 8 +- .../Form/ManageEvent/ScheduleReminders.php | 48 +- civicrm/CRM/Event/Form/Participant.php | 4 +- civicrm/CRM/Event/Form/Registration.php | 59 +- civicrm/CRM/Event/Form/Task/Batch.php | 6 +- civicrm/CRM/Event/Import/Parser.php | 2 +- .../CRM/Event/Import/Parser/Participant.php | 6 +- civicrm/CRM/Event/Page/ManageEvent.php | 4 +- .../ParticipantListing/NameStatusAndDate.php | 2 +- .../Event/Page/ParticipantListing/Simple.php | 2 +- civicrm/CRM/Extension/Manager.php | 65 +- civicrm/CRM/Financial/BAO/FinancialItem.php | 20 +- civicrm/CRM/Financial/BAO/FinancialType.php | 6 +- civicrm/CRM/Financial/BAO/Order.php | 51 +- .../CRM/Financial/BAO/PaymentProcessor.php | 35 +- civicrm/CRM/Financial/DAO/FinancialItem.php | 9 +- civicrm/CRM/Grant/Selector/Search.php | 2 +- civicrm/CRM/Import/Form/MapField.php | 2 +- civicrm/CRM/Logging/Reverter.php | 2 +- civicrm/CRM/Logging/Schema.php | 11 +- civicrm/CRM/Mailing/BAO/Mailing.php | 2 +- .../Mailing/Event/BAO/TrackableURLOpen.php | 4 +- civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php | 2 +- civicrm/CRM/Mailing/Selector/Browse.php | 2 +- civicrm/CRM/Mailing/Selector/Event.php | 2 +- civicrm/CRM/Mailing/Selector/Search.php | 2 +- civicrm/CRM/Member/BAO/Membership.php | 38 +- civicrm/CRM/Member/Form.php | 12 + civicrm/CRM/Member/Form/Membership.php | 93 +- civicrm/CRM/Member/Import/Form/MapField.php | 2 +- civicrm/CRM/Member/Import/Parser.php | 2 +- .../CRM/Member/Import/Parser/Membership.php | 2 +- .../Member/Page/RecurringContributions.php | 2 +- civicrm/CRM/Member/Page/Tab.php | 11 + civicrm/CRM/Member/Selector/Search.php | 2 +- civicrm/CRM/Pledge/Selector/Search.php | 2 +- civicrm/CRM/Price/BAO/LineItem.php | 43 +- civicrm/CRM/Price/BAO/PriceField.php | 4 +- civicrm/CRM/Price/BAO/PriceSet.php | 8 +- civicrm/CRM/Price/DAO/LineItem.php | 9 +- civicrm/CRM/Price/Form/Field.php | 2 +- civicrm/CRM/Profile/Selector/Listings.php | 2 +- civicrm/CRM/Report/Form.php | 81 +- civicrm/CRM/Report/Form/ActivitySummary.php | 5 +- civicrm/CRM/Report/Form/Contact/Detail.php | 19 +- .../CRM/Report/Form/Contact/Relationship.php | 2 +- civicrm/CRM/Report/Form/Contact/Summary.php | 9 +- .../Form/Contribute/DeferredRevenue.php | 5 +- .../CRM/Report/Form/Contribute/History.php | 10 +- .../CRM/Report/Form/Contribute/TopDonor.php | 3 +- civicrm/CRM/Report/Form/Event/Income.php | 21 +- civicrm/CRM/Upgrade/Incremental/Base.php | 2 +- .../Upgrade/Incremental/php/FiveSeventeen.php | 2 +- .../Incremental/php/FiveThirtyNine.php | 131 + .../Upgrade/Incremental/php/FiveTwenty.php | 42 - .../Incremental/php/FiveTwentySeven.php | 4 +- .../Upgrade/Incremental/php/FiveTwentySix.php | 2 +- .../Incremental/sql/5.39.alpha1.mysql.tpl | 14 + civicrm/CRM/Utils/Array.php | 25 + civicrm/CRM/Utils/Cache/ArrayCache.php | 2 +- civicrm/CRM/Utils/Check.php | 2 +- civicrm/CRM/Utils/Date.php | 6 +- civicrm/CRM/Utils/File.php | 32 - civicrm/CRM/Utils/GeocodeProvider.php | 2 +- civicrm/CRM/Utils/Hook.php | 32 +- civicrm/CRM/Utils/Hook/UnitTests.php | 22 +- civicrm/CRM/Utils/LazyArray.php | 95 + civicrm/CRM/Utils/Mail/Incoming.php | 2 +- civicrm/CRM/Utils/Pager.php | 21 +- civicrm/CRM/Utils/Request.php | 2 +- civicrm/CRM/Utils/System/Base.php | 8 + civicrm/CRM/Utils/System/Drupal8.php | 4 +- civicrm/CRM/Utils/System/UnitTests.php | 9 + civicrm/CRM/Utils/System/WordPress.php | 8 + civicrm/CRM/Utils/Weight.php | 2 +- civicrm/CRM/Utils/Zip.php | 2 +- civicrm/Civi/API/Event/AuthorizeEvent.php | 24 +- civicrm/Civi/API/Event/AuthorizedTrait.php | 48 + civicrm/Civi/API/Event/Event.php | 32 +- civicrm/Civi/API/Event/PrepareEvent.php | 6 +- civicrm/Civi/API/Event/RequestTrait.php | 67 + civicrm/Civi/API/Event/ResolveEvent.php | 3 +- civicrm/Civi/API/Kernel.php | 2 +- civicrm/Civi/Angular/AngularLoader.php | 38 +- civicrm/Civi/Angular/Page/Main.php | 60 +- civicrm/Civi/Api4/ACL.php | 2 +- civicrm/Civi/Api4/ACLEntityRole.php | 30 + .../Api4/Action/Address/AddressSaveTrait.php | 2 +- .../Action/CiviCase/CiviCaseSaveTrait.php | 2 +- .../Api4/Action/CustomValue/GetFields.php | 18 +- civicrm/Civi/Api4/Action/Entity/Get.php | 82 +- civicrm/Civi/Api4/Action/GetActions.php | 2 +- .../GroupContact/GroupContactSaveTrait.php | 2 +- civicrm/Civi/Api4/ActionSchedule.php | 2 +- civicrm/Civi/Api4/Activity.php | 1 + civicrm/Civi/Api4/ActivityContact.php | 1 + civicrm/Civi/Api4/Address.php | 5 +- civicrm/Civi/Api4/Batch.php | 1 + civicrm/Civi/Api4/Campaign.php | 1 + civicrm/Civi/Api4/CaseActivity.php | 1 + civicrm/Civi/Api4/CaseContact.php | 1 + civicrm/Civi/Api4/CaseType.php | 1 + civicrm/Civi/Api4/CiviCase.php | 1 + civicrm/Civi/Api4/Contact.php | 1 + civicrm/Civi/Api4/ContactType.php | 1 + civicrm/Civi/Api4/Contribution.php | 1 + civicrm/Civi/Api4/ContributionPage.php | 1 + civicrm/Civi/Api4/ContributionRecur.php | 1 + civicrm/Civi/Api4/ContributionSoft.php | 1 + civicrm/Civi/Api4/Country.php | 1 + civicrm/Civi/Api4/CustomField.php | 2 +- civicrm/Civi/Api4/CustomGroup.php | 2 +- civicrm/Civi/Api4/CustomValue.php | 9 +- civicrm/Civi/Api4/Dashboard.php | 2 +- civicrm/Civi/Api4/DashboardContact.php | 3 +- civicrm/Civi/Api4/DedupeException.php | 33 + civicrm/Civi/Api4/DedupeRule.php | 33 + civicrm/Civi/Api4/DedupeRuleGroup.php | 33 + civicrm/Civi/Api4/Domain.php | 2 +- civicrm/Civi/Api4/Email.php | 1 + civicrm/Civi/Api4/Entity.php | 14 +- civicrm/Civi/Api4/EntityFinancialAccount.php | 14 +- civicrm/Civi/Api4/EntityFinancialTrxn.php | 16 +- civicrm/Civi/Api4/EntityTag.php | 2 +- civicrm/Civi/Api4/Event.php | 1 + civicrm/Civi/Api4/Event/ActiveUserTrait.php | 43 + .../Civi/Api4/Event/AuthorizeRecordEvent.php | 75 + .../ActivityPreCreationSubscriber.php | 58 - .../Subscriber/PermissionCheckSubscriber.php | 2 +- .../Subscriber/ValidateFieldsSubscriber.php | 3 + .../Civi/Api4/Event/ValidateValuesEvent.php | 162 + civicrm/Civi/Api4/FinancialAccount.php | 1 + civicrm/Civi/Api4/FinancialItem.php | 35 + civicrm/Civi/Api4/FinancialTrxn.php | 2 + civicrm/Civi/Api4/FinancialType.php | 2 + civicrm/Civi/Api4/Generic/AbstractAction.php | 12 +- .../Civi/Api4/Generic/AbstractBatchAction.php | 17 +- .../Api4/Generic/AbstractCreateAction.php | 18 + civicrm/Civi/Api4/Generic/AbstractEntity.php | 12 +- .../Civi/Api4/Generic/AbstractSaveAction.php | 34 + .../Api4/Generic/AbstractUpdateAction.php | 21 + .../Civi/Api4/Generic/BasicBatchAction.php | 5 + civicrm/Civi/Api4/Generic/BasicEntity.php | 11 +- .../Api4/Generic/BasicGetFieldsAction.php | 75 +- .../Civi/Api4/Generic/BasicUpdateAction.php | 9 +- .../Civi/Api4/Generic/CheckAccessAction.php | 80 + civicrm/Civi/Api4/Generic/DAOCreateAction.php | 8 +- civicrm/Civi/Api4/Generic/DAODeleteAction.php | 24 +- .../Civi/Api4/Generic/DAOGetFieldsAction.php | 47 +- civicrm/Civi/Api4/Generic/DAOUpdateAction.php | 14 +- .../Generic/Traits/CustomValueActionTrait.php | 2 +- .../Api4/Generic/Traits/DAOActionTrait.php | 62 +- .../Civi/Api4/Generic/Traits/EntityBridge.php | 7 +- .../Civi/Api4/Generic/Traits/OptionList.php | 3 +- civicrm/Civi/Api4/Generic/Traits/ReadOnly.php | 78 + civicrm/Civi/Api4/Grant.php | 1 + civicrm/Civi/Api4/Group.php | 1 + civicrm/Civi/Api4/GroupContact.php | 17 +- civicrm/Civi/Api4/GroupNesting.php | 2 +- civicrm/Civi/Api4/GroupOrganization.php | 3 + civicrm/Civi/Api4/IM.php | 1 + civicrm/Civi/Api4/LineItem.php | 2 + civicrm/Civi/Api4/LocBlock.php | 2 +- civicrm/Civi/Api4/LocationType.php | 1 + civicrm/Civi/Api4/MailSettings.php | 2 +- civicrm/Civi/Api4/Mapping.php | 2 +- civicrm/Civi/Api4/MappingField.php | 2 +- civicrm/Civi/Api4/MembershipType.php | 1 + civicrm/Civi/Api4/MessageTemplate.php | 2 +- civicrm/Civi/Api4/Navigation.php | 2 +- civicrm/Civi/Api4/Note.php | 1 + civicrm/Civi/Api4/OpenID.php | 1 + civicrm/Civi/Api4/OptionGroup.php | 1 + civicrm/Civi/Api4/OptionValue.php | 1 + civicrm/Civi/Api4/PCPBlock.php | 1 + civicrm/Civi/Api4/Participant.php | 1 + civicrm/Civi/Api4/PaymentProcessor.php | 1 + civicrm/Civi/Api4/PaymentProcessorType.php | 1 + civicrm/Civi/Api4/PaymentToken.php | 1 + civicrm/Civi/Api4/Permission.php | 2 +- civicrm/Civi/Api4/Phone.php | 1 + civicrm/Civi/Api4/PledgePayment.php | 1 + civicrm/Civi/Api4/PriceField.php | 1 + civicrm/Civi/Api4/PriceFieldValue.php | 1 + civicrm/Civi/Api4/PriceSet.php | 1 + civicrm/Civi/Api4/Query/Api4SelectQuery.php | 64 +- civicrm/Civi/Api4/Relationship.php | 2 +- civicrm/Civi/Api4/RelationshipCache.php | 14 +- civicrm/Civi/Api4/RelationshipType.php | 1 + civicrm/Civi/Api4/Route.php | 2 +- civicrm/Civi/Api4/SavedSearch.php | 2 +- .../Api4/Service/Spec/CustomFieldSpec.php | 24 +- civicrm/Civi/Api4/Service/Spec/FieldSpec.php | 296 +- .../ACLEntityRoleCreationSpecProvider.php | 40 + .../Spec/Provider/ActivitySpecProvider.php | 8 + .../Provider/BatchCreationSpecProvider.php | 43 + .../Provider/CaseCreationSpecProvider.php | 14 + .../Spec/Provider/ContactGetSpecProvider.php | 102 + .../Spec/Provider/CustomValueSpecProvider.php | 8 +- .../Provider/EmailCreationSpecProvider.php | 3 + .../FinancialItemCreationSpecProvider.php | 52 + .../Civi/Api4/Service/Spec/RequestSpec.php | 14 + .../Civi/Api4/Service/Spec/SpecFormatter.php | 155 +- civicrm/Civi/Api4/Setting.php | 2 +- civicrm/Civi/Api4/StateProvince.php | 1 + civicrm/Civi/Api4/StatusPreference.php | 2 +- civicrm/Civi/Api4/System.php | 1 + civicrm/Civi/Api4/Tag.php | 1 + civicrm/Civi/Api4/UFField.php | 2 +- civicrm/Civi/Api4/UFGroup.php | 2 +- civicrm/Civi/Api4/UFJoin.php | 2 +- civicrm/Civi/Api4/UFMatch.php | 2 +- civicrm/Civi/Api4/Utils/CoreUtil.php | 62 + civicrm/Civi/Api4/Utils/ReflectionUtils.php | 6 - civicrm/Civi/Api4/Website.php | 1 + civicrm/Civi/Api4/WordReplacement.php | 32 + civicrm/Civi/Core/CiviEventDispatcher.php | 47 + civicrm/Civi/Core/Container.php | 35 +- civicrm/Civi/Core/Event/EventPrinter.php | 50 + civicrm/Civi/Core/Event/EventScanner.php | 176 + civicrm/Civi/Core/Event/HookStyleListener.php | 42 + civicrm/Civi/Core/Event/PostEvent.php | 11 - civicrm/Civi/Core/Event/PreEvent.php | 11 - civicrm/Civi/Core/Event/ServiceListener.php | 4 +- civicrm/Civi/Core/SqlTriggers.php | 6 +- civicrm/Civi/Payment/PropertyBag.php | 31 +- civicrm/Civi/Test/ACLPermissionTrait.php | 199 + civicrm/Civi/Test/Api3TestTrait.php | 5 +- civicrm/Civi/Test/CiviTestListener.php | 46 +- .../Civi/Test/CiviTestListenerPHPUnit7.php | 46 +- civicrm/Civi/Test/ContactTestTrait.php | 4 +- civicrm/Civi/Test/HookInterface.php | 17 + civicrm/Civi/Test/Legacy/CiviTestListener.php | 45 +- civicrm/ang/api4Explorer/Explorer.js | 2 +- civicrm/api/v3/AclRole.php | 2 +- civicrm/api/v3/Batch.php | 5 - civicrm/api/v3/Contribution.php | 26 +- civicrm/api/v3/Contribution/Transact.php | 2 +- civicrm/api/v3/Exception.php | 2 +- civicrm/api/v3/Generic.php | 7 +- civicrm/api/v3/Order.php | 39 +- civicrm/api/v3/Profile.php | 5 +- civicrm/api/v3/RuleGroup.php | 2 +- .../v3/examples/Contribution/Create.ex.php | 2 +- civicrm/api/v3/utils.php | 17 +- civicrm/bin/regen.sh | 3 + civicrm/civicrm-version.php | 2 +- civicrm/composer.json | 14 +- civicrm/composer.lock | 499 +- civicrm/css/admin.css | 15 + civicrm/css/api4-explorer.css | 16 - civicrm/css/civicrm.css | 16 + civicrm/css/joomla.css | 14 + civicrm/css/menubar-joomla.css | 57 +- .../Civi/AfformAdmin/AfformAdminMeta.php | 56 +- .../afform/admin/afformEntities/Activity.php | 8 +- .../afform/admin/afformEntities/Household.php | 5 +- .../admin/afformEntities/Individual.php | 5 +- .../admin/afformEntities/Organization.php | 5 +- civicrm/ext/afform/admin/ang/afAdmin.js | 3 +- .../ang/afAdmin/afAdminList.controller.js | 16 + .../afform/admin/ang/afAdmin/afAdminList.html | 40 +- civicrm/ext/afform/admin/ang/afGuiEditor.css | 104 +- civicrm/ext/afform/admin/ang/afGuiEditor.js | 8 +- .../ang/afGuiEditor/afGuiEditor.component.js | 138 +- .../ang/afGuiEditor/afGuiEditorCanvas.html | 8 +- .../ang/afGuiEditor/afGuiEditorPalette.html | 27 +- .../ang/afGuiEditor/afGuiEntity.component.js | 4 +- .../admin/ang/afGuiEditor/afGuiEntity.html | 12 +- .../afGuiEditor/afGuiFieldValue.directive.js | 25 +- .../admin/ang/afGuiEditor/afGuiSearch.html | 12 +- .../admin/ang/afGuiEditor/config-form.html | 42 +- .../ang/afGuiEditor/elements/afGuiButton.html | 2 +- .../elements/afGuiContainer.component.js | 2 + .../afGuiEditor/elements/afGuiField-menu.html | 2 +- .../elements/afGuiField.component.js | 56 +- .../ang/afGuiEditor/entityConfig/Contact.html | 8 +- .../ang/afGuiEditor/entityConfig/Generic.html | 32 +- .../ang/afGuiEditor/inputType/EntityRef.html | 8 + .../admin/ang/afGuiEditor/saveBlock.html | 2 +- civicrm/ext/afform/admin/info.xml | 4 +- .../afform/core/CRM/Afform/AfformScanner.php | 2 +- .../core/CRM/Afform/Page/AfformBase.php | 5 +- .../Civi/Afform/AfformMetadataInjector.php | 11 +- .../Civi/Afform/Event/AfformBaseEvent.php | 19 +- .../Civi/Afform/Event/AfformSubmitEvent.php | 98 +- .../afform/core/Civi/Afform/FormDataModel.php | 9 +- civicrm/ext/afform/core/Civi/Afform/Utils.php | 52 + .../Api4/Action/Afform/AbstractProcessor.php | 146 +- .../core/Civi/Api4/Action/Afform/Prefill.php | 64 +- .../core/Civi/Api4/Action/Afform/Submit.php | 157 +- civicrm/ext/afform/core/Civi/Api4/Afform.php | 15 +- civicrm/ext/afform/core/afform.php | 5 +- .../afform/core/ang/af/afField.component.js | 2 +- .../afform/core/ang/af/fields/EntityRef.html | 1 + civicrm/ext/afform/core/info.xml | 4 +- civicrm/ext/afform/core/phpunit.xml.dist | 2 +- .../templates/CRM/Afform/Page/AfformBase.tpl | 4 +- .../tests/phpunit/CRM/Afform/UtilTest.php | 84 +- civicrm/ext/afform/html/info.xml | 2 +- .../afform/mock/ang/mockPublicForm.test.php | 11 +- civicrm/ext/afform/mock/info.xml | 2 +- civicrm/ext/afform/mock/phpunit.xml.dist | 2 +- .../phpunit/Civi/AfformMock/FormTestCase.php | 4 +- .../phpunit/api/v4/AfformContactUsageTest.php | 294 + .../api/v4/AfformCustomFieldUsageTest.php | 102 + .../phpunit/api/v4/AfformRoutingTest.php | 2 +- .../tests/phpunit/api/v4/AfformUsageTest.php | 123 - .../phpunit/api/v4/AfformUsageTestCase.php | 43 + .../ext/authx/Civi/Authx/Authenticator.php | 2 +- civicrm/ext/authx/Civi/Authx/Drupal8.php | 6 +- civicrm/ext/authx/info.xml | 2 +- civicrm/ext/authx/phpunit.xml.dist | 2 +- civicrm/ext/authx/settings/authx.setting.php | 5 + .../ext/contributioncancelactions/info.xml | 2 +- .../phpunit.xml.dist | 2 +- civicrm/ext/eventcart/info.xml | 2 +- .../ext/ewaysingle/CRM/Core/Payment/eWAY.php | 27 +- civicrm/ext/ewaysingle/info.xml | 2 +- civicrm/ext/ewaysingle/phpunit.xml.dist | 2 +- civicrm/ext/financialacls/financialacls.php | 34 +- civicrm/ext/financialacls/info.xml | 2 +- civicrm/ext/financialacls/phpunit.xml.dist | 2 +- .../Civi/Financialacls/LineItemTest.php | 7 +- civicrm/ext/flexmailer/info.xml | 2 +- civicrm/ext/flexmailer/phpunit.xml.dist | 2 +- .../src/ClickTracker/HtmlClickTracker.php | 4 +- .../Civi/FlexMailer/MailingPreviewTest.php | 32 +- civicrm/ext/greenwich/dist/bootstrap3.css | 18 +- civicrm/ext/greenwich/dist/bootstrap3.min.css | 2 +- civicrm/ext/greenwich/info.xml | 2 +- civicrm/ext/greenwich/scss/_greenwich.scss | 5 +- .../CRM/OAuth/BAO/OAuthContactToken.php | 5 + .../CRM/OAuth/ContactFromToken.php | 80 + .../CRM/OAuth/DAO/OAuthClient.php | 9 +- .../CRM/OAuth/DAO/OAuthContactToken.php | 483 + .../CRM/OAuth/DAO/OAuthSysToken.php | 3 +- .../ext/oauth-client/CRM/OAuth/Upgrader.php | 12 + .../Api4/Action/OAuthContactToken/Create.php | 62 + .../Api4/Action/OAuthContactToken/Delete.php | 10 + .../Api4/Action/OAuthContactToken/Get.php | 29 + .../OnlyModifyOwnTokensTrait.php | 31 + .../Api4/Action/OAuthContactToken/Update.php | 10 + .../oauth-client/Civi/Api4/OAuthClient.php | 19 +- .../Civi/Api4/OAuthContactToken.php | 47 + .../Civi/OAuth/OAuthTokenFacade.php | 31 +- civicrm/ext/oauth-client/info.xml | 4 +- .../ext/oauth-client/oauth_client.civix.php | 35 +- civicrm/ext/oauth-client/oauth_client.php | 12 + civicrm/ext/oauth-client/phpunit.xml.dist | 2 +- civicrm/ext/oauth-client/sql/auto_install.sql | 59 +- .../ext/oauth-client/sql/auto_uninstall.sql | 3 +- .../phpunit/Civi/OAuth/AuthCodeFlowTest.php | 237 +- .../phpunit/api/v4/OAuthContactTokenTest.php | 345 + .../oauth-client/xml/Menu/oauth_client.xml | 2 +- .../xml/schema/CRM/OAuth/OAuthClient.xml | 9 +- .../OAuth/OAuthContactToken.entityType.php | 10 + .../schema/CRM/OAuth/OAuthContactToken.xml | 175 + .../CRM/Core/Payment/PayflowPro.php | 27 +- civicrm/ext/payflowpro/info.xml | 2 +- civicrm/ext/payflowpro/phpunit.xml.dist | 2 +- .../CRM/Core/Payment/PayflowProTest.php | 24 +- civicrm/ext/recaptcha/info.xml | 2 +- .../ext/search_kit/CRM/Search/Upgrader.php | 11 + .../Action/SearchDisplay/GetSearchTasks.php | 61 +- .../Civi/Api4/Action/SearchDisplay/Run.php | 48 +- .../search_kit/Civi/Api4/SearchDisplay.php | 2 +- civicrm/ext/search_kit/Civi/Search/Admin.php | 28 +- .../ext/search_kit/ang/crmSearchAdmin.ang.php | 2 +- .../ang/crmSearchAdmin/compose/controls.html | 2 +- .../ang/crmSearchAdmin/compose/criteria.html | 6 +- .../ang/crmSearchAdmin/compose/pager.html | 2 +- .../crmSearchAdmin.component.js | 70 +- .../ang/crmSearchAdmin/crmSearchAdmin.html | 4 +- .../crmSearchAdminDisplay.component.js | 13 +- .../crmSearchAdmin/crmSearchAdminDisplay.html | 4 +- .../crmSearchAdminDisplaySort.html | 4 +- .../crmSearchClause.component.js | 30 +- .../ang/crmSearchAdmin/crmSearchClause.html | 8 +- .../displays/colType/buttons.html | 2 +- .../displays/colType/field.html | 14 +- .../crmSearchAdmin/displays/colType/menu.html | 6 +- .../searchAdminDisplayList.component.js | 2 +- .../displays/searchAdminDisplayList.html | 24 +- .../searchAdminDisplayTable.component.js | 2 +- .../displays/searchAdminDisplayTable.html | 23 +- .../search_kit/ang/crmSearchAdmin/group.html | 4 +- .../crmSearchAdmin/searchList.controller.js | 35 +- .../ang/crmSearchAdmin/searchList.html | 64 +- .../search_kit/ang/crmSearchAdmin/tabs.html | 4 +- .../search_kit/ang/crmSearchDisplay.module.js | 16 +- .../ang/crmSearchDisplay/colType/buttons.html | 2 +- .../ang/crmSearchDisplay/colType/field.html | 7 +- .../ang/crmSearchDisplay/colType/links.html | 2 +- .../ang/crmSearchDisplay/colType/menu.html | 2 +- .../ang/crmSearchDisplayTable.ang.php | 2 +- .../crmSearchDisplayTable.html | 2 +- ...Actions.ang.php => crmSearchTasks.ang.php} | 10 +- ...ons.module.js => crmSearchTasks.module.js} | 2 +- .../crmSearchBatchRunner.component.js | 4 +- .../crmSearchBatchRunner.html | 0 .../crmSearchInput/boolean.html | 0 .../crmMultiSelectDate.directive.js | 2 +- .../crmSearchInput.component.js | 4 +- .../crmSearchInput/crmSearchInput.html | 0 .../crmSearchInputVal.component.js | 18 +- .../crmSearchInput/date.html | 0 .../crmSearchInput/entityRef.html | 0 .../crmSearchInput/float.html | 0 .../crmSearchInput/integer.html | 0 .../crmSearchInput/select.html | 0 .../crmSearchInput/text.html | 0 .../crmSearchTaskDelete.ctrl.js} | 8 +- .../crmSearchTaskDelete.html} | 5 +- .../crmSearchTaskUpdate.ctrl.js} | 8 +- .../crmSearchTaskUpdate.html} | 4 +- .../crmSearchTasks.component.js} | 6 +- .../crmSearchTasks.html} | 0 civicrm/ext/search_kit/css/crmSearchAdmin.css | 17 + ...rmSearchActions.css => crmSearchTasks.css} | 12 +- civicrm/ext/search_kit/info.xml | 4 +- civicrm/ext/search_kit/phpunit.xml.dist | 2 +- civicrm/ext/search_kit/search_kit.php | 17 + .../api/v4/SearchDisplay/SearchRunTest.php | 13 +- .../ext/search_kit/xml/Menu/search_kit.xml | 2 +- civicrm/ext/sequentialcreditnotes/info.xml | 2 +- .../sequentialcreditnotes/phpunit.xml.dist | 2 +- civicrm/install/index.php | 2 +- civicrm/js/Common.js | 36 +- civicrm/js/crm.ajax.js | 4 +- civicrm/packages/DB/DataObject.php | 8 +- civicrm/release-notes.md | 11 + civicrm/release-notes/5.39.0.md | 1073 ++ civicrm/settings/Search.setting.php | 20 + civicrm/sql/civicrm.mysql | 6191 ++++----- civicrm/sql/civicrm_data.mysql | 2000 +-- civicrm/sql/civicrm_drop.mysql | 7 +- civicrm/sql/civicrm_dummy_processor.mysql | 8 +- civicrm/sql/civicrm_generated.mysql | 10994 +++++++++++++++- .../templates/CRM/Activity/Form/Activity.tpl | 12 +- .../templates/CRM/Admin/Form/ContactType.tpl | 2 +- .../CRM/Admin/Form/MessageTemplates.tpl | 160 +- .../templates/CRM/Admin/Form/OptionGroup.tpl | 19 +- civicrm/templates/CRM/Admin/Form/Options.tpl | 24 +- .../CRM/Admin/Form/ParticipantStatusType.tpl | 3 +- .../CRM/Admin/Form/ScheduleReminders.tpl | 6 +- .../templates/CRM/Admin/Page/ContactType.tpl | 2 +- .../CRM/Admin/Page/Extensions/AddNew.tpl | 2 +- .../CRM/Admin/Page/Extensions/Main.tpl | 10 +- civicrm/templates/CRM/Admin/Page/Job.tpl | 6 +- civicrm/templates/CRM/Admin/Page/JobLog.tpl | 10 +- .../templates/CRM/Admin/Page/LocationType.tpl | 4 +- .../templates/CRM/Admin/Page/MailSettings.tpl | 20 +- .../Campaign/Form/addCampaignToComponent.tpl | 2 +- .../templates/CRM/Contact/Form/Task/Email.hlp | 5 + .../CRM/Contact/Page/DashBoardDashlet.tpl | 4 +- .../CRM/Contribute/Page/ContributionRecur.tpl | 49 +- .../CRM/Contribute/Page/UserDashboard.tpl | 10 +- .../templates/CRM/Custom/Form/CustomData.tpl | 8 +- .../CRM/Custom/Form/Edit/CustomField.tpl | 8 +- .../Form/ManageEvent/ConfirmRepeatMode.tpl | 2 +- civicrm/templates/CRM/Form/attachmentjs.tpl | 2 +- civicrm/templates/CRM/Report/Form.tpl | 4 +- .../CRM/Report/Form/Layout/Graph.tpl | 8 +- .../CRM/Report/Form/Layout/Table.tpl | 16 +- .../templates/CRM/Report/Form/Statistics.tpl | 62 +- civicrm/templates/CRM/common/CMSPrint.tpl | 8 +- civicrm/templates/CRM/common/accesskeys.tpl | 2 +- civicrm/templates/CRM/common/formButtons.tpl | 2 +- civicrm/templates/CRM/common/joomla.tpl | 4 +- civicrm/templates/CRM/common/l10n.js.tpl | 8 +- civicrm/templates/CRM/common/status.tpl | 2 +- civicrm/templates/Civi/Angular/Page/Main.tpl | 4 +- civicrm/vendor/autoload.php | 2 +- civicrm/vendor/composer/autoload_classmap.php | 1 - civicrm/vendor/composer/autoload_files.php | 1 + civicrm/vendor/composer/autoload_psr4.php | 4 +- civicrm/vendor/composer/autoload_real.php | 14 +- civicrm/vendor/composer/autoload_static.php | 37 +- civicrm/vendor/composer/installed.json | 523 +- civicrm/vendor/dompdf/dompdf/README.md | 18 +- civicrm/vendor/dompdf/dompdf/VERSION | 2 +- civicrm/vendor/dompdf/dompdf/composer.json | 4 +- civicrm/vendor/dompdf/dompdf/lib/Cpdf.php | 41 +- .../vendor/dompdf/dompdf/src/Adapter/CPDF.php | 8 +- .../vendor/dompdf/dompdf/src/Adapter/GD.php | 8 +- .../dompdf/dompdf/src/Adapter/PDFLib.php | 8 +- civicrm/vendor/dompdf/dompdf/src/Canvas.php | 2 +- civicrm/vendor/dompdf/dompdf/src/Cellmap.php | 23 +- .../vendor/dompdf/dompdf/src/Css/Color.php | 10 +- .../vendor/dompdf/dompdf/src/Css/Style.php | 69 +- .../dompdf/dompdf/src/Css/Stylesheet.php | 49 +- civicrm/vendor/dompdf/dompdf/src/Dompdf.php | 99 +- .../vendor/dompdf/dompdf/src/FontMetrics.php | 25 +- .../dompdf/dompdf/src/FrameDecorator/Text.php | 5 +- .../dompdf/dompdf/src/FrameReflower/Block.php | 8 +- .../dompdf/dompdf/src/FrameReflower/Image.php | 24 +- .../dompdf/dompdf/src/FrameReflower/Table.php | 6 +- .../dompdf/dompdf/src/FrameReflower/Text.php | 39 +- .../vendor/dompdf/dompdf/src/Image/Cache.php | 20 +- civicrm/vendor/dompdf/dompdf/src/Options.php | 86 +- .../dompdf/src/Renderer/AbstractRenderer.php | 4 +- .../dompdf/dompdf/src/Renderer/Block.php | 6 +- .../dompdf/dompdf/src/Renderer/Image.php | 8 +- .../dompdf/dompdf/src/Renderer/Inline.php | 11 +- .../laminas/laminas-escaper/CHANGELOG.md | 73 + .../laminas/laminas-escaper/COPYRIGHT.md | 2 + .../laminas-escaper/LICENSE.md} | 22 +- .../vendor/laminas/laminas-escaper/README.md | 28 + .../laminas/laminas-escaper/composer.json | 58 + .../laminas-escaper}/src/Escaper.php | 63 +- .../src/Exception/ExceptionInterface.php | 13 + .../Exception/InvalidArgumentException.php | 17 + .../src/Exception/RuntimeException.php | 17 + .../.github/FUNDING.yml | 1 + .../workflows/release-on-milestone-closed.yml | 71 + .../laminas-zendframework-bridge/CHANGELOG.md | 686 + .../laminas-zendframework-bridge/COPYRIGHT.md | 1 + .../laminas-zendframework-bridge/LICENSE.md | 26 + .../laminas-zendframework-bridge/README.md | 24 + .../composer.json | 58 + .../config/replacements.php | 372 + .../src/Autoloader.php | 172 + .../src/ConfigPostProcessor.php | 434 + .../src/Module.php | 54 + .../src/Replacements.php | 46 + .../src/RewriteRules.php | 79 + .../src/autoload.php | 9 + civicrm/vendor/pclzip/pclzip/composer.json | 16 - civicrm/vendor/pclzip/pclzip/gnu-lgpl.txt | 504 - civicrm/vendor/pclzip/pclzip/pclzip.lib.php | 5414 -------- civicrm/vendor/pclzip/pclzip/readme.txt | 421 - .../validate_finance_creditcard/.travis.yml | 21 +- .../validate_finance_creditcard/README.md | 2 + .../validate_finance_creditcard/package.xml | 27 +- civicrm/vendor/phpoffice/common/.gitignore | 25 - .../vendor/phpoffice/common/.scrutinizer.yml | 24 - civicrm/vendor/phpoffice/common/.travis.yml | 60 - .../common/.travis_shell_after_success.sh | 39 - civicrm/vendor/phpoffice/common/CHANGELOG.md | 61 - civicrm/vendor/phpoffice/common/COPYING | 674 - .../vendor/phpoffice/common/COPYING.LESSER | 165 - civicrm/vendor/phpoffice/common/LICENSE | 15 - civicrm/vendor/phpoffice/common/PATCHES.txt | 7 - civicrm/vendor/phpoffice/common/README.md | 33 - civicrm/vendor/phpoffice/common/VERSION | 1 - civicrm/vendor/phpoffice/common/composer.json | 34 - .../vendor/phpoffice/common/phpmd.xml.dist | 33 - .../vendor/phpoffice/common/phpunit.xml.dist | 24 - .../src/Common/Adapter/Zip/PclZipAdapter.php | 45 - .../Common/Adapter/Zip/ZipArchiveAdapter.php | 49 - .../src/Common/Adapter/Zip/ZipInterface.php | 30 - .../common/src/Common/Autoloader.php | 54 - .../phpoffice/common/src/Common/File.php | 112 - .../phpoffice/common/src/Common/Font.php | 100 - .../common/src/Common/Microsoft/OLERead.php | 320 - .../.github/ISSUE_TEMPLATE/bug_report.md | 38 + .../.github/ISSUE_TEMPLATE/feature_request.md | 22 + .../.github/ISSUE_TEMPLATE/how-to-use.md | 14 + .../phpword/.github/PULL_REQUEST_TEMPLATE.md | 11 + .../phpoffice/phpword/.github/support.yml | 15 + .../phpword/.github/workflows/ci.yml | 170 + .../.github/workflows/github-pages.yml | 29 + .../phpword/.github_changelog_generator | 8 + civicrm/vendor/phpoffice/phpword/CHANGELOG.md | 115 +- .../vendor/phpoffice/phpword/CONTRIBUTING.md | 29 +- civicrm/vendor/phpoffice/phpword/PATCHES.txt | 7 - civicrm/vendor/phpoffice/phpword/README.md | 24 +- .../vendor/phpoffice/phpword/composer.json | 17 +- .../vendor/phpoffice/phpword/phpword.ini.dist | 4 + .../phpword/sonar-project.properties | 17 + .../src/PhpWord/Element/AbstractContainer.php | 7 +- .../src/PhpWord/Element/AbstractElement.php | 7 +- .../phpword/src/PhpWord/Element/Bookmark.php | 4 +- .../phpword/src/PhpWord/Element/CheckBox.php | 4 +- .../phpword/src/PhpWord/Element/Field.php | 40 +- .../phpword/src/PhpWord/Element/Image.php | 2 +- .../phpword/src/PhpWord/Element/Link.php | 6 +- .../phpword/src/PhpWord/Element/ListItem.php | 4 +- .../src/PhpWord/Element/PreserveText.php | 4 +- .../phpword/src/PhpWord/Element/SDT.php | 2 +- .../phpword/src/PhpWord/Element/Section.php | 22 +- .../phpword/src/PhpWord/Element/Text.php | 4 +- .../phpword/src/PhpWord/Element/Title.php | 4 +- .../src/PhpWord/Element/TrackChange.php | 4 +- .../phpword/src/PhpWord/Escaper/Rtf.php | 12 +- .../phpword/src/PhpWord/Metadata/DocInfo.php | 2 +- .../src/PhpWord/Metadata/Protection.php | 2 +- .../phpword/src/PhpWord/Reader/MsDoc.php | 22 +- .../phpword/src/PhpWord/Reader/ODText.php | 2 +- .../src/PhpWord/Reader/ODText/Content.php | 2 +- .../src/PhpWord/Reader/ODText/Meta.php | 2 +- .../phpword/src/PhpWord/Reader/Word2007.php | 5 +- .../PhpWord/Reader/Word2007/AbstractPart.php | 51 +- .../PhpWord/Reader/Word2007/DocPropsCore.php | 2 +- .../Reader/Word2007/DocPropsCustom.php | 2 +- .../src/PhpWord/Reader/Word2007/Document.php | 9 +- .../src/PhpWord/Reader/Word2007/Footnotes.php | 2 +- .../src/PhpWord/Reader/Word2007/Numbering.php | 4 +- .../src/PhpWord/Reader/Word2007/Settings.php | 2 +- .../src/PhpWord/Reader/Word2007/Styles.php | 9 +- .../phpword/src/PhpWord/Settings.php | 34 + .../phpword/src/PhpWord/Shared/Converter.php | 121 +- .../src/PhpWord/Shared}/Drawing.php | 41 +- .../phpword/src/PhpWord/Shared/Html.php | 376 +- .../Shared}/Microsoft/PasswordEncoder.php | 13 +- .../src/PhpWord/Shared}/Text.php | 44 +- .../src/PhpWord/Shared}/XMLReader.php | 30 +- .../src/PhpWord/Shared}/XMLWriter.php | 24 +- .../phpword/src/PhpWord/Shared/ZipArchive.php | 16 +- .../phpword/src/PhpWord/SimpleType/Border.php | 58 + .../src/PhpWord/SimpleType/VerticalJc.php | 36 + .../src/PhpWord/Style/AbstractStyle.php | 2 +- .../phpword/src/PhpWord/Style/Cell.php | 15 +- .../phpword/src/PhpWord/Style/Chart.php | 119 +- .../phpword/src/PhpWord/Style/Font.php | 50 +- .../phpword/src/PhpWord/Style/Language.php | 15 +- .../phpword/src/PhpWord/Style/ListItem.php | 17 +- .../phpword/src/PhpWord/Style/Paragraph.php | 17 +- .../phpword/src/PhpWord/Style/Section.php | 40 +- .../phpword/src/PhpWord/Style/Table.php | 34 +- .../phpword/src/PhpWord/TemplateProcessor.php | 830 +- .../src/PhpWord/Writer/AbstractWriter.php | 2 +- .../Writer/HTML/Element/AbstractElement.php | 4 +- .../Writer/HTML/Element/ListItemRun.php | 43 + .../src/PhpWord/Writer/HTML/Element/Table.php | 41 +- .../src/PhpWord/Writer/HTML/Element/Title.php | 2 +- .../PhpWord/Writer/HTML/Part/AbstractPart.php | 4 +- .../src/PhpWord/Writer/HTML/Style/Font.php | 1 + .../PhpWord/Writer/ODText/Element/Field.php | 81 + .../PhpWord/Writer/ODText/Element/Image.php | 2 +- .../PhpWord/Writer/ODText/Element/Link.php | 2 +- .../Writer/ODText/Element/PageBreak.php | 2 +- .../PhpWord/Writer/ODText/Element/Table.php | 6 +- .../PhpWord/Writer/ODText/Element/Text.php | 58 +- .../PhpWord/Writer/ODText/Element/TextRun.php | 8 +- .../PhpWord/Writer/ODText/Element/Title.php | 32 +- .../Writer/ODText/Part/AbstractPart.php | 6 +- .../PhpWord/Writer/ODText/Part/Content.php | 176 +- .../src/PhpWord/Writer/ODText/Part/Meta.php | 4 +- .../src/PhpWord/Writer/ODText/Part/Styles.php | 139 +- .../src/PhpWord/Writer/ODText/Style/Font.php | 22 +- .../PhpWord/Writer/ODText/Style/Paragraph.php | 116 +- .../src/PhpWord/Writer/ODText/Style/Table.php | 3 +- .../phpword/src/PhpWord/Writer/PDF/DomPDF.php | 12 +- .../phpword/src/PhpWord/Writer/PDF/MPDF.php | 15 +- .../phpword/src/PhpWord/Writer/PDF/TCPDF.php | 16 +- .../Writer/RTF/Element/AbstractElement.php | 8 +- .../src/PhpWord/Writer/RTF/Element/Field.php | 80 + .../src/PhpWord/Writer/RTF/Element/Table.php | 1 + .../PhpWord/Writer/RTF/Element/TextRun.php | 1 + .../src/PhpWord/Writer/RTF/Element/Title.php | 65 + .../src/PhpWord/Writer/RTF/Part/Document.php | 69 + .../src/PhpWord/Writer/RTF/Style/Border.php | 2 +- .../src/PhpWord/Writer/RTF/Style/Font.php | 3 +- .../PhpWord/Writer/RTF/Style/Indentation.php | 6 +- .../PhpWord/Writer/RTF/Style/Paragraph.php | 12 +- .../src/PhpWord/Writer/RTF/Style/Section.php | 19 +- .../src/PhpWord/Writer/RTF/Style/Tab.php | 2 +- .../Word2007/Element/AbstractElement.php | 12 +- .../Writer/Word2007/Element/Container.php | 4 +- .../PhpWord/Writer/Word2007/Element/Field.php | 1 + .../Writer/Word2007/Element/FormField.php | 8 +- .../PhpWord/Writer/Word2007/Element/Image.php | 10 +- .../Writer/Word2007/Element/ListItemRun.php | 53 +- .../PhpWord/Writer/Word2007/Element/SDT.php | 20 +- .../PhpWord/Writer/Word2007/Element/Shape.php | 12 +- .../PhpWord/Writer/Word2007/Element/TOC.php | 8 +- .../PhpWord/Writer/Word2007/Element/Table.php | 8 +- .../Writer/Word2007/Part/AbstractPart.php | 4 +- .../PhpWord/Writer/Word2007/Part/Chart.php | 66 +- .../PhpWord/Writer/Word2007/Part/Comments.php | 4 +- .../Writer/Word2007/Part/ContentTypes.php | 4 +- .../PhpWord/Writer/Word2007/Part/Document.php | 26 +- .../Writer/Word2007/Part/Footnotes.php | 4 +- .../Writer/Word2007/Part/Numbering.php | 8 +- .../src/PhpWord/Writer/Word2007/Part/Rels.php | 8 +- .../PhpWord/Writer/Word2007/Part/Settings.php | 4 +- .../PhpWord/Writer/Word2007/Part/Styles.php | 10 +- .../Writer/Word2007/Style/AbstractStyle.php | 27 +- .../PhpWord/Writer/Word2007/Style/Font.php | 25 +- .../PhpWord/Writer/Word2007/Style/Frame.php | 5 +- .../Writer/Word2007/Style/MarginBorder.php | 4 +- .../Writer/Word2007/Style/Paragraph.php | 7 +- .../PhpWord/Writer/Word2007/Style/Section.php | 4 + .../PhpWord/Writer/Word2007/Style/Spacing.php | 4 + .../PhpWord/Writer/Word2007/Style/Table.php | 19 +- .../symfony/config/Definition/ArrayNode.php | 2 +- .../symfony/config/Definition/BaseNode.php | 2 +- .../Builder/ArrayNodeDefinition.php | 4 +- .../Definition/Dumper/XmlReferenceDumper.php | 4 +- .../DependencyInjection/ConfigCachePass.php | 2 +- civicrm/vendor/symfony/config/FileLocator.php | 2 +- .../Resource/ClassExistenceResource.php | 15 +- .../symfony/config/Resource/GlobResource.php | 2 +- .../Resource/ReflectionClassResource.php | 12 +- .../config/ResourceCheckerConfigCache.php | 2 +- .../vendor/symfony/config/Util/XmlUtils.php | 18 +- civicrm/vendor/symfony/config/composer.json | 7 +- .../Compiler/AbstractRecursivePass.php | 4 +- .../Compiler/AutowireExceptionPass.php | 2 +- .../Compiler/AutowirePass.php | 19 +- .../Compiler/Compiler.php | 6 +- .../Compiler/DecoratorServicePass.php | 2 +- .../Compiler/FactoryReturnTypePass.php | 6 +- .../Compiler/InlineServiceDefinitionsPass.php | 2 +- .../Compiler/LoggingFormatter.php | 2 +- .../Compiler/PassConfig.php | 2 +- .../ResolveDefinitionTemplatesPass.php | 2 +- .../Config/AutowireServiceResource.php | 2 +- .../dependency-injection/Container.php | 24 +- .../dependency-injection/ContainerBuilder.php | 20 +- .../dependency-injection/Definition.php | 10 +- .../DefinitionDecorator.php | 2 +- .../dependency-injection/Dumper/PhpDumper.php | 14 +- .../dependency-injection/EnvVarProcessor.php | 4 +- .../LazyProxy/ProxyHelper.php | 42 +- .../Loader/IniFileLoader.php | 4 +- .../Loader/PhpFileLoader.php | 2 +- .../Loader/XmlFileLoader.php | 22 +- .../Loader/YamlFileLoader.php | 14 +- .../ParameterBag/ParameterBag.php | 2 +- .../dependency-injection/ServiceLocator.php | 2 +- .../dependency-injection/composer.json | 7 +- .../ContainerAwareEventDispatcher.php | 8 +- .../EventSubscriberInterface.php | 3 + .../symfony/event-dispatcher/composer.json | 8 +- .../vendor/symfony/filesystem/Filesystem.php | 63 +- .../vendor/symfony/filesystem/LockHandler.php | 6 +- .../vendor/symfony/filesystem/composer.json | 7 +- civicrm/vendor/symfony/finder/Finder.php | 8 +- .../Iterator/DepthRangeFilterIterator.php | 4 +- civicrm/vendor/symfony/finder/composer.json | 7 +- .../symfony/process/ExecutableFinder.php | 6 +- .../symfony/process/PhpExecutableFinder.php | 10 +- civicrm/vendor/symfony/process/PhpProcess.php | 2 +- .../symfony/process/Pipes/UnixPipes.php | 2 +- .../symfony/process/Pipes/WindowsPipes.php | 13 +- civicrm/vendor/symfony/process/Process.php | 30 +- .../vendor/symfony/process/ProcessBuilder.php | 2 +- .../vendor/symfony/process/ProcessUtils.php | 4 +- civicrm/vendor/symfony/process/composer.json | 7 +- .../symfony/var-dumper/Caster/AmqpCaster.php | 36 +- .../symfony/var-dumper/Caster/Caster.php | 2 +- .../symfony/var-dumper/Caster/DOMCaster.php | 70 +- .../var-dumper/Caster/ExceptionCaster.php | 30 +- .../symfony/var-dumper/Caster/MongoCaster.php | 2 +- .../symfony/var-dumper/Caster/PgSqlCaster.php | 54 +- .../var-dumper/Caster/ReflectionCaster.php | 2 +- .../symfony/var-dumper/Caster/SplCaster.php | 28 +- .../var-dumper/Caster/XmlResourceCaster.php | 44 +- .../var-dumper/Cloner/AbstractCloner.php | 2 +- .../vendor/symfony/var-dumper/Cloner/Data.php | 2 +- .../symfony/var-dumper/Cloner/VarCloner.php | 4 +- .../var-dumper/Dumper/AbstractDumper.php | 6 +- .../symfony/var-dumper/Dumper/CliDumper.php | 4 +- .../symfony/var-dumper/Dumper/HtmlDumper.php | 6 +- .../vendor/symfony/var-dumper/composer.json | 7 +- civicrm/vendor/tecnickcom/tcpdf/.gitignore | 4 +- civicrm/vendor/tecnickcom/tcpdf/VERSION | 2 +- civicrm/vendor/tecnickcom/tcpdf/composer.json | 2 +- .../tcpdf/include/barcodes/pdf417.php | 2 +- .../tcpdf/include/barcodes/qrcode.php | 3 +- .../tecnickcom/tcpdf/include/tcpdf_colors.php | 2 +- .../tecnickcom/tcpdf/include/tcpdf_fonts.php | 18 +- .../tecnickcom/tcpdf/include/tcpdf_images.php | 5 +- .../tecnickcom/tcpdf/include/tcpdf_static.php | 20 +- civicrm/vendor/tecnickcom/tcpdf/tcpdf.php | 238 +- .../tecnickcom/tcpdf/tcpdf_barcodes_1d.php | 8 +- .../zendframework/zend-escaper/.coveralls.yml | 3 - .../zend-escaper/CONTRIBUTING.md | 229 - .../zendframework/zend-escaper/README.md | 11 - .../zendframework/zend-escaper/composer.json | 34 - .../zend-escaper/phpunit.xml.dist | 35 - .../zend-escaper/phpunit.xml.travis | 35 - .../src/Exception/ExceptionInterface.php | 14 - .../Exception/InvalidArgumentException.php | 18 - .../src/Exception/RuntimeException.php | 18 - .../ACL/{EntityRole.xml => ACLEntityRole.xml} | 5 +- civicrm/xml/schema/ACL/files.xml | 2 +- civicrm/xml/schema/Contact/Relationship.xml | 5 + .../xml/schema/Contact/RelationshipCache.xml | 6 + civicrm/xml/schema/Contact/SavedSearch.xml | 2 + civicrm/xml/schema/Core/CustomField.xml | 2 +- civicrm/xml/schema/Core/CustomGroup.xml | 1 + civicrm/xml/schema/Core/Translation.xml | 122 + civicrm/xml/schema/Core/files.xml | 1 + .../{Exception.xml => DedupeException.xml} | 2 +- .../Dedupe/{Rule.xml => DedupeRule.xml} | 2 +- .../{RuleGroup.xml => DedupeRuleGroup.xml} | 2 +- civicrm/xml/schema/Dedupe/files.xml | 6 +- .../xml/schema/Financial/FinancialItem.xml | 5 +- civicrm/xml/schema/Price/LineItem.xml | 6 +- civicrm/xml/templates/dao.tpl | 25 +- civicrm/xml/templates/drop.tpl | 7 +- .../message_templates/case_activity_html.tpl | 4 +- .../case_activity_subject.tpl | 2 +- .../message_templates/case_activity_text.tpl | 6 +- .../contribution_invoice_receipt_html.tpl | 30 +- .../contribution_offline_receipt_html.tpl | 46 +- .../contribution_offline_receipt_text.tpl | 32 +- .../contribution_online_receipt_html.tpl | 62 +- .../contribution_online_receipt_text.tpl | 58 +- .../event_offline_receipt_html.tpl | 92 +- .../event_offline_receipt_text.tpl | 150 +- .../event_online_receipt_html.tpl | 94 +- .../event_online_receipt_subject.tpl | 2 +- .../event_online_receipt_text.tpl | 142 +- .../event_registration_receipt_html.tpl | 8 +- .../event_registration_receipt_text.tpl | 8 +- .../membership_offline_receipt_html.tpl | 42 +- .../membership_offline_receipt_text.tpl | 40 +- .../membership_online_receipt_html.tpl | 64 +- .../membership_online_receipt_text.tpl | 64 +- .../payment_or_refund_notification_html.tpl | 26 +- .../payment_or_refund_notification_text.tpl | 27 +- civicrm/xml/templates/schema.tpl | 71 +- civicrm/xml/version.xml | 2 +- includes/civicrm.basepage.php | 3 + phpunit.xml.dist | 1 + 972 files changed, 35981 insertions(+), 21158 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 civicrm/CRM/ACL/BAO/ACLEntityRole.php create mode 100644 civicrm/CRM/ACL/DAO/ACLEntityRole.php create mode 100644 civicrm/CRM/Contact/AccessTrait.php create mode 100644 civicrm/CRM/Core/BAO/Translation.php create mode 100644 civicrm/CRM/Core/DAO/Translation.php create mode 100644 civicrm/CRM/Core/DynamicFKAccessTrait.php create mode 100644 civicrm/CRM/Dedupe/BAO/DedupeException.php create mode 100644 civicrm/CRM/Dedupe/BAO/DedupeRule.php create mode 100644 civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php create mode 100644 civicrm/CRM/Dedupe/DAO/DedupeException.php create mode 100644 civicrm/CRM/Dedupe/DAO/DedupeRule.php create mode 100644 civicrm/CRM/Dedupe/DAO/DedupeRuleGroup.php create mode 100644 civicrm/CRM/Upgrade/Incremental/php/FiveThirtyNine.php create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.39.alpha1.mysql.tpl create mode 100644 civicrm/CRM/Utils/LazyArray.php create mode 100644 civicrm/Civi/API/Event/AuthorizedTrait.php create mode 100644 civicrm/Civi/API/Event/RequestTrait.php create mode 100644 civicrm/Civi/Api4/ACLEntityRole.php create mode 100644 civicrm/Civi/Api4/DedupeException.php create mode 100644 civicrm/Civi/Api4/DedupeRule.php create mode 100644 civicrm/Civi/Api4/DedupeRuleGroup.php create mode 100644 civicrm/Civi/Api4/Event/ActiveUserTrait.php create mode 100644 civicrm/Civi/Api4/Event/AuthorizeRecordEvent.php delete mode 100644 civicrm/Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php create mode 100644 civicrm/Civi/Api4/Event/ValidateValuesEvent.php create mode 100644 civicrm/Civi/Api4/FinancialItem.php create mode 100644 civicrm/Civi/Api4/Generic/CheckAccessAction.php create mode 100644 civicrm/Civi/Api4/Generic/Traits/ReadOnly.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/ACLEntityRoleCreationSpecProvider.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/BatchCreationSpecProvider.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/FinancialItemCreationSpecProvider.php create mode 100644 civicrm/Civi/Api4/WordReplacement.php create mode 100644 civicrm/Civi/Core/Event/EventPrinter.php create mode 100644 civicrm/Civi/Core/Event/EventScanner.php create mode 100644 civicrm/Civi/Core/Event/HookStyleListener.php create mode 100644 civicrm/Civi/Test/ACLPermissionTrait.php create mode 100644 civicrm/ext/afform/admin/ang/afGuiEditor/inputType/EntityRef.html create mode 100644 civicrm/ext/afform/core/Civi/Afform/Utils.php create mode 100644 civicrm/ext/afform/core/ang/af/fields/EntityRef.html create mode 100644 civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php create mode 100644 civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php delete mode 100644 civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php create mode 100644 civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTestCase.php create mode 100644 civicrm/ext/oauth-client/CRM/OAuth/BAO/OAuthContactToken.php create mode 100644 civicrm/ext/oauth-client/CRM/OAuth/ContactFromToken.php create mode 100644 civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthContactToken.php create mode 100644 civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Create.php create mode 100644 civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Delete.php create mode 100644 civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Get.php create mode 100644 civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/OnlyModifyOwnTokensTrait.php create mode 100644 civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Update.php create mode 100644 civicrm/ext/oauth-client/Civi/Api4/OAuthContactToken.php create mode 100644 civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthContactTokenTest.php create mode 100644 civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.entityType.php create mode 100644 civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.xml rename civicrm/ext/search_kit/ang/{crmSearchActions.ang.php => crmSearchTasks.ang.php} (71%) rename civicrm/ext/search_kit/ang/{crmSearchActions.module.js => crmSearchTasks.module.js} (88%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchBatchRunner.component.js (93%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchBatchRunner.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/boolean.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/crmMultiSelectDate.directive.js (98%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/crmSearchInput.component.js (91%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/crmSearchInput.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/crmSearchInputVal.component.js (83%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/date.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/entityRef.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/float.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/integer.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/select.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions => crmSearchTasks}/crmSearchInput/text.html (100%) rename civicrm/ext/search_kit/ang/{crmSearchActions/crmSearchActionDelete.ctrl.js => crmSearchTasks/crmSearchTaskDelete.ctrl.js} (76%) rename civicrm/ext/search_kit/ang/{crmSearchActions/crmSearchActionDelete.html => crmSearchTasks/crmSearchTaskDelete.html} (88%) rename civicrm/ext/search_kit/ang/{crmSearchActions/crmSearchActionUpdate.ctrl.js => crmSearchTasks/crmSearchTaskUpdate.ctrl.js} (90%) rename civicrm/ext/search_kit/ang/{crmSearchActions/crmSearchActionUpdate.html => crmSearchTasks/crmSearchTaskUpdate.html} (93%) rename civicrm/ext/search_kit/ang/{crmSearchActions/crmSearchActions.component.js => crmSearchTasks/crmSearchTasks.component.js} (89%) rename civicrm/ext/search_kit/ang/{crmSearchActions/crmSearchActions.html => crmSearchTasks/crmSearchTasks.html} (100%) rename civicrm/ext/search_kit/css/{crmSearchActions.css => crmSearchTasks.css} (62%) create mode 100644 civicrm/release-notes/5.39.0.md create mode 100644 civicrm/vendor/laminas/laminas-escaper/CHANGELOG.md create mode 100644 civicrm/vendor/laminas/laminas-escaper/COPYRIGHT.md rename civicrm/vendor/{zendframework/zend-escaper/LICENSE.txt => laminas/laminas-escaper/LICENSE.md} (54%) create mode 100644 civicrm/vendor/laminas/laminas-escaper/README.md create mode 100644 civicrm/vendor/laminas/laminas-escaper/composer.json rename civicrm/vendor/{zendframework/zend-escaper => laminas/laminas-escaper}/src/Escaper.php (87%) create mode 100644 civicrm/vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php create mode 100644 civicrm/vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php create mode 100644 civicrm/vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/.github/FUNDING.yml create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/.github/workflows/release-on-milestone-closed.yml create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/CHANGELOG.md create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/COPYRIGHT.md create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/LICENSE.md create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/README.md create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/composer.json create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/config/replacements.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/src/Module.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php create mode 100644 civicrm/vendor/laminas/laminas-zendframework-bridge/src/autoload.php delete mode 100644 civicrm/vendor/pclzip/pclzip/composer.json delete mode 100644 civicrm/vendor/pclzip/pclzip/gnu-lgpl.txt delete mode 100644 civicrm/vendor/pclzip/pclzip/pclzip.lib.php delete mode 100644 civicrm/vendor/pclzip/pclzip/readme.txt delete mode 100644 civicrm/vendor/phpoffice/common/.gitignore delete mode 100644 civicrm/vendor/phpoffice/common/.scrutinizer.yml delete mode 100644 civicrm/vendor/phpoffice/common/.travis.yml delete mode 100644 civicrm/vendor/phpoffice/common/.travis_shell_after_success.sh delete mode 100644 civicrm/vendor/phpoffice/common/CHANGELOG.md delete mode 100644 civicrm/vendor/phpoffice/common/COPYING delete mode 100644 civicrm/vendor/phpoffice/common/COPYING.LESSER delete mode 100644 civicrm/vendor/phpoffice/common/LICENSE delete mode 100644 civicrm/vendor/phpoffice/common/PATCHES.txt delete mode 100644 civicrm/vendor/phpoffice/common/README.md delete mode 100644 civicrm/vendor/phpoffice/common/VERSION delete mode 100644 civicrm/vendor/phpoffice/common/composer.json delete mode 100644 civicrm/vendor/phpoffice/common/phpmd.xml.dist delete mode 100644 civicrm/vendor/phpoffice/common/phpunit.xml.dist delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/PclZipAdapter.php delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipArchiveAdapter.php delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipInterface.php delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/Autoloader.php delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/File.php delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/Font.php delete mode 100644 civicrm/vendor/phpoffice/common/src/Common/Microsoft/OLERead.php create mode 100644 civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/how-to-use.md create mode 100644 civicrm/vendor/phpoffice/phpword/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 civicrm/vendor/phpoffice/phpword/.github/support.yml create mode 100644 civicrm/vendor/phpoffice/phpword/.github/workflows/ci.yml create mode 100644 civicrm/vendor/phpoffice/phpword/.github/workflows/github-pages.yml create mode 100644 civicrm/vendor/phpoffice/phpword/.github_changelog_generator delete mode 100644 civicrm/vendor/phpoffice/phpword/PATCHES.txt create mode 100644 civicrm/vendor/phpoffice/phpword/sonar-project.properties rename civicrm/vendor/phpoffice/{common/src/Common => phpword/src/PhpWord/Shared}/Drawing.php (88%) rename civicrm/vendor/phpoffice/{common/src/Common => phpword/src/PhpWord/Shared}/Microsoft/PasswordEncoder.php (95%) rename civicrm/vendor/phpoffice/{common/src/Common => phpword/src/PhpWord/Shared}/Text.php (81%) rename civicrm/vendor/phpoffice/{common/src/Common => phpword/src/PhpWord/Shared}/XMLReader.php (87%) rename civicrm/vendor/phpoffice/{common/src/Common => phpword/src/PhpWord/Shared}/XMLWriter.php (88%) create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Border.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/VerticalJc.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItemRun.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Field.php create mode 100644 civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Field.php delete mode 100644 civicrm/vendor/zendframework/zend-escaper/.coveralls.yml delete mode 100644 civicrm/vendor/zendframework/zend-escaper/CONTRIBUTING.md delete mode 100644 civicrm/vendor/zendframework/zend-escaper/README.md delete mode 100644 civicrm/vendor/zendframework/zend-escaper/composer.json delete mode 100644 civicrm/vendor/zendframework/zend-escaper/phpunit.xml.dist delete mode 100644 civicrm/vendor/zendframework/zend-escaper/phpunit.xml.travis delete mode 100644 civicrm/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php delete mode 100644 civicrm/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php delete mode 100644 civicrm/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php rename civicrm/xml/schema/ACL/{EntityRole.xml => ACLEntityRole.xml} (93%) create mode 100644 civicrm/xml/schema/Core/Translation.xml rename civicrm/xml/schema/Dedupe/{Exception.xml => DedupeException.xml} (97%) rename civicrm/xml/schema/Dedupe/{Rule.xml => DedupeRule.xml} (98%) rename civicrm/xml/schema/Dedupe/{RuleGroup.xml => DedupeRuleGroup.xml} (98%) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..8698600545 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: https://civicrm.org/civicrm/contribute/transact?reset=1&id=47 diff --git a/civicrm.php b/civicrm.php index c5f5ccbcd8..f9f623ad76 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /** * Plugin Name: CiviCRM * Description: CiviCRM - Growing and Sustaining Relationships - * Version: 5.38.1 + * Version: 5.39.0 * Requires at least: 4.9 * Requires PHP: 7.2 * Author: CiviCRM LLC @@ -54,7 +54,7 @@ if (!defined('ABSPATH')) { } // Set version here: when it changes, will force Javascript & CSS to reload. -define('CIVICRM_PLUGIN_VERSION', '5.38.1'); +define('CIVICRM_PLUGIN_VERSION', '5.39.0'); // Store reference to this file. if (!defined('CIVICRM_PLUGIN_FILE')) { diff --git a/civicrm/CRM/ACL/BAO/ACLEntityRole.php b/civicrm/CRM/ACL/BAO/ACLEntityRole.php new file mode 100644 index 0000000000..177d07ffa6 --- /dev/null +++ b/civicrm/CRM/ACL/BAO/ACLEntityRole.php @@ -0,0 +1,78 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * Access Control AclRole. + */ +class CRM_ACL_BAO_ACLEntityRole extends CRM_ACL_DAO_ACLEntityRole { + + /** + * Whitelist of possible values for the entity_table field + * + * @return array + */ + public static function entityTables(): array { + return [ + 'civicrm_contact' => ts('Contact'), + 'civicrm_group' => ts('Group'), + ]; + } + + /** + * @param array $params + * + * @return CRM_ACL_DAO_EntityRole + */ + public static function create(&$params) { + return self::writeRecord($params); + } + + /** + * @param array $params + * @param $defaults + */ + public static function retrieve(&$params, &$defaults) { + CRM_Core_DAO::commonRetrieve(__CLASS__, $params, $defaults); + } + + /** + * Update the is_active flag in the db. + * + * @param int $id + * Id of the database record. + * @param bool $is_active + * Value we want to set the is_active field. + * + * @return bool + * true if we found and updated the object, else false + */ + public static function setIsActive($id, $is_active) { + return CRM_Core_DAO::setFieldValue(__CLASS__, $id, 'is_active', $is_active); + } + + /** + * Delete Dedupe Entity Role records. + * + * @param int $entityRoleId + * ID of the EntityRole record to be deleted. + * + */ + public static function del($entityRoleId) { + return parent::deleteRecord(['id' => $entityRoleId]); + } + +} diff --git a/civicrm/CRM/ACL/BAO/EntityRole.php b/civicrm/CRM/ACL/BAO/EntityRole.php index b2603ca868..8a72c8006c 100644 --- a/civicrm/CRM/ACL/BAO/EntityRole.php +++ b/civicrm/CRM/ACL/BAO/EntityRole.php @@ -18,71 +18,4 @@ /** * Access Control EntityRole. */ -class CRM_ACL_BAO_EntityRole extends CRM_ACL_DAO_EntityRole { - public static $_entityTable = NULL; - - /** - * Get entity table. - * - * @return array|null - */ - public static function entityTable() { - if (!self::$_entityTable) { - self::$_entityTable = [ - 'civicrm_contact' => ts('Contact'), - 'civicrm_group' => ts('Group'), - ]; - } - return self::$_entityTable; - } - - /** - * @param array $params - * - * @return CRM_ACL_DAO_EntityRole - */ - public static function create(&$params) { - $dao = new CRM_ACL_DAO_EntityRole(); - $dao->copyValues($params); - $dao->save(); - return $dao; - } - - /** - * @param array $params - * @param $defaults - */ - public static function retrieve(&$params, &$defaults) { - CRM_Core_DAO::commonRetrieve('CRM_ACL_DAO_EntityRole', $params, $defaults); - } - - /** - * Update the is_active flag in the db. - * - * @param int $id - * Id of the database record. - * @param bool $is_active - * Value we want to set the is_active field. - * - * @return bool - * true if we found and updated the object, else false - */ - public static function setIsActive($id, $is_active) { - return CRM_Core_DAO::setFieldValue('CRM_ACL_DAO_EntityRole', $id, 'is_active', $is_active); - } - - /** - * Delete Entity Role records. - * - * @param int $entityRoleId - * ID of the EntityRole record to be deleted. - * - */ - public static function del($entityRoleId) { - $entityDAO = new CRM_ACL_DAO_EntityRole(); - $entityDAO->id = $entityRoleId; - $entityDAO->find(TRUE); - $entityDAO->delete(); - } - -} +class CRM_ACL_BAO_EntityRole extends CRM_ACL_BAO_ACLEntityRole {} diff --git a/civicrm/CRM/ACL/DAO/ACLEntityRole.php b/civicrm/CRM/ACL/DAO/ACLEntityRole.php new file mode 100644 index 0000000000..0c8b374a0f --- /dev/null +++ b/civicrm/CRM/ACL/DAO/ACLEntityRole.php @@ -0,0 +1,273 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from xml/schema/CRM/ACL/ACLEntityRole.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:b90187559ecba3c3d038c00a8b818ef4) + */ + +/** + * Database access object for the ACLEntityRole entity. + */ +class CRM_ACL_DAO_ACLEntityRole extends CRM_Core_DAO { + const EXT = 'civicrm'; + const TABLE_ADDED = '1.6'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_acl_entity_role'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = FALSE; + + /** + * Unique table ID + * + * @var int + */ + public $id; + + /** + * Foreign Key to ACL Role (which is an option value pair and hence an implicit FK) + * + * @var int + */ + public $acl_role_id; + + /** + * Table of the object joined to the ACL Role (Contact or Group) + * + * @var string + */ + public $entity_table; + + /** + * ID of the group/contact object being joined + * + * @var int + */ + public $entity_id; + + /** + * Is this property active? + * + * @var bool + */ + public $is_active; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_acl_entity_role'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? ts('ACLEntity Roles') : ts('ACLEntity Role'); + } + + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() { + if (!isset(Civi::$statics[__CLASS__]['links'])) { + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Dynamic(self::getTableName(), 'entity_id', NULL, 'id', 'entity_table'); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + } + return Civi::$statics[__CLASS__]['links']; + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Entity Role'), + 'description' => ts('Unique table ID'), + 'required' => TRUE, + 'where' => 'civicrm_acl_entity_role.id', + 'table_name' => 'civicrm_acl_entity_role', + 'entity' => 'ACLEntityRole', + 'bao' => 'CRM_ACL_BAO_ACLEntityRole', + 'localizable' => 0, + 'html' => [ + 'type' => 'Number', + ], + 'readonly' => TRUE, + 'add' => '1.6', + ], + 'acl_role_id' => [ + 'name' => 'acl_role_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('ACL Role ID'), + 'description' => ts('Foreign Key to ACL Role (which is an option value pair and hence an implicit FK)'), + 'required' => TRUE, + 'where' => 'civicrm_acl_entity_role.acl_role_id', + 'table_name' => 'civicrm_acl_entity_role', + 'entity' => 'ACLEntityRole', + 'bao' => 'CRM_ACL_BAO_ACLEntityRole', + 'localizable' => 0, + 'add' => '1.6', + ], + 'entity_table' => [ + 'name' => 'entity_table', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Entity Table'), + 'description' => ts('Table of the object joined to the ACL Role (Contact or Group)'), + 'required' => TRUE, + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_acl_entity_role.entity_table', + 'table_name' => 'civicrm_acl_entity_role', + 'entity' => 'ACLEntityRole', + 'bao' => 'CRM_ACL_BAO_ACLEntityRole', + 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_ACL_BAO_ACLEntityRole::entityTables', + ], + 'add' => '1.6', + ], + 'entity_id' => [ + 'name' => 'entity_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('ACL Entity ID'), + 'description' => ts('ID of the group/contact object being joined'), + 'required' => TRUE, + 'where' => 'civicrm_acl_entity_role.entity_id', + 'table_name' => 'civicrm_acl_entity_role', + 'entity' => 'ACLEntityRole', + 'bao' => 'CRM_ACL_BAO_ACLEntityRole', + 'localizable' => 0, + 'add' => '1.6', + ], + 'is_active' => [ + 'name' => 'is_active', + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'title' => ts('ACL Entity Role is Active'), + 'description' => ts('Is this property active?'), + 'where' => 'civicrm_acl_entity_role.is_active', + 'table_name' => 'civicrm_acl_entity_role', + 'entity' => 'ACLEntityRole', + 'bao' => 'CRM_ACL_BAO_ACLEntityRole', + 'localizable' => 0, + 'add' => '1.6', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * 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() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'acl_entity_role', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'acl_entity_role', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = [ + 'index_role' => [ + 'name' => 'index_role', + 'field' => [ + 0 => 'acl_role_id', + ], + 'localizable' => FALSE, + 'sig' => 'civicrm_acl_entity_role::0::acl_role_id', + ], + 'index_entity' => [ + 'name' => 'index_entity', + 'field' => [ + 0 => 'entity_table', + 1 => 'entity_id', + ], + 'localizable' => FALSE, + 'sig' => 'civicrm_acl_entity_role::0::entity_table::entity_id', + ], + ]; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/CRM/ACL/DAO/EntityRole.php b/civicrm/CRM/ACL/DAO/EntityRole.php index 3bf022dba0..5bd5f14a32 100644 --- a/civicrm/CRM/ACL/DAO/EntityRole.php +++ b/civicrm/CRM/ACL/DAO/EntityRole.php @@ -3,268 +3,9 @@ /** * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * - * Generated from xml/schema/CRM/ACL/EntityRole.xml - * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c26077f17afc43e2f44efca99ae8e8fe) */ /** - * Database access object for the EntityRole entity. + * Database access object for the ACLEntityRole entity. */ -class CRM_ACL_DAO_EntityRole extends CRM_Core_DAO { - const EXT = 'civicrm'; - const TABLE_ADDED = '1.6'; - - /** - * Static instance to hold the table name. - * - * @var string - */ - public static $_tableName = 'civicrm_acl_entity_role'; - - /** - * Should CiviCRM log any modifications to this table in the civicrm_log table. - * - * @var bool - */ - public static $_log = FALSE; - - /** - * Unique table ID - * - * @var int - */ - public $id; - - /** - * Foreign Key to ACL Role (which is an option value pair and hence an implicit FK) - * - * @var int - */ - public $acl_role_id; - - /** - * Table of the object joined to the ACL Role (Contact or Group) - * - * @var string - */ - public $entity_table; - - /** - * ID of the group/contact object being joined - * - * @var int - */ - public $entity_id; - - /** - * Is this property active? - * - * @var bool - */ - public $is_active; - - /** - * Class constructor. - */ - public function __construct() { - $this->__table = 'civicrm_acl_entity_role'; - parent::__construct(); - } - - /** - * Returns localized title of this entity. - * - * @param bool $plural - * Whether to return the plural version of the title. - */ - public static function getEntityTitle($plural = FALSE) { - return $plural ? ts('Entity Roles') : ts('Entity Role'); - } - - /** - * Returns foreign keys and entity references. - * - * @return array - * [CRM_Core_Reference_Interface] - */ - public static function getReferenceColumns() { - if (!isset(Civi::$statics[__CLASS__]['links'])) { - Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); - Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Dynamic(self::getTableName(), 'entity_id', NULL, 'id', 'entity_table'); - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); - } - return Civi::$statics[__CLASS__]['links']; - } - - /** - * Returns all the column names of this table - * - * @return array - */ - public static function &fields() { - if (!isset(Civi::$statics[__CLASS__]['fields'])) { - Civi::$statics[__CLASS__]['fields'] = [ - 'id' => [ - 'name' => 'id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Entity Role'), - 'description' => ts('Unique table ID'), - 'required' => TRUE, - 'where' => 'civicrm_acl_entity_role.id', - 'table_name' => 'civicrm_acl_entity_role', - 'entity' => 'EntityRole', - 'bao' => 'CRM_ACL_BAO_EntityRole', - 'localizable' => 0, - 'html' => [ - 'type' => 'Number', - ], - 'readonly' => TRUE, - 'add' => '1.6', - ], - 'acl_role_id' => [ - 'name' => 'acl_role_id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('ACL Role ID'), - 'description' => ts('Foreign Key to ACL Role (which is an option value pair and hence an implicit FK)'), - 'required' => TRUE, - 'where' => 'civicrm_acl_entity_role.acl_role_id', - 'table_name' => 'civicrm_acl_entity_role', - 'entity' => 'EntityRole', - 'bao' => 'CRM_ACL_BAO_EntityRole', - 'localizable' => 0, - 'add' => '1.6', - ], - 'entity_table' => [ - 'name' => 'entity_table', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Entity Table'), - 'description' => ts('Table of the object joined to the ACL Role (Contact or Group)'), - 'required' => TRUE, - 'maxlength' => 64, - 'size' => CRM_Utils_Type::BIG, - 'where' => 'civicrm_acl_entity_role.entity_table', - 'table_name' => 'civicrm_acl_entity_role', - 'entity' => 'EntityRole', - 'bao' => 'CRM_ACL_BAO_EntityRole', - 'localizable' => 0, - 'add' => '1.6', - ], - 'entity_id' => [ - 'name' => 'entity_id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('ACL Entity ID'), - 'description' => ts('ID of the group/contact object being joined'), - 'required' => TRUE, - 'where' => 'civicrm_acl_entity_role.entity_id', - 'table_name' => 'civicrm_acl_entity_role', - 'entity' => 'EntityRole', - 'bao' => 'CRM_ACL_BAO_EntityRole', - 'localizable' => 0, - 'add' => '1.6', - ], - 'is_active' => [ - 'name' => 'is_active', - 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('ACL Entity Role is Active'), - 'description' => ts('Is this property active?'), - 'where' => 'civicrm_acl_entity_role.is_active', - 'table_name' => 'civicrm_acl_entity_role', - 'entity' => 'EntityRole', - 'bao' => 'CRM_ACL_BAO_EntityRole', - 'localizable' => 0, - 'add' => '1.6', - ], - ]; - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); - } - return Civi::$statics[__CLASS__]['fields']; - } - - /** - * 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() { - if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { - Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); - } - return Civi::$statics[__CLASS__]['fieldKeys']; - } - - /** - * Returns the names of this table - * - * @return string - */ - public static function getTableName() { - return self::$_tableName; - } - - /** - * Returns if this table needs to be logged - * - * @return bool - */ - public function getLog() { - return self::$_log; - } - - /** - * Returns the list of fields that can be imported - * - * @param bool $prefix - * - * @return array - */ - public static function &import($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'acl_entity_role', $prefix, []); - return $r; - } - - /** - * Returns the list of fields that can be exported - * - * @param bool $prefix - * - * @return array - */ - public static function &export($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'acl_entity_role', $prefix, []); - return $r; - } - - /** - * Returns the list of indices - * - * @param bool $localize - * - * @return array - */ - public static function indices($localize = TRUE) { - $indices = [ - 'index_role' => [ - 'name' => 'index_role', - 'field' => [ - 0 => 'acl_role_id', - ], - 'localizable' => FALSE, - 'sig' => 'civicrm_acl_entity_role::0::acl_role_id', - ], - 'index_entity' => [ - 'name' => 'index_entity', - 'field' => [ - 0 => 'entity_table', - 1 => 'entity_id', - ], - 'localizable' => FALSE, - 'sig' => 'civicrm_acl_entity_role::0::entity_table::entity_id', - ], - ]; - return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; - } - -} +class CRM_ACL_DAO_EntityRole extends CRM_ACL_DAO_ACLEntityRole {} diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index a4850929e9..f07bdba02f 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -1265,7 +1265,7 @@ WHERE entity_id =%1 AND entity_table = %2"; * @throws CRM_Core_Exception */ public static function sendSMS( - &$contactDetails = NULL, + &$contactDetails, &$activityParams, &$smsProviderParams = [], &$contactIds = NULL, @@ -1417,7 +1417,7 @@ WHERE entity_id =%1 AND entity_table = %2"; public static function sendSMSMessage( $toID, &$tokenText, - $smsProviderParams = [], + $smsProviderParams, $activityID, $sourceContactID = NULL ) { @@ -1574,7 +1574,7 @@ WHERE entity_id =%1 AND entity_table = %2"; 'contact_type' => 'Individual', 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $tmpConatctField = []; if (is_array($fieldsArray)) { diff --git a/civicrm/CRM/Activity/Import/Parser.php b/civicrm/CRM/Activity/Import/Parser.php index 73bc3a02b0..3846fd9e07 100644 --- a/civicrm/CRM/Activity/Import/Parser.php +++ b/civicrm/CRM/Activity/Import/Parser.php @@ -58,7 +58,7 @@ abstract class CRM_Activity_Import_Parser extends CRM_Import_Parser { */ public function run( array $fileName, - $separator = ',', + $separator, &$mapper, $skipColumnHeader = FALSE, $mode = self::MODE_PREVIEW, diff --git a/civicrm/CRM/Activity/Import/Parser/Activity.php b/civicrm/CRM/Activity/Import/Parser/Activity.php index 2b72aefb00..1004eb54b3 100644 --- a/civicrm/CRM/Activity/Import/Parser/Activity.php +++ b/civicrm/CRM/Activity/Import/Parser/Activity.php @@ -215,7 +215,7 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Activity_Import_Parser { 'contact_type' => 'Individual', 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $disp = NULL; foreach ($fieldsArray as $value) { diff --git a/civicrm/CRM/Activity/Selector/Activity.php b/civicrm/CRM/Activity/Selector/Activity.php index 9d991924bd..fff4d57ed9 100644 --- a/civicrm/CRM/Activity/Selector/Activity.php +++ b/civicrm/CRM/Activity/Selector/Activity.php @@ -285,7 +285,7 @@ class CRM_Activity_Selector_Activity extends CRM_Core_Selector_Base implements C public function getPagerParams($action, &$params) { $params['status'] = ts('Activities %%StatusMessage%%'); $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; diff --git a/civicrm/CRM/Activity/Selector/Search.php b/civicrm/CRM/Activity/Selector/Search.php index 10c76703c2..059da02763 100644 --- a/civicrm/CRM/Activity/Selector/Search.php +++ b/civicrm/CRM/Activity/Selector/Search.php @@ -174,7 +174,7 @@ class CRM_Activity_Selector_Search extends CRM_Core_Selector_Base implements CRM public function getPagerParams($action, &$params) { $params['status'] = ts('Activities %%StatusMessage%%'); $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; } diff --git a/civicrm/CRM/Admin/Form/ContactType.php b/civicrm/CRM/Admin/Form/ContactType.php index 857977f01e..661913613a 100644 --- a/civicrm/CRM/Admin/Form/ContactType.php +++ b/civicrm/CRM/Admin/Form/ContactType.php @@ -89,7 +89,7 @@ class CRM_Admin_Form_ContactType extends CRM_Admin_Form { $reservedKeyWords = CRM_Core_SelectValues::customGroupExtends(); //restrict "name" from being a reserved keyword when a new contact subtype is created - if (!$self->_id && in_array($contactName, array_keys($reservedKeyWords))) { + if (!$self->_id && array_key_exists($contactName, $reservedKeyWords)) { $errors['label'] = ts('Contact type names should not use reserved keywords.'); } return empty($errors) ? TRUE : $errors; diff --git a/civicrm/CRM/Admin/Form/Generic.php b/civicrm/CRM/Admin/Form/Generic.php index 6c4a66ceff..a44e5a55a7 100644 --- a/civicrm/CRM/Admin/Form/Generic.php +++ b/civicrm/CRM/Admin/Form/Generic.php @@ -24,7 +24,6 @@ class CRM_Admin_Form_Generic extends CRM_Core_Form { use CRM_Admin_Form_SettingTrait; protected $_settings = []; - protected $includesReadOnlyFields = FALSE; public $_defaults = []; /** @@ -57,11 +56,6 @@ class CRM_Admin_Form_Generic extends CRM_Core_Form { public function buildQuickForm() { $this->addFieldsDefinedInSettingsMetadata(); - // @todo look at sharing the code below in the settings trait. - if ($this->includesReadOnlyFields) { - CRM_Core_Session::setStatus(ts("Some fields are loaded as 'readonly' as they have been set (overridden) in civicrm.settings.php."), '', 'info', ['expires' => 0]); - } - // @todo - do we still like this redirect? CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm/admin', 'reset=1')); $this->addButtons([ diff --git a/civicrm/CRM/Admin/Form/Preferences.php b/civicrm/CRM/Admin/Form/Preferences.php index 343df0fdd1..33a23e5e47 100644 --- a/civicrm/CRM/Admin/Form/Preferences.php +++ b/civicrm/CRM/Admin/Form/Preferences.php @@ -126,9 +126,6 @@ class CRM_Admin_Form_Preferences extends CRM_Core_Form { CRM_Core_Session::setStatus($e->getMessage(), ts('Save Failed'), 'error'); } - // Update any settings stored in dynamic js - CRM_Core_Resources::singleton()->resetCacheCode(); - CRM_Core_Session::setStatus(ts('Your changes have been saved.'), ts('Saved'), 'success'); } diff --git a/civicrm/CRM/Admin/Form/PreferencesDate.php b/civicrm/CRM/Admin/Form/PreferencesDate.php index 743d41495a..3f9337bb89 100644 --- a/civicrm/CRM/Admin/Form/PreferencesDate.php +++ b/civicrm/CRM/Admin/Form/PreferencesDate.php @@ -109,9 +109,6 @@ class CRM_Admin_Form_PreferencesDate extends CRM_Admin_Form { $dao->save(); - // Update dynamic js to reflect new date settings - CRM_Core_Resources::singleton()->resetCacheCode(); - CRM_Core_Session::setStatus(ts("The date type '%1' has been saved.", [1 => $params['name']] ), ts('Saved'), 'success'); diff --git a/civicrm/CRM/Admin/Form/Setting.php b/civicrm/CRM/Admin/Form/Setting.php index 57e2c9fff5..0011769f4d 100644 --- a/civicrm/CRM/Admin/Form/Setting.php +++ b/civicrm/CRM/Admin/Form/Setting.php @@ -24,8 +24,6 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { protected $_settings = []; - protected $includesReadOnlyFields; - /** * Set default values for the form. * @@ -66,10 +64,6 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { ]); $this->addFieldsDefinedInSettingsMetadata(); - - if ($this->includesReadOnlyFields) { - CRM_Core_Session::setStatus(ts("Some fields are loaded as 'readonly' as they have been set (overridden) in civicrm.settings.php."), '', 'info', ['expires' => 0]); - } } /** diff --git a/civicrm/CRM/Admin/Form/Setting/Localization.php b/civicrm/CRM/Admin/Form/Setting/Localization.php index 037e3aee6a..53a26fe99b 100644 --- a/civicrm/CRM/Admin/Form/Setting/Localization.php +++ b/civicrm/CRM/Admin/Form/Setting/Localization.php @@ -354,11 +354,13 @@ class CRM_Admin_Form_Setting_Localization extends CRM_Admin_Form_Setting { * @return array */ public static function getDefaultLanguageOptions() { - return [ + $availableOptions = [ '*default*' => ts('Use default site language'), 'undefined' => ts('Leave undefined'), 'current_site_language' => ts('Use language in use at the time'), ]; + $availableLanguages = array_merge($availableOptions, CRM_Admin_Form_Setting_Localization::getDefaultLocaleOptions()); + return $availableLanguages; } } diff --git a/civicrm/CRM/Admin/Form/Setting/Search.php b/civicrm/CRM/Admin/Form/Setting/Search.php index 18ec5d7e8e..ee4d855af9 100644 --- a/civicrm/CRM/Admin/Form/Setting/Search.php +++ b/civicrm/CRM/Admin/Form/Setting/Search.php @@ -35,6 +35,7 @@ class CRM_Admin_Form_Setting_Search extends CRM_Admin_Form_Setting { 'contact_reference_options' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'search_autocomplete_count' => CRM_Core_BAO_Setting::SEARCH_PREFERENCES_NAME, 'enable_innodb_fts' => CRM_Core_BAO_Setting::SEARCH_PREFERENCES_NAME, + 'default_pager_size' => CRM_Core_BAO_Setting::SEARCH_PREFERENCES_NAME, ]; /** diff --git a/civicrm/CRM/Admin/Form/Setting/UF.php b/civicrm/CRM/Admin/Form/Setting/UF.php index 06acdb081a..c59013a076 100644 --- a/civicrm/CRM/Admin/Form/Setting/UF.php +++ b/civicrm/CRM/Admin/Form/Setting/UF.php @@ -71,9 +71,9 @@ class CRM_Admin_Form_Setting_UF extends CRM_Admin_Form_Setting { $dsnArray = DB::parseDSN($dsn); $tableNames = CRM_Core_DAO::getTableNames(); asort($tableNames); - $tablePrefixes = '$databases[\'default\'][\'default\'][\'prefix\']= array('; + $tablePrefixes = '$databases[\'default\'][\'default\'][\'prefix\']= ['; if ($config->userFramework === 'Backdrop') { - $tablePrefixes = '$database_prefix = array('; + $tablePrefixes = '$database_prefix = ['; } // add default prefix: the drupal database prefix $tablePrefixes .= "\n 'default' => '$drupal_prefix',"; @@ -87,7 +87,7 @@ class CRM_Admin_Form_Setting_UF extends CRM_Admin_Form_Setting { foreach ($tableNames as $tableName) { $tablePrefixes .= "\n '" . str_pad($tableName . "'", 41) . " => '{$prefix}',"; } - $tablePrefixes .= "\n);"; + $tablePrefixes .= "\n];"; $this->assign('tablePrefixes', $tablePrefixes); } diff --git a/civicrm/CRM/Admin/Form/SettingTrait.php b/civicrm/CRM/Admin/Form/SettingTrait.php index 1dac8aadac..4d96dcc6c6 100644 --- a/civicrm/CRM/Admin/Form/SettingTrait.php +++ b/civicrm/CRM/Admin/Form/SettingTrait.php @@ -43,12 +43,28 @@ trait CRM_Admin_Form_SettingTrait { return 'Setting'; } + /** + * Fields defined as read only. + * + * @var array + */ + protected $readOnlyFields = []; + + /** + * Have read only fields been defined on the form. + * + * @return bool + */ + protected function hasReadOnlyFields(): bool { + return !empty($this->readOnlyFields); + } + /** * Get the metadata relating to the settings on the form, ordered by the keys in $this->_settings. * * @return array */ - protected function getSettingsMetaData() { + protected function getSettingsMetaData(): array { if (empty($this->settingsMetadata)) { $this->settingsMetadata = \Civi\Core\SettingsMetadata::getMetadata(['name' => array_keys($this->_settings)], NULL, TRUE); // This array_merge re-orders to the key order of $this->_settings. @@ -178,7 +194,7 @@ trait CRM_Admin_Form_SettingTrait { //Load input as readonly whose values are overridden in civicrm.settings.php. if (Civi::settings()->getMandatory($setting) !== NULL) { $props['html_attributes']['readonly'] = TRUE; - $this->includesReadOnlyFields = TRUE; + $this->readOnlyFields[] = $setting; } $add = 'add' . $quickFormType; @@ -253,6 +269,11 @@ trait CRM_Admin_Form_SettingTrait { $this->assign('setting_descriptions', $descriptions); $this->assign('settings_fields', $settingMetaData); $this->assign('fields', $this->getSettingsOrderedByWeight()); + // @todo look at sharing the code below in the settings trait. + if ($this->hasReadOnlyFields()) { + $this->freeze($this->readOnlyFields); + CRM_Core_Session::setStatus(ts("Some fields are loaded as 'readonly' as they have been set (overridden) in civicrm.settings.php."), '', 'info', ['expires' => 0]); + } } /** diff --git a/civicrm/CRM/Admin/Page/MessageTemplates.php b/civicrm/CRM/Admin/Page/MessageTemplates.php index 36d52d56b4..325b06528d 100644 --- a/civicrm/CRM/Admin/Page/MessageTemplates.php +++ b/civicrm/CRM/Admin/Page/MessageTemplates.php @@ -136,7 +136,7 @@ class CRM_Admin_Page_MessageTemplates extends CRM_Core_Page_Basic { public function action(&$object, $action, &$values, &$links, $permission, $forceAction = FALSE) { if ($object->workflow_id) { // do not expose action link for reverting to default if the template did not diverge or we just reverted it now - if (!in_array($object->id, array_keys($this->_revertible)) or + if (!array_key_exists($object->id, $this->_revertible) or ($this->_action & CRM_Core_Action::REVERT and $object->id == $this->_revertedId) ) { $action &= ~CRM_Core_Action::REVERT; diff --git a/civicrm/CRM/Admin/Page/ScheduleReminders.php b/civicrm/CRM/Admin/Page/ScheduleReminders.php index 524031760e..2eb555d175 100644 --- a/civicrm/CRM/Admin/Page/ScheduleReminders.php +++ b/civicrm/CRM/Admin/Page/ScheduleReminders.php @@ -126,27 +126,25 @@ class CRM_Admin_Page_ScheduleReminders extends CRM_Core_Page_Basic { // Get list of configured reminders $reminderList = CRM_Core_BAO_ActionSchedule::getList(); - if (is_array($reminderList)) { - // Add action links to each of the reminders - foreach ($reminderList as & $format) { - $action = array_sum(array_keys($this->links())); - if ($format['is_active']) { - $action -= CRM_Core_Action::ENABLE; - } - else { - $action -= CRM_Core_Action::DISABLE; - } - $format['action'] = CRM_Core_Action::formLink( - self::links(), - $action, - ['id' => $format['id']], - ts('more'), - FALSE, - 'actionSchedule.manage.action', - 'ActionSchedule', - $format['id'] - ); + // Add action links to each of the reminders + foreach ($reminderList as & $format) { + $action = array_sum(array_keys($this->links())); + if ($format['is_active']) { + $action -= CRM_Core_Action::ENABLE; } + else { + $action -= CRM_Core_Action::DISABLE; + } + $format['action'] = CRM_Core_Action::formLink( + self::links(), + $action, + ['id' => $format['id']], + ts('more'), + FALSE, + 'actionSchedule.manage.action', + 'ActionSchedule', + $format['id'] + ); } $this->assign('rows', $reminderList); diff --git a/civicrm/CRM/Api4/Services.php b/civicrm/CRM/Api4/Services.php index 47b4284031..18bab2f7ad 100644 --- a/civicrm/CRM/Api4/Services.php +++ b/civicrm/CRM/Api4/Services.php @@ -16,7 +16,7 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ - +use Civi\Core\Event\EventScanner; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\Config\FileLocator; @@ -43,11 +43,8 @@ class CRM_Api4_Services { $subscribers = $container->findTaggedServiceIds('event_subscriber'); foreach (array_keys($subscribers) as $subscriber) { - $getSubscribedEvents = [$container->findDefinition($subscriber)->getClass(), 'getSubscribedEvents']; - $dispatcher->addMethodCall( - 'addSubscriberServiceMap', - [$subscriber, $getSubscribedEvents()] - ); + $listenerMap = EventScanner::findListeners($container->findDefinition($subscriber)->getClass()); + $dispatcher->addMethodCall('addSubscriberServiceMap', [$subscriber, $listenerMap]); } // add spec providers @@ -61,7 +58,9 @@ class CRM_Api4_Services { ); } - if (defined('CIVICRM_UF') && CIVICRM_UF === 'UnitTests') { + if (defined('CIVICRM_UF') && CIVICRM_UF === 'UnitTests' + && file_exists('tests/phpunit/api/v4/services.xml') + ) { $loader->load('tests/phpunit/api/v4/services.xml'); } } diff --git a/civicrm/CRM/Batch/BAO/Batch.php b/civicrm/CRM/Batch/BAO/Batch.php index c2cba49cda..91177016e2 100644 --- a/civicrm/CRM/Batch/BAO/Batch.php +++ b/civicrm/CRM/Batch/BAO/Batch.php @@ -617,7 +617,7 @@ class CRM_Batch_BAO_Batch extends CRM_Batch_DAO_Batch { * @param array $batchIds * @param $status */ - public static function closeReOpen($batchIds = [], $status) { + public static function closeReOpen($batchIds, $status) { $batchStatus = CRM_Core_PseudoConstant::get('CRM_Batch_DAO_Batch', 'status_id'); $params['status_id'] = CRM_Utils_Array::key($status, $batchStatus); $session = CRM_Core_Session::singleton(); diff --git a/civicrm/CRM/Batch/Form/Entry.php b/civicrm/CRM/Batch/Form/Entry.php index 5435ea65bd..eb485ceb97 100644 --- a/civicrm/CRM/Batch/Form/Entry.php +++ b/civicrm/CRM/Batch/Form/Entry.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Contribution; + /** * This class provides the functionality for batch entry for contributions/memberships. */ @@ -79,6 +81,54 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { */ public $_fields = []; + /** + * @var int + */ + protected $currentRowContributionID; + + /** + * Get the contribution id for the current row. + * + * @return int + * @throws \CRM_Core_Exception + */ + public function getCurrentRowContributionID(): int { + if (!isset($this->currentRowContributionID)) { + $this->currentRowContributionID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipPayment', $this->getCurrentRowMembershipID(), 'contribution_id', 'membership_id'); + } + return $this->currentRowContributionID; + } + + /** + * Set the contribution ID for the current row. + * + * @param int $currentRowContributionID + */ + public function setCurrentRowContributionID(int $currentRowContributionID): void { + $this->currentRowContributionID = $currentRowContributionID; + } + + /** + * @return mixed + */ + public function getCurrentRowMembershipID() { + return $this->currentRowMembershipID; + } + + /** + * Set the membership id for the current row. + * + * @param int $currentRowMembershipID + */ + public function setCurrentRowMembershipID(int $currentRowMembershipID): void { + $this->currentRowMembershipID = $currentRowMembershipID; + } + + /** + * @var int + */ + protected $currentRowMembershipID; + /** * Monetary fields that may be submitted. * @@ -679,29 +729,23 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { if (isset($params['field'])) { // @todo - most of the wrangling in this function is because the api is not being used, especially date stuff. - $customFields = []; foreach ($params['field'] as $key => $value) { + // if contact is not selected we should skip the row + if (empty($params['primary_contact_id'][$key])) { + continue; + } + $value['contact_id'] = $params['primary_contact_id'][$key]; foreach ($value as $fieldKey => $fieldValue) { if (isset($this->_fields[$fieldKey]) && $this->_fields[$fieldKey]['data_type'] === 'Money') { $value[$fieldKey] = CRM_Utils_Rule::cleanMoney($fieldValue); } } - // if contact is not selected we should skip the row - if (empty($params['primary_contact_id'][$key])) { - continue; - } - - $value['contact_id'] = $params['primary_contact_id'][$key] ?? NULL; // update contact information $this->updateContactInfo($value); $membershipTypeId = $value['membership_type_id'] = $value['membership_type'][1]; - if (!empty($value['send_receipt'])) { - $value['receipt_date'] = date('Y-m-d His'); - } - if (!empty($value['membership_source'])) { $value['source'] = $value['membership_source']; } @@ -714,17 +758,6 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { unset($value['membership_status']); } - if (empty($customFields)) { - // membership type custom data - $customFields = CRM_Core_BAO_CustomField::getFields('Membership', FALSE, FALSE, $membershipTypeId); - - $customFields = CRM_Utils_Array::crmArrayMerge($customFields, - CRM_Core_BAO_CustomField::getFields('Membership', - FALSE, FALSE, NULL, NULL, TRUE - ) - ); - } - //check for custom data $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key], $key, @@ -830,11 +863,9 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { 'start_date' => $value['membership_start_date'] ?? NULL, ]; $membershipSource = $value['source'] ?? NULL; - [$membership] = CRM_Member_BAO_Membership::processMembership( - $value['contact_id'], $value['membership_type_id'], FALSE, - //$numTerms should be default to 1. - NULL, NULL, $value['custom'], 1, NULL, FALSE, - NULL, $membershipSource, $isPayLater, ['campaign_id' => $value['member_campaign_id'] ?? NULL], $formDates + $membership = $this->legacyProcessMembership( + $value['contact_id'], $value['membership_type_id'], + $value['custom'], $membershipSource, $isPayLater, ['campaign_id' => $value['member_campaign_id'] ?? NULL], $formDates ); // make contribution entry @@ -843,6 +874,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { // @todo - calling this from here is pretty hacky since it is called from membership.create anyway // This form should set the correct params & not call this fn directly. CRM_Member_BAO_Membership::recordMembershipContribution($contrbutionParams); + $this->setCurrentRowMembershipID($membership->id); } else { $calcDates = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipTypeId, @@ -855,6 +887,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { unset($value['membership_start_date']); unset($value['membership_end_date']); $membership = CRM_Member_BAO_Membership::create($value); + $this->setCurrentRowMembershipID($membership->id); } //process premiums @@ -870,7 +903,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $premiumParams = [ 'product_id' => $value['product_name'][0], - 'contribution_id' => CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipPayment', $membership->id, 'contribution_id', 'membership_id'), + 'contribution_id' => $this->getCurrentRowContributionID(), 'product_option' => $value['product_option'], 'quantity' => 1, ]; @@ -888,7 +921,6 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $value['from_email_address'] = $domainEmail; $value['membership_id'] = $membership->id; - $value['contribution_id'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipPayment', $membership->id, 'contribution_id', 'membership_id'); $this->emailReceipt($this, $value, $membership); } } @@ -928,10 +960,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $form->assign('contactID', $formValues['contact_id']); $form->assign('membershipID', CRM_Utils_Array::value('membership_id', $form->_params, CRM_Utils_Array::value('membership_id', $form->_defaultValues))); - - if (!empty($formValues['contribution_id'])) { - $form->assign('contributionID', $formValues['contribution_id']); - } + $this->assign('contributionID', $this->getCurrentRowContributionID()); if (!empty($formValues['contribution_status_id'])) { $form->assign('contributionStatusID', $formValues['contribution_status_id']); @@ -967,11 +996,16 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { 'toEmail' => $form->_contributorEmail, 'PDFFilename' => ts('receipt') . '.pdf', 'isEmailPdf' => Civi::settings()->get('invoicing') && Civi::settings()->get('invoice_is_email_pdf'), - 'contributionId' => $formValues['contribution_id'], + 'contributionId' => $this->getCurrentRowContributionID(), 'isTest' => (bool) ($form->_action & CRM_Core_Action::PREVIEW), ] ); + Contribution::update(FALSE) + ->addWhere('id', '=', $this->getCurrentRowContributionID()) + ->setValues(['receipt_date', 'now']) + ->execute(); + return TRUE; } @@ -1023,4 +1057,225 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { return $this->processContribution($params); } + /** + * @param int $contactID + * @param int $membershipTypeID + * @param $customFieldsFormatted + * @param $membershipSource + * @param $isPayLater + * @param array $memParams + * @param array $formDates + * + * @return CRM_Member_BAO_Membership + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + protected function legacyProcessMembership($contactID, $membershipTypeID, $customFieldsFormatted, $membershipSource, $isPayLater, $memParams = [], $formDates = []): CRM_Member_BAO_Membership { + $updateStatusId = FALSE; + $changeToday = NULL; + $is_test = FALSE; + $modifiedID = NULL; + $numRenewTerms = 1; + $membershipID = NULL; + $pending = FALSE; + $contributionRecurID = NULL; + $allStatus = CRM_Member_PseudoConstant::membershipStatus(); + $format = '%Y%m%d'; + $statusFormat = '%Y-%m-%d'; + $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipType($membershipTypeID); + $ids = []; + + // CRM-7297 - allow membership type to be be changed during renewal so long as the parent org of new membershipType + // is the same as the parent org of an existing membership of the contact + $currentMembership = CRM_Member_BAO_Membership::getContactMembership($contactID, $membershipTypeID, + $is_test, $membershipID, TRUE + ); + if ($currentMembership) { + + // Do NOT do anything. + //1. membership with status : PENDING/CANCELLED (CRM-2395) + //2. Paylater/IPN renew. CRM-4556. + if ($pending || in_array($currentMembership['status_id'], [ + array_search('Pending', $allStatus), + // CRM-15475 + array_search('Cancelled', CRM_Member_PseudoConstant::membershipStatus(NULL, " name = 'Cancelled' ", 'name', FALSE, TRUE)), + ])) { + + $memParams = array_merge([ + 'id' => $currentMembership['id'], + 'status_id' => $currentMembership['status_id'], + 'start_date' => $currentMembership['start_date'], + 'end_date' => $currentMembership['end_date'], + 'join_date' => $currentMembership['join_date'], + 'membership_type_id' => $membershipTypeID, + 'max_related' => !empty($membershipTypeDetails['max_related']) ? $membershipTypeDetails['max_related'] : NULL, + 'membership_activity_status' => ($pending || $isPayLater) ? 'Scheduled' : 'Completed', + ], $memParams); + if ($contributionRecurID) { + $memParams['contribution_recur_id'] = $contributionRecurID; + } + + return CRM_Member_BAO_Membership::create($memParams); + } + + // Check and fix the membership if it is STALE + CRM_Member_BAO_Membership::fixMembershipStatusBeforeRenew($currentMembership, $changeToday); + + // Now Renew the membership + if (!$currentMembership['is_current_member']) { + // membership is not CURRENT + + // CRM-7297 Membership Upsell - calculate dates based on new membership type + $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($currentMembership['id'], + $changeToday, + $membershipTypeID, + $numRenewTerms + ); + + $currentMembership['join_date'] = CRM_Utils_Date::customFormat($currentMembership['join_date'], $format); + foreach (['start_date', 'end_date'] as $dateType) { + $currentMembership[$dateType] = $formDates[$dateType] ?? NULL; + if (empty($currentMembership[$dateType])) { + $currentMembership[$dateType] = $dates[$dateType] ?? NULL; + } + } + $currentMembership['is_test'] = $is_test; + + if (!empty($membershipSource)) { + $currentMembership['source'] = $membershipSource; + } + + if (!empty($currentMembership['id'])) { + $ids['membership'] = $currentMembership['id']; + } + $memParams = array_merge($currentMembership, $memParams); + $memParams['membership_type_id'] = $membershipTypeID; + + //set the log start date. + $memParams['log_start_date'] = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); + } + else { + + // CURRENT Membership + $membership = new CRM_Member_DAO_Membership(); + $membership->id = $currentMembership['id']; + $membership->find(TRUE); + // CRM-7297 Membership Upsell - calculate dates based on new membership type + $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($membership->id, + $changeToday, + $membershipTypeID, + $numRenewTerms + ); + + // Insert renewed dates for CURRENT membership + $memParams['join_date'] = CRM_Utils_Date::isoToMysql($membership->join_date); + $memParams['start_date'] = $formDates['start_date'] ?? CRM_Utils_Date::isoToMysql($membership->start_date); + $memParams['end_date'] = $formDates['end_date'] ?? NULL; + if (empty($memParams['end_date'])) { + $memParams['end_date'] = $dates['end_date'] ?? NULL; + } + $memParams['membership_type_id'] = $membershipTypeID; + + //set the log start date. + $memParams['log_start_date'] = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); + + //CRM-18067 + if (!empty($membershipSource)) { + $memParams['source'] = $membershipSource; + } + elseif (empty($membership->source)) { + $memParams['source'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', + $currentMembership['id'], + 'source' + ); + } + + if (!empty($currentMembership['id'])) { + $ids['membership'] = $currentMembership['id']; + } + $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed'; + } + } + else { + // NEW Membership + $memParams = array_merge([ + 'contact_id' => $contactID, + 'membership_type_id' => $membershipTypeID, + ], $memParams); + + if (!$pending) { + $dates = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipTypeID, NULL, NULL, NULL, $numRenewTerms); + + foreach (['join_date', 'start_date', 'end_date'] as $dateType) { + $memParams[$dateType] = $formDates[$dateType] ?? NULL; + if (empty($memParams[$dateType])) { + $memParams[$dateType] = $dates[$dateType] ?? NULL; + } + } + + $status = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate(CRM_Utils_Date::customFormat($dates['start_date'], + $statusFormat + ), + CRM_Utils_Date::customFormat($dates['end_date'], + $statusFormat + ), + CRM_Utils_Date::customFormat($dates['join_date'], + $statusFormat + ), + 'now', + TRUE, + $membershipTypeID, + $memParams + ); + $updateStatusId = $status['id'] ?? NULL; + } + else { + // if IPN/Pay-Later set status to: PENDING + $updateStatusId = array_search('Pending', $allStatus); + } + + if (!empty($membershipSource)) { + $memParams['source'] = $membershipSource; + } + $memParams['is_test'] = $is_test; + $memParams['is_pay_later'] = $isPayLater; + } + // Putting this in an IF is precautionary as it seems likely that it would be ignored if empty, but + // perhaps shouldn't be? + if ($contributionRecurID) { + $memParams['contribution_recur_id'] = $contributionRecurID; + } + //CRM-4555 + //if we decided status here and want to skip status + //calculation in create( ); then need to pass 'skipStatusCal'. + if ($updateStatusId) { + $memParams['status_id'] = $updateStatusId; + $memParams['skipStatusCal'] = TRUE; + } + + //since we are renewing, + //make status override false. + $memParams['is_override'] = FALSE; + + //CRM-4027, create log w/ individual contact. + if ($modifiedID) { + // @todo this param is likely unused now. + $memParams['is_for_organization'] = TRUE; + } + $params['modified_id'] = $modifiedID ?? $contactID; + + $memParams['custom'] = $customFieldsFormatted; + // Load all line items & process all in membership. Don't do in contribution. + // Relevant tests in api_v3_ContributionPageTest. + // @todo stop passing $ids (membership and userId may be set by this point) + $membership = CRM_Member_BAO_Membership::create($memParams, $ids); + + // not sure why this statement is here, seems quite odd :( - Lobo: 12/26/2010 + // related to: http://forum.civicrm.org/index.php/topic,11416.msg49072.html#msg49072 + $membership->find(TRUE); + + return $membership; + } + } diff --git a/civicrm/CRM/Campaign/BAO/Petition.php b/civicrm/CRM/Campaign/BAO/Petition.php index 72e2151a64..a13450f148 100644 --- a/civicrm/CRM/Campaign/BAO/Petition.php +++ b/civicrm/CRM/Campaign/BAO/Petition.php @@ -576,6 +576,8 @@ AND tag_id = ( SELECT id FROM civicrm_tag WHERE name = %2 )"; // tokens then available in msg template as {$petition.title}, etc $petitionTokens['title'] = $petitionInfo['title']; $petitionTokens['petitionId'] = $params['sid']; + $tplParams['survey_id'] = $params['sid']; + $tplParams['petitionTitle'] = $petitionInfo['title']; $tplParams['petition'] = $petitionTokens; switch ($sendEmailMode) { diff --git a/civicrm/CRM/Campaign/Form/Campaign.php b/civicrm/CRM/Campaign/Form/Campaign.php index e112636b43..be1e9bc39b 100644 --- a/civicrm/CRM/Campaign/Form/Campaign.php +++ b/civicrm/CRM/Campaign/Form/Campaign.php @@ -314,7 +314,7 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { } } - public static function submit($params = [], $form) { + public static function submit($params, $form) { $groups = []; if (!empty($params['includeGroups']) && is_array($params['includeGroups'])) { foreach ($params['includeGroups'] as $key => $id) { diff --git a/civicrm/CRM/Campaign/Selector/Search.php b/civicrm/CRM/Campaign/Selector/Search.php index f767a4602b..ce9a302d68 100644 --- a/civicrm/CRM/Campaign/Selector/Search.php +++ b/civicrm/CRM/Campaign/Selector/Search.php @@ -175,7 +175,7 @@ class CRM_Campaign_Selector_Search extends CRM_Core_Selector_Base implements CRM public function getPagerParams($action, &$params) { $params['csvString'] = NULL; $params['status'] = ts('Respondents') . ' %%StatusMessage%%'; - $params['rowCount'] = ($this->_limit) ? $this->_limit : CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = ($this->_limit) ? $this->_limit : Civi::settings()->get('default_pager_size'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; } diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index a7d10036a9..1b10f46331 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -400,7 +400,7 @@ WHERE cc.contact_id = %1 AND civicrm_case_type.name = '{$caseType}'"; * * @return string */ - public static function getCaseActivityCountQuery($type = 'upcoming', $userID, $condition = NULL) { + public static function getCaseActivityCountQuery($type, $userID, $condition = NULL) { return sprintf(" SELECT COUNT(*) FROM (%s) temp ", self::getCaseActivityQuery($type, $userID, $condition)); } @@ -413,7 +413,7 @@ WHERE cc.contact_id = %1 AND civicrm_case_type.name = '{$caseType}'"; * * @return string */ - public static function getCaseActivityQuery($type = 'upcoming', $userID, $condition = NULL, $limit = NULL, $order = NULL) { + public static function getCaseActivityQuery($type, $userID, $condition = NULL, $limit = NULL, $order = NULL) { $selectClauses = [ 'civicrm_case.id as case_id', 'civicrm_case.subject as case_subject', @@ -1258,7 +1258,7 @@ HERESQL; * * @return bool |array */ - public static function sendActivityCopy($clientId, $activityId, $contacts, $attachments = NULL, $caseId) { + public static function sendActivityCopy($clientId, $activityId, $contacts, $attachments, $caseId) { if (!$activityId) { return FALSE; } diff --git a/civicrm/CRM/Case/Selector/Search.php b/civicrm/CRM/Case/Selector/Search.php index bcc11154a9..0f0864e208 100644 --- a/civicrm/CRM/Case/Selector/Search.php +++ b/civicrm/CRM/Case/Selector/Search.php @@ -234,7 +234,7 @@ class CRM_Case_Selector_Search extends CRM_Core_Selector_Base { $params['rowCount'] = $this->_limit; } else { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $params['buttonTop'] = 'PagerTopButton'; diff --git a/civicrm/CRM/Contact/AccessTrait.php b/civicrm/CRM/Contact/AccessTrait.php new file mode 100644 index 0000000000..d7bfd66fb9 --- /dev/null +++ b/civicrm/CRM/Contact/AccessTrait.php @@ -0,0 +1,44 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * Trait shared with entities attached to the contact record. + */ +trait CRM_Contact_AccessTrait { + + /** + * @param string $entityName + * @param string $action + * @param array $record + * @param int $userID + * @return bool + * @see CRM_Core_DAO::checkAccess + */ + public static function _checkAccess(string $entityName, string $action, array $record, int $userID) { + $cid = $record['contact_id'] ?? NULL; + if (!$cid && !empty($record['id'])) { + $cid = CRM_Core_DAO::getFieldValue(__CLASS__, $record['id'], 'contact_id'); + } + if (!$cid) { + // With no contact id this must be part of an event locblock + return in_array(__CLASS__, ['CRM_Core_BAO_Phone', 'CRM_Core_BAO_Email', 'CRM_Core_BAO_Address']) && + CRM_Core_Permission::check('edit all events', $userID); + } + return \Civi\Api4\Utils\CoreUtil::checkAccessDelegated('Contact', 'update', ['id' => $cid], $userID); + } + +} diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index 77e86874ff..c76c288836 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -430,6 +430,48 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { return $contact; } + /** + * Check if a contact has a name. + * + * - Individuals need a first_name or last_name + * - Organizations need organization_name + * - Households need household_name + * + * @param array $contact + * @return bool + */ + public static function hasName(array $contact): bool { + $nameFields = [ + 'Individual' => ['first_name', 'last_name'], + 'Organization' => ['organization_name'], + 'Household' => ['household_name'], + ]; + // Casting to int filters out the string 'null' + $cid = (int) ($contact['id'] ?? NULL); + $contactType = $contact['contact_type'] ?? NULL; + if (!$contactType && $cid) { + $contactType = CRM_Core_DAO::getFieldValue(__CLASS__, $cid, 'contact_type'); + } + if (!$contactType || !isset($nameFields[$contactType])) { + throw new CRM_Core_Exception('No contact_type given to ' . __CLASS__ . '::' . __FUNCTION__); + } + foreach ($nameFields[$contactType] as $field) { + if (isset($contact[$field]) && is_string($contact[$field]) && $contact[$field] !== '') { + return TRUE; + } + } + // For existing contacts, look up name from database + if ($cid) { + foreach ($nameFields[$contactType] as $field) { + $value = $contact[$field] ?? CRM_Core_DAO::getFieldValue(__CLASS__, $cid, $field); + if (isset($value) && $value !== '') { + return TRUE; + } + } + } + return FALSE; + } + /** * Format the output of the create contact function * @@ -3686,4 +3728,33 @@ LEFT JOIN civicrm_address ON ( civicrm_address.contact_id = civicrm_contact.id ) ]; } + /** + * @param string $entityName + * @param string $action + * @param array $record + * @param $userID + * @return bool + * @see CRM_Core_DAO::checkAccess + */ + public static function _checkAccess(string $entityName, string $action, array $record, $userID): bool { + switch ($action) { + case 'create': + return CRM_Core_Permission::check('add contacts', $userID); + + case 'get': + $actionType = CRM_Core_Permission::VIEW; + break; + + case 'delete': + $actionType = CRM_Core_Permission::DELETE; + break; + + default: + $actionType = CRM_Core_Permission::EDIT; + break; + } + + return CRM_Contact_BAO_Contact_Permission::allow($record['id'], $actionType, $userID); + } + } diff --git a/civicrm/CRM/Contact/BAO/Contact/Permission.php b/civicrm/CRM/Contact/BAO/Contact/Permission.php index 1aae3cea9a..5143831b6c 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Permission.php +++ b/civicrm/CRM/Contact/BAO/Contact/Permission.php @@ -136,37 +136,39 @@ WHERE contact_id IN ({$contact_id_list}) * @param int $id * Contact id. * @param int|string $type the type of operation (view|edit) + * @param int $userID + * Contact id of user to check (defaults to current logged-in user) * * @return bool * true if the user has permission, false otherwise */ - public static function allow($id, $type = CRM_Core_Permission::VIEW) { - // get logged in user - $contactID = CRM_Core_Session::getLoggedInContactID(); + public static function allow($id, $type = CRM_Core_Permission::VIEW, $userID = NULL) { + // Default to logged in user if not supplied + $userID = $userID ?? CRM_Core_Session::getLoggedInContactID(); // first: check if contact is trying to view own contact - if ($contactID == $id && ($type == CRM_Core_Permission::VIEW && CRM_Core_Permission::check('view my contact') - || $type == CRM_Core_Permission::EDIT && CRM_Core_Permission::check('edit my contact')) + if ($userID == $id && ($type == CRM_Core_Permission::VIEW && CRM_Core_Permission::check('view my contact') + || $type == CRM_Core_Permission::EDIT && CRM_Core_Permission::check('edit my contact', $userID)) ) { return TRUE; } // FIXME: push this somewhere below, to not give this permission so many rights $isDeleted = (bool) CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $id, 'is_deleted'); - if (CRM_Core_Permission::check('access deleted contacts') && $isDeleted) { + if (CRM_Core_Permission::check('access deleted contacts', $userID) && $isDeleted) { return TRUE; } // short circuit for admin rights here so we avoid unneeeded queries // some duplication of code, but we skip 3-5 queries - if (CRM_Core_Permission::check('edit all contacts') || - ($type == CRM_ACL_API::VIEW && CRM_Core_Permission::check('view all contacts')) + if (CRM_Core_Permission::check('edit all contacts', $userID) || + ($type == CRM_Core_Permission::VIEW && CRM_Core_Permission::check('view all contacts', $userID)) ) { return TRUE; } // check permission based on relationship, CRM-2963 - if (self::relationshipList([$id], $type)) { + if (self::relationshipList([$id], $type, $userID)) { return TRUE; } @@ -175,7 +177,7 @@ WHERE contact_id IN ({$contact_id_list}) $tables = []; $whereTables = []; - $permission = CRM_ACL_API::whereClause($type, $tables, $whereTables, NULL, FALSE, FALSE, TRUE); + $permission = CRM_ACL_API::whereClause($type, $tables, $whereTables, $userID, FALSE, FALSE, TRUE); $from = CRM_Contact_BAO_Query::fromClause($whereTables); $query = " @@ -185,10 +187,7 @@ WHERE contact_a.id = %1 AND $permission LIMIT 1 "; - if (CRM_Core_DAO::singleValueQuery($query, [1 => [$id, 'Integer']])) { - return TRUE; - } - return FALSE; + return (bool) CRM_Core_DAO::singleValueQuery($query, [1 => [$id, 'Integer']]); } /** @@ -362,18 +361,18 @@ AND $operationClause /** * Filter a list of contact_ids by the ones that the - * currently active user as a permissioned relationship with + * user as a permissioned relationship with * * @param array $contact_ids * List of contact IDs to be filtered - * * @param int $type * access type CRM_Core_Permission::VIEW or CRM_Core_Permission::EDIT + * @param int $userID * * @return array * List of contact IDs that the user has permissions for */ - public static function relationshipList($contact_ids, $type) { + public static function relationshipList($contact_ids, $type, $userID = NULL) { $result_set = []; // no processing empty lists (avoid SQL errors as well) @@ -381,9 +380,9 @@ AND $operationClause return []; } - // get the currently logged in user - $contactID = CRM_Core_Session::getLoggedInContactID(); - if (empty($contactID)) { + // Default to currently logged in user + $userID = $userID ?? CRM_Core_Session::getLoggedInContactID(); + if (empty($userID)) { return []; } @@ -418,7 +417,7 @@ AND $operationClause SELECT civicrm_relationship.{$contact_id_column} AS contact_id FROM civicrm_relationship {$LEFT_JOIN_DELETED} - WHERE civicrm_relationship.{$user_id_column} = {$contactID} + WHERE civicrm_relationship.{$user_id_column} = {$userID} AND civicrm_relationship.{$contact_id_column} IN ({$contact_id_list}) AND civicrm_relationship.is_active = 1 AND civicrm_relationship.is_permission_{$direction['from']}_{$direction['to']} {$is_perm_condition} @@ -444,7 +443,7 @@ SELECT second_degree_relationship.contact_id_{$second_direction['to']} AS contac FROM civicrm_relationship first_degree_relationship LEFT JOIN civicrm_relationship second_degree_relationship ON first_degree_relationship.contact_id_{$first_direction['to']} = second_degree_relationship.contact_id_{$second_direction['from']} {$LEFT_JOIN_DELETED} - WHERE first_degree_relationship.contact_id_{$first_direction['from']} = {$contactID} + WHERE first_degree_relationship.contact_id_{$first_direction['from']} = {$userID} AND second_degree_relationship.contact_id_{$second_direction['to']} IN ({$contact_id_list}) AND first_degree_relationship.is_active = 1 AND first_degree_relationship.is_permission_{$first_direction['from']}_{$first_direction['to']} {$is_perm_condition} diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php index 704b688f99..70655e2ba1 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Utils.php +++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php @@ -241,7 +241,7 @@ WHERE id IN ( $idString ) */ public static function createCurrentEmployerRelationship($contactID, $organization, $previousEmployerID = NULL, $newContact = FALSE) { //if organization name is passed. CRM-15368,CRM-15547 - if ($organization && !is_numeric($organization)) { + if (!CRM_Utils_System::isNull($organization) && !is_numeric($organization)) { $dupeIDs = CRM_Contact_BAO_Contact::getDuplicateContacts(['organization_name' => $organization], 'Organization', 'Unsupervised', [], FALSE); if (is_array($dupeIDs) && !empty($dupeIDs)) { @@ -600,7 +600,7 @@ LEFT JOIN civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 ) } } if (!empty($originalId) && array_key_exists('merge', $hasPermissions)) { - $rgBao = new CRM_Dedupe_BAO_RuleGroup(); + $rgBao = new CRM_Dedupe_BAO_DedupeRuleGroup(); $rgBao->contact_type = $dao->contact_type; $rgBao->used = 'Supervised'; if ($rgBao->find(TRUE)) { diff --git a/civicrm/CRM/Contact/BAO/Group.php b/civicrm/CRM/Contact/BAO/Group.php index 81feb0f2e3..48e5802ab2 100644 --- a/civicrm/CRM/Contact/BAO/Group.php +++ b/civicrm/CRM/Contact/BAO/Group.php @@ -472,7 +472,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { // update group contact cache for all parent groups $parentIds = CRM_Contact_BAO_GroupNesting::getParentGroupIds($group->id); foreach ($parentIds as $parentId) { - CRM_Contact_BAO_GroupContactCache::add($parentId); + CRM_Contact_BAO_GroupContactCache::invalidateGroupContactCache($parentId); } } @@ -486,7 +486,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { } self::flushCaches(); - CRM_Contact_BAO_GroupContactCache::add($group->id); + CRM_Contact_BAO_GroupContactCache::invalidateGroupContactCache($group->id); if (!empty($params['id'])) { CRM_Utils_Hook::post('edit', 'Group', $group->id, $group); diff --git a/civicrm/CRM/Contact/BAO/GroupContactCache.php b/civicrm/CRM/Contact/BAO/GroupContactCache.php index 5a624bf801..61c40739f0 100644 --- a/civicrm/CRM/Contact/BAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/BAO/GroupContactCache.php @@ -9,7 +9,9 @@ +--------------------------------------------------------------------+ */ +use Civi\API\Request; use Civi\Api4\Group; +use Civi\Api4\Query\Api4SelectQuery; use Civi\Api4\Query\SqlExpression; /** @@ -19,18 +21,15 @@ use Civi\Api4\Query\SqlExpression; */ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCache { - public static $_alreadyLoaded = []; - /** * Get a list of caching modes. * * @return array */ - public static function getModes() { + public static function getModes(): array { return [ // Flush expired caches in response to user actions. 'opportunistic' => ts('Opportunistic Flush'), - // Flush expired caches via background cron jobs. 'deterministic' => ts('Cron Flush'), ]; @@ -47,7 +46,7 @@ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCach * @return bool * TRUE if we did not regenerate, FALSE if we did */ - public static function check($groupIDs) { + public static function check($groupIDs): bool { if (empty($groupIDs)) { return TRUE; } @@ -68,7 +67,7 @@ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCach * @return string * the sql query which lists the groups that need to be refreshed */ - public static function groupRefreshedClause($groupIDClause = NULL, $includeHiddenGroups = FALSE): string { + protected static function groupRefreshedClause($groupIDClause = NULL, $includeHiddenGroups = FALSE): string { $smartGroupCacheTimeoutDateTime = self::getCacheInvalidDateTime(); $query = " @@ -100,18 +99,15 @@ AND ( * * @param int $groupID * The group ID. - * @param bool $includeHiddenGroups - * Hidden groups are excluded by default. * - * @return string - * the sql query which lists the groups that need to be refreshed + * @return bool */ - public static function shouldGroupBeRefreshed($groupID, $includeHiddenGroups = FALSE) { - $query = self::groupRefreshedClause("g.id = %1", $includeHiddenGroups); + public static function shouldGroupBeRefreshed($groupID): bool { + $query = self::groupRefreshedClause('g.id = %1'); $params = [1 => [$groupID, 'Integer']]; // if the query returns the group ID, it means the group is a valid candidate for refreshing - return CRM_Core_DAO::singleValueQuery($query, $params); + return (bool) CRM_Core_DAO::singleValueQuery($query, $params); } /** @@ -119,7 +115,7 @@ AND ( * * if not, regenerate, else return * - * @param int|array $groupIDs groupIDs of group that we are checking against + * @param array|null $groupIDs groupIDs of group that we are checking against * if empty, all groups are checked * @param int $limit * Limits the number of groups we evaluate. @@ -128,50 +124,17 @@ AND ( * TRUE if we did not regenerate, FALSE if we did */ public static function loadAll($groupIDs = NULL, $limit = 0) { - // ensure that all the smart groups are loaded - // this function is expensive and should be sparingly used if groupIDs is empty - if (empty($groupIDs)) { - $groupIDClause = NULL; - } - else { - if (!is_array($groupIDs)) { - $groupIDs = [$groupIDs]; - } - - // note escapeString is a must here and we can't send the imploded value as second argument to - // the executeQuery(), since that would put single quote around the string and such a string - // of comma separated integers would not work. - $groupIDString = CRM_Core_DAO::escapeString(implode(', ', $groupIDs)); - - $groupIDClause = "g.id IN ({$groupIDString})"; - } - - $query = self::groupRefreshedClause($groupIDClause); - - $limitClause = $orderClause = NULL; - if ($limit > 0) { - $limitClause = " LIMIT 0, $limit"; - $orderClause = " ORDER BY g.cache_date"; + if ($groupIDs) { + // Passing a single value is deprecated. + $groupIDs = (array) $groupIDs; } - // We ignore hidden groups and disabled groups - $query .= " - $orderClause - $limitClause -"; - $dao = CRM_Core_DAO::executeQuery($query); - $processGroupIDs = []; - while ($dao->fetch()) { - $processGroupIDs[] = $dao->id; - } + $processGroupIDs = self::getGroupsNeedingRefreshing($groupIDs, $limit); - if (empty($processGroupIDs)) { - return TRUE; - } - else { + if (!empty($processGroupIDs)) { self::add($processGroupIDs); - return FALSE; } + return TRUE; } /** @@ -184,7 +147,6 @@ AND ( foreach ($groupIDs as $groupID) { // first delete the current cache - self::clearGroupContactCache($groupID); $params = [['group', 'IN', [$groupID], 0, 0]]; // the below call updates the cache table as a byproduct of the query CRM_Contact_BAO_Query::apiQuery($params, ['contact_id'], NULL, NULL, 0, 0, FALSE); @@ -200,7 +162,7 @@ AND ( * @param array $groupID * @param array $values */ - public static function store($groupID, &$values) { + protected static function store($groupID, &$values) { $processed = FALSE; // sort the values so we put group IDs in front and hence optimize @@ -225,7 +187,7 @@ AND ( * @param bool $processed * Whether the cache data was recently modified. */ - public static function updateCacheTime($groupID, $processed) { + protected static function updateCacheTime($groupID, $processed) { // only update cache entry if we had any values if ($processed) { // also update the group with cache date information @@ -251,7 +213,7 @@ WHERE id IN ( $groupIDs ) * @param int $groupID * */ - public static function clearGroupContactCache($groupID) { + protected static function clearGroupContactCache($groupID): void { $transaction = new CRM_Core_Transaction(); $query = " DELETE g @@ -270,7 +232,6 @@ WHERE id IN ( $groupIDs ) CRM_Core_DAO::executeQuery($query, $params); // also update the cache_date for these groups CRM_Core_DAO::executeQuery($update, $params); - unset(self::$_alreadyLoaded[$groupID]); $transaction->commit(); } @@ -343,8 +304,8 @@ WHERE id IN ( $groupIDs ) * caches on demand. The user session will be forced to wait so it is less * ideal. */ - public static function opportunisticCacheFlush() { - if (Civi::settings()->get('smart_group_cache_refresh_mode') == 'opportunistic') { + public static function opportunisticCacheFlush(): void { + if (Civi::settings()->get('smart_group_cache_refresh_mode') === 'opportunistic') { self::flushCaches(); } } @@ -368,10 +329,11 @@ WHERE id IN ( $groupIDs ) * Remove one or more contacts from the smart group cache. * * @param int|array $cid - * @param int $groupId + * @param null $groupId * * @return bool * TRUE if successful. + * @throws \CRM_Core_Exception */ public static function removeContact($cid, $groupId = NULL) { $cids = []; @@ -397,7 +359,7 @@ WHERE id IN ( $groupIDs ) * @param object $group * The smart group that needs to be loaded. * @param bool $force - * Should we force a search through. + * deprecated parameter = Should we force a search through. * * @throws \API_Exception * @throws \CRM_Core_Exception @@ -405,55 +367,44 @@ WHERE id IN ( $groupIDs ) */ public static function load($group, $force = FALSE) { $groupID = (int) $group->id; - if (array_key_exists($groupID, self::$_alreadyLoaded) && !$force) { - return; + if ($force) { + CRM_Core_Error::deprecatedWarning('use invalidate group contact cache first.'); + self::invalidateGroupContactCache($group->id); } - self::$_alreadyLoaded[$groupID] = 1; - - // FIXME: some other process could have actually done the work before we got here, - // Ensure that work needs to be done before continuing - if (!$force && !self::shouldGroupBeRefreshed($groupID, TRUE)) { - return; + $locks = self::getLocksForRefreshableGroupsTo([$groupID]); + foreach ($locks as $groupID => $lock) { + $groupContactsTempTable = CRM_Utils_SQL_TempTable::build() + ->setCategory('gccache') + ->setMemory(); + self::buildGroupContactTempTable([$groupID], $groupContactsTempTable); + self::updateCacheFromTempTable($groupContactsTempTable, [$groupID]); + $lock->release(); } + } - $groupContactsTempTable = CRM_Utils_SQL_TempTable::build() - ->setCategory('gccache') - ->setMemory(); - self::buildGroupContactTempTable([$groupID], $groupContactsTempTable); - $tempTable = $groupContactsTempTable->getName(); - - // grab a lock so other processes don't compete and do the same query - $lock = Civi::lockManager()->acquire("data.core.group.{$groupID}"); - - if (!$lock->isAcquired()) { - // this can cause inconsistent results since we don't know if the other process - // will fill up the cache before our calling routine needs it. - // however this routine does not return the status either, so basically - // its a "lets return and hope for the best" - return; + /** + * Get an array of locks for all the refreshable groups in the array. + * + * The groups are refreshable if both the following conditions are met: + * 1) the cache date in the database is null or stale + * 2) a mysql lock can be aquired for the group. + * + * @param array $groupIDs + * + * @return array + * @throws \CRM_Core_Exception + */ + protected static function getLocksForRefreshableGroupsTo(array $groupIDs): array { + $locks = []; + $groupIDs = self::getGroupsNeedingRefreshing($groupIDs); + foreach ($groupIDs as $groupID) { + $lock = Civi::lockManager()->acquire("data.core.group.{$groupID}"); + if ($lock->isAcquired()) { + $locks[$groupID] = $lock; + } } - - // Don't call clearGroupContactCache as we don't want to clear the cache dates - // The will get updated by updateCacheTime() below and not clearing the dates reduces - // the chance that loadAll() will try and rebuild at the same time. - $clearCacheQuery = " - DELETE g - FROM civicrm_group_contact_cache g - WHERE g.group_id = %1 "; - $params = [ - 1 => [$groupID, 'Integer'], - ]; - CRM_Core_DAO::executeQuery($clearCacheQuery, $params); - - CRM_Core_DAO::executeQuery( - "INSERT IGNORE INTO civicrm_group_contact_cache (contact_id, group_id) - SELECT DISTINCT contact_id, group_id FROM $tempTable - "); - $groupContactsTempTable->drop(); - self::updateCacheTime([$groupID], TRUE); - - $lock->release(); + return $locks; } /** @@ -465,7 +416,7 @@ WHERE id IN ( $groupIDs ) * * @return int */ - public static function smartGroupCacheTimeout() { + protected static function smartGroupCacheTimeout() { $config = CRM_Core_Config::singleton(); if ( @@ -547,7 +498,7 @@ ORDER BY gc.contact_id, g.children * * @return string */ - public static function getCacheInvalidDateTime() { + public static function getCacheInvalidDateTime(): string { return date('YmdHis', strtotime("-" . self::smartGroupCacheTimeout() . " Minutes")); } @@ -555,7 +506,7 @@ ORDER BY gc.contact_id, g.children * Invalidates the smart group cache for a particular group * @param int $groupID - Group to invalidate */ - public static function invalidateGroupContactCache($groupID) { + public static function invalidateGroupContactCache($groupID): void { CRM_Core_DAO::executeQuery("UPDATE civicrm_group SET cache_date = NULL WHERE id = %1 AND (saved_search_id IS NOT NULL OR children IS NOT NULL)", [ @@ -579,8 +530,13 @@ ORDER BY gc.contact_id, g.children if (empty($apiParams['having'])) { $apiParams['select'] = array_slice($apiParams['select'], 0, 1); } - $api = \Civi\API\Request::create($savedSearch['api_entity'], 'get', $apiParams); - $query = new \Civi\Api4\Query\Api4SelectQuery($api); + // Order is irrelevant unless using limit or offset + if (empty($apiParams['limit']) && empty($apiParams['offset'])) { + unset($apiParams['orderBy']); + } + /* @var $api \Civi\Api4\Generic\DAOGetAction */ + $api = Request::create($savedSearch['api_entity'], 'get', $apiParams); + $query = new Api4SelectQuery($api); $query->forceSelectId = FALSE; $query->getQuery()->having("$idField $excludeClause"); $sql = $query->getSql(); @@ -676,13 +632,169 @@ ORDER BY gc.contact_id, g.children * @throws \CiviCRM_API3_Exception */ protected static function buildGroupContactTempTable(array $groupIDs, $tempTableObject): void { - $group = Group::get(FALSE)->addWhere('id', 'IN', $groupIDs) - ->setSelect(['saved_search_id', 'children'])->execute()->first(); - $groupID = (int) $group['id']; + $groups = Group::get(FALSE)->addWhere('id', 'IN', $groupIDs) + ->setSelect(['saved_search_id', 'children', 'id'])->execute(); + $tempTableName = $tempTableObject->getName(); + $tempTableObject->createWithColumns('contact_id int, group_id int, UNIQUE UI_contact_group (contact_id,group_id)'); + foreach ($groups as $group) { + self::insertGroupContactsIntoTempTable($tempTableName, $group['id'], $group['saved_search_id'], $group['children']); + } + } - $customClass = NULL; - if ($group['saved_search_id']) { - $ssParams = CRM_Contact_BAO_SavedSearch::getSearchParams($group['saved_search_id']); + /** + * [Internal core function] Populate a temporary table with group ids and contact ids. + * + * Do not call this outside of core tested code - it WILL change. + * + * @param array[int] $groupIDs + * @param string $temporaryTable + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public static function populateTemporaryTableWithContactsInGroups(array $groupIDs, string $temporaryTable): void { + $childAndParentGroupIDs = array_merge($groupIDs, CRM_Contact_BAO_GroupNesting::getDescendentGroupIds($groupIDs)); + $groups = civicrm_api3('Group', 'get', [ + 'is_active' => 1, + 'id' => ['IN' => $childAndParentGroupIDs], + 'saved_search_id' => ['>' => 0], + 'return' => 'id', + ]); + $smartGroups = array_keys($groups['values']); + + $query = ' + SELECT DISTINCT group_contact.contact_id as contact_id + FROM civicrm_group_contact group_contact + WHERE group_contact.group_id IN (' . implode(', ', $childAndParentGroupIDs) . ") + AND group_contact.status = 'Added' "; + + if (!empty($smartGroups)) { + $groupContactsTempTable = CRM_Utils_SQL_TempTable::build() + ->setCategory('gccache') + ->setMemory(); + $locks = self::getLocksForRefreshableGroupsTo($smartGroups); + if (!empty($locks)) { + self::buildGroupContactTempTable(array_keys($locks), $groupContactsTempTable); + // Note in theory we could do this transfer from the temp + // table to the group_contact_cache table out-of-process - possibly by + // continuing on after the browser is released (which seems to be + // possibly possible https://stackoverflow.com/questions/15273570/continue-processing-php-after-sending-http-response + // or by making the table durable and using a cron to process it (or an ajax call + // at the end to process out of the queue. + // if we did that we would union in DISTINCT contact_id FROM + // $groupContactsTempTable->getName() + // but still use the last union for array_diff_key($smartGroups, $locks) + // as that would hold the already-cached groups (if any). + // Also - if we switched to the 'triple union' approach described above + // we could throw a try-catch around this line since best-effort would + // be good enough & potentially improve user experience. + self::updateCacheFromTempTable($groupContactsTempTable, array_keys($locks)); + + foreach ($locks as $lock) { + $lock->release(); + } + } + + $smartGroups = implode(',', $smartGroups); + $query .= " + UNION DISTINCT + SELECT smartgroup_contact.contact_id as contact_id + FROM civicrm_group_contact_cache smartgroup_contact + WHERE smartgroup_contact.group_id IN ({$smartGroups}) "; + } + CRM_Core_DAO::executeQuery('INSERT INTO ' . $temporaryTable . ' ' . $query); + } + + /** + * @param array|null $groupIDs + * @param int $limit + * + * @return array + */ + protected static function getGroupsNeedingRefreshing(?array $groupIDs, int $limit = 0): array { + $groupIDClause = NULL; + // ensure that all the smart groups are loaded + // this function is expensive and should be sparingly used if groupIDs is empty + if (!empty($groupIDs)) { + // note escapeString is a must here and we can't send the imploded value as second argument to + // the executeQuery(), since that would put single quote around the string and such a string + // of comma separated integers would not work. + $groupIDString = CRM_Core_DAO::escapeString(implode(', ', $groupIDs)); + $groupIDClause = "g.id IN ({$groupIDString})"; + } + + $query = self::groupRefreshedClause($groupIDClause, !empty($groupIDs)); + + $limitClause = $orderClause = NULL; + if ($limit > 0) { + $limitClause = " LIMIT 0, $limit"; + $orderClause = " ORDER BY g.cache_date"; + } + // We ignore hidden groups and disabled groups + $query .= " + $orderClause + $limitClause +"; + + $dao = CRM_Core_DAO::executeQuery($query); + $processGroupIDs = []; + while ($dao->fetch()) { + $processGroupIDs[] = $dao->id; + } + return $processGroupIDs; + } + + /** + * Transfer the contact ids to the group cache table and update the cache time. + * + * @param \CRM_Utils_SQL_TempTable $groupContactsTempTable + * @param array $groupIDs + */ + private static function updateCacheFromTempTable(CRM_Utils_SQL_TempTable $groupContactsTempTable, array $groupIDs): void { + $tempTable = $groupContactsTempTable->getName(); + + // Don't call clearGroupContactCache as we don't want to clear the cache dates + // The will get updated by updateCacheTime() below and not clearing the dates reduces + // the chance that loadAll() will try and rebuild at the same time. + $clearCacheQuery = ' + DELETE g + FROM civicrm_group_contact_cache g + WHERE g.group_id IN (%1) '; + $params = [ + 1 => [implode(',', $groupIDs), 'CommaSeparatedIntegers'], + ]; + CRM_Core_DAO::executeQuery($clearCacheQuery, $params); + + CRM_Core_DAO::executeQuery( + "INSERT IGNORE INTO civicrm_group_contact_cache (contact_id, group_id) + SELECT DISTINCT contact_id, group_id FROM $tempTable + "); + $groupContactsTempTable->drop(); + foreach ($groupIDs as $groupID) { + self::updateCacheTime([$groupID], TRUE); + } + } + + /** + * Inserts all the contacts in the group into a temp table. + * + * This is the worker function for building the list of contacts in the + * group. + * + * @param string $tempTableName + * @param int $groupID + * @param int|null $savedSearchID + * @param string|null $children + * + * @return void + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + protected static function insertGroupContactsIntoTempTable(string $tempTableName, int $groupID, ?int $savedSearchID, ?string $children): void { + if ($savedSearchID) { + $ssParams = CRM_Contact_BAO_SavedSearch::getSearchParams($savedSearchID); $excludeClause = "NOT IN ( SELECT contact_id FROM civicrm_group_contact @@ -699,17 +811,14 @@ ORDER BY gc.contact_id, g.children CRM_Contact_BAO_ProximityQuery::fixInputParams($ssParams); } if (isset($ssParams['customSearchID'])) { - $sql = self::getCustomSearchSQL($group['saved_search_id'], $ssParams, $addSelect, $excludeClause); + $sql = self::getCustomSearchSQL($savedSearchID, $ssParams, $addSelect, $excludeClause); } else { - $sql = self::getQueryObjectSQL($group['saved_search_id'], $ssParams, $addSelect, $excludeClause); + $sql = self::getQueryObjectSQL($savedSearchID, $ssParams, $addSelect, $excludeClause); } } } - $tempTableName = $tempTableObject->getName(); - $tempTableObject->createWithColumns('contact_id int, group_id int, UNIQUE UI_contact_group (contact_id,group_id)'); - if (!empty($sql)) { $contactQueries[] = $sql; } @@ -728,7 +837,7 @@ ORDER BY gc.contact_id, g.children CRM_Core_DAO::reenableFullGroupByMode(); - if ($group['children']) { + if ($children) { // Store a list of contacts who are removed from the parent group $sqlContactsRemovedFromGroup = " @@ -742,7 +851,7 @@ AND civicrm_group_contact.group_id = $groupID "; $removed_contacts[] = $dao->contact_id; } - $childrenIDs = explode(',', $group['children']); + $childrenIDs = explode(',', $children); foreach ($childrenIDs as $childID) { $contactIDs = CRM_Contact_BAO_Group::getMember($childID, FALSE); // Unset each contact that is removed from the parent group diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index 1e268336ba..cdde954b26 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -1076,7 +1076,7 @@ class CRM_Contact_BAO_Query { $elementCmpName = 'phone'; } - if (in_array($elementCmpName, array_keys($addressCustomFields))) { + if (array_key_exists($elementCmpName, $addressCustomFields)) { if ($cfID = CRM_Core_BAO_CustomField::getKeyID($elementCmpName)) { $addressCustomFieldIds[$cfID][$name] = 1; } @@ -3130,7 +3130,7 @@ class CRM_Contact_BAO_Query { * @return string WHERE clause component for smart group criteria. * @throws \CRM_Core_Exception */ - public function addGroupContactCache($groups, $tableAlias, $joinTable = "contact_a", $op, $joinColumn = 'id') { + public function addGroupContactCache($groups, $tableAlias, $joinTable, $op, $joinColumn = 'id') { $isNullOp = (strpos($op, 'NULL') !== FALSE); $groupsIds = $groups; @@ -4451,7 +4451,6 @@ civicrm_relationship.start_date > {$today} if (empty(self::$_defaultReturnProperties[$mode])) { self::$_defaultReturnProperties[$mode] = [ - 'home_URL' => 1, 'image_URL' => 1, 'legal_identifier' => 1, 'external_identifier' => 1, @@ -5910,7 +5909,7 @@ AND displayRelType.is_active = 1 $op, $value, $grouping, - $daoName = NULL, + $daoName, $field, $label, $dataType = 'String' @@ -6331,7 +6330,7 @@ AND displayRelType.is_active = 1 $value = $formValues[$element] ?? NULL; if ($value) { if (is_array($value)) { - if (in_array($element, array_keys($changeNames))) { + if (array_key_exists($element, $changeNames)) { unset($formValues[$element]); $element = $changeNames[$element]; } diff --git a/civicrm/CRM/Contact/BAO/Relationship.php b/civicrm/CRM/Contact/BAO/Relationship.php index f856699a3a..76e61e8f65 100644 --- a/civicrm/CRM/Contact/BAO/Relationship.php +++ b/civicrm/CRM/Contact/BAO/Relationship.php @@ -2380,6 +2380,25 @@ SELECT count(*) AND is_current_member = 1"; $result = CRM_Core_DAO::singleValueQuery($query); if ($result < CRM_Utils_Array::value('max_related', $membershipValues, PHP_INT_MAX)) { + // Convert custom_xx_id fields to custom_xx + // See https://lab.civicrm.org/dev/membership/-/issues/37 + // This makes sure the value is copied and not the looked up value. + // Which is the case when the custom field is a contact reference field. + // The custom_xx contains the display name of the contact, instead of the contact id. + // The contact id is then available in custom_xx_id. + foreach ($membershipValues as $field => $value) { + if (stripos($field, 'custom_') !== 0) { + // No a custom field + continue; + } + $custom_id = substr($field, 7); + if (substr($custom_id, -3) === '_id') { + $custom_id = substr($custom_id, 0, -3); + unset($membershipValues[$field]); + $membershipValues['custom_' . $custom_id] = $value; + } + } + civicrm_api3('Membership', 'create', $membershipValues); } return $membershipValues; diff --git a/civicrm/CRM/Contact/BAO/RelationshipCache.php b/civicrm/CRM/Contact/BAO/RelationshipCache.php index c1483973e8..8681158e7a 100644 --- a/civicrm/CRM/Contact/BAO/RelationshipCache.php +++ b/civicrm/CRM/Contact/BAO/RelationshipCache.php @@ -12,7 +12,7 @@ /** * Class CRM_Contact_BAO_RelationshipCache. */ -class CRM_Contact_BAO_RelationshipCache extends CRM_Contact_DAO_RelationshipCache { +class CRM_Contact_BAO_RelationshipCache extends CRM_Contact_DAO_RelationshipCache implements \Civi\Test\HookInterface { /** * The "mappings" array defines the values to put into `civicrm_relationship_cache` @@ -69,7 +69,7 @@ class CRM_Contact_BAO_RelationshipCache extends CRM_Contact_DAO_RelationshipCach * @param \Civi\Core\Event\GenericHookEvent $e * @see \CRM_Utils_Hook::triggerInfo */ - public static function onHookTriggerInfo($e) { + public static function on_hook_civicrm_triggerInfo($e): void { $relUpdates = self::createInsertUpdateQueries(); // Use utf8mb4_bin or utf8_bin, depending on what's in use. $collation = preg_replace('/^(utf8(?:mb4)?)_.*$/', '$1_bin', CRM_Core_BAO_SchemaHandler::getInUseCollation()); diff --git a/civicrm/CRM/Contact/BAO/SavedSearch.php b/civicrm/CRM/Contact/BAO/SavedSearch.php index 23135f1ad1..3d3c4f2785 100644 --- a/civicrm/CRM/Contact/BAO/SavedSearch.php +++ b/civicrm/CRM/Contact/BAO/SavedSearch.php @@ -362,6 +362,8 @@ LEFT JOIN civicrm_email ON (contact_a.id = civicrm_email.contact_id AND civicrm_ } $params['modified_id'] = $loggedInContactID; } + // Set by mysql + unset($params['modified_date']); // Flush angular caches to refresh search displays if (isset($params['api_params'])) { diff --git a/civicrm/CRM/Contact/DAO/Relationship.php b/civicrm/CRM/Contact/DAO/Relationship.php index 1f4ef79592..211536c505 100644 --- a/civicrm/CRM/Contact/DAO/Relationship.php +++ b/civicrm/CRM/Contact/DAO/Relationship.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Relationship.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:787e0139d4a6b8b587b8d0d607e25ff0) + * (GenCodeChecksum:a10cc7576dc2353519a6c572435fb10a) */ /** @@ -37,6 +37,16 @@ class CRM_Contact_DAO_Relationship extends CRM_Core_DAO { */ public static $_log = TRUE; + /** + * Paths for accessing this entity in the UI. + * + * @var string[] + */ + protected static $_paths = [ + 'view' => 'civicrm/contact/view/rel?action=view&reset=1&cid=[contact_id_a]&id=[id]', + 'delete' => 'civicrm/contact/view/rel?action=delete&reset=1&cid=[contact_id_a]&id=[id]', + ]; + /** * Relationship ID * diff --git a/civicrm/CRM/Contact/DAO/RelationshipCache.php b/civicrm/CRM/Contact/DAO/RelationshipCache.php index 3583f377a7..e61073232a 100644 --- a/civicrm/CRM/Contact/DAO/RelationshipCache.php +++ b/civicrm/CRM/Contact/DAO/RelationshipCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/RelationshipCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3376402e2a249b7004b40df6aeac5df9) + * (GenCodeChecksum:dd52d37d1350a679b727c906ea37661b) */ /** @@ -37,6 +37,17 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { */ public static $_log = FALSE; + /** + * Paths for accessing this entity in the UI. + * + * @var string[] + */ + protected static $_paths = [ + 'view' => 'civicrm/contact/view/rel?action=view&reset=1&cid=[near_contact_id]&id=[relationship_id]', + 'update' => 'civicrm/contact/view/rel?action=update&reset=1&cid=[near_contact_id]&id=[relationship_id]&rtype=[orientation]', + 'delete' => 'civicrm/contact/view/rel?action=delete&reset=1&cid=[near_contact_id]&id=[relationship_id]', + ]; + /** * Relationship Cache ID * diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php index 998baf20fb..2f607703c1 100644 --- a/civicrm/CRM/Contact/DAO/SavedSearch.php +++ b/civicrm/CRM/Contact/DAO/SavedSearch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/SavedSearch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fe46c2b4900f1fdde4a90f4858710fde) + * (GenCodeChecksum:8a25df5165c48a42f0280efe9eb262d5) */ /** @@ -306,6 +306,7 @@ class CRM_Contact_DAO_SavedSearch extends CRM_Core_DAO { 'html' => [ 'label' => ts("Created By"), ], + 'readonly' => TRUE, 'add' => '5.36', ], 'modified_id' => [ @@ -350,6 +351,7 @@ class CRM_Contact_DAO_SavedSearch extends CRM_Core_DAO { 'entity' => 'SavedSearch', 'bao' => 'CRM_Contact_BAO_SavedSearch', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '5.36', ], 'modified_date' => [ diff --git a/civicrm/CRM/Contact/Form/Contact.php b/civicrm/CRM/Contact/Form/Contact.php index 798050800c..ef35118d3f 100644 --- a/civicrm/CRM/Contact/Form/Contact.php +++ b/civicrm/CRM/Contact/Form/Contact.php @@ -762,7 +762,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { $this->assign('checkSimilar', $checkSimilar); if ($checkSimilar == 1) { $ruleParams = ['used' => 'Supervised', 'contact_type' => $this->_contactType]; - $this->assign('ruleFields', CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams)); + $this->assign('ruleFields', CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams)); } // build Custom data if Custom data present in edit option diff --git a/civicrm/CRM/Contact/Form/DedupeRules.php b/civicrm/CRM/Contact/Form/DedupeRules.php index 176214de81..3e8e1e70de 100644 --- a/civicrm/CRM/Contact/Form/DedupeRules.php +++ b/civicrm/CRM/Contact/Form/DedupeRules.php @@ -53,7 +53,7 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { throw new CRM_Core_Exception('Contact Type is Not valid'); } if ($this->_rgid) { - $rgDao = new CRM_Dedupe_DAO_RuleGroup(); + $rgDao = new CRM_Dedupe_DAO_DedupeRuleGroup(); $rgDao->id = $this->_rgid; $rgDao->find(TRUE); @@ -65,7 +65,7 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { $this->_defaults['is_reserved'] = $rgDao->is_reserved; $this->assign('isReserved', $rgDao->is_reserved); $this->assign('ruleName', $rgDao->name); - $ruleDao = new CRM_Dedupe_DAO_Rule(); + $ruleDao = new CRM_Dedupe_DAO_DedupeRule(); $ruleDao->dedupe_rule_group_id = $this->_rgid; $ruleDao->find(); $count = 0; @@ -76,7 +76,7 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { $count++; } } - $supported = CRM_Dedupe_BAO_RuleGroup::supportedFields($this->_contactType); + $supported = CRM_Dedupe_BAO_DedupeRuleGroup::supportedFields($this->_contactType); if (is_array($supported)) { foreach ($supported as $table => $fields) { foreach ($fields as $field => $title) { @@ -93,7 +93,7 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { public function buildQuickForm() { $this->addField('title', ['label' => ts('Rule Name')], TRUE); $this->addRule('title', ts('A duplicate matching rule with this name already exists. Please select another name.'), - 'objectExists', ['CRM_Dedupe_DAO_RuleGroup', $this->_rgid, 'title'] + 'objectExists', ['CRM_Dedupe_DAO_DedupeRuleGroup', $this->_rgid, 'title'] ); $this->addField('used', ['label' => ts('Usage')], TRUE); @@ -203,7 +203,7 @@ UPDATE civicrm_dedupe_rule_group CRM_Core_DAO::executeQuery($query, $queryParams); } - $rgDao = new CRM_Dedupe_DAO_RuleGroup(); + $rgDao = new CRM_Dedupe_DAO_DedupeRuleGroup(); if ($this->_action & CRM_Core_Action::UPDATE) { $rgDao->id = $this->_rgid; } @@ -228,7 +228,7 @@ UPDATE civicrm_dedupe_rule_group return; } - $ruleDao = new CRM_Dedupe_DAO_Rule(); + $ruleDao = new CRM_Dedupe_DAO_DedupeRule(); $ruleDao->dedupe_rule_group_id = $rgDao->id; $ruleDao->delete(); $substrLenghts = []; @@ -244,7 +244,7 @@ UPDATE civicrm_dedupe_rule_group $length = !empty($values["length_$count"]) ? CRM_Utils_Array::value("length_$count", $values) : NULL; $weight = $values["weight_$count"]; if ($table and $field) { - $ruleDao = new CRM_Dedupe_DAO_Rule(); + $ruleDao = new CRM_Dedupe_DAO_DedupeRule(); $ruleDao->dedupe_rule_group_id = $rgDao->id; $ruleDao->rule_table = $table; $ruleDao->rule_field = $field; diff --git a/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php b/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php index 007522afbf..b5c9def4b5 100644 --- a/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php +++ b/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php @@ -144,8 +144,11 @@ class CRM_Contact_Form_Edit_CommunicationPreferences { // CRM-7119: set preferred_language to default if unset if (empty($defaults['preferred_language'])) { - $config = CRM_Core_Config::singleton(); - $defaults['preferred_language'] = $config->lcMessages; + if ($form->_action == CRM_Core_Action::ADD) { + if (($defContactLanguage = CRM_Core_I18n::getContactDefaultLanguage()) != FALSE) { + $defaults['preferred_language'] = $defContactLanguage; + } + } } if (empty($defaults['communication_style_id'])) { diff --git a/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php b/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php index c53d75ef57..262cf491dc 100644 --- a/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php +++ b/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php @@ -44,8 +44,11 @@ class CRM_Contact_Form_Inline_CommunicationPreferences extends CRM_Contact_Form_ // CRM-7119: set preferred_language to default if unset if (empty($defaults['preferred_language'])) { - $config = CRM_Core_Config::singleton(); - $defaults['preferred_language'] = $config->lcMessages; + if ($form->_action == CRM_Core_Action::ADD) { + if (($defContactLanguage = CRM_Core_I18n::getContactDefaultLanguage()) != FALSE) { + $defaults['preferred_language'] = $defContactLanguage; + } + } } // CRM-19135: where CRM_Core_BAO_Contact::getValues() set label as a default value instead of reserved 'value', diff --git a/civicrm/CRM/Contact/Form/Inline/Email.php b/civicrm/CRM/Contact/Form/Inline/Email.php index 4978e99843..3b59174826 100644 --- a/civicrm/CRM/Contact/Form/Inline/Email.php +++ b/civicrm/CRM/Contact/Form/Inline/Email.php @@ -170,17 +170,9 @@ class CRM_Contact_Form_Inline_Email extends CRM_Contact_Form_Inline { } CRM_Core_BAO_Block::create('email', $params); - // If contact has no name, set primary email as display name - // TODO: This should be handled in the BAO for the benefit of the api, etc. + // Changing email might change a contact's display_name so refresh name block content if (!$this->contactHasName) { - foreach ($params['email'] as $email) { - if ($email['is_primary']) { - CRM_Core_DAO::setFieldValue('CRM_Contact_DAO_Contact', $this->_contactId, 'display_name', $email['email']); - CRM_Core_DAO::setFieldValue('CRM_Contact_DAO_Contact', $this->_contactId, 'sort_name', $email['email']); - $this->ajaxResponse['reloadBlocks'] = ['#crm-contactname-content']; - break; - } - } + $this->ajaxResponse['reloadBlocks'] = ['#crm-contactname-content']; } $this->log(); diff --git a/civicrm/CRM/Contact/Form/Merge.php b/civicrm/CRM/Contact/Form/Merge.php index be4c5894a9..f7854fb154 100644 --- a/civicrm/CRM/Contact/Form/Merge.php +++ b/civicrm/CRM/Contact/Form/Merge.php @@ -365,7 +365,7 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { CRM_Core_Error::statusBounce(ts('Cannot merge a contact with itself.')); } - if (!CRM_Dedupe_BAO_Rule::validateContacts($cid, $oid)) { + if (!CRM_Dedupe_BAO_DedupeRule::validateContacts($cid, $oid)) { CRM_Core_Error::statusBounce(ts('The selected pair of contacts are marked as non duplicates. If these records should be merged, you can remove this exception on the <a href="%1">Dedupe Exceptions</a> page.', [1 => CRM_Utils_System::url('civicrm/dedupe/exception', 'reset=1')])); } diff --git a/civicrm/CRM/Contact/Form/Search/Advanced.php b/civicrm/CRM/Contact/Form/Search/Advanced.php index 95e981a63d..73ddd7dfc8 100644 --- a/civicrm/CRM/Contact/Form/Search/Advanced.php +++ b/civicrm/CRM/Contact/Form/Search/Advanced.php @@ -84,7 +84,7 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search { $componentPanes = []; foreach ($components as $name => $component) { - if (in_array($name, array_keys($this->_searchOptions)) && + if (array_key_exists($name, $this->_searchOptions) && $this->_searchOptions[$name] && CRM_Core_Permission::access($component->name) ) { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText.php index 09faca084a..c86d265af9 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText.php @@ -105,7 +105,7 @@ class CRM_Contact_Form_Search_Custom_FullText extends CRM_Contact_Form_Search_Cu // 1. this custom search has slightly different structure , // 2. we are in constructor right now, // we 'll use a small hack - - $rowCount = CRM_Utils_Array::value('crmRowCount', $_REQUEST, CRM_Utils_Pager::ROWCOUNT); + $rowCount = CRM_Utils_Array::value('crmRowCount', $_REQUEST, Civi::settings()->get('default_pager_size')); $pageId = CRM_Utils_Array::value('crmPID', $_REQUEST, 1); $offset = ($pageId - 1) * $rowCount; $this->_limitClause = NULL; diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Group.php b/civicrm/CRM/Contact/Form/Search/Custom/Group.php index 502d041820..59c61daf48 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Group.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Group.php @@ -184,7 +184,6 @@ class CRM_Contact_Form_Search_Custom_Group extends CRM_Contact_Form_Search_Custo * @param bool $justIDs * * @return string - * @throws \Exception */ public function all( $offset = 0, $rowcount = 0, $sort = NULL, @@ -302,7 +301,7 @@ class CRM_Contact_Form_Search_Custom_Group extends CRM_Contact_Form_Search_Custo //if no group selected search for all groups $iGroups = NULL; } - if (is_array($this->_excludeGroups)) { + if (is_array($this->_excludeGroups) && !empty($this->_excludeGroups)) { $xGroups = implode(',', $this->_excludeGroups); } else { @@ -310,7 +309,6 @@ class CRM_Contact_Form_Search_Custom_Group extends CRM_Contact_Form_Search_Custo } $this->_xGTable->createWithColumns("contact_id int primary key"); - //used only when exclude group is selected if ($xGroups != 0) { $excludeGroup = "INSERT INTO {$this->_xGTableName} ( contact_id ) @@ -437,7 +435,7 @@ WHERE gcc.group_id = {$ssGroup->id} //if no group selected search for all groups $iTags = NULL; } - if (is_array($this->_excludeTags)) { + if (is_array($this->_excludeTags) && !empty($this->_excludeTags)) { $xTags = implode(',', $this->_excludeTags); } else { diff --git a/civicrm/CRM/Contact/Form/Task/Useradd.php b/civicrm/CRM/Contact/Form/Task/Useradd.php index cb78c3c38a..27a4ff7dd4 100644 --- a/civicrm/CRM/Contact/Form/Task/Useradd.php +++ b/civicrm/CRM/Contact/Form/Task/Useradd.php @@ -71,16 +71,13 @@ class CRM_Contact_Form_Task_Useradd extends CRM_Core_Form { $this->add('text', 'cms_name', ts('Username'), ['class' => 'huge']); $this->addRule('cms_name', ts('Username is required'), 'required'); - // For WordPress only, comply with how WordPress sets passwords via magic link + // WordPress may or may not require setting passwords via magic link, depending on its configuration. // For other CMS, output the password fields - if ($config->userFramework !== 'WordPress' || ($config->userFramework === 'WordPress' && !$config->userSystem->isUserRegistrationPermitted())) { + if ($config->userSystem->showPasswordFieldWhenAdminCreatesUser()) { $this->add('password', 'cms_pass', ts('Password'), ['class' => 'huge']); $this->add('password', 'cms_confirm_pass', ts('Confirm Password'), ['class' => 'huge']); $this->addRule('cms_pass', ts('Password is required'), 'required'); - $this->addRule([ - 'cms_pass', - 'cms_confirm_pass', - ], ts('Password mismatch'), 'compare'); + $this->addFormRule(['CRM_Contact_Form_Task_Useradd', 'passwordMatch']); } $this->add('text', 'email', ts('Email'), ['class' => 'huge'])->freeze(); @@ -140,4 +137,18 @@ class CRM_Contact_Form_Task_Useradd extends CRM_Core_Form { return empty($errors) ? TRUE : $errors; } + /** + * Validation Rule. + * + * @param array $params + * + * @return array|bool + */ + public static function passwordMatch($params) { + if ($params['cms_pass'] !== $params['cms_confirm_pass']) { + return ['cms_pass' => ts('Password mismatch')]; + } + return TRUE; + } + } diff --git a/civicrm/CRM/Contact/Import/Form/MapField.php b/civicrm/CRM/Contact/Import/Form/MapField.php index 8475dcd070..ac0a0d65ab 100644 --- a/civicrm/CRM/Contact/Import/Form/MapField.php +++ b/civicrm/CRM/Contact/Import/Form/MapField.php @@ -119,7 +119,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { 'contact_type' => $cType, 'used' => 'Unsupervised', ]; - $this->_dedupeFields[$cType] = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $this->_dedupeFields[$cType] = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); } //Modify mapper fields title if fields are present in dedupe rule diff --git a/civicrm/CRM/Contact/Import/Parser.php b/civicrm/CRM/Contact/Import/Parser.php index e6bfd26f2a..99932d242a 100644 --- a/civicrm/CRM/Contact/Import/Parser.php +++ b/civicrm/CRM/Contact/Import/Parser.php @@ -691,30 +691,38 @@ abstract class CRM_Contact_Import_Parser extends CRM_Import_Parser { /** * Update the record with PK $id in the import database table. * + * @deprecated - call setImportStatus directly as the parameters are simpler, + * * @param int $id * @param array $params */ - public function updateImportRecord($id, &$params) { - $statusFieldName = $this->_statusFieldName; - $primaryKeyName = $this->_primaryKeyName; - - if ($statusFieldName && $primaryKeyName) { - $dao = new CRM_Core_DAO(); - $db = $dao->getDatabaseConnection(); - - $query = "UPDATE $this->_tableName - SET $statusFieldName = ?, - ${statusFieldName}Msg = ? - WHERE $primaryKeyName = ?"; - $args = [ - $params[$statusFieldName], - CRM_Utils_Array::value("${statusFieldName}Msg", $params), - $id, - ]; - - //print "Running query: $query<br/>With arguments: ".$params[$statusFieldName].", ".$params["${statusFieldName}Msg"].", $id<br/>"; + public function updateImportRecord($id, $params): void { + $this->setImportStatus((int) $id, $params[$this->_statusFieldName] ?? '', $params["{$this->_statusFieldName}Msg"] ?? ''); + } - $db->query($query, $args); + /** + * Set the import status for the given record. + * + * If this is a sql import then the sql table will be used and the update + * will not happen as the relevant fields don't exist in the table - hence + * the checks that statusField & primary key are set. + * + * @param int $id + * @param string $status + * @param string $message + */ + public function setImportStatus(int $id, string $status, string $message): void { + if ($this->_statusFieldName && $this->_primaryKeyName) { + CRM_Core_DAO::executeQuery(" + UPDATE $this->_tableName + SET $this->_statusFieldName = %1, + {$this->_statusFieldName}Msg = %2 + WHERE $this->_primaryKeyName = %3 + ", [ + 1 => [$status, 'String'], + 2 => [$message, 'String'], + 3 => [$id, 'Integer'], + ]); } } diff --git a/civicrm/CRM/Contact/Import/Parser/Contact.php b/civicrm/CRM/Contact/Import/Parser/Contact.php index 3cc2600b25..113248c951 100644 --- a/civicrm/CRM/Contact/Import/Parser/Contact.php +++ b/civicrm/CRM/Contact/Import/Parser/Contact.php @@ -242,10 +242,10 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * @return bool * the result of this processing */ - public function summary(&$values) { + public function summary(&$values): int { $erroneousField = NULL; - $response = $this->setActiveFieldValues($values, $erroneousField); - + $this->setActiveFieldValues($values, $erroneousField); + $rowNumber = (int) ($values[count($values) - 1]); $errorMessage = NULL; $errorRequired = FALSE; switch ($this->_contactType) { @@ -280,12 +280,10 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { break; } - $statusFieldName = $this->_statusFieldName; - if ($this->_emailIndex >= 0) { /* If we don't have the required fields, bail */ - if ($this->_contactType == 'Individual' && !$this->_updateWithId) { + if ($this->_contactType === 'Individual' && !$this->_updateWithId) { if ($errorRequired && empty($values[$this->_emailIndex])) { if ($errorMessage) { $errorMessage .= ' ' . ts('OR') . ' ' . ts('Email Address'); @@ -294,11 +292,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $errorMessage = ts('Missing required field:') . ' ' . ts('Email Address'); } array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } @@ -311,11 +305,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (!CRM_Utils_Rule::email($email)) { $errorMessage = ts('Invalid Email address'); array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } @@ -332,11 +322,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $errorMessage = ts('Missing required field:') . ' ' . ts('Email Address'); } array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } @@ -349,11 +335,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if ($externalDupe = CRM_Utils_Array::value($externalID, $this->_allExternalIdentifiers)) { $errorMessage = ts('External ID conflicts with record %1', [1 => $externalDupe]); array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } //otherwise, count it and move on @@ -381,24 +363,12 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $this->isErrorInCoreData($params, $errorMessage); if ($errorMessage) { $tempMsg = "Invalid value for field(s) : $errorMessage"; - // put the error message in the import record in the DB - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $tempMsg, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus($rowNumber, 'ERROR', $tempMsg); array_unshift($values, $tempMsg); $errorMessage = NULL; return CRM_Import_Parser::ERROR; } - - //if user correcting errors by walking back - //need to reset status ERROR msg to null - //now currently we are having valid data. - $importRecordParams = [ - $statusFieldName => 'NEW', - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus($rowNumber, 'NEW', ''); return CRM_Import_Parser::VALID; } @@ -431,7 +401,6 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * @throws \API_Exception */ public function import($onDuplicate, &$values, $doGeocodeAddress = FALSE) { - $config = CRM_Core_Config::singleton(); $this->_unparsedStreetAddressContacts = []; if (!$doGeocodeAddress) { // CRM-5854, reset the geocode method to null to prevent geocoding @@ -1923,7 +1892,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { return array_keys($possibleMatches['values']); } if ($possibleMatches['count']) { - if (in_array($extIDMatch, array_keys($possibleMatches['values']))) { + if (array_key_exists($extIDMatch, $possibleMatches['values'])) { return [$extIDMatch]; } throw new CRM_Core_Exception(ts( diff --git a/civicrm/CRM/Contact/Page/AJAX.php b/civicrm/CRM/Contact/Page/AJAX.php index 74aa9b6e2d..a542ef0239 100644 --- a/civicrm/CRM/Contact/Page/AJAX.php +++ b/civicrm/CRM/Contact/Page/AJAX.php @@ -494,7 +494,7 @@ LIMIT {$offset}, {$rowCount} break; } - $dedupeRules = CRM_Dedupe_BAO_RuleGroup::getByType($contactType); + $dedupeRules = CRM_Dedupe_BAO_DedupeRuleGroup::getByType($contactType); CRM_Utils_JSON::output($dedupeRules); } @@ -825,7 +825,7 @@ LIMIT {$offset}, {$rowCount} } } - $exception = new CRM_Dedupe_DAO_Exception(); + $exception = new CRM_Dedupe_DAO_DedupeException(); $exception->contact_id1 = $cid; $exception->contact_id2 = $oid; //make sure contact2 > contact1. diff --git a/civicrm/CRM/Contact/Page/DedupeException.php b/civicrm/CRM/Contact/Page/DedupeException.php index 31aab71756..c193120275 100644 --- a/civicrm/CRM/Contact/Page/DedupeException.php +++ b/civicrm/CRM/Contact/Page/DedupeException.php @@ -52,7 +52,7 @@ class CRM_Contact_Page_DedupeException extends CRM_Core_Page { $totalitems = civicrm_api3('Exception', "getcount", $params); $params = [ 'total' => $totalitems, - 'rowCount' => CRM_Utils_Pager::ROWCOUNT, + 'rowCount' => Civi::settings()->get('default_pager_size'), 'status' => ts('Dedupe Exceptions %%StatusMessage%%'), 'buttonBottom' => 'PagerBottomButton', 'buttonTop' => 'PagerTopButton', diff --git a/civicrm/CRM/Contact/Page/DedupeFind.php b/civicrm/CRM/Contact/Page/DedupeFind.php index 1d96c2dad5..f89619fed5 100644 --- a/civicrm/CRM/Contact/Page/DedupeFind.php +++ b/civicrm/CRM/Contact/Page/DedupeFind.php @@ -45,7 +45,7 @@ class CRM_Contact_Page_DedupeFind extends CRM_Core_Page_Basic { * Classname of BAO. */ public function getBAOName() { - return 'CRM_Dedupe_BAO_RuleGroup'; + return 'CRM_Dedupe_BAO_DedupeRuleGroup'; } /** diff --git a/civicrm/CRM/Contact/Page/DedupeMerge.php b/civicrm/CRM/Contact/Page/DedupeMerge.php index b4bf18bafa..25d38f803a 100644 --- a/civicrm/CRM/Contact/Page/DedupeMerge.php +++ b/civicrm/CRM/Contact/Page/DedupeMerge.php @@ -124,7 +124,7 @@ class CRM_Contact_Page_DedupeMerge extends CRM_Core_Page { * @throws \CiviCRM_API3_Exception * @throws \API_Exception */ - public static function callBatchMerge(CRM_Queue_TaskContext $ctx, $rgid, $gid, $mode = 'safe', $batchLimit, $isSelected, $criteria, $searchLimit) { + public static function callBatchMerge(CRM_Queue_TaskContext $ctx, $rgid, $gid, $mode, $batchLimit, $isSelected, $criteria, $searchLimit) { CRM_Dedupe_Merger::batchMerge($rgid, $gid, $mode, $batchLimit, $isSelected, $criteria, TRUE, FALSE, $searchLimit); return CRM_Queue_Task::TASK_SUCCESS; } diff --git a/civicrm/CRM/Contact/Page/DedupeRules.php b/civicrm/CRM/Contact/Page/DedupeRules.php index 9f1d2bf66e..8d52be5d25 100644 --- a/civicrm/CRM/Contact/Page/DedupeRules.php +++ b/civicrm/CRM/Contact/Page/DedupeRules.php @@ -30,7 +30,7 @@ class CRM_Contact_Page_DedupeRules extends CRM_Core_Page_Basic { * Classname of BAO. */ public function getBAOName() { - return 'CRM_Dedupe_BAO_RuleGroup'; + return 'CRM_Dedupe_BAO_DedupeRuleGroup'; } /** @@ -115,7 +115,7 @@ class CRM_Contact_Page_DedupeRules extends CRM_Core_Page_Basic { public function browse() { // get all rule groups $ruleGroups = []; - $dao = new CRM_Dedupe_DAO_RuleGroup(); + $dao = new CRM_Dedupe_DAO_DedupeRuleGroup(); $dao->orderBy('contact_type ASC, used ASC, title ASC'); $dao->find(); @@ -188,11 +188,11 @@ class CRM_Contact_Page_DedupeRules extends CRM_Core_Page_Basic { * @param int $id */ public function delete($id) { - $ruleDao = new CRM_Dedupe_DAO_Rule(); + $ruleDao = new CRM_Dedupe_DAO_DedupeRule(); $ruleDao->dedupe_rule_group_id = $id; $ruleDao->delete(); - $rgDao = new CRM_Dedupe_DAO_RuleGroup(); + $rgDao = new CRM_Dedupe_DAO_DedupeRuleGroup(); $rgDao->id = $id; if ($rgDao->find(TRUE)) { $rgDao->delete(); diff --git a/civicrm/CRM/Contact/Page/ImageFile.php b/civicrm/CRM/Contact/Page/ImageFile.php index da437de7d5..9c21181f59 100644 --- a/civicrm/CRM/Contact/Page/ImageFile.php +++ b/civicrm/CRM/Contact/Page/ImageFile.php @@ -52,11 +52,11 @@ class CRM_Contact_Page_ImageFile extends CRM_Core_Page { 'image/' . ($fileExtension == 'jpg' ? 'jpeg' : $fileExtension), $this->ttl ); - CRM_Utils_System::civiExit(); } else { - throw new CRM_Core_Exception(ts('Photo does not exist')); + header("HTTP/1.0 404 Not Found"); } + CRM_Utils_System::civiExit(); } /** diff --git a/civicrm/CRM/Contact/Selector.php b/civicrm/CRM/Contact/Selector.php index 17a1155d0f..cfc35d70ef 100644 --- a/civicrm/CRM/Contact/Selector.php +++ b/civicrm/CRM/Contact/Selector.php @@ -324,7 +324,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se public function getPagerParams($action, &$params) { $params['status'] = ts('Contact %%StatusMessage%%'); $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; diff --git a/civicrm/CRM/Contact/Selector/Custom.php b/civicrm/CRM/Contact/Selector/Custom.php index b5ea5468bb..95507319a9 100644 --- a/civicrm/CRM/Contact/Selector/Custom.php +++ b/civicrm/CRM/Contact/Selector/Custom.php @@ -191,7 +191,7 @@ class CRM_Contact_Selector_Custom extends CRM_Contact_Selector { public function getPagerParams($action, &$params) { $params['status'] = ts('Contact %%StatusMessage%%'); $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; diff --git a/civicrm/CRM/Contact/Task.php b/civicrm/CRM/Contact/Task.php index 3597e319c9..5db37ba3e0 100644 --- a/civicrm/CRM/Contact/Task.php +++ b/civicrm/CRM/Contact/Task.php @@ -43,169 +43,169 @@ class CRM_Contact_Task extends CRM_Core_Task { public static function tasks() { if (!self::$_tasks) { - self::$_tasks = array( - self::GROUP_ADD => array( + self::$_tasks = [ + self::GROUP_ADD => [ 'title' => ts('Group - add contacts'), 'class' => 'CRM_Contact_Form_Task_AddToGroup', 'url' => 'civicrm/task/add-to-group', 'icon' => 'fa-user-plus', - ), - self::GROUP_REMOVE => array( + ], + self::GROUP_REMOVE => [ 'title' => ts('Group - remove contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromGroup', 'url' => 'civicrm/task/remove-from-group', 'icon' => 'fa-user-plus', - ), - self::TAG_ADD => array( + ], + self::TAG_ADD => [ 'title' => ts('Tag - add to contacts'), 'class' => 'CRM_Contact_Form_Task_AddToTag', 'url' => 'civicrm/task/add-to-tag', 'icon' => 'fa-tags', - ), - self::TAG_REMOVE => array( + ], + self::TAG_REMOVE => [ 'title' => ts('Tag - remove from contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromTag', 'url' => 'civicrm/task/remove-from-tag', 'icon' => 'fa-tag', - ), - self::TASK_EXPORT => array( + ], + self::TASK_EXPORT => [ 'title' => ts('Export contacts'), - 'class' => array( + 'class' => [ 'CRM_Contact_Export_Form_Select', 'CRM_Contact_Export_Form_Map', - ), + ], 'result' => FALSE, - ), - self::TASK_EMAIL => array( - 'title' => ts('Email - send now (to %1 or less)', array( + ], + self::TASK_EMAIL => [ + 'title' => ts('Email - send now (to %1 or less)', [ 1 => Civi::settings() ->get('simple_mail_limit'), - )), + ]), 'class' => 'CRM_Contact_Form_Task_Email', 'result' => TRUE, 'url' => 'civicrm/task/send-email', 'icon' => 'fa-paper-plane-o', - ), - self::TASK_DELETE => array( + ], + self::TASK_DELETE => [ 'title' => ts('Delete contacts'), 'class' => 'CRM_Contact_Form_Task_Delete', 'result' => FALSE, 'url' => 'civicrm/task/delete-contact', 'icon' => 'fa-trash', - ), - self::RECORD_CONTACTS => array( + ], + self::RECORD_CONTACTS => [ 'title' => ts('Add activity'), 'class' => 'CRM_Activity_Form_Activity', - ), - self::SAVE_SEARCH => array( + ], + self::SAVE_SEARCH => [ 'title' => ts('Group - create smart group'), 'class' => 'CRM_Contact_Form_Task_SaveSearch', 'result' => TRUE, - ), - self::SAVE_SEARCH_UPDATE => array( + ], + self::SAVE_SEARCH_UPDATE => [ 'title' => ts('Group - update smart group'), 'class' => 'CRM_Contact_Form_Task_SaveSearch_Update', 'result' => TRUE, - ), - self::TASK_PRINT => array( + ], + self::TASK_PRINT => [ 'title' => ts('Print selected rows'), 'class' => 'CRM_Contact_Form_Task_Print', 'result' => FALSE, - ), - self::LABEL_CONTACTS => array( + ], + self::LABEL_CONTACTS => [ 'title' => ts('Mailing labels - print'), 'class' => 'CRM_Contact_Form_Task_Label', 'result' => TRUE, 'url' => 'civicrm/task/make-mailing-label', 'icon' => 'fa-print', - ), - self::BATCH_UPDATE => array( + ], + self::BATCH_UPDATE => [ 'title' => ts('Update multiple contacts'), - 'class' => array( + 'class' => [ 'CRM_Contact_Form_Task_PickProfile', 'CRM_Contact_Form_Task_Batch', - ), + ], 'result' => TRUE, 'url' => 'civicrm/task/pick-profile', 'icon' => 'fa-pencil', - ), - self::PDF_LETTER => array( + ], + self::PDF_LETTER => [ 'title' => ts('Print/merge document'), 'class' => 'CRM_Contact_Form_Task_PDF', 'result' => TRUE, 'url' => 'civicrm/task/print-document', 'icon' => 'fa-file-pdf-o', - ), - self::EMAIL_UNHOLD => array( + ], + self::EMAIL_UNHOLD => [ 'title' => ts('Email - unhold addresses'), 'class' => 'CRM_Contact_Form_Task_Unhold', 'url' => 'civicrm/task/unhold-email', 'icon' => 'fa-unlock', - ), - self::COMMUNICATION_PREFS => array( + ], + self::COMMUNICATION_PREFS => [ 'title' => ts('Communication preferences - alter'), 'class' => 'CRM_Contact_Form_Task_AlterPreferences', 'url' => 'civicrm/task/alter-contact-preference', 'icon' => 'fa-check-square-o', - ), - self::RESTORE => array( + ], + self::RESTORE => [ 'title' => ts('Restore contacts from trash'), 'class' => 'CRM_Contact_Form_Task_Delete', 'result' => FALSE, - ), - self::DELETE_PERMANENTLY => array( + ], + self::DELETE_PERMANENTLY => [ 'title' => ts('Delete permanently'), 'class' => 'CRM_Contact_Form_Task_Delete', 'result' => FALSE, - ), - ); + ], + ]; //CRM-16329, if SMS provider is configured show sms action. $providersCount = CRM_SMS_BAO_Provider::activeProviderCount(); if ($providersCount && CRM_Core_Permission::check('send SMS')) { - self::$_tasks[self::TASK_SMS] = array( + self::$_tasks[self::TASK_SMS] = [ 'title' => ts('SMS - schedule/send'), 'class' => 'CRM_Contact_Form_Task_SMS', 'result' => TRUE, - ); + ]; } if (CRM_Contact_BAO_ContactType::isActive('Individual')) { $label = CRM_Contact_BAO_ContactType::getLabel('Individual'); - self::$_tasks[self::INDIVIDUAL_CONTACTS] = array( + self::$_tasks[self::INDIVIDUAL_CONTACTS] = [ 'title' => ts('Add relationship - to %1', - array(1 => $label) + [1 => $label] ), 'class' => 'CRM_Contact_Form_Task_AddToIndividual', - ); + ]; } if (CRM_Contact_BAO_ContactType::isActive('Household')) { $label = CRM_Contact_BAO_ContactType::getLabel('Household'); - self::$_tasks[self::HOUSEHOLD_CONTACTS] = array( + self::$_tasks[self::HOUSEHOLD_CONTACTS] = [ 'title' => ts('Add relationship - to %1', - array(1 => $label) + [1 => $label] ), 'class' => 'CRM_Contact_Form_Task_AddToHousehold', - ); + ]; } if (CRM_Contact_BAO_ContactType::isActive('Organization')) { $label = CRM_Contact_BAO_ContactType::getLabel('Organization'); - self::$_tasks[self::ORGANIZATION_CONTACTS] = array( + self::$_tasks[self::ORGANIZATION_CONTACTS] = [ 'title' => ts('Add relationship - to %1', - array(1 => $label) + [1 => $label] ), 'class' => 'CRM_Contact_Form_Task_AddToOrganization', - ); + ]; } if (CRM_Core_Permission::check('merge duplicate contacts')) { - self::$_tasks[self::MERGE_CONTACTS] = array( + self::$_tasks[self::MERGE_CONTACTS] = [ 'title' => ts('Merge contacts'), 'class' => 'CRM_Contact_Form_Task_Merge', 'result' => TRUE, - ); + ]; } //CRM-4418, check for delete @@ -224,38 +224,38 @@ class CRM_Contact_Task extends CRM_Core_Task { ) ) ) { - self::$_tasks[self::MAP_CONTACTS] = array( + self::$_tasks[self::MAP_CONTACTS] = [ 'title' => ts('Map contacts'), 'class' => 'CRM_Contact_Form_Task_Map', 'result' => FALSE, 'url' => 'civicrm/contact/map', 'icon' => 'fa-map', - ); + ]; } if (CRM_Core_Permission::access('CiviEvent')) { - self::$_tasks[self::ADD_EVENT] = array( + self::$_tasks[self::ADD_EVENT] = [ 'title' => ts('Register participants for event'), 'class' => 'CRM_Event_Form_Task_Register', - ); + ]; } if (CRM_Core_Permission::access('CiviMail') || (CRM_Mailing_Info::workflowEnabled() && CRM_Core_Permission::check('create mailings')) ) { - self::$_tasks[self::CREATE_MAILING] = array( + self::$_tasks[self::CREATE_MAILING] = [ 'title' => ts('Email - schedule/send via CiviMail'), 'class' => 'CRM_Mailing_Form_Task_AdhocMailing', 'result' => FALSE, - ); + ]; } if (CRM_Core_Permission::access('CiviCase')) { - self::$_tasks[self::ADD_TO_CASE] = array( + self::$_tasks[self::ADD_TO_CASE] = [ 'title' => ts('Add to case as role'), 'class' => 'CRM_Case_Form_AddToCaseAsRole', 'result' => FALSE, - ); + ]; } parent::tasks(); @@ -293,11 +293,11 @@ class CRM_Contact_Task extends CRM_Core_Task { $tasks = self::taskTitles(); } else { - $tasks = array( + $tasks = [ 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'], - ); + ]; foreach ([ self::MAP_CONTACTS, diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 41c2b3a1cd..df633551ae 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -13,6 +13,7 @@ use Civi\Api4\Activity; use Civi\Api4\ActivityContact; use Civi\Api4\Contribution; use Civi\Api4\ContributionRecur; +use Civi\Api4\LineItem; use Civi\Api4\PaymentProcessor; use Civi\Api4\PledgePayment; @@ -171,17 +172,26 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { // Get Line Items if we don't have them already. if (empty($params['line_item'])) { - if (isset($params['id'])) { - CRM_Price_BAO_LineItem::getLineItemArray($params, [$params['id']]); - } - else { - CRM_Price_BAO_LineItem::getLineItemArray($params); - } + CRM_Price_BAO_LineItem::getLineItemArray($params, $contributionID ? [$contributionID] : NULL); } + // We should really ALWAYS calculate tax amount off the line items. + // In order to be a bit cautious we are just messaging rather than + // overwriting in cases where we were not previously setting it here. + $taxAmount = $lineTotal = 0; + foreach ($params['line_item'] ?? [] as $lineItems) { + foreach ($lineItems as $lineItem) { + $taxAmount += (float) ($lineItem['tax_amount'] ?? 0); + $lineTotal += (float) ($lineItem['line_total'] ?? 0); + } + } if (!isset($params['tax_amount']) && $setPrevContribution && (isset($params['total_amount']) || isset($params['financial_type_id']))) { - $params = CRM_Contribute_BAO_Contribution::checkTaxAmount($params); + $params['tax_amount'] = $taxAmount; + $params['total_amount'] = $taxAmount + $lineTotal; + } + if (isset($params['tax_amount']) && $params['tax_amount'] != $taxAmount && empty($params['skipLineItem'])) { + CRM_Core_Error::deprecatedWarning('passing in incorrect tax amounts is deprecated'); } CRM_Utils_Hook::pre($action, 'Contribution', $contributionID, $params); @@ -538,7 +548,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $activityParams['target_contact_id'] = ($activityParams['source_contact_id'] === (int) $contribution->contact_id) ? [] : [$contribution->contact_id]; } else { - list($sourceContactId, $targetContactId) = self::getActivitySourceAndTarget($activityParams['id']); + [$sourceContactId, $targetContactId] = self::getActivitySourceAndTarget($activityParams['id']); if (empty($targetContactId) && $sourceContactId != $contribution->contact_id) { // If no target contact exists and the source contact is not equal to @@ -713,7 +723,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { 'contact_type' => $contactType, 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $tmpContactField = []; if (is_array($fieldsArray)) { foreach ($fieldsArray as $value) { @@ -927,15 +937,29 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * @param int $contributionID * * @return array + * @throws \API_Exception */ - protected static function getRelatedMemberships($contributionID) { - $membershipPayments = civicrm_api3('MembershipPayment', 'get', [ + protected static function getRelatedMemberships(int $contributionID): array { + $membershipIDs = array_keys((array) LineItem::get(FALSE) + ->addWhere('contribution_id', '=', $contributionID) + ->addWhere('entity_table', '=', 'civicrm_membership') + ->addSelect('entity_id') + ->execute()->indexBy('entity_id')); + + $doubleCheckParams = [ 'return' => 'membership_id', - 'contribution_id' => (int) $contributionID, - ])['values']; - $membershipIDs = []; - foreach ($membershipPayments as $membershipPayment) { - $membershipIDs[] = $membershipPayment['membership_id']; + 'contribution_id' => $contributionID, + ]; + if (!empty($membershipIDs)) { + $doubleCheckParams['membership_id'] = ['NOT IN' => $membershipIDs]; + } + $membershipPayments = civicrm_api3('MembershipPayment', 'get', $doubleCheckParams)['values']; + if (!empty($membershipPayments)) { + $membershipIDs = []; + CRM_Core_Error::deprecatedWarning('Not having valid line items for membership payments is invalid.'); + foreach ($membershipPayments as $membershipPayment) { + $membershipIDs[] = $membershipPayment['membership_id']; + } } if (empty($membershipIDs)) { return []; @@ -973,12 +997,12 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $previousContributionStatus = CRM_Contribute_PseudoConstant::contributionStatus($params['prevContribution']->contribution_status_id, 'name'); $currentContributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['contribution']->contribution_status_id); - if ((($previousContributionStatus == 'Partially paid' && $currentContributionStatus == 'Completed') - || ($previousContributionStatus == 'Pending refund' && $currentContributionStatus == 'Completed') + if ((($previousContributionStatus === 'Partially paid' && $currentContributionStatus === 'Completed') + || ($previousContributionStatus === 'Pending refund' && $currentContributionStatus === 'Completed') // This concept of pay_later as different to any other sort of pending is deprecated & it's unclear // why it is here or where it is handled instead. - || ($previousContributionStatus == 'Pending' && $params['prevContribution']->is_pay_later == TRUE - && $currentContributionStatus == 'Partially paid')) + || ($previousContributionStatus === 'Pending' && $params['prevContribution']->is_pay_later == TRUE + && $currentContributionStatus === 'Partially paid')) ) { return FALSE; } @@ -987,13 +1011,13 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { // @todo we should stop passing $params by reference - splitting this out would be a step towards that. $params['trxnParams']['total_amount'] = -$params['total_amount']; } - elseif (($previousContributionStatus == 'Pending' - && $params['prevContribution']->is_pay_later) || $previousContributionStatus == 'In Progress' + elseif (($previousContributionStatus === 'Pending' + && $params['prevContribution']->is_pay_later) || $previousContributionStatus === 'In Progress' ) { $financialTypeID = !empty($params['financial_type_id']) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id; $arAccountId = CRM_Contribute_PseudoConstant::getRelationalFinancialAccount($financialTypeID, 'Accounts Receivable Account is'); - if ($currentContributionStatus == 'Cancelled') { + if ($currentContributionStatus === 'Cancelled') { // @todo we should stop passing $params by reference - splitting this out would be a step towards that. $params['trxnParams']['to_financial_account_id'] = $arAccountId; $params['trxnParams']['total_amount'] = -$params['total_amount']; @@ -1004,14 +1028,14 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } } - if (($previousContributionStatus == 'Pending' - || $previousContributionStatus == 'In Progress') - && ($currentContributionStatus == 'Completed') + if (($previousContributionStatus === 'Pending' + || $previousContributionStatus === 'In Progress') + && ($currentContributionStatus === 'Completed') ) { if (empty($params['line_item'])) { //CRM-15296 //@todo - check with Joe regarding this situation - payment processors create pending transactions with no line items - // when creating recurring membership payment - there are 2 lines to comment out in contributonPageTest if fixed + // when creating recurring membership payment - there are 2 lines to comment out in contributionPageTest if fixed // & this can be removed return FALSE; } @@ -1133,9 +1157,9 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $params['line_item'][$fieldId][$fieldValueId]['deferred_line_total'] = $itemParams['amount']; $params['line_item'][$fieldId][$fieldValueId]['financial_item_id'] = $financialItem->id; - if (($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') || ($context == 'changeFinancialType')) { + if (($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') || ($context === 'changeFinancialType')) { $taxAmount = (float) $lineItemDetails['tax_amount']; - if ($context == 'changeFinancialType' && $lineItemDetails['tax_amount'] === 'null') { + if ($context === 'changeFinancialType' && $lineItemDetails['tax_amount'] === 'null') { // reverse the Sale Tax amount if there is no tax rate associated with new Financial Type $taxAmount = CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); } @@ -1258,7 +1282,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { 'currency' => $resultDAO->currency, 'action' => $paymentEditLink, ]; - if ($paidByName == 'Check') { + if ($paidByName === 'Check') { $val['check_number'] = $resultDAO->check_number; } $rows[] = $val; @@ -1561,7 +1585,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = c.contact_id ) $input = []; if ($trxn_id) { - $clause[] = "trxn_id = %1"; + $clause[] = 'trxn_id = %1'; $input[1] = [$trxn_id, 'String']; } @@ -1632,10 +1656,10 @@ INNER JOIN civicrm_contact contact ON ( contact.id = c.contact_id ) $contributionFields = array_merge($contributionFields, CRM_Financial_DAO_FinancialType::export()); foreach ($contributionFields as $key => $var) { - if ($key == 'contribution_contact_id') { + if ($key === 'contribution_contact_id') { continue; } - elseif ($key == 'contribution_campaign_id') { + elseif ($key === 'contribution_campaign_id') { $var['title'] = ts('Campaign'); } $fields[$key] = $var; @@ -1922,7 +1946,7 @@ LEFT JOIN civicrm_option_value contribution_status ON (civicrm_contribution.cont * address id */ public static function createAddress($params, $billingLocationTypeID) { - list($hasBillingField, $addressParams) = self::getBillingAddressParams($params, $billingLocationTypeID); + [$hasBillingField, $addressParams] = self::getBillingAddressParams($params, $billingLocationTypeID); if ($hasBillingField) { $address = CRM_Core_BAO_Address::add($addressParams, FALSE); return $address->id; @@ -1991,14 +2015,14 @@ WHERE $condition return $contributionId; } - if ($componentName == 'Event') { + if ($componentName === 'Event') { $idName = 'participant_id'; $componentTable = 'civicrm_participant'; $paymentTable = 'civicrm_participant_payment'; $source = ts('Online Event Registration'); } - if ($componentName == 'Membership') { + if ($componentName === 'Membership') { $idName = 'membership_id'; $componentTable = 'civicrm_membership'; $paymentTable = 'civicrm_membership_payment'; @@ -2080,7 +2104,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $componentDetails['contact_id'] = $contactId; $componentDetails['component'] = $componentName; - if ($componentName == 'event') { + if ($componentName === 'event') { $componentDetails['participant'] = $componentId; } else { @@ -2253,7 +2277,6 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $membership->save(); //updating the membership log - $membershipLog = []; $membershipLog = $formattedParams; $logStartDate = CRM_Utils_Date::customFormat($dates['log_start_date'] ?? NULL, $format); $logStartDate = ($logStartDate) ? CRM_Utils_Date::isoToMysql($logStartDate) : $formattedParams['start_date']; @@ -2820,7 +2843,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac } } // todo remove strtolower - check consistency - if (strtolower($this->_component) == 'event') { + if (strtolower($this->_component) === 'event') { $eventParams = ['id' => $this->_relatedObjects['participant']->event_id]; $values['event'] = []; @@ -2839,9 +2862,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac 'module' => 'CiviEvent', ]; - list($custom_pre_id, - $custom_post_ids - ) = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams); + [$custom_pre_id, $custom_post_ids] = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams); $values['custom_pre_id'] = $custom_pre_id; $values['custom_post_id'] = $custom_post_ids; @@ -2902,7 +2923,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $template->assign('mem_end_date', $membership->end_date); $membership_status = CRM_Member_PseudoConstant::membershipStatus($membership->status_id, NULL, 'label'); $template->assign('mem_status', $membership_status); - if ($membership_status == 'Pending' && $membership->is_pay_later == 1) { + if ($membership_status === 'Pending' && $membership->is_pay_later == 1) { $values['is_pay_later'] = 1; } // Pass amount to floatval as string '0.00' is considered a @@ -3629,9 +3650,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $trxnParams['card_type_id'] = $params['card_type_id'] ?? NULL; $return = $financialTxn = CRM_Core_BAO_FinancialTrxn::create($trxnParams); $params['entity_id'] = $financialTxn->id; - if (empty($params['partial_payment_total']) && empty($params['partial_amount_to_pay'])) { - self::$_trxnIDs[] = $financialTxn->id; - } + self::$_trxnIDs[] = $financialTxn->id; } } // record line items and financial items @@ -3966,6 +3985,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * Optional amount to override the saved amount paid (e.g if calculating what it WILL be). * * @return float + * @throws \CRM_Core_Exception */ public static function getContributionBalance($contributionId, $contributionTotal = NULL) { if ($contributionTotal === NULL) { @@ -3979,88 +3999,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac ); } - /** - * Get the tax amount (misnamed function). - * - * @param array $params - * - * @return array - * @throws \CiviCRM_API3_Exception - */ - protected static function checkTaxAmount($params) { - $taxRates = CRM_Core_PseudoConstant::getTaxRates(); - - // Update contribution. - if (!empty($params['id'])) { - // CRM-19126 and CRM-19152 If neither total or financial_type_id are set on an update - // there are no tax implications - early return. - if (!isset($params['total_amount']) && !isset($params['financial_type_id'])) { - return $params; - } - if (empty($params['prevContribution'])) { - $params['prevContribution'] = self::getOriginalContribution($params['id']); - } - - foreach (['total_amount', 'financial_type_id', 'fee_amount'] as $field) { - if (!isset($params[$field])) { - if ($field == 'total_amount' && $params['prevContribution']->tax_amount) { - // Tax amount gets added back on later.... - $params['total_amount'] = $params['prevContribution']->total_amount - - $params['prevContribution']->tax_amount; - } - else { - $params[$field] = $params['prevContribution']->$field; - if ($params[$field] != $params['prevContribution']->$field) { - } - } - } - } - - self::calculateMissingAmountParams($params, $params['id']); - if (!array_key_exists($params['financial_type_id'], $taxRates)) { - // Assign tax Amount on update of contribution - if (!empty($params['prevContribution']->tax_amount)) { - $params['tax_amount'] = 'null'; - foreach ($params['line_item'] as $setID => $priceField) { - foreach ($priceField as $priceFieldID => $priceFieldValue) { - $params['line_item'][$setID][$priceFieldID]['tax_amount'] = $params['tax_amount']; - } - } - } - } - } - - // New Contribution and update of contribution with tax rate financial type - if (isset($params['financial_type_id']) && array_key_exists($params['financial_type_id'], $taxRates) && - empty($params['skipLineItem'])) { - $taxRateParams = $taxRates[$params['financial_type_id']]; - $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount(CRM_Utils_Array::value('total_amount', $params), $taxRateParams); - $params['tax_amount'] = round($taxAmount['tax_amount'], 2); - - foreach ($params['line_item'] as $setID => $priceField) { - foreach ($priceField as $priceFieldID => $priceFieldValue) { - $params['line_item'][$setID][$priceFieldID]['tax_amount'] = $params['tax_amount']; - } - } - $params['total_amount'] = CRM_Utils_Array::value('total_amount', $params) + $params['tax_amount']; - } - elseif (isset($params['api.line_item.create'])) { - // Update total amount of contribution using lineItem - $taxAmountArray = []; - foreach ($params['api.line_item.create'] as $key => $value) { - if (isset($value['financial_type_id']) && array_key_exists($value['financial_type_id'], $taxRates)) { - $taxRate = $taxRates[$value['financial_type_id']]; - $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($value['line_total'], $taxRate); - $taxAmountArray[] = round($taxAmount['tax_amount'], 2); - } - } - $params['tax_amount'] = array_sum($taxAmountArray); - $params['total_amount'] = $params['total_amount'] + $params['tax_amount']; - } - - return $params; - } - /** * Check financial type validation on update of a contribution. * @@ -4189,7 +4127,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * Moving it out of the BaseIPN class is just the first step. * * @param array $input - * @param array $ids + * @param int $recurringContributionID * @param int|null $contributionID * @param bool $isPostPaymentCreate * Is this being called from the payment.create api. If so the api has taken care of financial entities. @@ -4201,15 +4139,8 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function completeOrder($input, $ids, $contributionID, $isPostPaymentCreate = FALSE) { + public static function completeOrder($input, $recurringContributionID, $contributionID, $isPostPaymentCreate = FALSE) { $transaction = new CRM_Core_Transaction(); - // @todo see if we even need this - it's used further down to create an activity - // but the BAO layer should create that - we just need to add a test to cover it & can - // maybe remove $ids altogether. - $recurringContributionID = $ids['contributionRecur']; - - // Unset ids just to make it clear it's not used again. - unset($ids); $inputContributionWhiteList = [ 'fee_amount', @@ -4251,21 +4182,18 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $contributionID = $contributionResult['id']; } - if ($input['component'] == 'contribute') { - if ($contributionParams['contribution_status_id'] === $completedContributionStatusID) { - self::updateMembershipBasedOnCompletionOfContribution( - $contributionID, - $input['trxn_date'] ?? date('YmdHis') - ); - } + if ($contributionParams['contribution_status_id'] === $completedContributionStatusID) { + self::updateMembershipBasedOnCompletionOfContribution( + $contributionID, + $input['trxn_date'] ?? date('YmdHis') + ); } - else { - $participantPayment = civicrm_api3('ParticipantPayment', 'get', ['contribution_id' => $contributionID, 'return' => 'participant_id', 'sequential' => 1])['values']; - if (!empty($participantPayment) && empty($input['IAmAHorribleNastyBeyondExcusableHackInTheCRMEventFORMTaskClassThatNeedsToBERemoved'])) { - $participantParams['id'] = $participantPayment[0]['participant_id']; - $participantParams['status_id'] = 'Registered'; - civicrm_api3('Participant', 'create', $participantParams); - } + + $participantPayment = civicrm_api3('ParticipantPayment', 'get', ['contribution_id' => $contributionID, 'return' => 'participant_id', 'sequential' => 1])['values']; + if (!empty($participantPayment) && empty($input['IAmAHorribleNastyBeyondExcusableHackInTheCRMEventFORMTaskClassThatNeedsToBERemoved'])) { + $participantParams['id'] = $participantPayment[0]['participant_id']; + $participantParams['status_id'] = 'Registered'; + civicrm_api3('Participant', 'create', $participantParams); } $contributionParams['id'] = $contributionID; @@ -4324,7 +4252,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac } // set receipt from e-mail and name in value if (!$returnMessageText) { - list($values['receipt_from_name'], $values['receipt_from_email']) = self::generateFromEmailAndName($input, $contribution); + [$values['receipt_from_name'], $values['receipt_from_email']] = self::generateFromEmailAndName($input, $contribution); } $values['contribution_status'] = CRM_Core_PseudoConstant::getLabel('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contribution->contribution_status_id); $return = $contribution->composeMessageArray($input, $ids, $values, $returnMessageText); @@ -4437,7 +4365,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($trxnParams['contribution_id']); if (!empty($lineItems)) { // get financial item - list($ftIds, $taxItems) = self::getLastFinancialItemIds($trxnParams['contribution_id']); + [$ftIds, $taxItems] = self::getLastFinancialItemIds($trxnParams['contribution_id']); $entityParams = [ 'contribution_total_amount' => $contributionTotalAmount, 'trxn_total_amount' => $trxnParams['total_amount'], @@ -4501,7 +4429,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac 'Chargeback' => 'Chargeback Account is', ]; - if (in_array($contributionStatus, array_keys($preferredAccountsRelationships))) { + if (array_key_exists($contributionStatus, $preferredAccountsRelationships)) { $financialTypeID = !empty($params['financial_type_id']) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id; return CRM_Financial_BAO_FinancialAccount::getFinancialAccountForFinancialTypeByRelationship( $financialTypeID, @@ -4761,7 +4689,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * @throws \CiviCRM_API3_Exception */ public static function updateMembershipBasedOnCompletionOfContribution($contributionID, $changeDate) { - $memberships = self::getRelatedMemberships($contributionID); + $memberships = self::getRelatedMemberships((int) $contributionID); foreach ($memberships as $membership) { $membershipParams = [ 'id' => $membership['id'], @@ -4992,17 +4920,17 @@ LIMIT 1;"; * @param int $counter */ protected function assignTestValue($fieldName, &$fieldDef, $counter) { - if ($fieldName == 'tax_amount') { + if ($fieldName === 'tax_amount') { $this->{$fieldName} = "0.00"; } - elseif ($fieldName == 'net_amount') { - $this->{$fieldName} = "2.00"; + elseif ($fieldName === 'net_amount') { + $this->{$fieldName} = '2.00'; } - elseif ($fieldName == 'total_amount') { + elseif ($fieldName === 'total_amount') { $this->{$fieldName} = "3.00"; } - elseif ($fieldName == 'fee_amount') { - $this->{$fieldName} = "1.00"; + elseif ($fieldName === 'fee_amount') { + $this->{$fieldName} = '1.00'; } else { parent::assignTestValues($fieldName, $fieldDef, $counter); @@ -5288,7 +5216,9 @@ LIMIT 1;"; * * @param int $id * @param array $messageToken + * * @return array + * @throws \CRM_Core_Exception */ public static function getContributionTokenValues($id, $messageToken) { if (empty($id)) { diff --git a/civicrm/CRM/Contribute/BAO/ContributionPage.php b/civicrm/CRM/Contribute/BAO/ContributionPage.php index e33bbdd67a..806e8aa683 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/BAO/ContributionPage.php @@ -365,6 +365,7 @@ class CRM_Contribute_BAO_ContributionPage extends CRM_Contribute_DAO_Contributio 'pay_later_receipt' => $values['pay_later_receipt'] ?? NULL, 'honor_block_is_active' => $values['honor_block_is_active'] ?? NULL, 'contributionStatus' => $values['contribution_status'] ?? NULL, + 'currency' => CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $values['contribution_id'], 'currency') ?? CRM_Core_Config::singleton()->defaultCurrency, ]; if (!empty($values['financial_type_id'])) { @@ -831,7 +832,7 @@ LEFT JOIN civicrm_premiums ON ( civicrm_premiums.entity_id = civicrm * * @return array|string */ - public static function formatModuleData($params, $setDefault = FALSE, $module) { + public static function formatModuleData($params, $setDefault, $module) { $tsLocale = CRM_Core_I18n::getLocale(); $config = CRM_Core_Config::singleton(); $json = $jsonDecode = NULL; diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php index 9e20a3015b..81a133d696 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php @@ -1568,7 +1568,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ protected function postProcessMembership( $membershipParams, $contactID, &$form, $premiumParams, - $customFieldsFormatted = NULL, $includeFieldTypes = NULL, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID, + $customFieldsFormatted, $includeFieldTypes, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID, $isProcessSeparateMembershipTransaction, $financialTypeID, $unprocessedLineItems) { $membershipContribution = NULL; @@ -1704,12 +1704,12 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $pending = FALSE; } - [$membership, $renewalMode, $dates] = CRM_Member_BAO_Membership::processMembership( + [$membership, $renewalMode, $dates] = self::legacyProcessMembership( $contactID, $memType, $isTest, date('YmdHis'), $membershipParams['cms_contactID'] ?? NULL, $customFieldsFormatted, $numTerms, $membershipID, $pending, - $contributionRecurID, $membershipSource, $isPayLater, $memParams, [], $membershipContribution, + $contributionRecurID, $membershipSource, $isPayLater, $memParams, $membershipContribution, $membershipLineItems ); @@ -2040,7 +2040,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * * @param array $params * - * @throws CiviCRM_API3_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ public static function submit($params) { $form = new CRM_Contribute_Form_Contribution_Confirm(); @@ -2053,20 +2055,20 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $form->controller = new CRM_Contribute_Controller_Contribution(); $params['invoiceID'] = md5(uniqid(rand(), TRUE)); - // We want to move away from passing in amount as it is calculated by the actually-submitted params. - if ($form->getMainContributionAmount($params)) { - $params['amount'] = $form->getMainContributionAmount($params); - } $paramsProcessedForForm = $form->_params = self::getFormParams($params['id'], $params); $order = new CRM_Financial_BAO_Order(); + $order->setPriceSetIDByContributionPageID($params['id']); $order->setPriceSelectionFromUnfilteredInput($params); - if (isset($params['amount'])) { + if (isset($params['amount']) && !CRM_Contribute_BAO_ContributionPage::getIsMembershipPayment($form->_id)) { // @todo deprecate receiving amount, calculate on the form. $order->setOverrideTotalAmount($params['amount']); } $amount = $order->getTotalAmount(); - $form->_amount = $params['amount'] = $form->_params['amount'] = $params['amount'] ?? $amount; + if ($form->_separateMembershipPayment) { + $amount -= $order->getMembershipTotalAmount(); + } + $form->_amount = $params['amount'] = $form->_params['amount'] = $amount; // hack these in for test support. $form->_fields['billing_first_name'] = 1; $form->_fields['billing_last_name'] = 1; @@ -2111,11 +2113,10 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $form->_useForMember = 1; } $priceFields = $priceFields[$priceSetID]['fields']; - $lineItems = []; - $form->processAmountAndGetAutoRenew($priceFields, $paramsProcessedForForm, $lineItems, $priceSetID); - $form->_lineItem = [$priceSetID => $lineItems]; + + $form->_lineItem = [$priceSetID => $order->getLineItems()]; $membershipPriceFieldIDs = []; - foreach ((array) $lineItems as $lineItem) { + foreach ($order->getLineItems() as $lineItem) { if (!empty($lineItem['membership_type_id'])) { $form->set('useForMember', 1); $form->_useForMember = 1; @@ -2886,4 +2887,253 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr ); } + /** + * Temporary function to allow unit tests to access function being refactored away. + * + * @param int $contactID + * @param int $membershipTypeID + * @param int $membershipID + * + * @return array + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public static function unitTestAccessTolegacyProcessMembership($contactID, $membershipTypeID, $membershipID = NULL) { + return self::legacyProcessMembership( + $contactID, + $membershipTypeID, + 0, + NULL, + NULL, + NULL, + 1, + $membershipID, + NULL, + NULL, + FALSE, + NULL + ); + } + + /** + * Interim function for processing memberships - this is being refactored out of existence. + * + * @param int $contactID + * @param int $membershipTypeID + * @param bool $is_test + * @param string $changeToday + * @param int $modifiedID + * @param $customFieldsFormatted + * @param $numRenewTerms + * @param int $membershipID + * @param $pending + * @param int $contributionRecurID + * @param $membershipSource + * @param $isPayLater + * @param array $memParams + * @param null|CRM_Contribute_BAO_Contribution $contribution + * @param array $lineItems + * + * @return array + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + protected static function legacyProcessMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $membershipSource, $isPayLater, $memParams = [], $contribution = NULL, $lineItems = []) { + $renewalMode = $updateStatusId = FALSE; + $allStatus = CRM_Member_PseudoConstant::membershipStatus(); + $format = '%Y%m%d'; + $statusFormat = '%Y-%m-%d'; + $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipType($membershipTypeID); + $dates = []; + $ids = []; + + // CRM-7297 - allow membership type to be be changed during renewal so long as the parent org of new membershipType + // is the same as the parent org of an existing membership of the contact + $currentMembership = CRM_Member_BAO_Membership::getContactMembership($contactID, $membershipTypeID, + $is_test, $membershipID, TRUE + ); + if ($currentMembership) { + $renewalMode = TRUE; + + // Do NOT do anything. + //1. membership with status : PENDING/CANCELLED (CRM-2395) + //2. Paylater/IPN renew. CRM-4556. + if ($pending || in_array($currentMembership['status_id'], [ + array_search('Pending', $allStatus), + // CRM-15475 + array_search('Cancelled', CRM_Member_PseudoConstant::membershipStatus(NULL, " name = 'Cancelled' ", 'name', FALSE, TRUE)), + ])) { + + $memParams = array_merge([ + 'id' => $currentMembership['id'], + 'contribution' => $contribution, + 'status_id' => $currentMembership['status_id'], + 'start_date' => $currentMembership['start_date'], + 'end_date' => $currentMembership['end_date'], + 'line_item' => $lineItems, + 'join_date' => $currentMembership['join_date'], + 'membership_type_id' => $membershipTypeID, + 'max_related' => !empty($membershipTypeDetails['max_related']) ? $membershipTypeDetails['max_related'] : NULL, + 'membership_activity_status' => ($pending || $isPayLater) ? 'Scheduled' : 'Completed', + ], $memParams); + if ($contributionRecurID) { + $memParams['contribution_recur_id'] = $contributionRecurID; + } + + $membership = CRM_Member_BAO_Membership::create($memParams); + return [$membership, $renewalMode, $dates]; + } + + // Check and fix the membership if it is STALE + CRM_Member_BAO_Membership::fixMembershipStatusBeforeRenew($currentMembership, $changeToday); + + // Now Renew the membership + if (!$currentMembership['is_current_member']) { + // membership is not CURRENT + + // CRM-7297 Membership Upsell - calculate dates based on new membership type + $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($currentMembership['id'], + $changeToday, + $membershipTypeID, + $numRenewTerms + ); + + $currentMembership['join_date'] = CRM_Utils_Date::customFormat($currentMembership['join_date'], $format); + foreach (['start_date', 'end_date'] as $dateType) { + $currentMembership[$dateType] = $dates[$dateType] ?? NULL; + } + $currentMembership['is_test'] = $is_test; + + if (!empty($membershipSource)) { + $currentMembership['source'] = $membershipSource; + } + + if (!empty($currentMembership['id'])) { + $ids['membership'] = $currentMembership['id']; + } + $memParams = array_merge($currentMembership, $memParams); + $memParams['membership_type_id'] = $membershipTypeID; + + //set the log start date. + $memParams['log_start_date'] = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); + } + else { + + // CURRENT Membership + $membership = new CRM_Member_DAO_Membership(); + $membership->id = $currentMembership['id']; + $membership->find(TRUE); + // CRM-7297 Membership Upsell - calculate dates based on new membership type + $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($membership->id, + $changeToday, + $membershipTypeID, + $numRenewTerms + ); + + // Insert renewed dates for CURRENT membership + $memParams['join_date'] = CRM_Utils_Date::isoToMysql($membership->join_date); + $memParams['start_date'] = CRM_Utils_Date::isoToMysql($membership->start_date); + $memParams['end_date'] = $dates['end_date'] ?? NULL; + $memParams['membership_type_id'] = $membershipTypeID; + + //set the log start date. + $memParams['log_start_date'] = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); + + //CRM-18067 + if (!empty($membershipSource)) { + $memParams['source'] = $membershipSource; + } + elseif (empty($membership->source)) { + $memParams['source'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', + $currentMembership['id'], + 'source' + ); + } + + if (!empty($currentMembership['id'])) { + $ids['membership'] = $currentMembership['id']; + } + $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed'; + } + } + else { + // NEW Membership + $memParams = array_merge([ + 'contact_id' => $contactID, + 'membership_type_id' => $membershipTypeID, + ], $memParams); + + if (!$pending) { + $dates = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipTypeID, NULL, NULL, NULL, $numRenewTerms); + + foreach (['join_date', 'start_date', 'end_date'] as $dateType) { + $memParams[$dateType] = $dates[$dateType] ?? NULL; + } + + $status = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate(CRM_Utils_Date::customFormat($dates['start_date'], + $statusFormat + ), + CRM_Utils_Date::customFormat($dates['end_date'], + $statusFormat + ), + CRM_Utils_Date::customFormat($dates['join_date'], + $statusFormat + ), + 'now', + TRUE, + $membershipTypeID, + $memParams + ); + $updateStatusId = $status['id'] ?? NULL; + } + else { + // if IPN/Pay-Later set status to: PENDING + $updateStatusId = array_search('Pending', $allStatus); + } + + if (!empty($membershipSource)) { + $memParams['source'] = $membershipSource; + } + $memParams['is_test'] = $is_test; + $memParams['is_pay_later'] = $isPayLater; + } + // Putting this in an IF is precautionary as it seems likely that it would be ignored if empty, but + // perhaps shouldn't be? + if ($contributionRecurID) { + $memParams['contribution_recur_id'] = $contributionRecurID; + } + //CRM-4555 + //if we decided status here and want to skip status + //calculation in create( ); then need to pass 'skipStatusCal'. + if ($updateStatusId) { + $memParams['status_id'] = $updateStatusId; + $memParams['skipStatusCal'] = TRUE; + } + + //since we are renewing, + //make status override false. + $memParams['is_override'] = FALSE; + + //CRM-4027, create log w/ individual contact. + if ($modifiedID) { + // @todo this param is likely unused now. + $memParams['is_for_organization'] = TRUE; + } + $params['modified_id'] = $modifiedID ?? $contactID; + + $memParams['contribution'] = $contribution; + $memParams['custom'] = $customFieldsFormatted; + // Load all line items & process all in membership. Don't do in contribution. + // Relevant tests in api_v3_ContributionPageTest. + $memParams['line_item'] = $lineItems; + // @todo stop passing $ids (membership and userId may be set by this point) + $membership = CRM_Member_BAO_Membership::create($memParams, $ids); + + // not sure why this statement is here, seems quite odd :( - Lobo: 12/26/2010 + // related to: http://forum.civicrm.org/index.php/topic,11416.msg49072.html#msg49072 + $membership->find(TRUE); + + return [$membership, $renewalMode, $dates]; + } + } diff --git a/civicrm/CRM/Contribute/Import/Form/MapField.php b/civicrm/CRM/Contribute/Import/Form/MapField.php index 9a354792cb..65a8733440 100644 --- a/civicrm/CRM/Contribute/Import/Form/MapField.php +++ b/civicrm/CRM/Contribute/Import/Form/MapField.php @@ -340,7 +340,7 @@ class CRM_Contribute_Import_Form_MapField extends CRM_Import_Form_MapField { 'used' => 'Unsupervised', 'contact_type' => $contactTypes[$contactTypeId] ?? '', ]; - list($ruleFields, $threshold) = CRM_Dedupe_BAO_RuleGroup::dedupeRuleFieldsWeight($params); + list($ruleFields, $threshold) = CRM_Dedupe_BAO_DedupeRuleGroup::dedupeRuleFieldsWeight($params); $weightSum = 0; foreach ($importKeys as $key => $val) { if (array_key_exists($val, $ruleFields)) { diff --git a/civicrm/CRM/Contribute/Import/Parser.php b/civicrm/CRM/Contribute/Import/Parser.php index 77ec4824cb..8cd494f386 100644 --- a/civicrm/CRM/Contribute/Import/Parser.php +++ b/civicrm/CRM/Contribute/Import/Parser.php @@ -118,7 +118,7 @@ abstract class CRM_Contribute_Import_Parser extends CRM_Import_Parser { */ public function run( $fileName, - $separator = ',', + $separator, &$mapper, $skipColumnHeader = FALSE, $mode = self::MODE_PREVIEW, diff --git a/civicrm/CRM/Contribute/Import/Parser/Contribution.php b/civicrm/CRM/Contribute/Import/Parser/Contribution.php index 26c4c47ef7..2f1e78d81c 100644 --- a/civicrm/CRM/Contribute/Import/Parser/Contribution.php +++ b/civicrm/CRM/Contribute/Import/Parser/Contribution.php @@ -395,7 +395,7 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Contribute_Import_Pa 'contact_type' => $this->_contactType, 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $disp = NULL; foreach ($fieldsArray as $value) { if (array_key_exists(trim($value), $params)) { diff --git a/civicrm/CRM/Contribute/Page/ContributionPage.php b/civicrm/CRM/Contribute/Page/ContributionPage.php index 835089da89..ebb64417a5 100644 --- a/civicrm/CRM/Contribute/Page/ContributionPage.php +++ b/civicrm/CRM/Contribute/Page/ContributionPage.php @@ -648,7 +648,7 @@ ORDER BY is_active desc, title asc $params['buttonBottom'] = 'PagerBottomButton'; $params['rowCount'] = $this->get(CRM_Utils_Pager::PAGE_ROWCOUNT); if (!$params['rowCount']) { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $query = " diff --git a/civicrm/CRM/Contribute/Page/ContributionRecur.php b/civicrm/CRM/Contribute/Page/ContributionRecur.php index ef68f424c7..07f5f0fd77 100644 --- a/civicrm/CRM/Contribute/Page/ContributionRecur.php +++ b/civicrm/CRM/Contribute/Page/ContributionRecur.php @@ -99,7 +99,7 @@ class CRM_Contribute_Page_ContributionRecur extends CRM_Core_Page { */ public function run() { $this->preProcess(); - + $this->assign('hasAccessCiviContributePermission', CRM_Core_Permission::check('access CiviContribute')); if ($this->isViewContext()) { $this->view(); } diff --git a/civicrm/CRM/Contribute/Page/Tab.php b/civicrm/CRM/Contribute/Page/Tab.php index a3fb460d00..2d75e2096c 100644 --- a/civicrm/CRM/Contribute/Page/Tab.php +++ b/civicrm/CRM/Contribute/Page/Tab.php @@ -48,6 +48,7 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { * @return array */ public static function recurLinks(int $recurID, $context = 'contribution') { + $paymentProcessorObj = Civi\Payment\System::singleton()->getById(CRM_Contribute_BAO_ContributionRecur::getPaymentProcessorID($recurID)); $links = [ CRM_Core_Action::VIEW => [ 'name' => ts('View'), @@ -55,20 +56,26 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { 'url' => 'civicrm/contact/view/contributionrecur', 'qs' => "reset=1&id=%%crid%%&cid=%%cid%%&context={$context}", ], - CRM_Core_Action::UPDATE => [ + ]; + if ( + (CRM_Core_Permission::check('edit contributions') || $context !== 'contribution') && + ($paymentProcessorObj->supports('ChangeSubscriptionAmount') + || $paymentProcessorObj->supports('EditRecurringContribution') + )) { + $links[CRM_Core_Action::UPDATE] = [ 'name' => ts('Edit'), 'title' => ts('Edit Recurring Payment'), 'url' => 'civicrm/contribute/updaterecur', 'qs' => "reset=1&action=update&crid=%%crid%%&cid=%%cid%%&context={$context}", - ], - CRM_Core_Action::DISABLE => [ - 'name' => ts('Cancel'), - 'title' => ts('Cancel'), - 'ref' => 'crm-enable-disable', - ], + ]; + } + + $links[CRM_Core_Action::DISABLE] = [ + 'name' => ts('Cancel'), + 'title' => ts('Cancel'), + 'ref' => 'crm-enable-disable', ]; - $paymentProcessorObj = Civi\Payment\System::singleton()->getById(CRM_Contribute_BAO_ContributionRecur::getPaymentProcessorID($recurID)); if ($paymentProcessorObj->supports('cancelRecurring')) { unset($links[CRM_Core_Action::DISABLE]['extra'], $links[CRM_Core_Action::DISABLE]['ref']); $links[CRM_Core_Action::DISABLE]['url'] = "civicrm/contribute/unsubscribe"; @@ -84,14 +91,87 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { ]; } - if ( - (!CRM_Core_Permission::check('edit contributions') && $context === 'contribution') || - (!$paymentProcessorObj->supports('ChangeSubscriptionAmount') - && !$paymentProcessorObj->supports('EditRecurringContribution') - )) { - unset($links[CRM_Core_Action::UPDATE]); + return $links; + } + + /** + * Get the recur links to return for self service. + * + * These are the links to present to a logged in user wishing + * to service their own + * + * @param int $recurID + * + * @return array|array[] + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public static function selfServiceRecurLinks(int $recurID): array { + $links = []; + $paymentProcessorObj = Civi\Payment\System::singleton()->getById(CRM_Contribute_BAO_ContributionRecur::getPaymentProcessorID($recurID)); + if ($paymentProcessorObj->supports('cancelRecurring') + && $paymentProcessorObj->subscriptionURL($recurID, 'recur', 'cancel') + ) { + $url = $paymentProcessorObj->subscriptionURL($recurID, 'recur', 'cancel'); + $links[CRM_Core_Action::DISABLE] = [ + 'url' => $url, + 'name' => ts('Cancel'), + 'title' => ts('Cancel'), + // Only display on-site links in a popup. + 'class' => (stripos($url, 'http') !== FALSE) ? 'no-popup' : '', + ]; + } + + if ($paymentProcessorObj->supports('UpdateSubscriptionBillingInfo') + && $paymentProcessorObj->subscriptionURL($recurID, 'recur', 'billing') + ) { + $url = $paymentProcessorObj->subscriptionURL($recurID, 'recur', 'billing'); + $links[CRM_Core_Action::RENEW] = [ + 'name' => ts('Change Billing Details'), + 'title' => ts('Change Billing Details'), + 'url' => $url, + // Only display on-site links in a popup. + 'class' => (stripos($url, 'http') !== FALSE) ? 'no-popup' : '', + ]; + } + + if (($paymentProcessorObj->supports('ChangeSubscriptionAmount') + || $paymentProcessorObj->supports('EditRecurringContribution')) + && $paymentProcessorObj->subscriptionURL($recurID, 'recur', 'update') + ) { + $url = $paymentProcessorObj->subscriptionURL($recurID, 'recur', 'update'); + $links[CRM_Core_Action::UPDATE] = [ + 'name' => ts('Edit'), + 'title' => ts('Edit Recurring Payment'), + 'url' => $url, + // Only display on-site links in a popup. + 'class' => (stripos($url, 'http') !== FALSE) ? 'no-popup' : '', + ]; } + return $links; + } + /** + * Get recurring links appropriate to viewing a user dashboard. + * + * A contact should be able to see links appropriate to them (e.g + * payment processor cancel page) if viewing their own dashboard and + * links appropriate to the contact they are viewing, if they have + * permission, if viewing another user. + * + * @param int $recurID + * @param int $contactID + * + * @return array|array[] + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public static function dashboardRecurLinks(int $recurID, int $contactID): array { + $links = []; + if ($contactID && $contactID === CRM_Core_Session::getLoggedInContactID()) { + $links = self::selfServiceRecurLinks($recurID); + } + $links += self::recurLinks($recurID, 'dashboard'); return $links; } @@ -102,10 +182,7 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { public function browse() { // add annual contribution $annual = []; - list($annual['count'], - $annual['amount'], - $annual['avg'] - ) = CRM_Contribute_BAO_Contribution::annual($this->_contactId); + [$annual['count'], $annual['amount'], $annual['avg']] = CRM_Contribute_BAO_Contribution::annual($this->_contactId); $this->assign('annual', $annual); $controller = new CRM_Core_Controller_Simple( @@ -164,8 +241,8 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { * Get all the recurring contribution information and assign to the template */ private function addRecurringContributionsBlock() { - list($activeContributions, $activeContributionsCount) = $this->getActiveRecurringContributions(); - list($inactiveRecurringContributions, $inactiveContributionsCount) = $this->getInactiveRecurringContributions(); + [$activeContributions, $activeContributionsCount] = $this->getActiveRecurringContributions(); + [$inactiveRecurringContributions, $inactiveContributionsCount] = $this->getInactiveRecurringContributions(); if (!empty($activeContributions) || !empty($inactiveRecurringContributions)) { // assign vars to templates diff --git a/civicrm/CRM/Contribute/Page/UserDashboard.php b/civicrm/CRM/Contribute/Page/UserDashboard.php index cad2bc4aa4..0a4c9f0fe1 100644 --- a/civicrm/CRM/Contribute/Page/UserDashboard.php +++ b/civicrm/CRM/Contribute/Page/UserDashboard.php @@ -48,7 +48,10 @@ class CRM_Contribute_Page_UserDashboard extends CRM_Contact_Page_View_UserDashBo // This is required for tpl logic. We should move away from hard-code this to adding an array of actions to the row // which the tpl can iterate through - this should allow us to cope with competing attempts to add new buttons // and allow extensions to assign new ones through the pageRun hook - if ('Pending' === CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $row['contribution_status_id'])) { + $row['balance_amount'] = CRM_Contribute_BAO_Contribution::getContributionBalance($row['contribution_id']); + $contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $row['contribution_status_id']); + + if (in_array($contributionStatus, ['Pending', 'Partially paid'])) { $row['buttons']['pay'] = [ 'class' => 'button', 'label' => ts('Pay Now'), @@ -98,7 +101,7 @@ class CRM_Contribute_Page_UserDashboard extends CRM_Contact_Page_View_UserDashBo $values['recur_status'] = $recurStatus[$values['contribution_status_id']]; $recurRow[$values['id']] = $values; - $action = array_sum(array_keys(CRM_Contribute_Page_Tab::recurLinks((int) $recur->id, 'dashboard'))); + $action = array_sum(array_keys(CRM_Contribute_Page_Tab::dashboardRecurLinks((int) $recur->id, (int) $recur->contact_id))); $details = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($recur->id, 'recur'); $hideUpdate = $details->membership_id & $details->auto_renew; @@ -107,7 +110,7 @@ class CRM_Contribute_Page_UserDashboard extends CRM_Contact_Page_View_UserDashBo $action -= CRM_Core_Action::UPDATE; } - $recurRow[$values['id']]['action'] = CRM_Core_Action::formLink(CRM_Contribute_Page_Tab::recurLinks((int) $recur->id, 'dashboard'), + $recurRow[$values['id']]['action'] = CRM_Core_Action::formLink(CRM_Contribute_Page_Tab::dashboardRecurLinks((int) $recur->id, (int) $this->_contactId), $action, [ 'cid' => $this->_contactId, 'crid' => $values['id'], diff --git a/civicrm/CRM/Contribute/Selector/Search.php b/civicrm/CRM/Contribute/Selector/Search.php index 4e745c54bd..c8b5a8ca18 100644 --- a/civicrm/CRM/Contribute/Selector/Search.php +++ b/civicrm/CRM/Contribute/Selector/Search.php @@ -248,7 +248,7 @@ class CRM_Contribute_Selector_Search extends CRM_Core_Selector_Base implements C $params['rowCount'] = $this->_limit; } else { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $params['buttonTop'] = 'PagerTopButton'; diff --git a/civicrm/CRM/Core/BAO/ActionSchedule.php b/civicrm/CRM/Core/BAO/ActionSchedule.php index b57abb0a2c..e804f3bc76 100644 --- a/civicrm/CRM/Core/BAO/ActionSchedule.php +++ b/civicrm/CRM/Core/BAO/ActionSchedule.php @@ -102,9 +102,6 @@ class CRM_Core_BAO_ActionSchedule extends CRM_Core_DAO_ActionSchedule { /** * Retrieve list of Scheduled Reminders. * - * @param bool $namesOnly - * Return simple list of names. - * * @param \Civi\ActionSchedule\Mapping|null $filterMapping * Filter by the schedule's mapping type. * @param int $filterValue @@ -114,7 +111,8 @@ class CRM_Core_BAO_ActionSchedule extends CRM_Core_DAO_ActionSchedule { * (reference) reminder list * @throws \CRM_Core_Exception */ - public static function &getList($namesOnly = FALSE, $filterMapping = NULL, $filterValue = NULL) { + public static function getList($filterMapping = NULL, $filterValue = NULL): array { + $list = []; $query = " SELECT title, @@ -356,7 +354,7 @@ FROM civicrm_action_schedule cas * @throws \API_Exception * @throws \CRM_Core_Exception */ - public static function processQueue($now = NULL, $params = []) { + public static function processQueue($now = NULL, $params = []): void { $now = $now ? CRM_Utils_Time::setTime($now) : CRM_Utils_Time::getTime(); $mappings = CRM_Core_BAO_ActionSchedule::getMappings(); diff --git a/civicrm/CRM/Core/BAO/Address.php b/civicrm/CRM/Core/BAO/Address.php index 283709aba6..636294b426 100644 --- a/civicrm/CRM/Core/BAO/Address.php +++ b/civicrm/CRM/Core/BAO/Address.php @@ -19,6 +19,7 @@ * This is class to handle address related functions. */ class CRM_Core_BAO_Address extends CRM_Core_DAO_Address { + use CRM_Contact_AccessTrait; /** * Takes an associative array and creates a address. diff --git a/civicrm/CRM/Core/BAO/Block.php b/civicrm/CRM/Core/BAO/Block.php index dde0c3fae2..4929e323fd 100644 --- a/civicrm/CRM/Core/BAO/Block.php +++ b/civicrm/CRM/Core/BAO/Block.php @@ -348,7 +348,7 @@ class CRM_Core_BAO_Block { $entity = new $class(); $entity->id = $params['id']; $entity->find(TRUE); - $contactId = $entity->contact_id; + $contactId = $params['contact_id'] = $entity->contact_id; } // If entity is not associated with contact, concept of is_primary not relevant if (!$contactId) { @@ -397,6 +397,9 @@ class CRM_Core_BAO_Block { // primary or return if is already is $existingEntities->is_primary = 1; $existingEntities->save(); + if ($class === 'CRM_Core_BAO_Email') { + CRM_Core_BAO_Email::updateContactName($contactId, $existingEntities->email); + } } } diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index 323b9ce9cd..f62d22773c 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -109,11 +109,9 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { } /** - * Create/ update several fields at once in a mysql efficient way. - * + * Save multiple fields, now deprecated in favor of self::writeRecords. * https://lab.civicrm.org/dev/core/issues/1093 - * - * The intention is that apiv4 would expose any BAO with bulkSave as a new action. + * @deprecated * * @param array $bulkParams * Array of arrays as would be passed into create @@ -123,9 +121,26 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { * @throws \CiviCRM_API3_Exception */ public static function bulkSave($bulkParams, $defaults = []) { - $addedColumns = $sql = $customFields = $pre = $post = []; + CRM_Core_Error::deprecatedFunctionWarning(__CLASS__ . '::writeRecords'); foreach ($bulkParams as $index => $fieldParams) { - $params = array_merge($defaults, $fieldParams); + $bulkParams[$index] = array_merge($defaults, $fieldParams); + } + self::writeRecords($bulkParams); + } + + /** + * Create/update several fields at once in a mysql efficient way. + * + * @param array $records + * @return CRM_Core_DAO_CustomField[] + * @throws CRM_Core_Exception + * @throws CiviCRM_API3_Exception + */ + public static function writeRecords(array $records) { + $addedColumns = $sql = $customFields = $pre = $post = []; + foreach ($records as $index => $params) { + CRM_Utils_Hook::pre(empty($params['id']) ? 'create' : 'edit', 'CustomField', $params['id'] ?? NULL, $params); + $changeSerialize = self::getChangeSerialize($params); $customField = self::createCustomFieldRecord($params); // Serialize/deserialize sql must run after/before the table is altered @@ -136,9 +151,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $post[] = self::getAlterSerializeSQL($customField); } $fieldSQL = self::getAlterFieldSQL($customField, empty($params['id']) ? 'add' : 'modify'); - if (!isset($params['custom_group_id'])) { - $params['custom_group_id'] = civicrm_api3('CustomField', 'getvalue', ['id' => $customField->id, 'return' => 'custom_group_id']); - } + $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customField->custom_group_id, 'table_name'); $sql[$tableName][] = $fieldSQL; $addedColumns[$tableName][] = $customField->name; @@ -166,9 +179,12 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { } CRM_Utils_System::flushCache(); + Civi::cache('metadata')->clear(); + foreach ($customFields as $index => $customField) { - CRM_Utils_Hook::post(empty($bulkParams[$index]['id']) ? 'create' : 'edit', 'CustomField', $customField->id, $customField); + CRM_Utils_Hook::post(empty($records[$index]['id']) ? 'create' : 'edit', 'CustomField', $customField->id, $customField); } + return $customFields; } /** @@ -320,7 +336,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { } if ($customDataType && !is_array($customDataType)) { - if (in_array($customDataType, CRM_Contact_BAO_ContactType::subTypes())) { + if (in_array($customDataType, CRM_Contact_BAO_ContactType::subTypes(), TRUE)) { // This is the case when getFieldsForImport() requires fields // limited strictly to a subtype. $customDataSubType = $customDataType; @@ -328,7 +344,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $onlySubType = TRUE; } - if (in_array($customDataType, array_keys(CRM_Core_SelectValues::customGroupExtends()))) { + if (array_key_exists($customDataType, CRM_Core_SelectValues::customGroupExtends())) { // this makes the method flexible to support retrieving fields // for multiple extends value. $customDataType = [$customDataType]; @@ -388,7 +404,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { if (is_array($customDataType)) { $value = NULL; foreach ($customDataType as $dataType) { - if (in_array($dataType, array_keys(CRM_Core_SelectValues::customGroupExtends()))) { + if (array_key_exists($dataType, CRM_Core_SelectValues::customGroupExtends())) { if (in_array($dataType, ['Individual', 'Household', 'Organization'])) { $val = "'" . CRM_Utils_Type::escape($dataType, 'String') . "', 'Contact' "; } diff --git a/civicrm/CRM/Core/BAO/CustomGroup.php b/civicrm/CRM/Core/BAO/CustomGroup.php index 8f0fea3495..568e92a633 100644 --- a/civicrm/CRM/Core/BAO/CustomGroup.php +++ b/civicrm/CRM/Core/BAO/CustomGroup.php @@ -1250,6 +1250,23 @@ ORDER BY civicrm_custom_group.weight, return TRUE; } + /** + * Delete a record from supplied params. + * API3 calls deleteGroup() which removes the related civicrm_value_X table. + * This function does the same for API4. + * + * @param array $record + * 'id' is required. + * @return CRM_Core_DAO + * @throws CRM_Core_Exception + */ + public static function deleteRecord(array $record) { + $table = CRM_Core_DAO::getFieldValue(__CLASS__, $record['id'], 'table_name'); + $result = parent::deleteRecord($record); + CRM_Core_BAO_SchemaHandler::dropTable($table); + return $result; + } + /** * Set defaults. * diff --git a/civicrm/CRM/Core/BAO/CustomValue.php b/civicrm/CRM/Core/BAO/CustomValue.php index 555077b042..ca4d0ea388 100644 --- a/civicrm/CRM/Core/BAO/CustomValue.php +++ b/civicrm/CRM/Core/BAO/CustomValue.php @@ -194,7 +194,7 @@ class CRM_Core_BAO_CustomValue extends CRM_Core_DAO { $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customGroupID, 'table_name'); // Retrieve the $entityId so we can pass that to the hook. - $entityID = CRM_Core_DAO::singleValueQuery("SELECT entity_id FROM {$tableName} WHERE id = %1", [ + $entityID = (int) CRM_Core_DAO::singleValueQuery("SELECT entity_id FROM {$tableName} WHERE id = %1", [ 1 => [$customValueID, 'Integer'], ]); @@ -203,7 +203,7 @@ class CRM_Core_BAO_CustomValue extends CRM_Core_DAO { CRM_Core_DAO::executeQuery($sql); CRM_Utils_Hook::custom('delete', - $customGroupID, + (int) $customGroupID, $entityID, $customValueID ); @@ -221,4 +221,59 @@ class CRM_Core_BAO_CustomValue extends CRM_Core_DAO { return $clauses; } + /** + * Special checkAccess function for multi-record custom pseudo-entities + * + * @param string $entityName + * Ex: 'Contact' or 'Custom_Foobar' + * @param string $action + * @param array $record + * @param int $userID + * Contact ID of the active user (whose access we must check). 0 for anonymous. + * @return bool + * TRUE if granted. FALSE if prohibited. NULL if indeterminate. + */ + public static function _checkAccess(string $entityName, string $action, array $record, int $userID): ?bool { + // This check implements two rules: you must have access to the specific custom-data-group - and to the underlying record (e.g. Contact). + + $groupName = substr($entityName, 0, 7) === 'Custom_' ? substr($entityName, 7) : NULL; + $extends = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $groupName, 'extends', 'name'); + $id = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $groupName, 'id', 'name'); + if (!$groupName) { + // $groupName is required but the function signature has to match the parent. + throw new CRM_Core_Exception('Missing required group-name in CustomValue::checkAccess'); + } + + if (empty($extends) || empty($id)) { + throw new CRM_Core_Exception('Received invalid group-name in CustomValue::checkAccess'); + } + + $customGroups = [$id => $id]; + $defaultGroups = CRM_Core_Permission::customGroupAdmin() ? [$id] : []; + // FIXME: Per current onscreen help (Admin=>ACLs=>Add ACLs), CustomGroup ACLs treat VIEW and EDIT as the same. Skimming code, it appears that existing checks use VIEW. + $accessList = CRM_ACL_API::group(CRM_Core_Permission::VIEW, $userID, 'civicrm_custom_group', $customGroups, $defaultGroups); + if (empty($accessList)) { + return FALSE; + } + + $eid = $record['entity_id'] ?? NULL; + if (!$eid) { + $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $groupName, 'table_name', 'name'); + $eid = CRM_Core_DAO::singleValueQuery("SELECT entity_id FROM `$tableName` WHERE id = " . (int) $record['id']); + } + + // Do we have access to the target record? + if (in_array($extends, ['Contact', 'Individual', 'Organization', 'Household'])) { + return \Civi\Api4\Utils\CoreUtil::checkAccessDelegated('Contact', 'update', ['id' => $eid], $userID); + } + elseif (\Civi\Api4\Utils\CoreUtil::getApiClass($extends)) { + // For most entities (Activity, Relationship, Contribution, ad nauseum), we acn just use an eponymous API. + return \Civi\Api4\Utils\CoreUtil::checkAccessDelegated($extends, 'update', ['id' => $eid], $userID); + } + else { + // Do you need to add a special case for some oddball custom-group type? + throw new CRM_Core_Exception("Cannot assess delegated permissions for group {$groupName}."); + } + } + } diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php index e099241759..714c9c7b43 100644 --- a/civicrm/CRM/Core/BAO/CustomValueTable.php +++ b/civicrm/CRM/Core/BAO/CustomValueTable.php @@ -37,19 +37,15 @@ class CRM_Core_BAO_CustomValueTable { $VS = CRM_Core_DAO::VALUE_SEPARATOR; foreach ($customParams as $tableName => $tables) { - foreach ($tables as $index => $fields) { - $sqlOP = NULL; + foreach ($tables as $fields) { $hookID = NULL; - $hookOP = NULL; $entityID = NULL; - $isMultiple = FALSE; $set = []; $params = []; $count = 1; $firstField = reset($fields); - $entityID = $firstField['entity_id']; - $hookID = $firstField['custom_group_id']; + $entityID = (int) $firstField['entity_id']; $isMultiple = $firstField['is_multiple']; if (array_key_exists('id', $firstField)) { $sqlOP = "UPDATE $tableName "; @@ -64,8 +60,9 @@ class CRM_Core_BAO_CustomValueTable { $hookOP = 'create'; } - CRM_Utils_Hook::customPre($hookOP, - $hookID, + CRM_Utils_Hook::customPre( + $hookOP, + (int) $firstField['custom_group_id'], $entityID, $fields ); @@ -237,11 +234,11 @@ class CRM_Core_BAO_CustomValueTable { $fieldExtends = $field['extends'] ?? NULL; if ( - CRM_Utils_Array::value('entity_table', $field) == 'civicrm_contact' - || $fieldExtends == 'Contact' - || $fieldExtends == 'Individual' - || $fieldExtends == 'Organization' - || $fieldExtends == 'Household' + CRM_Utils_Array::value('entity_table', $field) === 'civicrm_contact' + || $fieldExtends === 'Contact' + || $fieldExtends === 'Individual' + || $fieldExtends === 'Organization' + || $fieldExtends === 'Household' ) { $paramFieldsExtendContactForEntities[$entityID]['custom_' . CRM_Utils_Array::value('custom_field_id', $field)] = $field['custom_field_id'] ?? NULL; } @@ -273,7 +270,7 @@ class CRM_Core_BAO_CustomValueTable { CRM_Core_DAO::executeQuery($query, $params); CRM_Utils_Hook::custom($hookOP, - $hookID, + (int) $firstField['custom_group_id'], $entityID, $fields ); diff --git a/civicrm/CRM/Core/BAO/Dashboard.php b/civicrm/CRM/Core/BAO/Dashboard.php index 0a311bce74..5ef7321b15 100644 --- a/civicrm/CRM/Core/BAO/Dashboard.php +++ b/civicrm/CRM/Core/BAO/Dashboard.php @@ -96,7 +96,7 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard { if (!isset($a['dashboard_contact.weight'])) { return 1; } - return $a['dashboard_contact.weight'] > $b['dashboard_contact.weight']; + return $a['dashboard_contact.weight'] <=> $b['dashboard_contact.weight']; }); } return Civi::$statics[__CLASS__][__FUNCTION__][$cid] ?? []; @@ -233,9 +233,8 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard { $dashlet->domain_id = $params['domain_id'] ?? CRM_Core_Config::domainID(); // Try and find an existing dashlet - it will be updated if found. - if (!empty($params['name']) || !empty($params['url'])) { + if (!empty($params['name'])) { $dashlet->name = $params['name'] ?? NULL; - $dashlet->url = $params['url'] ?? NULL; $dashlet->find(TRUE); } } diff --git a/civicrm/CRM/Core/BAO/Email.php b/civicrm/CRM/Core/BAO/Email.php index b4ed167c0f..1e947294a5 100644 --- a/civicrm/CRM/Core/BAO/Email.php +++ b/civicrm/CRM/Core/BAO/Email.php @@ -19,6 +19,7 @@ * This class contains functions for email handling. */ class CRM_Core_BAO_Email extends CRM_Core_DAO_Email { + use CRM_Contact_AccessTrait; /** * Create email address. @@ -71,6 +72,12 @@ WHERE contact_id = {$params['contact_id']} $email->save(); + $contactId = (int) ($email->contact_id ?? CRM_Core_DAO::getFieldValue(__CLASS__, $email->id, 'contact_id')); + if ($contactId && $email->is_primary) { + $address = $email->email ?? CRM_Core_DAO::getFieldValue(__CLASS__, $email->id, 'email'); + self::updateContactName($contactId, $address); + } + if ($email->is_primary) { // update the UF user email if that has changed CRM_Core_BAO_UFMatch::updateUFName($email->contact_id); @@ -361,4 +368,19 @@ AND reset_date IS NULL return $contactFields; } + /** + * + * + * @param int $contactId + * @param string $primaryEmail + */ + public static function updateContactName($contactId, string $primaryEmail) { + if (is_string($primaryEmail) && $primaryEmail !== '' && + !CRM_Contact_BAO_Contact::hasName(['id' => $contactId]) + ) { + CRM_Core_DAO::setFieldValue('CRM_Contact_DAO_Contact', $contactId, 'display_name', $primaryEmail); + CRM_Core_DAO::setFieldValue('CRM_Contact_DAO_Contact', $contactId, 'sort_name', $primaryEmail); + } + } + } diff --git a/civicrm/CRM/Core/BAO/EntityTag.php b/civicrm/CRM/Core/BAO/EntityTag.php index cbd60e2cd6..35950c5cf1 100644 --- a/civicrm/CRM/Core/BAO/EntityTag.php +++ b/civicrm/CRM/Core/BAO/EntityTag.php @@ -16,6 +16,7 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ class CRM_Core_BAO_EntityTag extends CRM_Core_DAO_EntityTag { + use CRM_Core_DynamicFKAccessTrait; /** * Given a contact id, it returns an array of tag id's the contact belongs to. diff --git a/civicrm/CRM/Core/BAO/IM.php b/civicrm/CRM/Core/BAO/IM.php index bca4ce1365..12fc6238d4 100644 --- a/civicrm/CRM/Core/BAO/IM.php +++ b/civicrm/CRM/Core/BAO/IM.php @@ -19,6 +19,7 @@ * This class contain function for IM handling */ class CRM_Core_BAO_IM extends CRM_Core_DAO_IM { + use CRM_Contact_AccessTrait; /** * Create or update IM record. diff --git a/civicrm/CRM/Core/BAO/Note.php b/civicrm/CRM/Core/BAO/Note.php index d63d8dea27..a08dbacf4f 100644 --- a/civicrm/CRM/Core/BAO/Note.php +++ b/civicrm/CRM/Core/BAO/Note.php @@ -19,6 +19,7 @@ * BAO object for crm_note table. */ class CRM_Core_BAO_Note extends CRM_Core_DAO_Note { + use CRM_Core_DynamicFKAccessTrait; /** * Const the max number of notes we display at any given time. diff --git a/civicrm/CRM/Core/BAO/OpenID.php b/civicrm/CRM/Core/BAO/OpenID.php index f200043573..33a7c269fc 100644 --- a/civicrm/CRM/Core/BAO/OpenID.php +++ b/civicrm/CRM/Core/BAO/OpenID.php @@ -19,6 +19,7 @@ * This class contains function for Open Id */ class CRM_Core_BAO_OpenID extends CRM_Core_DAO_OpenID { + use CRM_Contact_AccessTrait; /** * Create or update OpenID record. diff --git a/civicrm/CRM/Core/BAO/Phone.php b/civicrm/CRM/Core/BAO/Phone.php index dd73b9f9b7..c5a110e2ee 100644 --- a/civicrm/CRM/Core/BAO/Phone.php +++ b/civicrm/CRM/Core/BAO/Phone.php @@ -19,6 +19,7 @@ * Class contains functions for phone. */ class CRM_Core_BAO_Phone extends CRM_Core_DAO_Phone { + use CRM_Contact_AccessTrait; /** * Create phone object - note that the create function calls 'add' but diff --git a/civicrm/CRM/Core/BAO/RecurringEntity.php b/civicrm/CRM/Core/BAO/RecurringEntity.php index fceb1237b1..750959d45b 100644 --- a/civicrm/CRM/Core/BAO/RecurringEntity.php +++ b/civicrm/CRM/Core/BAO/RecurringEntity.php @@ -20,7 +20,7 @@ use When\When; /** * Class CRM_Core_BAO_RecurringEntity. */ -class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { +class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity implements \Symfony\Component\EventDispatcher\EventSubscriberInterface { const RUNNING = 1; public $schedule = []; @@ -115,6 +115,14 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { const MODE_NEXT_ALL_ENTITY = 2; const MODE_ALL_ENTITY_IN_SERIES = 3; + public static function getSubscribedEvents() { + return [ + 'civi.dao.postInsert' => 'triggerInsert', + 'civi.dao.postUpdate' => 'triggerUpdate', + 'civi.dao.postDelete' => 'triggerDelete', + ]; + } + /** * Getter for status. * diff --git a/civicrm/CRM/Core/BAO/Setting.php b/civicrm/CRM/Core/BAO/Setting.php index f075a24957..2329a21acb 100644 --- a/civicrm/CRM/Core/BAO/Setting.php +++ b/civicrm/CRM/Core/BAO/Setting.php @@ -96,7 +96,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * * @return array */ - public static function getItems(&$params, $domains = NULL, $settingsToReturn) { + public static function getItems(&$params, $domains, $settingsToReturn) { $originalDomain = CRM_Core_Config::domainID(); if (empty($domains)) { $domains[] = $originalDomain; diff --git a/civicrm/CRM/Core/BAO/Translation.php b/civicrm/CRM/Core/BAO/Translation.php new file mode 100644 index 0000000000..c9db2cb98a --- /dev/null +++ b/civicrm/CRM/Core/BAO/Translation.php @@ -0,0 +1,107 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ +class CRM_Core_BAO_Translation extends CRM_Core_DAO_Translation { + + /** + * Get a list of valid statuses for translated-strings. + * + * @return string[] + */ + public static function getStatuses($context = NULL) { + $options = [ + ['id' => 1, 'name' => 'active', 'label' => ts('Active')], + ['id' => 2, 'name' => 'draft', 'label' => ts('Draft')], + ]; + return self::formatPsuedoconstant($context, $options); + } + + /** + * Get a list of tables with translatable strings. + * + * @return string[] + * Ex: ['civicrm_event' => 'civicrm_event'] + */ + public static function getEntityTables() { + if (!isset(Civi::$statics[__CLASS__]['allTables'])) { + $tables = array_keys(self::getTranslatedFields()); + Civi::$statics[__CLASS__]['allTables'] = array_combine($tables, $tables); + } + return Civi::$statics[__CLASS__]['allTables']; + } + + /** + * Get a list of fields with translatable strings. + * + * @return string[] + * Ex: ['title' => 'title', 'description' => 'description'] + */ + public static function getEntityFields() { + if (!isset(Civi::$statics[__CLASS__]['allFields'])) { + $allFields = []; + foreach (self::getTranslatedFields() as $columns) { + foreach ($columns as $column => $sqlExpr) { + $allFields[$column] = $column; + } + } + Civi::$statics[__CLASS__]['allFields'] = $allFields; + } + return Civi::$statics[__CLASS__]['allFields']; + } + + /** + * Given a constant list of of id/name/label options, convert to the + * format required by pseudoconstant. + * + * @param string|NULL $context + * @param array $options + * List of options, each as a record of id+name+label. + * Ex: [['id' => 123, 'name' => 'foo_bar', 'label' => 'Foo Bar']] + * + * @return array|false + */ + private static function formatPsuedoconstant($context, array $options) { + // https://docs.civicrm.org/dev/en/latest/framework/pseudoconstant/#context + $key = ($context === 'match') ? 'name' : 'id'; + $value = ($context === 'validate') ? 'name' : 'label'; + return array_combine(array_column($options, $key), array_column($options, $value)); + } + + /** + * @return array + * List of data fields to translate, organized by table and column. + * Omitted/unlisted fields are not translated. Any listed field may be translated. + * Values should be TRUE. + * Ex: $fields['civicrm_event']['summary'] = TRUE + */ + public static function getTranslatedFields() { + $key = 'translatedFields'; + $cache = Civi::cache('fields'); + if (($r = $cache->get($key)) !== NULL) { + return $r; + } + + $f = []; + \CRM_Utils_Hook::translateFields($f); + + // Future: Assimilate defaults originating in XML (incl extension-entities) + // e.g. CRM_Core_I18n_SchemaStructure::columns() will grab core fields + + $cache->set($key, $f); + return $f; + } + +} diff --git a/civicrm/CRM/Core/BAO/UFGroup.php b/civicrm/CRM/Core/BAO/UFGroup.php index d34bec68ed..99e5ffc186 100644 --- a/civicrm/CRM/Core/BAO/UFGroup.php +++ b/civicrm/CRM/Core/BAO/UFGroup.php @@ -443,7 +443,7 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { $addressCustom = FALSE; if (in_array($permissionType, [CRM_Core_Permission::CREATE, CRM_Core_Permission::EDIT]) && - in_array($field->field_name, array_keys($addressCustomFields)) + array_key_exists($field->field_name, $addressCustomFields) ) { $addressCustom = TRUE; $name = "address_{$name}"; diff --git a/civicrm/CRM/Core/BAO/UFJoin.php b/civicrm/CRM/Core/BAO/UFJoin.php index b3514d9f98..df3643984d 100644 --- a/civicrm/CRM/Core/BAO/UFJoin.php +++ b/civicrm/CRM/Core/BAO/UFJoin.php @@ -175,4 +175,15 @@ class CRM_Core_BAO_UFJoin extends CRM_Core_DAO_UFJoin { ]; } + /** + * Override base method which assumes permissions should be based on entity_table. + * + * @return array + */ + public function addSelectWhereClause() { + $clauses = []; + CRM_Utils_Hook::selectWhereClause($this, $clauses); + return $clauses; + } + } diff --git a/civicrm/CRM/Core/BAO/Website.php b/civicrm/CRM/Core/BAO/Website.php index d5f386e8fd..d6b420a6bf 100644 --- a/civicrm/CRM/Core/BAO/Website.php +++ b/civicrm/CRM/Core/BAO/Website.php @@ -19,6 +19,7 @@ * This class contain function for Website handling. */ class CRM_Core_BAO_Website extends CRM_Core_DAO_Website { + use CRM_Contact_AccessTrait; /** * Create or update Website record. diff --git a/civicrm/CRM/Core/CodeGen/GenerateData.php b/civicrm/CRM/Core/CodeGen/GenerateData.php index 31a2352c3f..020bb1efa7 100644 --- a/civicrm/CRM/Core/CodeGen/GenerateData.php +++ b/civicrm/CRM/Core/CodeGen/GenerateData.php @@ -1917,8 +1917,8 @@ LEFT JOIN civicrm_price_set_entity cpe ON cpe.entity_id = cp.event_id LEFT JOIN $maxContribution = CRM_Core_DAO::singleValueQuery("select max(id) from civicrm_contribution"); $financialTypeID = CRM_Core_DAO::singleValueQuery("select id from civicrm_financial_type where name = 'Member Dues'"); $paymentInstrumentID = CRM_Core_DAO::singleValueQuery("select value from civicrm_option_value where name = 'Credit Card' AND option_group_id = (SELECT id from civicrm_option_group where name = 'payment_instrument')"); - $sql = "INSERT INTO civicrm_contribution (contact_id,financial_type_id,payment_instrument_id, receive_date, total_amount, currency, source, contribution_status_id) -SELECT cm.contact_id, $financialTypeID, $paymentInstrumentID, now(), cmt.minimum_fee, 'USD', CONCAT(cmt.name, ' Membership: Offline signup'), 1 FROM `civicrm_membership` cm + $sql = "INSERT INTO civicrm_contribution (contact_id,financial_type_id,payment_instrument_id, receive_date, total_amount, currency, source, contribution_status_id, trxn_id) +SELECT cm.contact_id, $financialTypeID, $paymentInstrumentID, now(), cmt.minimum_fee, 'USD', CONCAT(cmt.name, ' Membership: Offline signup'), 1, SUBSTRING(MD5(RAND()) FROM 1 FOR 16) FROM `civicrm_membership` cm LEFT JOIN civicrm_membership_type cmt ON cmt.id = cm.membership_type_id;"; $this->_query($sql); @@ -1957,8 +1957,8 @@ AND a.details = 'Membership Payment' $maxContribution = CRM_Core_DAO::singleValueQuery("select max(id) from civicrm_contribution"); $financialTypeID = CRM_Core_DAO::singleValueQuery("select id from civicrm_financial_type where name = 'Event Fee'"); $paymentInstrumentID = CRM_Core_DAO::singleValueQuery("select value from civicrm_option_value where name = 'Credit Card' AND option_group_id = (SELECT id from civicrm_option_group where name = 'payment_instrument')"); - $sql = "INSERT INTO civicrm_contribution (contact_id, financial_type_id, payment_instrument_id, receive_date, total_amount, currency, receipt_date, source, contribution_status_id) -SELECT `contact_id`, $financialTypeID, $paymentInstrumentID, now(), `fee_amount`, 'USD', now(), CONCAT(ce.title, ' : Offline registration'), 1 FROM `civicrm_participant` cp + $sql = "INSERT INTO civicrm_contribution (contact_id, financial_type_id, payment_instrument_id, receive_date, total_amount, currency, receipt_date, source, contribution_status_id, trxn_id) +SELECT `contact_id`, $financialTypeID, $paymentInstrumentID, now(), `fee_amount`, 'USD', now(), CONCAT(ce.title, ' : Offline registration'), 1, SUBSTRING(MD5(RAND()) FROM 1 FOR 16) FROM `civicrm_participant` cp LEFT JOIN civicrm_event ce ON ce.id = cp.event_id group by `contact_id`, `fee_amount`, `title`;"; diff --git a/civicrm/CRM/Core/CodeGen/Specification.php b/civicrm/CRM/Core/CodeGen/Specification.php index cd2e5711bc..0c379947e0 100644 --- a/civicrm/CRM/Core/CodeGen/Specification.php +++ b/civicrm/CRM/Core/CodeGen/Specification.php @@ -272,7 +272,9 @@ class CRM_Core_CodeGen_Specification { $this->getForeignKey($foreignXML, $fields, $foreign, $name); } } - $table['foreignKey'] = &$foreign; + if (!empty($foreign)) { + $table['foreignKey'] = &$foreign; + } } if ($this->value('dynamicForeignKey', $tableXML)) { @@ -285,7 +287,9 @@ class CRM_Core_CodeGen_Specification { $this->getDynamicForeignKey($foreignXML, $dynamicForeign, $name); } } - $table['dynamicForeignKey'] = $dynamicForeign; + if (!empty($dynamicForeign)) { + $table['dynamicForeignKey'] = $dynamicForeign; + } } $tables[$name] = &$table; diff --git a/civicrm/CRM/Core/Config.php b/civicrm/CRM/Core/Config.php index b11fc554e2..aef4a308b8 100644 --- a/civicrm/CRM/Core/Config.php +++ b/civicrm/CRM/Core/Config.php @@ -425,18 +425,6 @@ class CRM_Core_Config extends CRM_Core_Config_MagicMerge { return TRUE; } - if ($path && preg_match('/^civicrm\/ajax\/l10n-js/', $path) - && !empty($_SERVER['HTTP_REFERER']) - ) { - $ref = parse_url($_SERVER['HTTP_REFERER']); - if ( - (!empty($ref['path']) && preg_match('/civicrm\/upgrade/', $ref['path'])) || - (!empty($ref['query']) && preg_match('/civicrm\/upgrade/', urldecode($ref['query']))) - ) { - return TRUE; - } - } - return FALSE; } diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index 506a971ba7..617c91f2a4 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -526,11 +526,14 @@ class CRM_Core_DAO extends DB_DataObject { /** * Returns list of FK relationships. * - * * @return CRM_Core_Reference_Basic[] */ public static function getReferenceColumns() { - return []; + if (!isset(Civi::$statics[static::class]['links'])) { + Civi::$statics[static::class]['links'] = static::createReferenceColumns(static::class); + CRM_Core_DAO_AllCoreTables::invoke(static::class, 'links_callback', Civi::$statics[static::class]['links']); + } + return Civi::$statics[static::class]['links']; } /** @@ -888,7 +891,7 @@ class CRM_Core_DAO extends DB_DataObject { * * @param array $record * - * @return $this + * @return static * @throws \CRM_Core_Exception */ public static function writeRecord(array $record): CRM_Core_DAO { @@ -908,12 +911,27 @@ class CRM_Core_DAO extends DB_DataObject { return $instance; } + /** + * Bulk save multiple records + * + * @param array[] $records + * @return static[] + * @throws CRM_Core_Exception + */ + public static function writeRecords(array $records) { + $results = []; + foreach ($records as $record) { + $results[] = static::writeRecord($record); + } + return $results; + } + /** * Delete a record from supplied params. * * @param array $record * 'id' is required. - * @return CRM_Core_DAO + * @return static * @throws CRM_Core_Exception */ public static function deleteRecord(array $record) { @@ -937,6 +955,21 @@ class CRM_Core_DAO extends DB_DataObject { return $instance; } + /** + * Bulk delete multiple records. + * + * @param array[] $records + * @return static[] + * @throws CRM_Core_Exception + */ + public static function deleteRecords(array $records) { + $results = []; + foreach ($records as $record) { + $results[] = static::deleteRecord($record); + } + return $results; + } + /** * Check if there is a record with the same name in the db. * @@ -1778,11 +1811,9 @@ LIKE %1 $newObject = new $daoName(); $fields = $object->fields(); - if (!is_array($fieldsFix)) { - $fieldsToPrefix = []; - $fieldsToSuffix = []; - $fieldsToReplace = []; - } + $fieldsToPrefix = []; + $fieldsToSuffix = []; + $fieldsToReplace = []; if (!empty($fieldsFix['prefix'])) { $fieldsToPrefix = $fieldsFix['prefix']; } @@ -1793,6 +1824,7 @@ LIKE %1 $fieldsToReplace = $fieldsFix['replace']; } + $localizableFields = FALSE; foreach ($fields as $name => $value) { if ($name == 'id' || $value['name'] == 'id') { // copy everything but the id! @@ -1816,11 +1848,33 @@ LIKE %1 $newObject->$dbName = CRM_Utils_Date::isoToMysql($newObject->$dbName); } + if (!empty($value['localizable'])) { + $localizableFields = TRUE; + } + if ($newData) { $newObject->copyValues($newData); } } $newObject->save(); + + // ensure we copy all localized fields as well + if (CRM_Core_I18n::isMultilingual() && $localizableFields) { + global $dbLocale; + $locales = CRM_Core_I18n::getMultilingual(); + $curLocale = CRM_Core_I18n::getLocale(); + // loop on other locales + foreach ($locales as $locale) { + if ($locale != $curLocale) { + // setLocale doesn't seems to be reliable to set dbLocale and we only need to change the db locale + $dbLocale = '_' . $locale; + $newObject->copyLocalizable($object->id, $newObject->id, $fieldsToPrefix, $fieldsToSuffix, $fieldsToReplace); + } + } + // restore dbLocale to starting value + $dbLocale = '_' . $curLocale; + } + if (!$blockCopyofCustomValues) { $newObject->copyCustomFields($object->id, $newObject->id); } @@ -1830,6 +1884,67 @@ LIKE %1 return $newObject; } + /** + * Method that copies localizable fields from an old entity to a new one. + * + * Fixes bug dev/core#2479, + * where non current locale fields are copied from current locale losing translation when copying + * + * @param int $entityID + * @param int $newEntityID + * @param array $fieldsToPrefix + * @param array $fieldsToSuffix + * @param array $fieldsToReplace + */ + protected function copyLocalizable($entityID, $newEntityID, $fieldsToPrefix, $fieldsToSuffix, $fieldsToReplace) { + $entity = get_class($this); + $object = new $entity(); + $object->id = $entityID; + $object->find(); + + $newObject = new $entity(); + $newObject->id = $newEntityID; + + $newObject->find(); + + if ($object->fetch() && $newObject->fetch()) { + + $fields = $object->fields(); + foreach ($fields as $name => $value) { + + if ($name == 'id' || $value['name'] == 'id') { + // copy everything but the id! + continue; + } + + // only copy localizable fields + if (!$value['localizable']) { + continue; + } + + $dbName = $value['name']; + $type = CRM_Utils_Type::typeToString($value['type']); + $newObject->$dbName = $object->$dbName; + if (isset($fieldsToPrefix[$dbName])) { + $newObject->$dbName = $fieldsToPrefix[$dbName] . $newObject->$dbName; + } + if (isset($fieldsToSuffix[$dbName])) { + $newObject->$dbName .= $fieldsToSuffix[$dbName]; + } + if (isset($fieldsToReplace[$dbName])) { + $newObject->$dbName = $fieldsToReplace[$dbName]; + } + + if ($type == 'Timestamp' || $type == 'Date') { + $newObject->$dbName = CRM_Utils_Date::isoToMysql($newObject->$dbName); + } + + } + $newObject->save(); + + } + } + /** * Method that copies custom fields values from an old entity to a new one. * @@ -1978,7 +2093,7 @@ SELECT contact_id * @return object * an object of type referenced by daoName */ - public static function commonRetrieveAll($daoName, $fieldIdName = 'id', $fieldId, &$details, $returnProperities = NULL) { + public static function commonRetrieveAll($daoName, $fieldIdName, $fieldId, &$details, $returnProperities = NULL) { require_once str_replace('_', DIRECTORY_SEPARATOR, $daoName) . ".php"; $object = new $daoName(); $object->$fieldIdName = $fieldId; @@ -2960,7 +3075,7 @@ SELECT contact_id $clauses[$fieldName] = CRM_Utils_SQL::mergeSubquery('Contact'); } // Clause for an entity_table/entity_id combo - if ($fieldName == 'entity_id' && isset($fields['entity_table'])) { + if ($fieldName === 'entity_id' && isset($fields['entity_table'])) { $relatedClauses = []; $relatedEntities = $this->buildOptions('entity_table', 'get'); foreach ((array) $relatedEntities as $table => $ent) { @@ -3009,7 +3124,7 @@ SELECT contact_id /** * ensure database name is 'safe', i.e. only contains word characters (includes underscores) - * and dashes, and contains at least one [a-z] case insenstive. + * and dashes, and contains at least one [a-z] case insensitive. * * @param $database * diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.data.php b/civicrm/CRM/Core/DAO/AllCoreTables.data.php index fdbda3a704..2b84c1d943 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.data.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.data.php @@ -47,6 +47,11 @@ return [ 'class' => 'CRM_Core_DAO_SystemLog', 'table' => 'civicrm_system_log', ], + 'CRM_Core_DAO_Translation' => [ + 'name' => 'Translation', + 'class' => 'CRM_Core_DAO_Translation', + 'table' => 'civicrm_translation', + ], 'CRM_Core_DAO_Worldregion' => [ 'name' => 'Worldregion', 'class' => 'CRM_Core_DAO_Worldregion', @@ -82,9 +87,9 @@ return [ 'class' => 'CRM_ACL_DAO_ACLCache', 'table' => 'civicrm_acl_cache', ], - 'CRM_ACL_DAO_EntityRole' => [ - 'name' => 'EntityRole', - 'class' => 'CRM_ACL_DAO_EntityRole', + 'CRM_ACL_DAO_ACLEntityRole' => [ + 'name' => 'ACLEntityRole', + 'class' => 'CRM_ACL_DAO_ACLEntityRole', 'table' => 'civicrm_acl_entity_role', ], 'CRM_Contact_DAO_Contact' => [ @@ -207,19 +212,19 @@ return [ 'class' => 'CRM_Event_Cart_DAO_Cart', 'table' => 'civicrm_event_carts', ], - 'CRM_Dedupe_DAO_RuleGroup' => [ - 'name' => 'RuleGroup', - 'class' => 'CRM_Dedupe_DAO_RuleGroup', + 'CRM_Dedupe_DAO_DedupeRuleGroup' => [ + 'name' => 'DedupeRuleGroup', + 'class' => 'CRM_Dedupe_DAO_DedupeRuleGroup', 'table' => 'civicrm_dedupe_rule_group', ], - 'CRM_Dedupe_DAO_Rule' => [ - 'name' => 'Rule', - 'class' => 'CRM_Dedupe_DAO_Rule', + 'CRM_Dedupe_DAO_DedupeRule' => [ + 'name' => 'DedupeRule', + 'class' => 'CRM_Dedupe_DAO_DedupeRule', 'table' => 'civicrm_dedupe_rule', ], - 'CRM_Dedupe_DAO_Exception' => [ - 'name' => 'Exception', - 'class' => 'CRM_Dedupe_DAO_Exception', + 'CRM_Dedupe_DAO_DedupeException' => [ + 'name' => 'DedupeException', + 'class' => 'CRM_Dedupe_DAO_DedupeException', 'table' => 'civicrm_dedupe_exception', ], 'CRM_Case_DAO_CaseType' => [ diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.php b/civicrm/CRM/Core/DAO/AllCoreTables.php index 0e4b38b848..f117d68148 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.php @@ -203,7 +203,7 @@ class CRM_Core_DAO_AllCoreTables { */ public static function getBAOClassName($daoName) { $baoName = str_replace('_DAO_', '_BAO_', $daoName); - return class_exists($baoName) ? $baoName : $daoName; + return $daoName === $baoName || class_exists($baoName) ? $baoName : $daoName; } /** @@ -276,6 +276,23 @@ class CRM_Core_DAO_AllCoreTables { return array_values(self::daoToClass()); } + /** + * Get a list of all extant BAO classes. + * + * @return array + * Ex: ['Contact' => 'CRM_Contact_BAO_Contact'] + */ + public static function getBaoClasses() { + $r = []; + foreach (\CRM_Core_DAO_AllCoreTables::daoToClass() as $entity => $daoClass) { + $baoClass = str_replace('_DAO_', '_BAO_', $daoClass); + if (class_exists($baoClass)) { + $r[$entity] = $baoClass; + } + } + return $r; + } + /** * Get the classname for the table. * diff --git a/civicrm/CRM/Core/DAO/CustomField.php b/civicrm/CRM/Core/DAO/CustomField.php index 4dc649d1d7..d8c977b012 100644 --- a/civicrm/CRM/Core/DAO/CustomField.php +++ b/civicrm/CRM/Core/DAO/CustomField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:84cdd7643545ef0dbe9512de6bc54e67) + * (GenCodeChecksum:8ec2e0591921853bc86149754f5704f9) */ /** @@ -52,7 +52,7 @@ class CRM_Core_DAO_CustomField extends CRM_Core_DAO { public $custom_group_id; /** - * Variable name/programmatic handle for this group. + * Variable name/programmatic handle for this field. * * @var string */ @@ -340,7 +340,7 @@ class CRM_Core_DAO_CustomField extends CRM_Core_DAO { 'name' => 'name', 'type' => CRM_Utils_Type::T_STRING, 'title' => ts('Custom Field Name'), - 'description' => ts('Variable name/programmatic handle for this group.'), + 'description' => ts('Variable name/programmatic handle for this field.'), 'maxlength' => 64, 'size' => CRM_Utils_Type::BIG, 'where' => 'civicrm_custom_field.name', diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php index bc97e05434..3798bb95dd 100644 --- a/civicrm/CRM/Core/DAO/CustomGroup.php +++ b/civicrm/CRM/Core/DAO/CustomGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fc2cf4a8b27ca8d4eaced3f1a3fcddd5) + * (GenCodeChecksum:ddee40c6f144396056437d29bc0337d7) */ /** @@ -437,6 +437,7 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { 'html' => [ 'label' => ts("Table Name"), ], + 'readonly' => TRUE, 'add' => '2.0', ], 'is_multiple' => [ diff --git a/civicrm/CRM/Core/DAO/Translation.php b/civicrm/CRM/Core/DAO/Translation.php new file mode 100644 index 0000000000..84bd641b7a --- /dev/null +++ b/civicrm/CRM/Core/DAO/Translation.php @@ -0,0 +1,323 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from xml/schema/CRM/Core/Translation.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:9c290a244c0efde76b4e0cd83a069b2b) + */ + +/** + * Database access object for the Translation entity. + */ +class CRM_Core_DAO_Translation extends CRM_Core_DAO { + const EXT = 'civicrm'; + const TABLE_ADDED = '5.39'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_translation'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = TRUE; + + /** + * Unique String ID + * + * @var int + */ + public $id; + + /** + * Table where referenced item is stored + * + * @var string + */ + public $entity_table; + + /** + * Field where referenced item is stored + * + * @var string + */ + public $entity_field; + + /** + * ID of the relevant entity. + * + * @var int + */ + public $entity_id; + + /** + * Relevant language + * + * @var string + */ + public $language; + + /** + * Specify whether the string is active, draft, etc + * + * @var int + */ + public $status_id; + + /** + * Translated string + * + * @var longtext + */ + public $string; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_translation'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? ts('Translated Strings') : ts('Translated String'); + } + + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() { + if (!isset(Civi::$statics[__CLASS__]['links'])) { + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Dynamic(self::getTableName(), 'entity_id', NULL, 'id', 'entity_table'); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + } + return Civi::$statics[__CLASS__]['links']; + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Translated String ID'), + 'description' => ts('Unique String ID'), + 'required' => TRUE, + 'where' => 'civicrm_translation.id', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'readonly' => TRUE, + 'add' => '5.39', + ], + 'entity_table' => [ + 'name' => 'entity_table', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Translated Entity'), + 'description' => ts('Table where referenced item is stored'), + 'required' => TRUE, + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_translation.entity_table', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_Translation::getEntityTables', + ], + 'add' => '5.39', + ], + 'entity_field' => [ + 'name' => 'entity_field', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Translated Field'), + 'description' => ts('Field where referenced item is stored'), + 'required' => TRUE, + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_translation.entity_field', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_Translation::getEntityFields', + ], + 'add' => '5.39', + ], + 'entity_id' => [ + 'name' => 'entity_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Translated Entity ID'), + 'description' => ts('ID of the relevant entity.'), + 'required' => TRUE, + 'where' => 'civicrm_translation.entity_id', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'add' => '5.39', + ], + 'language' => [ + 'name' => 'language', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Language'), + 'description' => ts('Relevant language'), + 'required' => TRUE, + 'maxlength' => 5, + 'size' => CRM_Utils_Type::SIX, + 'where' => 'civicrm_translation.language', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select', + ], + 'pseudoconstant' => [ + 'optionGroupName' => 'languages', + 'keyColumn' => 'name', + 'optionEditPath' => 'civicrm/admin/options/languages', + ], + 'add' => '5.39', + ], + 'status_id' => [ + 'name' => 'status_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Status'), + 'description' => ts('Specify whether the string is active, draft, etc'), + 'required' => TRUE, + 'where' => 'civicrm_translation.status_id', + 'default' => '1', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_Translation::getStatuses', + ], + 'add' => '5.39', + ], + 'string' => [ + 'name' => 'string', + 'type' => CRM_Utils_Type::T_LONGTEXT, + 'title' => ts('Translated String'), + 'description' => ts('Translated string'), + 'required' => TRUE, + 'where' => 'civicrm_translation.string', + 'table_name' => 'civicrm_translation', + 'entity' => 'Translation', + 'bao' => 'CRM_Core_BAO_Translation', + 'localizable' => 0, + 'add' => '5.39', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * 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() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'translation', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'translation', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = [ + 'index_entity_lang' => [ + 'name' => 'index_entity_lang', + 'field' => [ + 0 => 'entity_id', + 1 => 'entity_table', + 2 => 'language', + ], + 'localizable' => FALSE, + 'sig' => 'civicrm_translation::0::entity_id::entity_table::language', + ], + ]; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/CRM/Core/DynamicFKAccessTrait.php b/civicrm/CRM/Core/DynamicFKAccessTrait.php new file mode 100644 index 0000000000..041d53717d --- /dev/null +++ b/civicrm/CRM/Core/DynamicFKAccessTrait.php @@ -0,0 +1,47 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * Trait for with entities with an entity_table + entity_id dynamic FK. + */ +trait CRM_Core_DynamicFKAccessTrait { + + /** + * @param string $entityName + * @param string $action + * @param array $record + * @param int $userID + * @return bool + * @see CRM_Core_DAO::checkAccess + */ + public static function _checkAccess(string $entityName, string $action, array $record, int $userID): bool { + $eid = $record['entity_id'] ?? NULL; + $table = $record['entity_table'] ?? NULL; + if (!$eid && !empty($record['id'])) { + $eid = CRM_Core_DAO::getFieldValue(__CLASS__, $record['id'], 'entity_id'); + } + if ($eid && !$table && !empty($record['id'])) { + $table = CRM_Core_DAO::getFieldValue(__CLASS__, $record['id'], 'entity_table'); + } + if ($eid && $table) { + $targetEntity = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($table)); + return \Civi\Api4\Utils\CoreUtil::checkAccessDelegated($targetEntity, 'update', ['id' => $eid], $userID); + } + return TRUE; + } + +} diff --git a/civicrm/CRM/Core/Form/RecurringEntity.php b/civicrm/CRM/Core/Form/RecurringEntity.php index 37532c8749..4e663693a8 100644 --- a/civicrm/CRM/Core/Form/RecurringEntity.php +++ b/civicrm/CRM/Core/Form/RecurringEntity.php @@ -321,7 +321,7 @@ class CRM_Core_Form_RecurringEntity { * * @throws \CiviCRM_API3_Exception */ - public static function postProcess($params = [], $type, $linkedEntities = []) { + public static function postProcess($params, $type, $linkedEntities = []) { // Check entity_id not present in params take it from class variable if (empty($params['entity_id'])) { $params['entity_id'] = self::$_entityId; diff --git a/civicrm/CRM/Core/I18n/Schema.php b/civicrm/CRM/Core/I18n/Schema.php index 3a6e763d23..0fc3bb6df7 100644 --- a/civicrm/CRM/Core/I18n/Schema.php +++ b/civicrm/CRM/Core/I18n/Schema.php @@ -461,14 +461,14 @@ class CRM_Core_I18n_Schema { $dao->query("DESCRIBE {$table}", FALSE); while ($dao->fetch()) { // view non-internationalized columns directly - if (!in_array($dao->Field, array_keys($columns[$table])) and + if (!array_key_exists($dao->Field, $columns[$table]) && !preg_match('/_[a-z][a-z]_[A-Z][A-Z]$/', $dao->Field) ) { $cols[] = '`' . $dao->Field . '`'; } $tableCols[] = $dao->Field; } - // view intrernationalized columns through an alias + // view internationalized columns through an alias foreach ($columns[$table] as $column => $_) { if (!$isUpgradeMode) { $cols[] = "`{$column}_{$locale}` `{$column}`"; diff --git a/civicrm/CRM/Core/Invoke.php b/civicrm/CRM/Core/Invoke.php index 6611dc00d5..dbd42aa066 100644 --- a/civicrm/CRM/Core/Invoke.php +++ b/civicrm/CRM/Core/Invoke.php @@ -365,7 +365,7 @@ class CRM_Core_Invoke { * * @throws Exception */ - public static function rebuildMenuAndCaches($triggerRebuild = FALSE, $sessionReset = FALSE) { + public static function rebuildMenuAndCaches(bool $triggerRebuild = FALSE, bool $sessionReset = FALSE): void { $config = CRM_Core_Config::singleton(); $config->clearModuleList(); @@ -393,7 +393,10 @@ class CRM_Core_Invoke { $triggerRebuild || CRM_Utils_Request::retrieve('triggerRebuild', 'Boolean', CRM_Core_DAO::$_nullObject, FALSE, 0, 'GET') ) { - CRM_Core_DAO::triggerRebuild(); + Civi::service('sql_triggers')->rebuild(); + // Rebuild Drupal 8/9/10 route cache only if "triggerRebuild" is set to TRUE as it's + // computationally very expensive and only needs to be done when routes change on the Civi-side. + // For example - when uninstalling an extension. We already set "triggerRebuild" to true for these operations. $config->userSystem->invalidateRouteCache(); } CRM_Core_DAO_AllCoreTables::reinitializeCache(TRUE); diff --git a/civicrm/CRM/Core/ManagedEntities.php b/civicrm/CRM/Core/ManagedEntities.php index f918bb0348..3ed9c14388 100644 --- a/civicrm/CRM/Core/ManagedEntities.php +++ b/civicrm/CRM/Core/ManagedEntities.php @@ -261,10 +261,13 @@ class CRM_Core_ManagedEntities { */ public function updateExistingEntity($dao, $todo) { $policy = CRM_Utils_Array::value('update', $todo, 'always'); - $doUpdate = ($policy == 'always'); + $doUpdate = ($policy === 'always'); if ($doUpdate) { - $defaults = ['id' => $dao->entity_id, 'is_active' => 1]; + $defaults = ['id' => $dao->entity_id]; + if ($this->isActivationSupported($dao->entity_type)) { + $defaults['is_active'] = 1; + } $params = array_merge($defaults, $todo['params']); $manager = CRM_Extension_System::singleton()->getManager(); @@ -301,10 +304,12 @@ class CRM_Core_ManagedEntities { * inactive. * * @param CRM_Core_DAO_Managed $dao + * + * @throws \CiviCRM_API3_Exception */ - public function disableEntity($dao) { - // FIXME: if ($dao->entity_type supports is_active) { - if (TRUE) { + public function disableEntity($dao): void { + $entity_type = $dao->entity_type; + if ($this->isActivationSupported($entity_type)) { // FIXME cascading for payproc types? $params = [ 'version' => 3, @@ -476,7 +481,28 @@ class CRM_Core_ManagedEntities { 'params' => $params, 'result' => $result, ]); - throw new Exception('API error: ' . $result['error_message'] . ' on ' . $entity . '.' . $action); + throw new Exception('API error: ' . $result['error_message'] . ' on ' . $entity . '.' . $action + . !empty($params['name']) ? '( entity name ' . $params['name'] . ')' : '' + ); + } + + /** + * Determine if an entity supports APIv3-based activation/de-activation. + * @param string $entity_type + * + * @return bool + * @throws \CiviCRM_API3_Exception + */ + private function isActivationSupported(string $entity_type): bool { + if (!isset(Civi::$statics[__CLASS__][__FUNCTION__][$entity_type])) { + $actions = civicrm_api3($entity_type, 'getactions', [])['values']; + Civi::$statics[__CLASS__][__FUNCTION__][$entity_type] = FALSE; + if (in_array('create', $actions, TRUE) && in_array('getfields', $actions)) { + $fields = civicrm_api3($entity_type, 'getfields', ['action' => 'create'])['values']; + Civi::$statics[__CLASS__][__FUNCTION__][$entity_type] = array_key_exists('is_active', $fields); + } + } + return Civi::$statics[__CLASS__][__FUNCTION__][$entity_type]; } } diff --git a/civicrm/CRM/Core/OptionValue.php b/civicrm/CRM/Core/OptionValue.php index 765cedd17f..79e6216c55 100644 --- a/civicrm/CRM/Core/OptionValue.php +++ b/civicrm/CRM/Core/OptionValue.php @@ -251,7 +251,7 @@ class CRM_Core_OptionValue { * @return bool * true if object exists */ - public static function optionExists($value, $daoName, $daoID, $optionGroupID, $fieldName = 'name', $domainSpecific) { + public static function optionExists($value, $daoName, $daoID, $optionGroupID, $fieldName, $domainSpecific) { $object = new $daoName(); $object->$fieldName = $value; $object->option_group_id = $optionGroupID; diff --git a/civicrm/CRM/Core/Payment.php b/civicrm/CRM/Core/Payment.php index 4254f3ce47..16f4691d06 100644 --- a/civicrm/CRM/Core/Payment.php +++ b/civicrm/CRM/Core/Payment.php @@ -1378,6 +1378,7 @@ abstract class CRM_Core_Payment { } if ($this->_paymentProcessor['billing_mode'] == 4) { + CRM_Core_Error::deprecatedFunctionWarning('doPayment', 'doTransferCheckout'); $result = $this->doTransferCheckout($params, $component); if (is_array($result) && !isset($result['payment_status_id'])) { $result['payment_status_id'] = array_search('Pending', $statuses); @@ -1385,6 +1386,7 @@ abstract class CRM_Core_Payment { } } else { + CRM_Core_Error::deprecatedFunctionWarning('doPayment', 'doDirectPayment'); $result = $this->doDirectPayment($params, $component); if (is_array($result) && !isset($result['payment_status_id'])) { if (!empty($params['is_recur'])) { diff --git a/civicrm/CRM/Core/Payment/AuthorizeNet.php b/civicrm/CRM/Core/Payment/AuthorizeNet.php index 0cbbc2b939..e28bdbf900 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNet.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNet.php @@ -68,11 +68,6 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $this->_setParam('apiLogin', $paymentProcessor['user_name']); $this->_setParam('paymentKey', $paymentProcessor['password']); $this->_setParam('paymentType', 'AIM'); - $this->_setParam('md5Hash', $paymentProcessor['signature'] ?? NULL); - - $this->_setParam('timestamp', time()); - srand(time()); - $this->_setParam('sequence', rand(1, 1000)); } /** @@ -103,15 +98,29 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { /** * Submit a payment using Advanced Integration Method. * - * @param array $params - * Assoc array of input parameters for this transaction. + * @param array|\Civi\Payment\PropertyBag $params + * + * @param string $component * * @return array - * the result in a nice formatted array (or an error object) + * Result array (containing at least the key payment_status_id) * * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } + if (!defined('CURLOPT_SSLCERT')) { // Note that guzzle doesn't necessarily require CURL, although it prefers it. But we should leave this error // here unless someone suggests it is not required since it's likely helpful. @@ -136,6 +145,8 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { if (!empty($params['is_recur']) && !empty($params['contributionRecurID'])) { $this->doRecurPayment(); + $params['payment_status_id'] = array_search('Pending', $statuses); + $params['payment_status'] = 'Pending'; return $params; } @@ -156,7 +167,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { } // Authorize.Net will not refuse duplicates, so we should check if the user already submitted this transaction - if ($this->checkDupe($authorizeNetFields['x_invoice_num'], CRM_Utils_Array::value('contributionID', $params))) { + if ($this->checkDupe($authorizeNetFields['x_invoice_num'], $params['contributionID'] ?? NULL)) { throw new PaymentProcessorException('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from Authorize.net. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.', 9004); } @@ -179,10 +190,10 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { switch ($response_fields[0]) { case self::AUTH_REVIEW: $params['payment_status_id'] = array_search('Pending', $contributionStatus); + $params['payment_status'] = 'Pending'; break; case self::AUTH_ERROR: - $params['payment_status_id'] = array_search('Failed', $contributionStatus); $errormsg = $response_fields[2] . ' ' . $response_fields[3]; throw new PaymentProcessorException($errormsg, $response_fields[1]); @@ -193,11 +204,11 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { default: // Success $params['trxn_id'] = !empty($response_fields[6]) ? $response_fields[6] : $this->getTestTrxnID(); + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; break; } - // TODO: include authorization code? - return $params; } @@ -373,56 +384,6 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { return $fields; } - /** - * Generate HMAC_MD5 - * - * @param string $key - * @param string $data - * - * @return string - * the HMAC_MD5 encoding string - */ - public function hmac($key, $data) { - if (function_exists('mhash')) { - // Use PHP mhash extension - return (bin2hex(mhash(MHASH_MD5, $data, $key))); - } - else { - // RFC 2104 HMAC implementation for php. - // Creates an md5 HMAC. - // Eliminates the need to install mhash to compute a HMAC - // Hacked by Lance Rushing - // byte length for md5 - $b = 64; - if (strlen($key) > $b) { - $key = pack("H*", md5($key)); - } - $key = str_pad($key, $b, chr(0x00)); - $ipad = str_pad('', $b, chr(0x36)); - $opad = str_pad('', $b, chr(0x5c)); - $k_ipad = $key ^ $ipad; - $k_opad = $key ^ $opad; - return md5($k_opad . pack("H*", md5($k_ipad . $data))); - } - } - - /** - * Calculate and return the transaction fingerprint. - * - * @return string - * fingerprint - */ - public function CalculateFP() { - $x_tran_key = $this->_getParam('paymentKey'); - $loginid = $this->_getParam('apiLogin'); - $sequence = $this->_getParam('sequence'); - $timestamp = $this->_getParam('timestamp'); - $amount = $this->_getParam('amount'); - $currency = $this->_getParam('currencyID'); - $transaction = "$loginid^$sequence^$timestamp^$amount^$currency"; - return $this->hmac($x_tran_key, $transaction); - } - /** * Split a CSV file. Requires , as delimiter and " as enclosure. * Based off notes from http://php.net/fgetcsv @@ -584,7 +545,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { * @return bool|object * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function cancelSubscription(&$message = '', $params) { + public function cancelSubscription(&$message = '', $params = []) { $template = CRM_Core_Smarty::singleton(); $template->assign('subscriptionType', 'cancel'); diff --git a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php index 8514f9ce2e..a2416e61d3 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php @@ -170,10 +170,7 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { return FALSE; } - CRM_Contribute_BAO_Contribution::completeOrder($input, [ - 'participant' => NULL, - 'contributionRecur' => $recur->id, - ], $contribution->id ?? NULL); + CRM_Contribute_BAO_Contribution::completeOrder($input, $recur->id, $contribution->id ?? NULL); return $isFirstOrLastRecurringPayment; } diff --git a/civicrm/CRM/Core/Payment/BaseIPN.php b/civicrm/CRM/Core/Payment/BaseIPN.php index 9c68336776..a09264b93b 100644 --- a/civicrm/CRM/Core/Payment/BaseIPN.php +++ b/civicrm/CRM/Core/Payment/BaseIPN.php @@ -421,11 +421,7 @@ class CRM_Core_Payment_BaseIPN { */ public function completeTransaction($input, $ids, $objects) { CRM_Core_Error::deprecatedFunctionWarning('Use Payment.create api'); - CRM_Contribute_BAO_Contribution::completeOrder($input, [ - 'related_contact' => $ids['related_contact'] ?? NULL, - 'participant' => !empty($objects['participant']) ? $objects['participant']->id : NULL, - 'contributionRecur' => !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, - ], $objects['contribution']->id ?? NULL); + CRM_Contribute_BAO_Contribution::completeOrder($input, !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, $objects['contribution']->id ?? NULL); } /** diff --git a/civicrm/CRM/Core/Payment/Dummy.php b/civicrm/CRM/Core/Payment/Dummy.php index 31e630291b..ba458d1895 100644 --- a/civicrm/CRM/Core/Payment/Dummy.php +++ b/civicrm/CRM/Core/Payment/Dummy.php @@ -20,9 +20,8 @@ use Civi\Payment\PropertyBag; * Dummy payment processor */ class CRM_Core_Payment_Dummy extends CRM_Core_Payment { - protected $_mode; - protected $_params = []; + protected $_mode; protected $_doDirectPaymentResult = []; /** diff --git a/civicrm/CRM/Core/Payment/Elavon.php b/civicrm/CRM/Core/Payment/Elavon.php index 8990e85860..596d8898ca 100644 --- a/civicrm/CRM/Core/Payment/Elavon.php +++ b/civicrm/CRM/Core/Payment/Elavon.php @@ -84,13 +84,29 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { /** * This function sends request and receives response from the processor. * - * @param array $params + * @param array|PropertyBag $params + * + * @param string $component * * @return array + * Result array (containing at least the key payment_status_id) * - * @throws \CRM_Core_Exception + * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } + if (isset($params['is_recur']) && $params['is_recur'] == TRUE) { throw new CRM_Core_Exception(ts('Elavon - recurring payments not implemented')); } @@ -219,6 +235,8 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { } $params['trxn_result_code'] = $processorResponse['ssl_approval_code'] . "-Cvv2:" . $processorResponse['ssl_cvv2_response'] . "-avs:" . $processorResponse['ssl_avs_response']; + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; return $params; } diff --git a/civicrm/CRM/Core/Payment/FirstData.php b/civicrm/CRM/Core/Payment/FirstData.php index c51c3ff769..5b5d6b1802 100644 --- a/civicrm/CRM/Core/Payment/FirstData.php +++ b/civicrm/CRM/Core/Payment/FirstData.php @@ -138,12 +138,29 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { * This function sends request and receives response from * the processor * - * @param array $params + * @param array|PropertyBag $params + * + * @param string $component + * + * @return array + * Result array (containing at least the key payment_status_id) * - * @return array|object - * @throws \Exception + * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } + if ($params['is_recur'] == TRUE) { throw new CRM_Core_Exception(ts('First Data - recurring payments not implemented')); } @@ -285,6 +302,8 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { //============= $params['trxn_result_code'] = $processorResponse['r_message']; $params['trxn_id'] = $processorResponse['r_ref']; + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; CRM_Core_Error::debug_log_message("r_authresponse " . $processorResponse['r_authresponse']); CRM_Core_Error::debug_log_message("r_code " . $processorResponse['r_code']); CRM_Core_Error::debug_log_message("r_tdate " . $processorResponse['r_tdate']); diff --git a/civicrm/CRM/Core/Payment/PayJunction.php b/civicrm/CRM/Core/Payment/PayJunction.php index ce1b33442c..0d67cfb032 100644 --- a/civicrm/CRM/Core/Payment/PayJunction.php +++ b/civicrm/CRM/Core/Payment/PayJunction.php @@ -41,14 +41,29 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { * This function sends request and receives response from * PayJunction payment process * - * @param array $params - * Assoc array of input parameters for this transaction. + * @param array|PropertyBag $params + * + * @param string $component * * @return array - * the result in an nice formatted array (or an error object) + * Result array (containing at least the key payment_status_id) + * * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } + $logon = $this->_paymentProcessor['user_name']; $password = $this->_paymentProcessor['password']; $url_site = $this->_paymentProcessor['url_site']; @@ -151,6 +166,8 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { // Success $params['trxn_result_code'] = $pjpgResponse['dc_response_code']; $params['trxn_id'] = $pjpgResponse['dc_transaction_id']; + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; return $params; } @@ -171,43 +188,6 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { return FALSE; } return TRUE; - - } - - /** - * Get the value of a field if set. - * - * @param string $field - * The field. - * - * @return mixed - * value of the field, or empty string if the field is - * not set - */ - public function _getParam($field) { - if (isset($this->_params[$field])) { - return $this->_params[$field]; - } - return ''; - } - - /** - * Set a field to the specified value. Value must be a scalar (int, - * float, string, or boolean) - * - * @param string $field - * @param mixed $value - * - * @return bool - * false if value is not a scalar, true if successful - */ - public function _setParam($field, $value) { - if (!is_scalar($value)) { - return FALSE; - } - else { - $this->_params[$field] = $value; - } } /** diff --git a/civicrm/CRM/Core/Payment/PayPalIPN.php b/civicrm/CRM/Core/Payment/PayPalIPN.php index b08cd07781..29d7587527 100644 --- a/civicrm/CRM/Core/Payment/PayPalIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalIPN.php @@ -180,15 +180,11 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { return; } - $this->single($input, [ - 'participant' => NULL, - 'contributionRecur' => $recur->id, - ], $contribution, TRUE); + $this->single($input, $contribution, TRUE); } /** * @param array $input - * @param array $ids * @param \CRM_Contribute_BAO_Contribution $contribution * @param bool $recur * @@ -196,7 +192,7 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function single($input, $ids, $contribution, $recur = FALSE) { + public function single($input, $contribution, $recur = FALSE) { // make sure the invoice is valid and matches what we have in the contribution record if ($contribution->invoice_id != $input['invoice']) { @@ -224,7 +220,7 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { return; } - CRM_Contribute_BAO_Contribution::completeOrder($input, $ids, $contribution->id ?? NULL); + CRM_Contribute_BAO_Contribution::completeOrder($input, $this->getContributionRecurID(), $contribution->id ?? NULL); } /** @@ -236,36 +232,22 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { */ public function main() { try { - $ids = $input = []; + $input = []; $component = $this->retrieve('module', 'String'); $input['component'] = $component; - $ids['contact'] = $this->retrieve('contactID', 'Integer', TRUE); - $contributionID = $ids['contribution'] = $this->retrieve('contributionID', 'Integer', TRUE); + $contributionID = $this->getContributionID(); $membershipID = $this->retrieve('membershipID', 'Integer', FALSE); - $contributionRecurID = $this->retrieve('contributionRecurID', 'Integer', FALSE); $this->getInput($input); - if ($component === 'event') { - $ids['event'] = $this->retrieve('eventID', 'Integer', TRUE); - $ids['participant'] = $this->retrieve('participantID', 'Integer', TRUE); - } - else { - // get the optional ids - $ids['membership'] = $membershipID; - $ids['contributionPage'] = $this->retrieve('contributionPageID', 'Integer', FALSE); - $ids['related_contact'] = $this->retrieve('relatedContactID', 'Integer', FALSE); - $ids['onbehalf_dupe_alert'] = $this->retrieve('onBehalfDupeAlert', 'Integer', FALSE); - } - - $paymentProcessorID = $this->getPayPalPaymentProcessorID($input, $contributionRecurID); + $paymentProcessorID = $this->getPayPalPaymentProcessorID($input, $this->getContributionRecurID()); - Civi::log()->debug('PayPalIPN: Received (ContactID: ' . $ids['contact'] . '; trxn_id: ' . $input['trxn_id'] . ').'); + Civi::log()->debug('PayPalIPN: Received (ContactID: ' . $this->getContactID() . '; trxn_id: ' . $input['trxn_id'] . ').'); // Debugging related to possible missing membership linkage - if ($contributionRecurID && $this->retrieve('membershipID', 'Integer', FALSE)) { - $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($contributionRecurID); + if ($this->getContributionRecurID() && $this->retrieve('membershipID', 'Integer', FALSE)) { + $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($this->getContributionRecurID()); $membershipPayment = civicrm_api3('MembershipPayment', 'get', [ 'contribution_id' => $templateContribution['id'], 'membership_id' => $membershipID, @@ -285,54 +267,16 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { Civi::log()->debug('PayPalIPN: Will attempt to compensate'); $input['membership_id'] = $this->retrieve('membershipID', 'Integer', FALSE); } - if ($contributionRecurID) { - $recurLinks = civicrm_api3('ContributionRecur', 'get', [ - 'membership_id' => $membershipID, - 'contribution_recur_id' => $contributionRecurID, - ]); - Civi::log()->debug('PayPalIPN: Membership should be linked to contribution recur record ' . $contributionRecurID - . ' ' . $recurLinks['count'] . 'links found' - ); - } - } - $contribution = new CRM_Contribute_BAO_Contribution(); - $contribution->id = $ids['contribution']; - if (!$contribution->find(TRUE)) { - throw new CRM_Core_Exception('Failure: Could not find contribution record for ' . (int) $contribution->id, NULL, ['context' => "Could not find contribution record: {$contribution->id} in IPN request: " . print_r($input, TRUE)]); - } - - // make sure contact exists and is valid - // use the contact id from the contribution record as the id in the IPN may not be valid anymore. - $contact = new CRM_Contact_BAO_Contact(); - $contact->id = $contribution->contact_id; - $contact->find(TRUE); - if ($contact->id != $ids['contact']) { - // If the ids do not match then it is possible the contact id in the IPN has been merged into another contact which is why we use the contact_id from the contribution - CRM_Core_Error::debug_log_message("Contact ID in IPN {$ids['contact']} not found but contact_id found in contribution {$contribution->contact_id} used instead"); - echo "WARNING: Could not find contact record: {$ids['contact']}<p>"; - $ids['contact'] = $contribution->contact_id; - } - - // CRM-19478: handle oddity when p=null is set in place of contribution page ID, - if (!empty($ids['contributionPage']) && !is_numeric($ids['contributionPage'])) { - // We don't need to worry if about removing contribution page id as it will be set later in - // CRM_Contribute_BAO_Contribution::loadRelatedObjects(..) using $objects['contribution']->contribution_page_id - unset($ids['contributionPage']); - } - $ids['paymentProcessor'] = $paymentProcessorID; - if (!$contribution->loadRelatedObjects($input, $ids)) { - return; } + $contribution = $this->getContribution(); $input['payment_processor_id'] = $paymentProcessorID; - if ($contributionRecurID) { + if ($this->getContributionRecurID()) { $contributionRecur = new CRM_Contribute_BAO_ContributionRecur(); - $contributionRecur->id = $contributionRecurID; + $contributionRecur->id = $this->getContributionRecurID(); if (!$contributionRecur->find(TRUE)) { - CRM_Core_Error::debug_log_message("Could not find contribution recur record: {$ids['ContributionRecur']} in IPN request: " . print_r($input, TRUE)); - echo "Failure: Could not find contribution recur record: {$ids['ContributionRecur']}<p>"; - return FALSE; + throw new CRM_Core_Exception('Could not find contribution recur record'); } // check if first contribution is completed, else complete first contribution $first = TRUE; @@ -344,7 +288,7 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { if ($this->getFirstOrLastInSeriesStatus()) { //send recurring Notification email for user CRM_Contribute_BAO_ContributionPage::recurringNotify( - $ids['contribution'], + $contributionID, $this->getFirstOrLastInSeriesStatus(), $contributionRecur ); @@ -377,13 +321,10 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { Civi::log()->debug('Returning since contribution status is not handled'); return; } - $this->single($input, [ - 'participant' => $ids['participant'] ?? NULL, - 'contributionRecur' => $contributionRecurID, - ], $contribution); + $this->single($input, $contribution); } catch (CRM_Core_Exception $e) { - Civi::log()->debug($e->getMessage()); + Civi::log()->debug($e->getMessage() . ' input {input}', ['input' => $input]); echo 'Invalid or missing data'; } } @@ -511,4 +452,56 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { return NULL; } + /** + * Get the recurring contribution ID. + * + * @return int|null + * + * @throws \CRM_Core_Exception + */ + protected function getContributionRecurID(): ?int { + $id = $this->retrieve('contributionRecurID', 'Integer', FALSE); + return $id ? (int) $id : NULL; + } + + /** + * Get Contribution ID. + * + * @return int + * + * @throws \CRM_Core_Exception + */ + protected function getContributionID(): int { + return (int) $this->retrieve('contributionID', 'Integer', TRUE); + } + + /** + * Get contact id from parameters. + * + * @return int + * + * @throws \CRM_Core_Exception + */ + protected function getContactID(): int { + return (int) $this->retrieve('contactID', 'Integer', TRUE); + } + + /** + * Get the contribution object. + * + * @return \CRM_Contribute_BAO_Contribution + * @throws \CRM_Core_Exception + */ + protected function getContribution(): CRM_Contribute_BAO_Contribution { + $contribution = new CRM_Contribute_BAO_Contribution(); + $contribution->id = $this->getContributionID(); + if (!$contribution->find(TRUE)) { + throw new CRM_Core_Exception('Failure: Could not find contribution record for ' . (int) $contribution->id, NULL, ['context' => "Could not find contribution record: {$contribution->id} in IPN request: "]); + } + if ($contribution->contact_id !== $this->getContactID()) { + CRM_Core_Error::debug_log_message("Contact ID in IPN not found but contact_id found in contribution."); + } + return $contribution; + } + } diff --git a/civicrm/CRM/Core/Payment/PayPalImpl.php b/civicrm/CRM/Core/Payment/PayPalImpl.php index e0f5f1f64b..54f59b1c7a 100644 --- a/civicrm/CRM/Core/Payment/PayPalImpl.php +++ b/civicrm/CRM/Core/Payment/PayPalImpl.php @@ -677,6 +677,11 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { if (empty($this->_paymentProcessor['user_name'])) { $error[] = ts('User Name is not set in the Administer » System Settings » Payment Processors.'); } + if ($this->isPayPalType($this::PAYPAL_STANDARD)) { + if (empty($this->_paymentProcessor['url_site'])) { + $error[] = ts('Site URL is not set (eg. https://www.paypal.com/ - https://www.sandbox.paypal.com/)'); + } + } if (!empty($error)) { return implode('<p>', $error); @@ -1059,7 +1064,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { // Allow each CMS to do a pre-flight check before redirecting to PayPal. CRM_Core_Config::singleton()->userSystem->prePostRedirect(); - CRM_Utils_System::redirect($paypalURL); } diff --git a/civicrm/CRM/Core/Payment/PayPalProIPN.php b/civicrm/CRM/Core/Payment/PayPalProIPN.php index b11df6aa8e..f8afbb1cd5 100644 --- a/civicrm/CRM/Core/Payment/PayPalProIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalProIPN.php @@ -37,6 +37,80 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { */ protected $_isPaymentExpress = FALSE; + /** + * Recurring contribution ID. + * + * @var int|null + */ + protected $contributionRecurID; + + /** + * Recurring contribution object. + * + * @var \CRM_Contribute_BAO_ContributionRecur + */ + protected $contributionRecurObject; + + /** + * Contribution object. + * + * @var \CRM_Contribute_BAO_Contribution + */ + protected $contributionObject; + /** + * Contribution ID. + * + * @var int + */ + protected $contributionID; + + /** + * Get the recurring contribution ID, if any. + * + * @return int|null + * + * @throws \CRM_Core_Exception + */ + public function getContributionRecurID(): ?int { + if (!$this->contributionRecurID && $this->getValue('r', FALSE)) { + $this->contributionRecurID = (int) $this->getValue('r', FALSE); + } + return $this->contributionRecurID; + } + + /** + * Get the relevant contribution ID. + * + * This is the contribution being paid or the original in the + * recurring series. + * + * @return int + * + * @throws \CRM_Core_Exception + */ + protected function getContributionID(): int { + if (!$this->contributionID && $this->getValue('b', TRUE)) { + $this->contributionID = (int) $this->getValue('b', TRUE); + } + return $this->contributionID; + } + + /** + * @param int|null $contributionRecurID + */ + public function setContributionRecurID(?int $contributionRecurID): void { + $this->contributionRecurID = $contributionRecurID; + } + + /** + * Set contribution ID. + * + * @param int $contributionID + */ + public function setContributionID(int $contributionID): void { + $this->contributionID = $contributionID; + } + /** * Component. * @@ -147,17 +221,16 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { * Process recurring contributions. * * @param array $input - * @param array $ids - * @param \CRM_Contribute_BAO_ContributionRecur $recur - * @param \CRM_Contribute_BAO_Contribution $contribution - * @param bool $first * * @throws \API_Exception * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception * @throws \Civi\API\Exception\UnauthorizedException */ - public function recur($input, $ids, $recur, $contribution, $first) { + public function recur(array $input): void { + // check if first contribution is completed, else complete first contribution + $first = !$this->isContributionCompleted(); + $recur = $this->getContributionRecurObject(); if (!isset($input['txnType'])) { Civi::log()->debug('PayPalProIPN: Could not find txn_type in input request.'); echo 'Failure: Invalid parameters<p>'; @@ -219,7 +292,7 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { $recur->start_date = $now; } else { - if ($input['paymentStatus'] != 'Completed') { + if ($input['paymentStatus'] !== 'Completed') { throw new CRM_Core_Exception("Ignore all IPN payments that are not completed"); } @@ -227,8 +300,8 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { // Also consider accepting 'Failed' like other processors. $input['contribution_status_id'] = $contributionStatuses['Completed']; $input['invoice_id'] = md5(uniqid(rand(), TRUE)); - $input['original_contribution_id'] = $ids['contribution']; - $input['contribution_recur_id'] = $ids['contributionRecur']; + $input['original_contribution_id'] = $this->getContributionID(); + $input['contribution_recur_id'] = $this->getContributionRecurID(); civicrm_api3('Contribution', 'repeattransaction', $input); return; @@ -259,7 +332,7 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { if ($sendNotification) { //send recurring Notification email for user CRM_Contribute_BAO_ContributionPage::recurringNotify( - $ids['contribution'], + $this->getContributionID(), $subscriptionPaymentStatus, $recur ); @@ -269,60 +342,36 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { return; } - // CRM-13737 - am not aware of any reason why payment_date would not be set - this if is a belt & braces - $contribution->receive_date = !empty($input['payment_date']) ? date('YmdHis', strtotime($input['payment_date'])) : $now; - - $this->single($input, [ - 'participant' => $ids['participant'] ?? NULL, - 'contributionRecur' => $recur->id ?? NULL, - ], $contribution, TRUE, $first); + $this->single($input); } /** * @param array $input - * @param array $ids - * @param \CRM_Contribute_BAO_Contribution $contribution - * @param bool $recur - * @param bool $first * * @return void * @throws \API_Exception * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception - * @throws \Civi\API\Exception\UnauthorizedException */ - public function single($input, $ids, $contribution, $recur = FALSE, $first = FALSE) { + protected function single(array $input): void { // make sure the invoice is valid and matches what we have in the contribution record - if ((!$recur) || ($recur && $first)) { - if ($contribution->invoice_id != $input['invoice']) { - Civi::log()->debug('PayPalProIPN: Invoice values dont match between database and IPN request.'); - echo "Failure: Invoice values dont match between database and IPN request<p>contribution is" . $contribution->invoice_id . " and input is " . $input['invoice']; - return; + if (!$this->isContributionCompleted()) { + if ($this->getContributionObject()->invoice_id !== $input['invoice']) { + throw new CRM_Core_Exception('PayPalProIPN: Invoice values dont match between database and IPN request.'); } - } - else { - $contribution->invoice_id = md5(uniqid(rand(), TRUE)); - } - - if (!$recur) { - if ($contribution->total_amount != $input['amount']) { - Civi::log()->debug('PayPalProIPN: Amount values dont match between database and IPN request.'); - echo "Failure: Amount values dont match between database and IPN request<p>"; - return; + if (!$this->getContributionRecurID() && $this->getContributionObject()->total_amount != $input['amount']) { + throw new CRM_Core_Exception('PayPalProIPN: Amount values dont match between database and IPN request.'); } } - else { - $contribution->total_amount = $input['amount']; - } $status = $input['paymentStatus']; if ($status === 'Denied' || $status === 'Failed' || $status === 'Voided') { Contribution::update(FALSE)->setValues([ 'cancel_date' => 'now', 'contribution_status_id:name' => 'Failed', - ])->addWhere('id', '=', $contribution->id)->execute(); - Civi::log()->debug("Setting contribution status to Failed"); + ])->addWhere('id', '=', $this->getContributionID())->execute(); + Civi::log()->debug('Setting contribution status to Failed'); return; } if ($status === 'Pending') { @@ -333,24 +382,22 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { Contribution::update(FALSE)->setValues([ 'cancel_date' => 'now', 'contribution_status_id:name' => 'Cancelled', - ])->addWhere('id', '=', $contribution->id)->execute(); - Civi::log()->debug("Setting contribution status to Cancelled"); + ])->addWhere('id', '=', $this->getContributionID())->execute(); + Civi::log()->debug('Setting contribution status to Cancelled'); return; } - elseif ($status !== 'Completed') { + if ($status !== 'Completed') { Civi::log()->debug('Returning since contribution status is not handled'); return; } - // check if contribution is already completed, if so we ignore this ipn - $completedStatusId = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'); - if ($contribution->contribution_status_id == $completedStatusId) { + if ($this->isContributionCompleted()) { Civi::log()->debug('PayPalProIPN: Returning since contribution has already been handled.'); echo 'Success: Contribution has already been handled<p>'; return; } - CRM_Contribute_BAO_Contribution::completeOrder($input, $ids, $contribution->id ?? NULL); + CRM_Contribute_BAO_Contribution::completeOrder($input, $this->getContributionRecurID(), $this->getContributionID()); } /** @@ -386,117 +433,39 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { * @todo the references to POST throughout this class need to be removed * @return void */ - public function main() { + public function main(): void { CRM_Core_Error::debug_var('GET', $_GET, TRUE, TRUE); CRM_Core_Error::debug_var('POST', $_POST, TRUE, TRUE); + $input = []; try { if ($this->_isPaymentExpress) { $this->handlePaymentExpress(); return; } - $ids = $input = []; - $this->_component = $input['component'] = self::getValue('m'); - $input['invoice'] = self::getValue('i', TRUE); - // get the contribution and contact ids from the GET params - $ids['contact'] = self::getValue('c', TRUE); - $ids['contribution'] = self::getValue('b', TRUE); - - $this->getInput($input); - - if ($this->_component == 'event') { - $ids['event'] = self::getValue('e', TRUE); - $ids['participant'] = self::getValue('p', TRUE); - $ids['contributionRecur'] = self::getValue('r', FALSE); - } - else { - // get the optional ids - //@ how can this not be broken retrieving from GET as we are dealing with a POST request? - // copy & paste? Note the retrieve function now uses data from _REQUEST so this will be included - $ids['membership'] = self::retrieve('membershipID', 'Integer', 'GET', FALSE); - $ids['contributionRecur'] = self::getValue('r', FALSE); - $ids['contributionPage'] = self::getValue('p', FALSE); - $ids['related_contact'] = self::retrieve('relatedContactID', 'Integer', 'GET', FALSE); - $ids['onbehalf_dupe_alert'] = self::retrieve('onBehalfDupeAlert', 'Integer', 'GET', FALSE); - } - - if (!$ids['membership'] && $ids['contributionRecur']) { - $sql = " - SELECT m.id - FROM civicrm_membership m -INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contribution_id = %1 - WHERE m.contribution_recur_id = %2 - LIMIT 1"; - $sqlParams = [ - 1 => [$ids['contribution'], 'Integer'], - 2 => [$ids['contributionRecur'], 'Integer'], - ]; - if ($membershipId = CRM_Core_DAO::singleValueQuery($sql, $sqlParams)) { - $ids['membership'] = $membershipId; - } - } - - $paymentProcessorID = CRM_Utils_Array::value('processor_id', $this->_inputParameters); - if (!$paymentProcessorID) { - $paymentProcessorID = self::getPayPalPaymentProcessorID(); - } - - // Check if the contribution exists - // make sure contribution exists and is valid - $contribution = new CRM_Contribute_BAO_Contribution(); - $contribution->id = $ids['contribution']; - if (!$contribution->find(TRUE)) { - throw new CRM_Core_Exception('Failure: Could not find contribution record for ' . (int) $contribution->id, NULL, ['context' => "Could not find contribution record: {$contribution->id} in IPN request: " . print_r($input, TRUE)]); + if ($this->getValue('m') === 'event') { + // Validate required params. + $this->getValue('e'); + $this->getValue('p'); } - - // make sure contact exists and is valid - // use the contact id from the contribution record as the id in the IPN may not be valid anymore. - $contact = new CRM_Contact_BAO_Contact(); - $contact->id = $contribution->contact_id; - $contact->find(TRUE); - if ($contact->id != $ids['contact']) { + $input['invoice'] = $this->getValue('i'); + if ($this->getContributionObject()->contact_id !== $this->getContactID()) { // If the ids do not match then it is possible the contact id in the IPN has been merged into another contact which is why we use the contact_id from the contribution - CRM_Core_Error::debug_log_message("Contact ID in IPN {$ids['contact']} not found but contact_id found in contribution {$contribution->contact_id} used instead"); - echo "WARNING: Could not find contact record: {$ids['contact']}<p>"; - $ids['contact'] = $contribution->contact_id; + CRM_Core_Error::debug_log_message('Contact ID in IPN ' . $this->getContactID() . ' not found but contact_id found in contribution ' . $this->getContributionID() . ' used instead'); + echo 'WARNING: Could not find contact record: ' . $this->getContactID() . '<p>'; } - // CRM-19478: handle oddity when p=null is set in place of contribution page ID, - if (!empty($ids['contributionPage']) && !is_numeric($ids['contributionPage'])) { - // We don't need to worry if about removing contribution page id as it will be set later in - // CRM_Contribute_BAO_Contribution::loadRelatedObjects(..) using $objects['contribution']->contribution_page_id - unset($ids['contributionPage']); - } - - $ids['paymentProcessor'] = $paymentProcessorID; - $contribution->loadRelatedObjects($input, $ids); - - $input['payment_processor_id'] = $paymentProcessorID; + $this->getInput($input); + $input['payment_processor_id'] = $this->_inputParameters['processor_id'] ?? $this->getPayPalPaymentProcessorID(); - if ($ids['contributionRecur']) { - $contributionRecur = new CRM_Contribute_BAO_ContributionRecur(); - $contributionRecur->id = $ids['contributionRecur']; - if (!$contributionRecur->find(TRUE)) { - CRM_Core_Error::debug_log_message("Could not find contribution recur record: {$ids['ContributionRecur']} in IPN request: " . print_r($input, TRUE)); - echo "Failure: Could not find contribution recur record: {$ids['ContributionRecur']}<p>"; - return; - } - // check if first contribution is completed, else complete first contribution - $first = TRUE; - $completedStatusId = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'); - if ($contribution->contribution_status_id == $completedStatusId) { - $first = FALSE; - } - $this->recur($input, $ids, $contributionRecur, $contribution, $first); + if ($this->getContributionRecurID()) { + $this->recur($input); return; } - $this->single($input, [ - 'participant' => $ids['participant'] ?? NULL, - 'contributionRecur' => $ids['contributionRecur'] ?? NULL, - ], $contribution, FALSE, FALSE); + $this->single($input); } - catch (CRM_Core_Exception $e) { - Civi::log()->debug($e->getMessage()); + catch (Exception $e) { + Civi::log()->debug($e->getMessage() . ' input {input}', ['input' => $input]); echo 'Invalid or missing data'; } } @@ -543,23 +512,20 @@ INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contr * * For one off IPNS no actual response is required * Recurring is more difficult as we have limited confirmation material - * lets look up invoice id in recur_contribution & rely on the unique transaction id to ensure no - * duplicated - * this may not be acceptable to all sites - e.g. if they are shipping or delivering something in return - * then the quasi security of the ids array might be required - although better to + * lets look up invoice id in recur_contribution & rely on the unique + * transaction id to ensure no duplicated this may not be acceptable to all + * sites - e.g. if they are shipping or delivering something in return then + * the quasi security of the ids array might be required - although better to * http://stackoverflow.com/questions/4848227/validate-that-ipn-call-is-from-paypal - * but let's assume knowledge on invoice id & schedule is enough for now esp for donations - * only contribute is handled + * but let's assume knowledge on invoice id & schedule is enough for now esp + * for donations only contribute is handled + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ - public function handlePaymentExpress() { - //@todo - loads of copy & paste / code duplication but as this not going into core need to try to - // keep discreet - // also note that a lot of the complexity above could be removed if we used - // http://stackoverflow.com/questions/4848227/validate-that-ipn-call-is-from-paypal - // as membership id etc can be derived by the load objects fn - $objects = $ids = $input = []; - $isFirst = FALSE; - $input['invoice'] = self::getValue('i', FALSE); + public function handlePaymentExpress(): void { + $input = ['invoice' => $this->getValue('i', FALSE)]; //Avoid return in case of unit test. if (empty($input['invoice']) && empty($this->_inputParameters['is_unit_test'])) { return; @@ -569,73 +535,20 @@ INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contr 'return' => 'contact_id, id, payment_processor_id', 'invoice_id' => $input['invoice'], ]); + $this->setContributionRecurID((int) $contributionRecur['id']); if ($input['txnType'] !== 'recurring_payment' && $input['txnType'] !== 'recurring_payment_profile_created') { throw new CRM_Core_Exception('Paypal IPNS not handled other than recurring_payments'); } - $this->getInput($input, $ids); + $this->getInput($input); if ($input['txnType'] === 'recurring_payment' && $this->transactionExists($input['trxn_id'])) { throw new CRM_Core_Exception('This transaction has already been processed'); } - - $ids['contact'] = $contributionRecur['contact_id']; - $ids['contributionRecur'] = $contributionRecur['id']; $result = civicrm_api3('contribution', 'getsingle', ['invoice_id' => $input['invoice'], 'contribution_test' => '']); - - $ids['contribution'] = $result['id']; - //@todo hardcoding 'pending' for now - $pendingStatusId = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'); - if ($result['contribution_status_id'] == $pendingStatusId) { - $isFirst = TRUE; - } - // arg api won't get this - fix it - $ids['contributionPage'] = CRM_Core_DAO::singleValueQuery("SELECT contribution_page_id FROM civicrm_contribution WHERE invoice_id = %1", [ - 1 => [ - $ids['contribution'], - 'Integer', - ], - ]); - // only handle component at this stage - not terribly sure how a recurring event payment would arise - // & suspec main function may be a victom of copy & paste - // membership would be an easy add - but not relevant to my customer... - $this->_component = $input['component'] = 'contribute'; - $input['trxn_date'] = date('Y-m-d H:i:s', strtotime(self::retrieve('time_created', 'String'))); - $paymentProcessorID = $contributionRecur['payment_processor_id']; - - // Check if the contribution exists - // make sure contribution exists and is valid - $contribution = new CRM_Contribute_BAO_Contribution(); - $contribution->id = $ids['contribution']; - if (!$contribution->find(TRUE)) { - throw new CRM_Core_Exception('Failure: Could not find contribution record for ' . (int) $contribution->id, NULL, ['context' => "Could not find contribution record: {$contribution->id} in IPN request: " . print_r($input, TRUE)]); - } - - if (!empty($ids['contributionRecur'])) { - $contributionRecur = new CRM_Contribute_BAO_ContributionRecur(); - $contributionRecur->id = $ids['contributionRecur']; - if (!$contributionRecur->find(TRUE)) { - CRM_Core_Error::debug_log_message("Could not find contribution recur record: {$ids['ContributionRecur']} in IPN request: " . print_r($input, TRUE)); - echo "Failure: Could not find contribution recur record: {$ids['ContributionRecur']}<p>"; - return FALSE; - } - } - - $objects['contribution'] = &$contribution; - - // CRM-19478: handle oddity when p=null is set in place of contribution page ID, - if (!empty($ids['contributionPage']) && !is_numeric($ids['contributionPage'])) { - // We don't need to worry if about removing contribution page id as it will be set later in - // CRM_Contribute_BAO_Contribution::loadRelatedObjects(..) using $objects['contribution']->contribution_page_id - unset($ids['contributionPage']); - } - - $contribution = &$objects['contribution']; - $ids['paymentProcessor'] = $paymentProcessorID; - $contribution->loadRelatedObjects($input, $ids); - $objects = array_merge($objects, $contribution->_relatedObjects); - - $this->recur($input, $ids, $objects['contributionRecur'], $objects['contribution'], $isFirst); + $this->setContributionID((int) $result['id']); + $input['trxn_date'] = date('Y-m-d H:i:s', strtotime($this->retrieve('time_created', 'String'))); + $this->recur($input); } /** @@ -653,4 +566,63 @@ INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contr } } + /** + * Get the recurring contribution object. + * + * @return \CRM_Contribute_BAO_ContributionRecur + * @throws \CRM_Core_Exception + */ + protected function getContributionRecurObject(): CRM_Contribute_BAO_ContributionRecur { + if (!$this->contributionRecurObject) { + $contributionRecur = new CRM_Contribute_BAO_ContributionRecur(); + $contributionRecur->id = $this->getContributionRecurID(); + if (!$contributionRecur->find(TRUE)) { + throw new CRM_Core_Exception('Failure: Could not find contribution recur record'); + } + return $this->contributionRecurObject = $contributionRecur; + } + return $this->contributionRecurObject; + } + + /** + * @return \CRM_Contribute_BAO_Contribution + * @throws \CRM_Core_Exception + */ + protected function getContributionObject(): CRM_Contribute_BAO_Contribution { + if (!$this->contributionObject) { + // Check if the contribution exists + // make sure contribution exists and is valid + $contribution = new CRM_Contribute_BAO_Contribution(); + $contribution->id = $this->getContributionID(); + if (!$contribution->find(TRUE)) { + throw new CRM_Core_Exception('Failure: Could not find contribution record'); + } + // The DAO types it as int but doesn't return it as int. + $contribution->contact_id = (int) $contribution->contact_id; + $this->contributionObject = $contribution; + } + return $this->contributionObject; + } + + /** + * Get the relevant contact ID. + * + * @return int + * @throws \CRM_Core_Exception + */ + protected function getContactID(): int { + return $this->getValue('c', TRUE); + } + + /** + * Is the original contribution completed. + * + * @return bool + * @throws \CRM_Core_Exception + */ + private function isContributionCompleted(): bool { + $status = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $this->getContributionObject()->contribution_status_id); + return $status === 'Completed'; + } + } diff --git a/civicrm/CRM/Core/Payment/Realex.php b/civicrm/CRM/Core/Payment/Realex.php index 03ad040db4..f82eb024df 100644 --- a/civicrm/CRM/Core/Payment/Realex.php +++ b/civicrm/CRM/Core/Payment/Realex.php @@ -54,15 +54,28 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { /** * Submit a payment using Advanced Integration Method. * - * @param array $params - * Assoc array of input parameters for this transaction. + * @param array|PropertyBag $params + * + * @param string $component * * @return array - * the result in a nice formatted array (or an error object) + * Result array (containing at least the key payment_status_id) * * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } if (!defined('CURLOPT_SSLCERT')) { throw new PaymentProcessorException(ts('RealAuth requires curl with SSL support'), 9001); @@ -176,6 +189,8 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { $params['trxn_result_code'] = serialize($extras); $params['currencyID'] = $this->_getParam('currency'); $params['fee_amount'] = 0; + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; return $params; } diff --git a/civicrm/CRM/Core/Permission.php b/civicrm/CRM/Core/Permission.php index ff27b7f9f6..17bfc79e9c 100644 --- a/civicrm/CRM/Core/Permission.php +++ b/civicrm/CRM/Core/Permission.php @@ -591,7 +591,7 @@ class CRM_Core_Permission { $permissions = self::getCoreAndComponentPermissions($all); // Add any permissions defined in hook_civicrm_permission implementations. - $module_permissions = CRM_Core_Config::singleton()->userPermissionClass->getAllModulePermissions(TRUE, $permissions); + $module_permissions = CRM_Core_Config::singleton()->userPermissionClass->getAllModulePermissions(TRUE); $permissions = array_merge($permissions, $module_permissions); if (!$descriptions) { foreach ($permissions as $name => $attr) { @@ -1136,6 +1136,8 @@ class CRM_Core_Permission { ]; $permissions['line_item'] = $permissions['contribution']; + $permissions['financial_item'] = $permissions['contribution']; + // Payment permissions $permissions['payment'] = [ 'get' => [ diff --git a/civicrm/CRM/Core/Permission/UnitTests.php b/civicrm/CRM/Core/Permission/UnitTests.php index 24879ab5a3..0143bc352d 100644 --- a/civicrm/CRM/Core/Permission/UnitTests.php +++ b/civicrm/CRM/Core/Permission/UnitTests.php @@ -43,9 +43,8 @@ class CRM_Core_Permission_UnitTests extends CRM_Core_Permission_Base { if ($str == CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION) { return TRUE; } - // return the stubbed permission (defaulting to true if the array is missing) - return is_array($this->permissions) ? in_array($str, $this->permissions) : TRUE; + return isset($this->permissions) && is_array($this->permissions) ? in_array($str, $this->permissions) : TRUE; } /** diff --git a/civicrm/CRM/Core/Reference/OptionValue.php b/civicrm/CRM/Core/Reference/OptionValue.php index 9908be044b..4641321239 100644 --- a/civicrm/CRM/Core/Reference/OptionValue.php +++ b/civicrm/CRM/Core/Reference/OptionValue.php @@ -25,7 +25,7 @@ class CRM_Core_Reference_OptionValue extends CRM_Core_Reference_Basic { * @param string $targetKey * @param null $optionGroupName */ - public function __construct($refTable, $refKey, $targetTable = NULL, $targetKey = 'id', $optionGroupName) { + public function __construct($refTable, $refKey, $targetTable, $targetKey, $optionGroupName) { parent::__construct($refTable, $refKey, $targetTable, $targetKey, NULL); $this->targetOptionGroupName = $optionGroupName; } diff --git a/civicrm/CRM/Core/Resources.php b/civicrm/CRM/Core/Resources.php index faadb5c754..0175befd74 100644 --- a/civicrm/CRM/Core/Resources.php +++ b/civicrm/CRM/Core/Resources.php @@ -420,22 +420,18 @@ class CRM_Core_Resources implements CRM_Core_Resources_CollectionAdderInterface /** * Create dynamic script for localizing js widgets. */ - public static function outputLocalizationJS() { - CRM_Core_Page_AJAX::setJsHeaders(); - $config = CRM_Core_Config::singleton(); - $vars = [ - 'moneyFormat' => json_encode(CRM_Utils_Money::format(1234.56)), - 'contactSearch' => json_encode($config->includeEmailInName ? ts('Search by name/email or id...') : ts('Search by name or id...')), + public static function renderL10nJs(GenericHookEvent $e) { + if ($e->asset !== 'crm-l10n.js') { + return; + } + $e->mimeType = 'application/javascript'; + $params = $e->params; + $params += [ + 'contactSearch' => json_encode($params['includeEmailInName'] ? ts('Search by name/email or id...') : ts('Search by name or id...')), 'otherSearch' => json_encode(ts('Enter search term or id...')), 'entityRef' => self::getEntityRefMetadata(), - 'ajaxPopupsEnabled' => self::singleton()->ajaxPopupsEnabled, - 'allowAlertAutodismissal' => (bool) Civi::settings()->get('allow_alert_autodismissal'), - 'resourceCacheCode' => self::singleton()->getCacheCode(), - 'locale' => CRM_Core_I18n::getLocale(), - 'cid' => (int) CRM_Core_Session::getLoggedInContactID(), ]; - print CRM_Core_Smarty::singleton()->fetchWith('CRM/common/l10n.js.tpl', $vars); - CRM_Utils_System::civiExit(); + $e->content = CRM_Core_Smarty::singleton()->fetchWith('CRM/common/l10n.js.tpl', $params); } /** diff --git a/civicrm/CRM/Core/Resources/Common.php b/civicrm/CRM/Core/Resources/Common.php index 13b86a233d..3966cf665d 100644 --- a/civicrm/CRM/Core/Resources/Common.php +++ b/civicrm/CRM/Core/Resources/Common.php @@ -97,7 +97,7 @@ class CRM_Core_Resources_Common { $config = CRM_Core_Config::singleton(); if (!empty($config->customCSSURL)) { $customCSSURL = Civi::resources()->addCacheCode($config->customCSSURL); - $bundle->addStyleUrl($customCSSURL, 99); + $bundle->addStyleUrl($customCSSURL, ['weight' => 99, 'name' => 'civicrm:css/custom.css']); } if (!Civi::settings()->get('disable_core_css')) { $bundle->addStyleFile('civicrm', 'css/civicrm.css', -99); @@ -176,7 +176,8 @@ class CRM_Core_Resources_Common { * @return array */ protected static function coreResourceList($region) { - $config = CRM_Core_Config::singleton(); + $settings = Civi::settings(); + $contactID = (int) CRM_Core_Session::getLoggedInContactID(); // Scripts needed by everyone, everywhere // FIXME: This is too long; list needs finer-grained segmentation @@ -204,13 +205,21 @@ class CRM_Core_Resources_Common { ]; // Dynamic localization script - $items[] = Civi::resources()->addCacheCode( - CRM_Utils_System::url('civicrm/ajax/l10n-js/' . CRM_Core_I18n::getLocale(), - ['cid' => CRM_Core_Session::getLoggedInContactID()], FALSE, NULL, FALSE) - ); + $items[] = Civi::service('asset_builder')->getUrl('crm-l10n.js', [ + 'cid' => $contactID, + 'includeEmailInName' => (bool) $settings->get('includeEmailInName'), + 'ajaxPopupsEnabled' => (bool) $settings->get('ajaxPopupsEnabled'), + 'allowAlertAutodismissal' => (bool) $settings->get('allow_alert_autodismissal'), + 'resourceCacheCode' => Civi::resources()->getCacheCode(), + 'locale' => CRM_Core_I18n::getLocale(), + 'lcMessages' => $settings->get('lcMessages'), + 'dateInputFormat' => $settings->get('dateInputFormat'), + 'timeInputFormat' => $settings->get('timeInputFormat'), + 'moneyFormat' => CRM_Utils_Money::format(1234.56), + ]); // add wysiwyg editor - $editor = Civi::settings()->get('editor_id'); + $editor = $settings->get('editor_id'); if ($editor == "CKEditor") { CRM_Admin_Form_CKEditorConfig::setConfigDefault(); $items[] = [ @@ -227,17 +236,15 @@ class CRM_Core_Resources_Common { $items[] = "packages/jquery/plugins/jquery.notify.min.js"; } - $contactID = CRM_Core_Session::getLoggedInContactID(); - // Menubar $position = 'none'; if ( - $contactID && !$config->userFrameworkFrontend + $contactID && !CRM_Core_Config::singleton()->userFrameworkFrontend && CRM_Core_Permission::check('access CiviCRM') - && !@constant('CIVICRM_DISABLE_DEFAULT_MENU') + && !CRM_Utils_Constant::value('CIVICRM_DISABLE_DEFAULT_MENU') && !CRM_Core_Config::isUpgradeMode() ) { - $position = Civi::settings()->get('menubar_position') ?: 'over-cms-menu'; + $position = $settings->get('menubar_position') ?: 'over-cms-menu'; } if ($position !== 'none') { $items[] = 'bower_components/smartmenus/dist/jquery.smartmenus.min.js'; @@ -245,7 +252,7 @@ class CRM_Core_Resources_Common { $items[] = 'js/crm.menubar.js'; // @see CRM_Core_Resources::renderMenubarStylesheet $items[] = Civi::service('asset_builder')->getUrl('crm-menubar.css', [ - 'menubarColor' => Civi::settings()->get('menubar_color'), + 'menubarColor' => $settings->get('menubar_color'), 'height' => 40, 'breakpoint' => 768, ]); @@ -260,12 +267,13 @@ class CRM_Core_Resources_Common { } // JS for multilingual installations - if (!empty($config->languageLimit) && count($config->languageLimit) > 1 && CRM_Core_Permission::check('translate CiviCRM')) { + $languageLimit = $settings->get('languageLimit'); + if (is_array($languageLimit) && count($languageLimit) > 1 && CRM_Core_Permission::check('translate CiviCRM')) { $items[] = "js/crm.multilingual.js"; } // Enable administrators to edit option lists in a dialog - if (CRM_Core_Permission::check('administer CiviCRM') && Civi::settings()->get('ajaxPopupsEnabled')) { + if (CRM_Core_Permission::check('administer CiviCRM') && $settings->get('ajaxPopupsEnabled')) { $items[] = "js/crm.optionEdit.js"; } diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index 69866466fb..327efe9069 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -587,7 +587,7 @@ class CRM_Core_SelectValues { //'{contribution.address_id}' => ts('Address ID'), '{contribution.check_number}' => ts('Check Number'), '{contribution.campaign}' => ts('Contribution Campaign'), - ], CRM_Utils_Token::getCustomFieldTokens('contribution', TRUE)); + ], CRM_Utils_Token::getCustomFieldTokens('Contribution', TRUE)); } /** diff --git a/civicrm/CRM/Core/Selector/Controller.php b/civicrm/CRM/Core/Selector/Controller.php index 0fbba210c0..533d4042a2 100644 --- a/civicrm/CRM/Core/Selector/Controller.php +++ b/civicrm/CRM/Core/Selector/Controller.php @@ -228,7 +228,7 @@ class CRM_Core_Selector_Controller { $params['rowCount'] = $storeRowCount; } elseif (!isset($params['rowCount'])) { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $this->_pager = new CRM_Utils_Pager($params); diff --git a/civicrm/CRM/Core/Session.php b/civicrm/CRM/Core/Session.php index 698b25eb9d..dcbe3a7823 100644 --- a/civicrm/CRM/Core/Session.php +++ b/civicrm/CRM/Core/Session.php @@ -563,7 +563,7 @@ class CRM_Core_Session { if (!is_numeric($session->get('userID'))) { return NULL; } - return $session->get('userID'); + return (int) $session->get('userID'); } /** diff --git a/civicrm/CRM/Core/Smarty/plugins/block.localize.php b/civicrm/CRM/Core/Smarty/plugins/block.localize.php index ebb9f08a28..2042827919 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.localize.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.localize.php @@ -31,14 +31,14 @@ * multilingualized query */ function smarty_block_localize($params, $text, &$smarty) { - if (!$smarty->_tpl_vars['multilingual']) { + if (!array_key_exists('multilingual', $smarty->_tpl_vars) || !$smarty->_tpl_vars['multilingual']) { return $text; } $lines = []; foreach ($smarty->_tpl_vars['locales'] as $locale) { $line = $text; - if ($params['field']) { + if (isset($params['field'])) { $fields = explode(',', $params['field']); foreach ($fields as $field) { $field = trim($field); diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php b/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php index 7a9a9b947d..96e6797905 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php @@ -39,5 +39,5 @@ function smarty_function_crmResURL($params, &$smarty) { if (!array_key_exists('file', $params)) { $params['file'] = NULL; } - return $res->getUrl($params['ext'], $params['file'], $params['addCacheCode']); + return $res->getUrl($params['ext'], $params['file'], $params['addCacheCode'] ?? FALSE); } diff --git a/civicrm/CRM/Core/xml/Menu/Misc.xml b/civicrm/CRM/Core/xml/Menu/Misc.xml index 762e25d445..5be55e8322 100644 --- a/civicrm/CRM/Core/xml/Menu/Misc.xml +++ b/civicrm/CRM/Core/xml/Menu/Misc.xml @@ -205,12 +205,6 @@ <access_arguments>access CiviCRM</access_arguments> <title>Confirm dates</title> </item> - <item> - <path>civicrm/ajax/l10n-js</path> - <page_callback>CRM_Core_Resources::outputLocalizationJS</page_callback> - <access_callback>1</access_callback> - <is_public>true</is_public> - </item> <item> <path>civicrm/shortcode</path> <page_callback>CRM_Core_Form_ShortCode</page_callback> diff --git a/civicrm/CRM/Custom/Form/Group.php b/civicrm/CRM/Custom/Form/Group.php index 9bf4be5e6f..ebb516f799 100644 --- a/civicrm/CRM/Custom/Form/Group.php +++ b/civicrm/CRM/Custom/Form/Group.php @@ -318,7 +318,7 @@ class CRM_Custom_Form_Group extends CRM_Core_Form { // $min_multiple = $this->add('text', 'min_multiple', ts('Minimum number of multiple records'), $attributes['min_multiple'] ); // $this->addRule('min_multiple', ts('is a numeric field') , 'numeric'); - $max_multiple = $this->add('text', 'max_multiple', ts('Maximum number of multiple records'), $attributes['max_multiple']); + $max_multiple = $this->add('number', 'max_multiple', ts('Maximum number of multiple records'), $attributes['max_multiple']); $this->addRule('max_multiple', ts('is a numeric field'), 'numeric'); //allow to edit settings if custom set is empty CRM-5258 diff --git a/civicrm/CRM/Dedupe/BAO/DedupeException.php b/civicrm/CRM/Dedupe/BAO/DedupeException.php new file mode 100644 index 0000000000..593cd301a8 --- /dev/null +++ b/civicrm/CRM/Dedupe/BAO/DedupeException.php @@ -0,0 +1,59 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * Manages dedupe exceptions - ie pairs marked as non-duplicates. + */ +class CRM_Dedupe_BAO_DedupeException extends CRM_Dedupe_DAO_DedupeException { + + /** + * Create a dedupe exception record. + * + * @param array $params + * + * @return \CRM_Dedupe_DAO_DedupeException + */ + public static function create($params) { + $hook = empty($params['id']) ? 'create' : 'edit'; + CRM_Utils_Hook::pre($hook, 'DedupeException', $params['id'] ?? NULL, $params); + // Also call hook with deprecated entity name + CRM_Utils_Hook::pre($hook, 'Exception', $params['id'] ?? NULL, $params); + $contact1 = $params['contact_id1'] ?? NULL; + $contact2 = $params['contact_id2'] ?? NULL; + $dao = new CRM_Dedupe_BAO_DedupeException(); + $dao->copyValues($params); + if ($contact1 && $contact2) { + CRM_Core_DAO::singleValueQuery(" + DELETE FROM civicrm_prevnext_cache + WHERE (entity_id1 = %1 AND entity_id2 = %2) + OR (entity_id1 = %2 AND entity_id2 = %2)", + [1 => [$contact1, 'Integer'], 2 => [$contact2, 'Integer']] + ); + if ($contact2 < $contact1) { + // These are expected to be saved lowest first. + $dao->contact_id1 = $contact2; + $dao->contact_id2 = $contact1; + } + } + $dao->save(); + CRM_Utils_Hook::post($hook, 'DedupeException', $dao->id, $dao); + // Also call hook with deprecated entity name + CRM_Utils_Hook::post($hook, 'Exception', $dao->id, $dao); + return $dao; + } + +} diff --git a/civicrm/CRM/Dedupe/BAO/DedupeRule.php b/civicrm/CRM/Dedupe/BAO/DedupeRule.php new file mode 100644 index 0000000000..9d16d3331a --- /dev/null +++ b/civicrm/CRM/Dedupe/BAO/DedupeRule.php @@ -0,0 +1,252 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * The CiviCRM duplicate discovery engine is based on an + * algorithm designed by David Strauss <david@fourkitchens.com>. + */ +class CRM_Dedupe_BAO_DedupeRule extends CRM_Dedupe_DAO_DedupeRule { + + /** + * Ids of the contacts to limit the SQL queries (whole-database queries otherwise) + * @var array + */ + public $contactIds = []; + + /** + * Params to dedupe against (queries against the whole contact set otherwise) + * @var array + */ + public $params = []; + + /** + * Return the SQL query for the given rule - either for finding matching + * pairs of contacts, or for matching against the $params variable (if set). + * + * @return string + * SQL query performing the search + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public function sql() { + if ($this->params && + (!array_key_exists($this->rule_table, $this->params) || + !array_key_exists($this->rule_field, $this->params[$this->rule_table]) + ) + ) { + // if params is present and doesn't have an entry for a field, don't construct the clause. + return NULL; + } + + // we need to initialise WHERE, ON and USING here, as some table types + // extend them; $where is an array of required conditions, $on and + // $using are arrays of required field matchings (for substring and + // full matches, respectively) + $where = []; + $on = ["SUBSTR(t1.{$this->rule_field}, 1, {$this->rule_length}) = SUBSTR(t2.{$this->rule_field}, 1, {$this->rule_length})"]; + + $innerJoinClauses = [ + "t1.{$this->rule_field} IS NOT NULL", + "t2.{$this->rule_field} IS NOT NULL", + "t1.{$this->rule_field} = t2.{$this->rule_field}", + ]; + + if (in_array($this->getFieldType($this->rule_field), CRM_Utils_Type::getTextTypes(), TRUE)) { + $innerJoinClauses[] = "t1.{$this->rule_field} <> ''"; + $innerJoinClauses[] = "t2.{$this->rule_field} <> ''"; + } + + switch ($this->rule_table) { + case 'civicrm_contact': + $id = 'id'; + //we should restrict by contact type in the first step + $sql = "SELECT contact_type FROM civicrm_dedupe_rule_group WHERE id = {$this->dedupe_rule_group_id};"; + $ct = CRM_Core_DAO::singleValueQuery($sql); + if ($this->params) { + $where[] = "t1.contact_type = '{$ct}'"; + } + else { + $where[] = "t1.contact_type = '{$ct}'"; + $where[] = "t2.contact_type = '{$ct}'"; + } + break; + + case 'civicrm_address': + case 'civicrm_email': + case 'civicrm_im': + case 'civicrm_openid': + case 'civicrm_phone': + $id = 'contact_id'; + break; + + case 'civicrm_note': + $id = 'entity_id'; + if ($this->params) { + $where[] = "t1.entity_table = 'civicrm_contact'"; + } + else { + $where[] = "t1.entity_table = 'civicrm_contact'"; + $where[] = "t2.entity_table = 'civicrm_contact'"; + } + break; + + default: + // custom data tables + if (preg_match('/^civicrm_value_/', $this->rule_table) || preg_match('/^custom_value_/', $this->rule_table)) { + $id = 'entity_id'; + } + else { + throw new CRM_Core_Exception("Unsupported rule_table for civicrm_dedupe_rule.id of {$this->id}"); + } + break; + } + + // build SELECT based on the field names containing contact ids + // if there are params provided, id1 should be 0 + if ($this->params) { + $select = "t1.$id id1, {$this->rule_weight} weight"; + $subSelect = 'id1, weight'; + } + else { + $select = "t1.$id id1, t2.$id id2, {$this->rule_weight} weight"; + $subSelect = 'id1, id2, weight'; + } + + // build FROM (and WHERE, if it's a parametrised search) + // based on whether the rule is about substrings or not + if ($this->params) { + $from = "{$this->rule_table} t1"; + $str = 'NULL'; + if (isset($this->params[$this->rule_table][$this->rule_field])) { + $str = trim(CRM_Utils_Type::escape($this->params[$this->rule_table][$this->rule_field], 'String')); + } + if ($this->rule_length) { + $where[] = "SUBSTR(t1.{$this->rule_field}, 1, {$this->rule_length}) = SUBSTR('$str', 1, {$this->rule_length})"; + $where[] = "t1.{$this->rule_field} IS NOT NULL"; + } + else { + $where[] = "t1.{$this->rule_field} = '$str'"; + } + } + else { + if ($this->rule_length) { + $from = "{$this->rule_table} t1 JOIN {$this->rule_table} t2 ON (" . implode(' AND ', $on) . ")"; + } + else { + $from = "{$this->rule_table} t1 INNER JOIN {$this->rule_table} t2 ON (" . implode(' AND ', $innerJoinClauses) . ")"; + } + } + + // finish building WHERE, also limit the results if requested + if (!$this->params) { + $where[] = "t1.$id < t2.$id"; + } + $query = "SELECT $select FROM $from WHERE " . implode(' AND ', $where); + if ($this->contactIds) { + $cids = []; + foreach ($this->contactIds as $cid) { + $cids[] = CRM_Utils_Type::escape($cid, 'Integer'); + } + if (count($cids) == 1) { + $query .= " AND (t1.$id = {$cids[0]}) UNION $query AND t2.$id = {$cids[0]}"; + } + else { + $query .= " AND t1.$id IN (" . implode(',', $cids) . ") + UNION $query AND t2.$id IN (" . implode(',', $cids) . ")"; + } + // The `weight` is ambiguous in the context of the union; put the whole + // thing in a subquery. + $query = "SELECT $subSelect FROM ($query) subunion"; + } + + return $query; + } + + /** + * find fields related to a rule group. + * + * @param array $params contains the rule group property to identify rule group + * + * @return array + * rule fields array associated to rule group + */ + public static function dedupeRuleFields($params) { + $rgBao = new CRM_Dedupe_BAO_DedupeRuleGroup(); + $rgBao->used = $params['used']; + $rgBao->contact_type = $params['contact_type']; + $rgBao->find(TRUE); + + $ruleBao = new CRM_Dedupe_BAO_DedupeRule(); + $ruleBao->dedupe_rule_group_id = $rgBao->id; + $ruleBao->find(); + $ruleFields = []; + while ($ruleBao->fetch()) { + $field_name = $ruleBao->rule_field; + if ($field_name == 'phone_numeric') { + $field_name = 'phone'; + } + $ruleFields[] = $field_name; + } + return $ruleFields; + } + + /** + * @param int $cid + * @param int $oid + * + * @return bool + */ + public static function validateContacts($cid, $oid) { + if (!$cid || !$oid) { + return NULL; + } + $exception = new CRM_Dedupe_DAO_DedupeException(); + $exception->contact_id1 = $cid; + $exception->contact_id2 = $oid; + //make sure contact2 > contact1. + if ($cid > $oid) { + $exception->contact_id1 = $oid; + $exception->contact_id2 = $cid; + } + + return !$exception->find(TRUE); + } + + /** + * Get the specification for the given field. + * + * @param string $fieldName + * + * @return array + * @throws \CiviCRM_API3_Exception + */ + public function getFieldType($fieldName) { + $entity = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($this->rule_table)); + if (!$entity) { + // This means we have stored a custom field rather than an entity name in rule_table, figure out the entity. + $entity = civicrm_api3('CustomGroup', 'getvalue', ['table_name' => $this->rule_table, 'return' => 'extends']); + if (in_array($entity, ['Individual', 'Household', 'Organization'])) { + $entity = 'Contact'; + } + $fieldName = 'custom_' . civicrm_api3('CustomField', 'getvalue', ['column_name' => $fieldName, 'return' => 'id']); + } + $fields = civicrm_api3($entity, 'getfields', ['action' => 'create'])['values']; + return $fields[$fieldName]['type']; + } + +} diff --git a/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php b/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php new file mode 100644 index 0000000000..5c95f9fabe --- /dev/null +++ b/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php @@ -0,0 +1,517 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * The CiviCRM duplicate discovery engine is based on an + * algorithm designed by David Strauss <david@fourkitchens.com>. + */ +class CRM_Dedupe_BAO_DedupeRuleGroup extends CRM_Dedupe_DAO_DedupeRuleGroup { + + /** + * Ids of the contacts to limit the SQL queries (whole-database queries otherwise) + * @var array + */ + public $contactIds = []; + + /** + * Set the contact IDs to restrict the dedupe to. + * + * @param array $contactIds + */ + public function setContactIds($contactIds) { + $this->contactIds = $contactIds; + } + + /** + * Params to dedupe against (queries against the whole contact set otherwise) + * @var array + */ + public $params = []; + + /** + * If there are no rules in rule group. + * @var bool + */ + public $noRules = FALSE; + + protected $temporaryTables = []; + + /** + * Return a structure holding the supported tables, fields and their titles + * + * @param string $requestedType + * The requested contact type. + * + * @return array + * a table-keyed array of field-keyed arrays holding supported fields' titles + */ + public static function supportedFields($requestedType) { + static $fields = NULL; + if (!$fields) { + // this is needed, as we're piggy-backing importableFields() below + $replacements = [ + 'civicrm_country.name' => 'civicrm_address.country_id', + 'civicrm_county.name' => 'civicrm_address.county_id', + 'civicrm_state_province.name' => 'civicrm_address.state_province_id', + 'gender.label' => 'civicrm_contact.gender_id', + 'individual_prefix.label' => 'civicrm_contact.prefix_id', + 'individual_suffix.label' => 'civicrm_contact.suffix_id', + 'addressee.label' => 'civicrm_contact.addressee_id', + 'email_greeting.label' => 'civicrm_contact.email_greeting_id', + 'postal_greeting.label' => 'civicrm_contact.postal_greeting_id', + 'civicrm_phone.phone' => 'civicrm_phone.phone_numeric', + ]; + // the table names we support in dedupe rules - a filter for importableFields() + $supportedTables = [ + 'civicrm_address', + 'civicrm_contact', + 'civicrm_email', + 'civicrm_im', + 'civicrm_note', + 'civicrm_openid', + 'civicrm_phone', + ]; + + foreach (['Individual', 'Organization', 'Household'] as $ctype) { + // take the table.field pairs and their titles from importableFields() if the table is supported + foreach (CRM_Contact_BAO_Contact::importableFields($ctype) as $iField) { + if (isset($iField['where'])) { + $where = $iField['where']; + if (isset($replacements[$where])) { + $where = $replacements[$where]; + } + list($table, $field) = explode('.', $where); + if (!in_array($table, $supportedTables)) { + continue; + } + $fields[$ctype][$table][$field] = $iField['title']; + } + } + // Note that most of the fields available come from 'importable fields' - + // I thought about making this field 'importable' but it felt like there might be unknown consequences + // so I opted for just adding it in & securing it with a unit test. + /// Example usage of sort_name - It is possible to alter sort name via hook so 2 organization names might differ as in + // Justice League vs The Justice League but these could have the same sort_name if 'the the' + // exension is installed (https://github.com/eileenmcnaughton/org.wikimedia.thethe) + $fields[$ctype]['civicrm_contact']['sort_name'] = ts('Sort Name'); + // add custom data fields + foreach (CRM_Core_BAO_CustomGroup::getTree($ctype, NULL, NULL, -1) as $key => $cg) { + if (!is_int($key)) { + continue; + } + foreach ($cg['fields'] as $cf) { + $fields[$ctype][$cg['table_name']][$cf['column_name']] = $cf['label']; + } + } + } + } + CRM_Utils_Hook::dupeQuery(CRM_Core_DAO::$_nullObject, 'supportedFields', $fields); + return !empty($fields[$requestedType]) ? $fields[$requestedType] : []; + } + + /** + * Return the SQL query for dropping the temporary table. + */ + public function tableDropQuery() { + return 'DROP TEMPORARY TABLE IF EXISTS dedupe'; + } + + /** + * Return a set of SQL queries whose cummulative weights will mark matched + * records for the RuleGroup::threasholdQuery() to retrieve. + */ + public function tableQuery() { + // make sure we've got a fetched dbrecord, not sure if this is enforced + if (!$this->name == NULL || $this->is_reserved == NULL) { + $this->find(TRUE); + } + + // Reserved Rule Groups can optionally get special treatment by + // implementing an optimization class and returning a query array. + if ($this->is_reserved && + CRM_Utils_File::isIncludable("CRM/Dedupe/BAO/QueryBuilder/{$this->name}.php") + ) { + $command = empty($this->params) ? 'internal' : 'record'; + $queries = call_user_func(["CRM_Dedupe_BAO_QueryBuilder_{$this->name}", $command], $this); + } + else { + // All other rule groups have queries generated by the member dedupe + // rules defined in the administrative interface. + + // Find all rules contained by this script sorted by weight so that + // their execution can be short circuited on RuleGroup::fillTable() + $bao = new CRM_Dedupe_BAO_DedupeRule(); + $bao->dedupe_rule_group_id = $this->id; + $bao->orderBy('rule_weight DESC'); + $bao->find(); + + // Generate a SQL query for each rule in the rule group that is + // tailored to respect the param and contactId options provided. + $queries = []; + while ($bao->fetch()) { + $bao->contactIds = $this->contactIds; + $bao->params = $this->params; + + // Skipping empty rules? Empty rules shouldn't exist; why check? + if ($query = $bao->sql()) { + $queries["{$bao->rule_table}.{$bao->rule_field}.{$bao->rule_weight}"] = $query; + } + } + } + + // if there are no rules in this rule group + // add an empty query fulfilling the pattern + if (!$queries) { + $this->noRules = TRUE; + return []; + } + + return $queries; + } + + public function fillTable() { + // get the list of queries handy + $tableQueries = $this->tableQuery(); + + if ($this->params && !$this->noRules) { + $this->temporaryTables['dedupe'] = CRM_Utils_SQL_TempTable::build() + ->setCategory('dedupe') + ->createWithColumns("id1 int, weight int, UNIQUE UI_id1 (id1)")->getName(); + $dedupeCopyTemporaryTableObject = CRM_Utils_SQL_TempTable::build() + ->setCategory('dedupe'); + $this->temporaryTables['dedupe_copy'] = $dedupeCopyTemporaryTableObject->getName(); + $insertClause = "INSERT INTO {$this->temporaryTables['dedupe']} (id1, weight)"; + $groupByClause = "GROUP BY id1, weight"; + $dupeCopyJoin = " JOIN {$this->temporaryTables['dedupe_copy']} ON {$this->temporaryTables['dedupe_copy']}.id1 = t1.column WHERE "; + } + else { + $this->temporaryTables['dedupe'] = CRM_Utils_SQL_TempTable::build() + ->setCategory('dedupe') + ->createWithColumns("id1 int, id2 int, weight int, UNIQUE UI_id1_id2 (id1, id2)")->getName(); + $dedupeCopyTemporaryTableObject = CRM_Utils_SQL_TempTable::build() + ->setCategory('dedupe'); + $this->temporaryTables['dedupe_copy'] = $dedupeCopyTemporaryTableObject->getName(); + $insertClause = "INSERT INTO {$this->temporaryTables['dedupe']} (id1, id2, weight)"; + $groupByClause = "GROUP BY id1, id2, weight"; + $dupeCopyJoin = " JOIN {$this->temporaryTables['dedupe_copy']} ON {$this->temporaryTables['dedupe_copy']}.id1 = t1.column AND {$this->temporaryTables['dedupe_copy']}.id2 = t2.column WHERE "; + } + $patternColumn = '/t1.(\w+)/'; + $exclWeightSum = []; + + CRM_Utils_Hook::dupeQuery($this, 'table', $tableQueries); + + while (!empty($tableQueries)) { + list($isInclusive, $isDie) = self::isQuerySetInclusive($tableQueries, $this->threshold, $exclWeightSum); + + if ($isInclusive) { + // order queries by table count + self::orderByTableCount($tableQueries); + + $weightSum = array_sum($exclWeightSum); + $searchWithinDupes = !empty($exclWeightSum) ? 1 : 0; + + while (!empty($tableQueries)) { + // extract the next query ( and weight ) to be executed + $fieldWeight = array_keys($tableQueries); + $fieldWeight = $fieldWeight[0]; + $query = array_shift($tableQueries); + + if ($searchWithinDupes) { + // drop dedupe_copy table just in case if its already there. + $dedupeCopyTemporaryTableObject->drop(); + // get prepared to search within already found dupes if $searchWithinDupes flag is set + $dedupeCopyTemporaryTableObject->createWithQuery("SELECT * FROM {$this->temporaryTables['dedupe']} WHERE weight >= {$weightSum}"); + + preg_match($patternColumn, $query, $matches); + $query = str_replace(' WHERE ', str_replace('column', $matches[1], $dupeCopyJoin), $query); + + // CRM-19612: If there's a union, there will be two WHEREs, and you + // can't use the temp table twice. + if (preg_match('/' . $this->temporaryTables['dedupe_copy'] . '[\S\s]*(union)[\S\s]*' . $this->temporaryTables['dedupe_copy'] . '/i', $query, $matches, PREG_OFFSET_CAPTURE)) { + // Make a second temp table: + $this->temporaryTables['dedupe_copy_2'] = CRM_Utils_SQL_TempTable::build() + ->setCategory('dedupe') + ->createWithQuery("SELECT * FROM {$this->temporaryTables['dedupe']} WHERE weight >= {$weightSum}") + ->getName(); + // After the union, use that new temp table: + $part1 = substr($query, 0, $matches[1][1]); + $query = $part1 . str_replace($this->temporaryTables['dedupe_copy'], $this->temporaryTables['dedupe_copy_2'], substr($query, $matches[1][1])); + } + } + $searchWithinDupes = 1; + + // construct and execute the intermediate query + $query = "{$insertClause} {$query} {$groupByClause} ON DUPLICATE KEY UPDATE weight = weight + VALUES(weight)"; + $dao = CRM_Core_DAO::executeQuery($query); + + // FIXME: we need to be more acurate with affected rows, especially for insert vs duplicate insert. + // And that will help optimize further. + $affectedRows = $dao->affectedRows(); + + // In an inclusive situation, failure of any query means no further processing - + if ($affectedRows == 0) { + // reset to make sure no further execution is done. + $tableQueries = []; + break; + } + $weightSum = substr($fieldWeight, strrpos($fieldWeight, '.') + 1) + $weightSum; + } + // An exclusive situation - + } + elseif (!$isDie) { + // since queries are already sorted by weights, we can continue as is + $fieldWeight = array_keys($tableQueries); + $fieldWeight = $fieldWeight[0]; + $query = array_shift($tableQueries); + $query = "{$insertClause} {$query} {$groupByClause} ON DUPLICATE KEY UPDATE weight = weight + VALUES(weight)"; + $dao = CRM_Core_DAO::executeQuery($query); + if ($dao->affectedRows() >= 1) { + $exclWeightSum[] = substr($fieldWeight, strrpos($fieldWeight, '.') + 1); + } + } + else { + // its a die situation + break; + } + } + } + + /** + * Function to determine if a given query set contains inclusive or exclusive set of weights. + * The function assumes that the query set is already ordered by weight in desc order. + * @param $tableQueries + * @param $threshold + * @param array $exclWeightSum + * + * @return array + */ + public static function isQuerySetInclusive($tableQueries, $threshold, $exclWeightSum = []) { + $input = []; + foreach ($tableQueries as $key => $query) { + $input[] = substr($key, strrpos($key, '.') + 1); + } + + if (!empty($exclWeightSum)) { + $input = array_merge($input, $exclWeightSum); + rsort($input); + } + + if (count($input) == 1) { + return [FALSE, $input[0] < $threshold]; + } + + $totalCombinations = 0; + for ($i = 0; $i < count($input); $i++) { + $combination = [$input[$i]]; + if (array_sum($combination) >= $threshold) { + $totalCombinations++; + continue; + } + for ($j = $i + 1; $j < count($input); $j++) { + $combination[] = $input[$j]; + if (array_sum($combination) >= $threshold) { + $totalCombinations++; + } + } + } + return [$totalCombinations == 1, $totalCombinations <= 0]; + } + + /** + * sort queries by number of records for the table associated with them. + * @param $tableQueries + */ + public static function orderByTableCount(&$tableQueries) { + static $tableCount = []; + + $tempArray = []; + foreach ($tableQueries as $key => $query) { + $table = explode(".", $key); + $table = $table[0]; + if (!array_key_exists($table, $tableCount)) { + $query = "SELECT COUNT(*) FROM {$table}"; + $tableCount[$table] = CRM_Core_DAO::singleValueQuery($query); + } + $tempArray[$key] = $tableCount[$table]; + } + + asort($tempArray); + foreach ($tempArray as $key => $count) { + $tempArray[$key] = $tableQueries[$key]; + } + $tableQueries = $tempArray; + } + + /** + * Return the SQL query for getting only the interesting results out of the dedupe table. + * + * @$checkPermission boolean $params a flag to indicate if permission should be considered. + * default is to always check permissioning but public pages for example might not want + * permission to be checked for anonymous users. Refer CRM-6211. We might be beaking + * Multi-Site dedupe for public pages. + * + * @param bool $checkPermission + * + * @return string + */ + public function thresholdQuery($checkPermission = TRUE) { + $this->_aclFrom = ''; + $aclWhere = ''; + + if ($this->params && !$this->noRules) { + if ($checkPermission) { + list($this->_aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause('civicrm_contact'); + $aclWhere = $aclWhere ? "AND {$aclWhere}" : ''; + } + $query = "SELECT {$this->temporaryTables['dedupe']}.id1 as id + FROM {$this->temporaryTables['dedupe']} JOIN civicrm_contact ON {$this->temporaryTables['dedupe']}.id1 = civicrm_contact.id {$this->_aclFrom} + WHERE contact_type = '{$this->contact_type}' AND is_deleted = 0 $aclWhere + AND weight >= {$this->threshold}"; + } + else { + $aclWhere = ''; + if ($checkPermission) { + list($this->_aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause(['c1', 'c2']); + $aclWhere = $aclWhere ? "AND {$aclWhere}" : ''; + } + $query = "SELECT IF({$this->temporaryTables['dedupe']}.id1 < {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id1, {$this->temporaryTables['dedupe']}.id2) as id1, + IF({$this->temporaryTables['dedupe']}.id1 < {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id1) as id2, {$this->temporaryTables['dedupe']}.weight + FROM {$this->temporaryTables['dedupe']} JOIN civicrm_contact c1 ON {$this->temporaryTables['dedupe']}.id1 = c1.id + JOIN civicrm_contact c2 ON {$this->temporaryTables['dedupe']}.id2 = c2.id {$this->_aclFrom} + LEFT JOIN civicrm_dedupe_exception exc ON {$this->temporaryTables['dedupe']}.id1 = exc.contact_id1 AND {$this->temporaryTables['dedupe']}.id2 = exc.contact_id2 + WHERE c1.contact_type = '{$this->contact_type}' AND + c2.contact_type = '{$this->contact_type}' + AND c1.is_deleted = 0 AND c2.is_deleted = 0 + {$aclWhere} + AND weight >= {$this->threshold} AND exc.contact_id1 IS NULL"; + } + + CRM_Utils_Hook::dupeQuery($this, 'threshold', $query); + return $query; + } + + /** + * find fields related to a rule group. + * + * @param array $params + * + * @return array + * (rule field => weight) array and threshold associated to rule group + */ + public static function dedupeRuleFieldsWeight($params) { + $rgBao = new CRM_Dedupe_BAO_DedupeRuleGroup(); + $rgBao->contact_type = $params['contact_type']; + if (!empty($params['id'])) { + // accept an ID if provided + $rgBao->id = $params['id']; + } + else { + $rgBao->used = $params['used']; + } + $rgBao->find(TRUE); + + $ruleBao = new CRM_Dedupe_BAO_DedupeRule(); + $ruleBao->dedupe_rule_group_id = $rgBao->id; + $ruleBao->find(); + $ruleFields = []; + while ($ruleBao->fetch()) { + $field_name = $ruleBao->rule_field; + if ($field_name == 'phone_numeric') { + $field_name = 'phone'; + } + $ruleFields[$field_name] = $ruleBao->rule_weight; + } + + return [$ruleFields, $rgBao->threshold]; + } + + /** + * Get all of the combinations of fields that would work with a rule. + * + * @param array $rgFields + * @param int $threshold + * @param array $combos + * @param array $running + */ + public static function combos($rgFields, $threshold, &$combos, $running = []) { + foreach ($rgFields as $rgField => $weight) { + unset($rgFields[$rgField]); + $diff = $threshold - $weight; + $runningnow = $running; + $runningnow[] = $rgField; + if ($diff > 0) { + self::combos($rgFields, $diff, $combos, $runningnow); + } + else { + $combos[] = $runningnow; + } + } + } + + /** + * Get an array of rule group id to rule group name + * for all th groups for that contactType. If contactType + * not specified, do it for all + * + * @param string $contactType + * Individual, Household or Organization. + * + * + * @return array + * id => "nice name" of rule group + */ + public static function getByType($contactType = NULL) { + $dao = new CRM_Dedupe_DAO_DedupeRuleGroup(); + + if ($contactType) { + $dao->contact_type = $contactType; + } + + $dao->find(); + $result = []; + while ($dao->fetch()) { + $title = !empty($dao->title) ? $dao->title : (!empty($dao->name) ? $dao->name : $dao->contact_type); + + $name = "$title - {$dao->used}"; + $result[$dao->id] = $name; + } + return $result; + } + + /** + * Get the cached contact type for a particular rule group. + * + * @param int $rule_group_id + * + * @return string + */ + public static function getContactTypeForRuleGroup($rule_group_id) { + if (!isset(\Civi::$statics[__CLASS__]) || !isset(\Civi::$statics[__CLASS__]['rule_groups'])) { + \Civi::$statics[__CLASS__]['rule_groups'] = []; + } + if (empty(\Civi::$statics[__CLASS__]['rule_groups'][$rule_group_id])) { + \Civi::$statics[__CLASS__]['rule_groups'][$rule_group_id]['contact_type'] = CRM_Core_DAO::getFieldValue( + 'CRM_Dedupe_DAO_DedupeRuleGroup', + $rule_group_id, + 'contact_type' + ); + } + + return \Civi::$statics[__CLASS__]['rule_groups'][$rule_group_id]['contact_type']; + } + +} diff --git a/civicrm/CRM/Dedupe/BAO/Exception.php b/civicrm/CRM/Dedupe/BAO/Exception.php index 6097887055..e3777e7fe6 100644 --- a/civicrm/CRM/Dedupe/BAO/Exception.php +++ b/civicrm/CRM/Dedupe/BAO/Exception.php @@ -18,39 +18,4 @@ /** * Manages dedupe exceptions - ie pairs marked as non-duplicates. */ -class CRM_Dedupe_BAO_Exception extends CRM_Dedupe_DAO_Exception { - - /** - * Create a dedupe exception record. - * - * @param array $params - * - * @return \CRM_Dedupe_BAO_Exception - */ - public static function create($params) { - $hook = empty($params['id']) ? 'create' : 'edit'; - CRM_Utils_Hook::pre($hook, 'Exception', CRM_Utils_Array::value('id', $params), $params); - $contact1 = $params['contact_id1'] ?? NULL; - $contact2 = $params['contact_id2'] ?? NULL; - $dao = new CRM_Dedupe_BAO_Exception(); - $dao->copyValues($params); - if ($contact1 && $contact2) { - CRM_Core_DAO::singleValueQuery(" - DELETE FROM civicrm_prevnext_cache - WHERE (entity_id1 = %1 AND entity_id2 = %2) - OR (entity_id1 = %2 AND entity_id2 = %2)", - [1 => [$contact1, 'Integer'], 2 => [$contact2, 'Integer']] - ); - if ($contact2 < $contact1) { - // These are expected to be saved lowest first. - $dao->contact_id1 = $contact2; - $dao->contact_id2 = $contact1; - } - } - $dao->save(); - - CRM_Utils_Hook::post($hook, 'Exception', $dao->id, $dao); - return $dao; - } - -} +class CRM_Dedupe_BAO_Exception extends CRM_Dedupe_BAO_DedupeException {} diff --git a/civicrm/CRM/Dedupe/BAO/Rule.php b/civicrm/CRM/Dedupe/BAO/Rule.php index 6b7f63be7b..0e4d31f948 100644 --- a/civicrm/CRM/Dedupe/BAO/Rule.php +++ b/civicrm/CRM/Dedupe/BAO/Rule.php @@ -19,234 +19,4 @@ * The CiviCRM duplicate discovery engine is based on an * algorithm designed by David Strauss <david@fourkitchens.com>. */ -class CRM_Dedupe_BAO_Rule extends CRM_Dedupe_DAO_Rule { - - /** - * Ids of the contacts to limit the SQL queries (whole-database queries otherwise) - * @var array - */ - public $contactIds = []; - - /** - * Params to dedupe against (queries against the whole contact set otherwise) - * @var array - */ - public $params = []; - - /** - * Return the SQL query for the given rule - either for finding matching - * pairs of contacts, or for matching against the $params variable (if set). - * - * @return string - * SQL query performing the search - * - * @throws \CRM_Core_Exception - * @throws \CiviCRM_API3_Exception - */ - public function sql() { - if ($this->params && - (!array_key_exists($this->rule_table, $this->params) || - !array_key_exists($this->rule_field, $this->params[$this->rule_table]) - ) - ) { - // if params is present and doesn't have an entry for a field, don't construct the clause. - return NULL; - } - - // we need to initialise WHERE, ON and USING here, as some table types - // extend them; $where is an array of required conditions, $on and - // $using are arrays of required field matchings (for substring and - // full matches, respectively) - $where = []; - $on = ["SUBSTR(t1.{$this->rule_field}, 1, {$this->rule_length}) = SUBSTR(t2.{$this->rule_field}, 1, {$this->rule_length})"]; - - $innerJoinClauses = [ - "t1.{$this->rule_field} IS NOT NULL", - "t2.{$this->rule_field} IS NOT NULL", - "t1.{$this->rule_field} = t2.{$this->rule_field}", - ]; - - if (in_array($this->getFieldType($this->rule_field), CRM_Utils_Type::getTextTypes(), TRUE)) { - $innerJoinClauses[] = "t1.{$this->rule_field} <> ''"; - $innerJoinClauses[] = "t2.{$this->rule_field} <> ''"; - } - - switch ($this->rule_table) { - case 'civicrm_contact': - $id = 'id'; - //we should restrict by contact type in the first step - $sql = "SELECT contact_type FROM civicrm_dedupe_rule_group WHERE id = {$this->dedupe_rule_group_id};"; - $ct = CRM_Core_DAO::singleValueQuery($sql); - if ($this->params) { - $where[] = "t1.contact_type = '{$ct}'"; - } - else { - $where[] = "t1.contact_type = '{$ct}'"; - $where[] = "t2.contact_type = '{$ct}'"; - } - break; - - case 'civicrm_address': - case 'civicrm_email': - case 'civicrm_im': - case 'civicrm_openid': - case 'civicrm_phone': - $id = 'contact_id'; - break; - - case 'civicrm_note': - $id = 'entity_id'; - if ($this->params) { - $where[] = "t1.entity_table = 'civicrm_contact'"; - } - else { - $where[] = "t1.entity_table = 'civicrm_contact'"; - $where[] = "t2.entity_table = 'civicrm_contact'"; - } - break; - - default: - // custom data tables - if (preg_match('/^civicrm_value_/', $this->rule_table) || preg_match('/^custom_value_/', $this->rule_table)) { - $id = 'entity_id'; - } - else { - throw new CRM_Core_Exception("Unsupported rule_table for civicrm_dedupe_rule.id of {$this->id}"); - } - break; - } - - // build SELECT based on the field names containing contact ids - // if there are params provided, id1 should be 0 - if ($this->params) { - $select = "t1.$id id1, {$this->rule_weight} weight"; - $subSelect = 'id1, weight'; - } - else { - $select = "t1.$id id1, t2.$id id2, {$this->rule_weight} weight"; - $subSelect = 'id1, id2, weight'; - } - - // build FROM (and WHERE, if it's a parametrised search) - // based on whether the rule is about substrings or not - if ($this->params) { - $from = "{$this->rule_table} t1"; - $str = 'NULL'; - if (isset($this->params[$this->rule_table][$this->rule_field])) { - $str = trim(CRM_Utils_Type::escape($this->params[$this->rule_table][$this->rule_field], 'String')); - } - if ($this->rule_length) { - $where[] = "SUBSTR(t1.{$this->rule_field}, 1, {$this->rule_length}) = SUBSTR('$str', 1, {$this->rule_length})"; - $where[] = "t1.{$this->rule_field} IS NOT NULL"; - } - else { - $where[] = "t1.{$this->rule_field} = '$str'"; - } - } - else { - if ($this->rule_length) { - $from = "{$this->rule_table} t1 JOIN {$this->rule_table} t2 ON (" . implode(' AND ', $on) . ")"; - } - else { - $from = "{$this->rule_table} t1 INNER JOIN {$this->rule_table} t2 ON (" . implode(' AND ', $innerJoinClauses) . ")"; - } - } - - // finish building WHERE, also limit the results if requested - if (!$this->params) { - $where[] = "t1.$id < t2.$id"; - } - $query = "SELECT $select FROM $from WHERE " . implode(' AND ', $where); - if ($this->contactIds) { - $cids = []; - foreach ($this->contactIds as $cid) { - $cids[] = CRM_Utils_Type::escape($cid, 'Integer'); - } - if (count($cids) == 1) { - $query .= " AND (t1.$id = {$cids[0]}) UNION $query AND t2.$id = {$cids[0]}"; - } - else { - $query .= " AND t1.$id IN (" . implode(',', $cids) . ") - UNION $query AND t2.$id IN (" . implode(',', $cids) . ")"; - } - // The `weight` is ambiguous in the context of the union; put the whole - // thing in a subquery. - $query = "SELECT $subSelect FROM ($query) subunion"; - } - - return $query; - } - - /** - * find fields related to a rule group. - * - * @param array $params contains the rule group property to identify rule group - * - * @return array - * rule fields array associated to rule group - */ - public static function dedupeRuleFields($params) { - $rgBao = new CRM_Dedupe_BAO_RuleGroup(); - $rgBao->used = $params['used']; - $rgBao->contact_type = $params['contact_type']; - $rgBao->find(TRUE); - - $ruleBao = new CRM_Dedupe_BAO_Rule(); - $ruleBao->dedupe_rule_group_id = $rgBao->id; - $ruleBao->find(); - $ruleFields = []; - while ($ruleBao->fetch()) { - $field_name = $ruleBao->rule_field; - if ($field_name == 'phone_numeric') { - $field_name = 'phone'; - } - $ruleFields[] = $field_name; - } - return $ruleFields; - } - - /** - * @param int $cid - * @param int $oid - * - * @return bool - */ - public static function validateContacts($cid, $oid) { - if (!$cid || !$oid) { - return NULL; - } - $exception = new CRM_Dedupe_DAO_Exception(); - $exception->contact_id1 = $cid; - $exception->contact_id2 = $oid; - //make sure contact2 > contact1. - if ($cid > $oid) { - $exception->contact_id1 = $oid; - $exception->contact_id2 = $cid; - } - - return !$exception->find(TRUE); - } - - /** - * Get the specification for the given field. - * - * @param string $fieldName - * - * @return array - * @throws \CiviCRM_API3_Exception - */ - public function getFieldType($fieldName) { - $entity = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($this->rule_table)); - if (!$entity) { - // This means we have stored a custom field rather than an entity name in rule_table, figure out the entity. - $entity = civicrm_api3('CustomGroup', 'getvalue', ['table_name' => $this->rule_table, 'return' => 'extends']); - if (in_array($entity, ['Individual', 'Household', 'Organization'])) { - $entity = 'Contact'; - } - $fieldName = 'custom_' . civicrm_api3('CustomField', 'getvalue', ['column_name' => $fieldName, 'return' => 'id']); - } - $fields = civicrm_api3($entity, 'getfields', ['action' => 'create'])['values']; - return $fields[$fieldName]['type']; - } - -} +class CRM_Dedupe_BAO_Rule extends CRM_Dedupe_BAO_DedupeRule {} diff --git a/civicrm/CRM/Dedupe/BAO/RuleGroup.php b/civicrm/CRM/Dedupe/BAO/RuleGroup.php index 6cbb407c84..1b70dcbffe 100644 --- a/civicrm/CRM/Dedupe/BAO/RuleGroup.php +++ b/civicrm/CRM/Dedupe/BAO/RuleGroup.php @@ -19,499 +19,4 @@ * The CiviCRM duplicate discovery engine is based on an * algorithm designed by David Strauss <david@fourkitchens.com>. */ -class CRM_Dedupe_BAO_RuleGroup extends CRM_Dedupe_DAO_RuleGroup { - - /** - * Ids of the contacts to limit the SQL queries (whole-database queries otherwise) - * @var array - */ - public $contactIds = []; - - /** - * Set the contact IDs to restrict the dedupe to. - * - * @param array $contactIds - */ - public function setContactIds($contactIds) { - $this->contactIds = $contactIds; - } - - /** - * Params to dedupe against (queries against the whole contact set otherwise) - * @var array - */ - public $params = []; - - /** - * If there are no rules in rule group. - * @var bool - */ - public $noRules = FALSE; - - protected $temporaryTables = []; - - /** - * Return a structure holding the supported tables, fields and their titles - * - * @param string $requestedType - * The requested contact type. - * - * @return array - * a table-keyed array of field-keyed arrays holding supported fields' titles - */ - public static function supportedFields($requestedType) { - static $fields = NULL; - if (!$fields) { - // this is needed, as we're piggy-backing importableFields() below - $replacements = [ - 'civicrm_country.name' => 'civicrm_address.country_id', - 'civicrm_county.name' => 'civicrm_address.county_id', - 'civicrm_state_province.name' => 'civicrm_address.state_province_id', - 'gender.label' => 'civicrm_contact.gender_id', - 'individual_prefix.label' => 'civicrm_contact.prefix_id', - 'individual_suffix.label' => 'civicrm_contact.suffix_id', - 'addressee.label' => 'civicrm_contact.addressee_id', - 'email_greeting.label' => 'civicrm_contact.email_greeting_id', - 'postal_greeting.label' => 'civicrm_contact.postal_greeting_id', - 'civicrm_phone.phone' => 'civicrm_phone.phone_numeric', - ]; - // the table names we support in dedupe rules - a filter for importableFields() - $supportedTables = [ - 'civicrm_address', - 'civicrm_contact', - 'civicrm_email', - 'civicrm_im', - 'civicrm_note', - 'civicrm_openid', - 'civicrm_phone', - ]; - - foreach (['Individual', 'Organization', 'Household'] as $ctype) { - // take the table.field pairs and their titles from importableFields() if the table is supported - foreach (CRM_Contact_BAO_Contact::importableFields($ctype) as $iField) { - if (isset($iField['where'])) { - $where = $iField['where']; - if (isset($replacements[$where])) { - $where = $replacements[$where]; - } - list($table, $field) = explode('.', $where); - if (!in_array($table, $supportedTables)) { - continue; - } - $fields[$ctype][$table][$field] = $iField['title']; - } - } - // Note that most of the fields available come from 'importable fields' - - // I thought about making this field 'importable' but it felt like there might be unknown consequences - // so I opted for just adding it in & securing it with a unit test. - /// Example usage of sort_name - It is possible to alter sort name via hook so 2 organization names might differ as in - // Justice League vs The Justice League but these could have the same sort_name if 'the the' - // exension is installed (https://github.com/eileenmcnaughton/org.wikimedia.thethe) - $fields[$ctype]['civicrm_contact']['sort_name'] = ts('Sort Name'); - // add custom data fields - foreach (CRM_Core_BAO_CustomGroup::getTree($ctype, NULL, NULL, -1) as $key => $cg) { - if (!is_int($key)) { - continue; - } - foreach ($cg['fields'] as $cf) { - $fields[$ctype][$cg['table_name']][$cf['column_name']] = $cf['label']; - } - } - } - } - CRM_Utils_Hook::dupeQuery(CRM_Core_DAO::$_nullObject, 'supportedFields', $fields); - return !empty($fields[$requestedType]) ? $fields[$requestedType] : []; - } - - /** - * Return the SQL query for dropping the temporary table. - */ - public function tableDropQuery() { - return 'DROP TEMPORARY TABLE IF EXISTS dedupe'; - } - - /** - * Return a set of SQL queries whose cummulative weights will mark matched - * records for the RuleGroup::threasholdQuery() to retrieve. - */ - public function tableQuery() { - // make sure we've got a fetched dbrecord, not sure if this is enforced - if (!$this->name == NULL || $this->is_reserved == NULL) { - $this->find(TRUE); - } - - // Reserved Rule Groups can optionally get special treatment by - // implementing an optimization class and returning a query array. - if ($this->is_reserved && - CRM_Utils_File::isIncludable("CRM/Dedupe/BAO/QueryBuilder/{$this->name}.php") - ) { - $command = empty($this->params) ? 'internal' : 'record'; - $queries = call_user_func(["CRM_Dedupe_BAO_QueryBuilder_{$this->name}", $command], $this); - } - else { - // All other rule groups have queries generated by the member dedupe - // rules defined in the administrative interface. - - // Find all rules contained by this script sorted by weight so that - // their execution can be short circuited on RuleGroup::fillTable() - $bao = new CRM_Dedupe_BAO_Rule(); - $bao->dedupe_rule_group_id = $this->id; - $bao->orderBy('rule_weight DESC'); - $bao->find(); - - // Generate a SQL query for each rule in the rule group that is - // tailored to respect the param and contactId options provided. - $queries = []; - while ($bao->fetch()) { - $bao->contactIds = $this->contactIds; - $bao->params = $this->params; - - // Skipping empty rules? Empty rules shouldn't exist; why check? - if ($query = $bao->sql()) { - $queries["{$bao->rule_table}.{$bao->rule_field}.{$bao->rule_weight}"] = $query; - } - } - } - - // if there are no rules in this rule group - // add an empty query fulfilling the pattern - if (!$queries) { - $this->noRules = TRUE; - return []; - } - - return $queries; - } - - public function fillTable() { - // get the list of queries handy - $tableQueries = $this->tableQuery(); - - if ($this->params && !$this->noRules) { - $this->temporaryTables['dedupe'] = CRM_Utils_SQL_TempTable::build() - ->setCategory('dedupe') - ->createWithColumns("id1 int, weight int, UNIQUE UI_id1 (id1)")->getName(); - $dedupeCopyTemporaryTableObject = CRM_Utils_SQL_TempTable::build() - ->setCategory('dedupe'); - $this->temporaryTables['dedupe_copy'] = $dedupeCopyTemporaryTableObject->getName(); - $insertClause = "INSERT INTO {$this->temporaryTables['dedupe']} (id1, weight)"; - $groupByClause = "GROUP BY id1, weight"; - $dupeCopyJoin = " JOIN {$this->temporaryTables['dedupe_copy']} ON {$this->temporaryTables['dedupe_copy']}.id1 = t1.column WHERE "; - } - else { - $this->temporaryTables['dedupe'] = CRM_Utils_SQL_TempTable::build() - ->setCategory('dedupe') - ->createWithColumns("id1 int, id2 int, weight int, UNIQUE UI_id1_id2 (id1, id2)")->getName(); - $dedupeCopyTemporaryTableObject = CRM_Utils_SQL_TempTable::build() - ->setCategory('dedupe'); - $this->temporaryTables['dedupe_copy'] = $dedupeCopyTemporaryTableObject->getName(); - $insertClause = "INSERT INTO {$this->temporaryTables['dedupe']} (id1, id2, weight)"; - $groupByClause = "GROUP BY id1, id2, weight"; - $dupeCopyJoin = " JOIN {$this->temporaryTables['dedupe_copy']} ON {$this->temporaryTables['dedupe_copy']}.id1 = t1.column AND {$this->temporaryTables['dedupe_copy']}.id2 = t2.column WHERE "; - } - $patternColumn = '/t1.(\w+)/'; - $exclWeightSum = []; - - CRM_Utils_Hook::dupeQuery($this, 'table', $tableQueries); - - while (!empty($tableQueries)) { - list($isInclusive, $isDie) = self::isQuerySetInclusive($tableQueries, $this->threshold, $exclWeightSum); - - if ($isInclusive) { - // order queries by table count - self::orderByTableCount($tableQueries); - - $weightSum = array_sum($exclWeightSum); - $searchWithinDupes = !empty($exclWeightSum) ? 1 : 0; - - while (!empty($tableQueries)) { - // extract the next query ( and weight ) to be executed - $fieldWeight = array_keys($tableQueries); - $fieldWeight = $fieldWeight[0]; - $query = array_shift($tableQueries); - - if ($searchWithinDupes) { - // drop dedupe_copy table just in case if its already there. - $dedupeCopyTemporaryTableObject->drop(); - // get prepared to search within already found dupes if $searchWithinDupes flag is set - $dedupeCopyTemporaryTableObject->createWithQuery("SELECT * FROM {$this->temporaryTables['dedupe']} WHERE weight >= {$weightSum}"); - - preg_match($patternColumn, $query, $matches); - $query = str_replace(' WHERE ', str_replace('column', $matches[1], $dupeCopyJoin), $query); - - // CRM-19612: If there's a union, there will be two WHEREs, and you - // can't use the temp table twice. - if (preg_match('/' . $this->temporaryTables['dedupe_copy'] . '[\S\s]*(union)[\S\s]*' . $this->temporaryTables['dedupe_copy'] . '/i', $query, $matches, PREG_OFFSET_CAPTURE)) { - // Make a second temp table: - $this->temporaryTables['dedupe_copy_2'] = CRM_Utils_SQL_TempTable::build() - ->setCategory('dedupe') - ->createWithQuery("SELECT * FROM {$this->temporaryTables['dedupe']} WHERE weight >= {$weightSum}") - ->getName(); - // After the union, use that new temp table: - $part1 = substr($query, 0, $matches[1][1]); - $query = $part1 . str_replace($this->temporaryTables['dedupe_copy'], $this->temporaryTables['dedupe_copy_2'], substr($query, $matches[1][1])); - } - } - $searchWithinDupes = 1; - - // construct and execute the intermediate query - $query = "{$insertClause} {$query} {$groupByClause} ON DUPLICATE KEY UPDATE weight = weight + VALUES(weight)"; - $dao = CRM_Core_DAO::executeQuery($query); - - // FIXME: we need to be more acurate with affected rows, especially for insert vs duplicate insert. - // And that will help optimize further. - $affectedRows = $dao->affectedRows(); - - // In an inclusive situation, failure of any query means no further processing - - if ($affectedRows == 0) { - // reset to make sure no further execution is done. - $tableQueries = []; - break; - } - $weightSum = substr($fieldWeight, strrpos($fieldWeight, '.') + 1) + $weightSum; - } - // An exclusive situation - - } - elseif (!$isDie) { - // since queries are already sorted by weights, we can continue as is - $fieldWeight = array_keys($tableQueries); - $fieldWeight = $fieldWeight[0]; - $query = array_shift($tableQueries); - $query = "{$insertClause} {$query} {$groupByClause} ON DUPLICATE KEY UPDATE weight = weight + VALUES(weight)"; - $dao = CRM_Core_DAO::executeQuery($query); - if ($dao->affectedRows() >= 1) { - $exclWeightSum[] = substr($fieldWeight, strrpos($fieldWeight, '.') + 1); - } - } - else { - // its a die situation - break; - } - } - } - - /** - * Function to determine if a given query set contains inclusive or exclusive set of weights. - * The function assumes that the query set is already ordered by weight in desc order. - * @param $tableQueries - * @param $threshold - * @param array $exclWeightSum - * - * @return array - */ - public static function isQuerySetInclusive($tableQueries, $threshold, $exclWeightSum = []) { - $input = []; - foreach ($tableQueries as $key => $query) { - $input[] = substr($key, strrpos($key, '.') + 1); - } - - if (!empty($exclWeightSum)) { - $input = array_merge($input, $exclWeightSum); - rsort($input); - } - - if (count($input) == 1) { - return [FALSE, $input[0] < $threshold]; - } - - $totalCombinations = 0; - for ($i = 0; $i < count($input); $i++) { - $combination = [$input[$i]]; - if (array_sum($combination) >= $threshold) { - $totalCombinations++; - continue; - } - for ($j = $i + 1; $j < count($input); $j++) { - $combination[] = $input[$j]; - if (array_sum($combination) >= $threshold) { - $totalCombinations++; - } - } - } - return [$totalCombinations == 1, $totalCombinations <= 0]; - } - - /** - * sort queries by number of records for the table associated with them. - * @param $tableQueries - */ - public static function orderByTableCount(&$tableQueries) { - static $tableCount = []; - - $tempArray = []; - foreach ($tableQueries as $key => $query) { - $table = explode(".", $key); - $table = $table[0]; - if (!array_key_exists($table, $tableCount)) { - $query = "SELECT COUNT(*) FROM {$table}"; - $tableCount[$table] = CRM_Core_DAO::singleValueQuery($query); - } - $tempArray[$key] = $tableCount[$table]; - } - - asort($tempArray); - foreach ($tempArray as $key => $count) { - $tempArray[$key] = $tableQueries[$key]; - } - $tableQueries = $tempArray; - } - - /** - * Return the SQL query for getting only the interesting results out of the dedupe table. - * - * @$checkPermission boolean $params a flag to indicate if permission should be considered. - * default is to always check permissioning but public pages for example might not want - * permission to be checked for anonymous users. Refer CRM-6211. We might be beaking - * Multi-Site dedupe for public pages. - * - * @param bool $checkPermission - * - * @return string - */ - public function thresholdQuery($checkPermission = TRUE) { - $this->_aclFrom = ''; - $aclWhere = ''; - - if ($this->params && !$this->noRules) { - if ($checkPermission) { - list($this->_aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause('civicrm_contact'); - $aclWhere = $aclWhere ? "AND {$aclWhere}" : ''; - } - $query = "SELECT {$this->temporaryTables['dedupe']}.id1 as id - FROM {$this->temporaryTables['dedupe']} JOIN civicrm_contact ON {$this->temporaryTables['dedupe']}.id1 = civicrm_contact.id {$this->_aclFrom} - WHERE contact_type = '{$this->contact_type}' AND is_deleted = 0 $aclWhere - AND weight >= {$this->threshold}"; - } - else { - $aclWhere = ''; - if ($checkPermission) { - list($this->_aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause(['c1', 'c2']); - $aclWhere = $aclWhere ? "AND {$aclWhere}" : ''; - } - $query = "SELECT IF({$this->temporaryTables['dedupe']}.id1 < {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id1, {$this->temporaryTables['dedupe']}.id2) as id1, - IF({$this->temporaryTables['dedupe']}.id1 < {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id2, {$this->temporaryTables['dedupe']}.id1) as id2, {$this->temporaryTables['dedupe']}.weight - FROM {$this->temporaryTables['dedupe']} JOIN civicrm_contact c1 ON {$this->temporaryTables['dedupe']}.id1 = c1.id - JOIN civicrm_contact c2 ON {$this->temporaryTables['dedupe']}.id2 = c2.id {$this->_aclFrom} - LEFT JOIN civicrm_dedupe_exception exc ON {$this->temporaryTables['dedupe']}.id1 = exc.contact_id1 AND {$this->temporaryTables['dedupe']}.id2 = exc.contact_id2 - WHERE c1.contact_type = '{$this->contact_type}' AND - c2.contact_type = '{$this->contact_type}' - AND c1.is_deleted = 0 AND c2.is_deleted = 0 - {$aclWhere} - AND weight >= {$this->threshold} AND exc.contact_id1 IS NULL"; - } - - CRM_Utils_Hook::dupeQuery($this, 'threshold', $query); - return $query; - } - - /** - * find fields related to a rule group. - * - * @param array $params - * - * @return array - * (rule field => weight) array and threshold associated to rule group - */ - public static function dedupeRuleFieldsWeight($params) { - $rgBao = new CRM_Dedupe_BAO_RuleGroup(); - $rgBao->contact_type = $params['contact_type']; - if (!empty($params['id'])) { - // accept an ID if provided - $rgBao->id = $params['id']; - } - else { - $rgBao->used = $params['used']; - } - $rgBao->find(TRUE); - - $ruleBao = new CRM_Dedupe_BAO_Rule(); - $ruleBao->dedupe_rule_group_id = $rgBao->id; - $ruleBao->find(); - $ruleFields = []; - while ($ruleBao->fetch()) { - $field_name = $ruleBao->rule_field; - if ($field_name == 'phone_numeric') { - $field_name = 'phone'; - } - $ruleFields[$field_name] = $ruleBao->rule_weight; - } - - return [$ruleFields, $rgBao->threshold]; - } - - /** - * Get all of the combinations of fields that would work with a rule. - * - * @param array $rgFields - * @param int $threshold - * @param array $combos - * @param array $running - */ - public static function combos($rgFields, $threshold, &$combos, $running = []) { - foreach ($rgFields as $rgField => $weight) { - unset($rgFields[$rgField]); - $diff = $threshold - $weight; - $runningnow = $running; - $runningnow[] = $rgField; - if ($diff > 0) { - self::combos($rgFields, $diff, $combos, $runningnow); - } - else { - $combos[] = $runningnow; - } - } - } - - /** - * Get an array of rule group id to rule group name - * for all th groups for that contactType. If contactType - * not specified, do it for all - * - * @param string $contactType - * Individual, Household or Organization. - * - * - * @return array - * id => "nice name" of rule group - */ - public static function getByType($contactType = NULL) { - $dao = new CRM_Dedupe_DAO_RuleGroup(); - - if ($contactType) { - $dao->contact_type = $contactType; - } - - $dao->find(); - $result = []; - while ($dao->fetch()) { - $title = !empty($dao->title) ? $dao->title : (!empty($dao->name) ? $dao->name : $dao->contact_type); - - $name = "$title - {$dao->used}"; - $result[$dao->id] = $name; - } - return $result; - } - - /** - * Get the cached contact type for a particular rule group. - * - * @param int $rule_group_id - * - * @return string - */ - public static function getContactTypeForRuleGroup($rule_group_id) { - if (!isset(\Civi::$statics[__CLASS__]) || !isset(\Civi::$statics[__CLASS__]['rule_groups'])) { - \Civi::$statics[__CLASS__]['rule_groups'] = []; - } - if (empty(\Civi::$statics[__CLASS__]['rule_groups'][$rule_group_id])) { - \Civi::$statics[__CLASS__]['rule_groups'][$rule_group_id]['contact_type'] = CRM_Core_DAO::getFieldValue( - 'CRM_Dedupe_DAO_RuleGroup', - $rule_group_id, - 'contact_type' - ); - } - - return \Civi::$statics[__CLASS__]['rule_groups'][$rule_group_id]['contact_type']; - } - -} +class CRM_Dedupe_BAO_RuleGroup extends CRM_Dedupe_BAO_DedupeRuleGroup {} diff --git a/civicrm/CRM/Dedupe/DAO/DedupeException.php b/civicrm/CRM/Dedupe/DAO/DedupeException.php new file mode 100644 index 0000000000..7560180938 --- /dev/null +++ b/civicrm/CRM/Dedupe/DAO/DedupeException.php @@ -0,0 +1,231 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from xml/schema/CRM/Dedupe/DedupeException.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:2cc97827790267ad8bfb46052ae0360c) + */ + +/** + * Database access object for the DedupeException entity. + */ +class CRM_Dedupe_DAO_DedupeException extends CRM_Core_DAO { + const EXT = 'civicrm'; + const TABLE_ADDED = '3.3'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_dedupe_exception'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = FALSE; + + /** + * Unique dedupe exception id + * + * @var int + */ + public $id; + + /** + * FK to Contact ID + * + * @var int + */ + public $contact_id1; + + /** + * FK to Contact ID + * + * @var int + */ + public $contact_id2; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_dedupe_exception'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? ts('Dedupe Exceptions') : ts('Dedupe Exception'); + } + + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() { + if (!isset(Civi::$statics[__CLASS__]['links'])) { + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id1', 'civicrm_contact', 'id'); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id2', 'civicrm_contact', 'id'); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + } + return Civi::$statics[__CLASS__]['links']; + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Dedupe Exception ID'), + 'description' => ts('Unique dedupe exception id'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_exception.id', + 'table_name' => 'civicrm_dedupe_exception', + 'entity' => 'DedupeException', + 'bao' => 'CRM_Dedupe_BAO_DedupeException', + 'localizable' => 0, + 'html' => [ + 'type' => 'Number', + ], + 'readonly' => TRUE, + 'add' => '3.3', + ], + 'contact_id1' => [ + 'name' => 'contact_id1', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('First Dupe Contact ID'), + 'description' => ts('FK to Contact ID'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_exception.contact_id1', + 'table_name' => 'civicrm_dedupe_exception', + 'entity' => 'DedupeException', + 'bao' => 'CRM_Dedupe_BAO_DedupeException', + 'localizable' => 0, + 'FKClassName' => 'CRM_Contact_DAO_Contact', + 'html' => [ + 'label' => ts("First Dupe Contact"), + ], + 'add' => '3.3', + ], + 'contact_id2' => [ + 'name' => 'contact_id2', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Second Dupe Contact ID'), + 'description' => ts('FK to Contact ID'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_exception.contact_id2', + 'table_name' => 'civicrm_dedupe_exception', + 'entity' => 'DedupeException', + 'bao' => 'CRM_Dedupe_BAO_DedupeException', + 'localizable' => 0, + 'FKClassName' => 'CRM_Contact_DAO_Contact', + 'html' => [ + 'label' => ts("Second Dupe Contact"), + ], + 'add' => '3.3', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * 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() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'dedupe_exception', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'dedupe_exception', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = [ + 'UI_contact_id1_contact_id2' => [ + 'name' => 'UI_contact_id1_contact_id2', + 'field' => [ + 0 => 'contact_id1', + 1 => 'contact_id2', + ], + 'localizable' => FALSE, + 'unique' => TRUE, + 'sig' => 'civicrm_dedupe_exception::1::contact_id1::contact_id2', + ], + ]; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/CRM/Dedupe/DAO/DedupeRule.php b/civicrm/CRM/Dedupe/DAO/DedupeRule.php new file mode 100644 index 0000000000..7dc912053c --- /dev/null +++ b/civicrm/CRM/Dedupe/DAO/DedupeRule.php @@ -0,0 +1,284 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from xml/schema/CRM/Dedupe/DedupeRule.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:782d96ecc76d4020270fce04574a39b5) + */ + +/** + * Database access object for the DedupeRule entity. + */ +class CRM_Dedupe_DAO_DedupeRule extends CRM_Core_DAO { + const EXT = 'civicrm'; + const TABLE_ADDED = '1.8'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_dedupe_rule'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = FALSE; + + /** + * Unique dedupe rule id + * + * @var int + */ + public $id; + + /** + * The id of the rule group this rule belongs to + * + * @var int + */ + public $dedupe_rule_group_id; + + /** + * The name of the table this rule is about + * + * @var string + */ + public $rule_table; + + /** + * The name of the field of the table referenced in rule_table + * + * @var string + */ + public $rule_field; + + /** + * The length of the matching substring + * + * @var int + */ + public $rule_length; + + /** + * The weight of the rule + * + * @var int + */ + public $rule_weight; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_dedupe_rule'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? ts('Dedupe Rules') : ts('Dedupe Rule'); + } + + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() { + if (!isset(Civi::$statics[__CLASS__]['links'])) { + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'dedupe_rule_group_id', 'civicrm_dedupe_rule_group', 'id'); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + } + return Civi::$statics[__CLASS__]['links']; + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Dedupe Rule ID'), + 'description' => ts('Unique dedupe rule id'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_rule.id', + 'table_name' => 'civicrm_dedupe_rule', + 'entity' => 'DedupeRule', + 'bao' => 'CRM_Dedupe_BAO_DedupeRule', + 'localizable' => 0, + 'html' => [ + 'type' => 'Number', + ], + 'readonly' => TRUE, + 'add' => '1.8', + ], + 'dedupe_rule_group_id' => [ + 'name' => 'dedupe_rule_group_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Group ID'), + 'description' => ts('The id of the rule group this rule belongs to'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_rule.dedupe_rule_group_id', + 'table_name' => 'civicrm_dedupe_rule', + 'entity' => 'DedupeRule', + 'bao' => 'CRM_Dedupe_BAO_DedupeRule', + 'localizable' => 0, + 'FKClassName' => 'CRM_Dedupe_DAO_DedupeRuleGroup', + 'html' => [ + 'label' => ts("Group"), + ], + 'add' => '1.8', + ], + 'rule_table' => [ + 'name' => 'rule_table', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Rule Table'), + 'description' => ts('The name of the table this rule is about'), + 'required' => TRUE, + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_dedupe_rule.rule_table', + 'table_name' => 'civicrm_dedupe_rule', + 'entity' => 'DedupeRule', + 'bao' => 'CRM_Dedupe_BAO_DedupeRule', + 'localizable' => 0, + 'add' => '1.8', + ], + 'rule_field' => [ + 'name' => 'rule_field', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Rule Field'), + 'description' => ts('The name of the field of the table referenced in rule_table'), + 'required' => TRUE, + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_dedupe_rule.rule_field', + 'table_name' => 'civicrm_dedupe_rule', + 'entity' => 'DedupeRule', + 'bao' => 'CRM_Dedupe_BAO_DedupeRule', + 'localizable' => 0, + 'add' => '1.8', + ], + 'rule_length' => [ + 'name' => 'rule_length', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Rule Length'), + 'description' => ts('The length of the matching substring'), + 'where' => 'civicrm_dedupe_rule.rule_length', + 'table_name' => 'civicrm_dedupe_rule', + 'entity' => 'DedupeRule', + 'bao' => 'CRM_Dedupe_BAO_DedupeRule', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => '1.8', + ], + 'rule_weight' => [ + 'name' => 'rule_weight', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Order'), + 'description' => ts('The weight of the rule'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_rule.rule_weight', + 'table_name' => 'civicrm_dedupe_rule', + 'entity' => 'DedupeRule', + 'bao' => 'CRM_Dedupe_BAO_DedupeRule', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => '1.8', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * 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() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'dedupe_rule', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'dedupe_rule', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = []; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/CRM/Dedupe/DAO/DedupeRuleGroup.php b/civicrm/CRM/Dedupe/DAO/DedupeRuleGroup.php new file mode 100644 index 0000000000..55daa8ae2d --- /dev/null +++ b/civicrm/CRM/Dedupe/DAO/DedupeRuleGroup.php @@ -0,0 +1,304 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from xml/schema/CRM/Dedupe/DedupeRuleGroup.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:d2b969468d4841e3b7595d7beba7cea2) + */ + +/** + * Database access object for the DedupeRuleGroup entity. + */ +class CRM_Dedupe_DAO_DedupeRuleGroup extends CRM_Core_DAO { + const EXT = 'civicrm'; + const TABLE_ADDED = '1.8'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_dedupe_rule_group'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = FALSE; + + /** + * Unique dedupe rule group id + * + * @var int + */ + public $id; + + /** + * The type of contacts this group applies to + * + * @var string + */ + public $contact_type; + + /** + * The weight threshold the sum of the rule weights has to cross to consider two contacts the same + * + * @var int + */ + public $threshold; + + /** + * Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically) + * + * @var string + */ + public $used; + + /** + * Name of the rule group + * + * @var string + */ + public $name; + + /** + * Label of the rule group + * + * @var string + */ + public $title; + + /** + * Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin + * + * @var bool + */ + public $is_reserved; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_dedupe_rule_group'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? ts('Dedupe Rule Groups') : ts('Dedupe Rule Group'); + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Rule Group ID'), + 'description' => ts('Unique dedupe rule group id'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_rule_group.id', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'html' => [ + 'type' => 'Number', + ], + 'readonly' => TRUE, + 'add' => '1.8', + ], + 'contact_type' => [ + 'name' => 'contact_type', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Contact Type'), + 'description' => ts('The type of contacts this group applies to'), + 'maxlength' => 12, + 'size' => CRM_Utils_Type::TWELVE, + 'where' => 'civicrm_dedupe_rule_group.contact_type', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select', + ], + 'pseudoconstant' => [ + 'table' => 'civicrm_contact_type', + 'keyColumn' => 'name', + 'labelColumn' => 'label', + 'condition' => 'parent_id IS NULL', + ], + 'add' => '1.8', + ], + 'threshold' => [ + 'name' => 'threshold', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Threshold'), + 'description' => ts('The weight threshold the sum of the rule weights has to cross to consider two contacts the same'), + 'required' => TRUE, + 'where' => 'civicrm_dedupe_rule_group.threshold', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => '1.8', + ], + 'used' => [ + 'name' => 'used', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Length'), + 'description' => ts('Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically)'), + 'required' => TRUE, + 'maxlength' => 12, + 'size' => CRM_Utils_Type::TWELVE, + 'where' => 'civicrm_dedupe_rule_group.used', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'html' => [ + 'type' => 'Radio', + ], + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_SelectValues::getDedupeRuleTypes', + ], + 'add' => '4.3', + ], + 'name' => [ + 'name' => 'name', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Name'), + 'description' => ts('Name of the rule group'), + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_dedupe_rule_group.name', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'add' => '2.1', + ], + 'title' => [ + 'name' => 'title', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Title'), + 'description' => ts('Label of the rule group'), + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_dedupe_rule_group.title', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => '4.1', + ], + 'is_reserved' => [ + 'name' => 'is_reserved', + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'title' => ts('Reserved?'), + 'description' => ts('Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin'), + 'where' => 'civicrm_dedupe_rule_group.is_reserved', + 'table_name' => 'civicrm_dedupe_rule_group', + 'entity' => 'DedupeRuleGroup', + 'bao' => 'CRM_Dedupe_BAO_DedupeRuleGroup', + 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + ], + 'add' => '4.1', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * 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() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'dedupe_rule_group', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'dedupe_rule_group', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = []; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/CRM/Dedupe/DAO/Exception.php b/civicrm/CRM/Dedupe/DAO/Exception.php index 32be00eaa0..fae8f0bae4 100644 --- a/civicrm/CRM/Dedupe/DAO/Exception.php +++ b/civicrm/CRM/Dedupe/DAO/Exception.php @@ -12,220 +12,4 @@ /** * Database access object for the Exception entity. */ -class CRM_Dedupe_DAO_Exception extends CRM_Core_DAO { - const EXT = 'civicrm'; - const TABLE_ADDED = '3.3'; - - /** - * Static instance to hold the table name. - * - * @var string - */ - public static $_tableName = 'civicrm_dedupe_exception'; - - /** - * Should CiviCRM log any modifications to this table in the civicrm_log table. - * - * @var bool - */ - public static $_log = FALSE; - - /** - * Unique dedupe exception id - * - * @var int - */ - public $id; - - /** - * FK to Contact ID - * - * @var int - */ - public $contact_id1; - - /** - * FK to Contact ID - * - * @var int - */ - public $contact_id2; - - /** - * Class constructor. - */ - public function __construct() { - $this->__table = 'civicrm_dedupe_exception'; - parent::__construct(); - } - - /** - * Returns localized title of this entity. - * - * @param bool $plural - * Whether to return the plural version of the title. - */ - public static function getEntityTitle($plural = FALSE) { - return $plural ? ts('Exceptions') : ts('Exception'); - } - - /** - * Returns foreign keys and entity references. - * - * @return array - * [CRM_Core_Reference_Interface] - */ - public static function getReferenceColumns() { - if (!isset(Civi::$statics[__CLASS__]['links'])) { - Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); - Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id1', 'civicrm_contact', 'id'); - Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id2', 'civicrm_contact', 'id'); - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); - } - return Civi::$statics[__CLASS__]['links']; - } - - /** - * Returns all the column names of this table - * - * @return array - */ - public static function &fields() { - if (!isset(Civi::$statics[__CLASS__]['fields'])) { - Civi::$statics[__CLASS__]['fields'] = [ - 'id' => [ - 'name' => 'id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Dedupe Exception ID'), - 'description' => ts('Unique dedupe exception id'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_exception.id', - 'table_name' => 'civicrm_dedupe_exception', - 'entity' => 'Exception', - 'bao' => 'CRM_Dedupe_BAO_Exception', - 'localizable' => 0, - 'html' => [ - 'type' => 'Number', - ], - 'readonly' => TRUE, - 'add' => '3.3', - ], - 'contact_id1' => [ - 'name' => 'contact_id1', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('First Dupe Contact ID'), - 'description' => ts('FK to Contact ID'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_exception.contact_id1', - 'table_name' => 'civicrm_dedupe_exception', - 'entity' => 'Exception', - 'bao' => 'CRM_Dedupe_BAO_Exception', - 'localizable' => 0, - 'FKClassName' => 'CRM_Contact_DAO_Contact', - 'html' => [ - 'label' => ts("First Dupe Contact"), - ], - 'add' => '3.3', - ], - 'contact_id2' => [ - 'name' => 'contact_id2', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Second Dupe Contact ID'), - 'description' => ts('FK to Contact ID'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_exception.contact_id2', - 'table_name' => 'civicrm_dedupe_exception', - 'entity' => 'Exception', - 'bao' => 'CRM_Dedupe_BAO_Exception', - 'localizable' => 0, - 'FKClassName' => 'CRM_Contact_DAO_Contact', - 'html' => [ - 'label' => ts("Second Dupe Contact"), - ], - 'add' => '3.3', - ], - ]; - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); - } - return Civi::$statics[__CLASS__]['fields']; - } - - /** - * 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() { - if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { - Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); - } - return Civi::$statics[__CLASS__]['fieldKeys']; - } - - /** - * Returns the names of this table - * - * @return string - */ - public static function getTableName() { - return self::$_tableName; - } - - /** - * Returns if this table needs to be logged - * - * @return bool - */ - public function getLog() { - return self::$_log; - } - - /** - * Returns the list of fields that can be imported - * - * @param bool $prefix - * - * @return array - */ - public static function &import($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'dedupe_exception', $prefix, []); - return $r; - } - - /** - * Returns the list of fields that can be exported - * - * @param bool $prefix - * - * @return array - */ - public static function &export($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'dedupe_exception', $prefix, []); - return $r; - } - - /** - * Returns the list of indices - * - * @param bool $localize - * - * @return array - */ - public static function indices($localize = TRUE) { - $indices = [ - 'UI_contact_id1_contact_id2' => [ - 'name' => 'UI_contact_id1_contact_id2', - 'field' => [ - 0 => 'contact_id1', - 1 => 'contact_id2', - ], - 'localizable' => FALSE, - 'unique' => TRUE, - 'sig' => 'civicrm_dedupe_exception::1::contact_id1::contact_id2', - ], - ]; - return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; - } - -} +class CRM_Dedupe_DAO_Exception extends CRM_Dedupe_DAO_DedupeException {} diff --git a/civicrm/CRM/Dedupe/DAO/Rule.php b/civicrm/CRM/Dedupe/DAO/Rule.php index 03780fcbba..b1d4686fb8 100644 --- a/civicrm/CRM/Dedupe/DAO/Rule.php +++ b/civicrm/CRM/Dedupe/DAO/Rule.php @@ -4,281 +4,9 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing * - * Generated from xml/schema/CRM/Dedupe/Rule.xml - * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2860c5a16ead4f23809027d8a2812265) */ /** - * Database access object for the Rule entity. + * Database access object for the DedupeRule entity. */ -class CRM_Dedupe_DAO_Rule extends CRM_Core_DAO { - const EXT = 'civicrm'; - const TABLE_ADDED = '1.8'; - - /** - * Static instance to hold the table name. - * - * @var string - */ - public static $_tableName = 'civicrm_dedupe_rule'; - - /** - * Should CiviCRM log any modifications to this table in the civicrm_log table. - * - * @var bool - */ - public static $_log = FALSE; - - /** - * Unique dedupe rule id - * - * @var int - */ - public $id; - - /** - * The id of the rule group this rule belongs to - * - * @var int - */ - public $dedupe_rule_group_id; - - /** - * The name of the table this rule is about - * - * @var string - */ - public $rule_table; - - /** - * The name of the field of the table referenced in rule_table - * - * @var string - */ - public $rule_field; - - /** - * The length of the matching substring - * - * @var int - */ - public $rule_length; - - /** - * The weight of the rule - * - * @var int - */ - public $rule_weight; - - /** - * Class constructor. - */ - public function __construct() { - $this->__table = 'civicrm_dedupe_rule'; - parent::__construct(); - } - - /** - * Returns localized title of this entity. - * - * @param bool $plural - * Whether to return the plural version of the title. - */ - public static function getEntityTitle($plural = FALSE) { - return $plural ? ts('Rules') : ts('Rule'); - } - - /** - * Returns foreign keys and entity references. - * - * @return array - * [CRM_Core_Reference_Interface] - */ - public static function getReferenceColumns() { - if (!isset(Civi::$statics[__CLASS__]['links'])) { - Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); - Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'dedupe_rule_group_id', 'civicrm_dedupe_rule_group', 'id'); - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); - } - return Civi::$statics[__CLASS__]['links']; - } - - /** - * Returns all the column names of this table - * - * @return array - */ - public static function &fields() { - if (!isset(Civi::$statics[__CLASS__]['fields'])) { - Civi::$statics[__CLASS__]['fields'] = [ - 'id' => [ - 'name' => 'id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Dedupe Rule ID'), - 'description' => ts('Unique dedupe rule id'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_rule.id', - 'table_name' => 'civicrm_dedupe_rule', - 'entity' => 'Rule', - 'bao' => 'CRM_Dedupe_BAO_Rule', - 'localizable' => 0, - 'html' => [ - 'type' => 'Number', - ], - 'readonly' => TRUE, - 'add' => '1.8', - ], - 'dedupe_rule_group_id' => [ - 'name' => 'dedupe_rule_group_id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Group ID'), - 'description' => ts('The id of the rule group this rule belongs to'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_rule.dedupe_rule_group_id', - 'table_name' => 'civicrm_dedupe_rule', - 'entity' => 'Rule', - 'bao' => 'CRM_Dedupe_BAO_Rule', - 'localizable' => 0, - 'FKClassName' => 'CRM_Dedupe_DAO_RuleGroup', - 'html' => [ - 'label' => ts("Group"), - ], - 'add' => '1.8', - ], - 'rule_table' => [ - 'name' => 'rule_table', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Rule Table'), - 'description' => ts('The name of the table this rule is about'), - 'required' => TRUE, - 'maxlength' => 64, - 'size' => CRM_Utils_Type::BIG, - 'where' => 'civicrm_dedupe_rule.rule_table', - 'table_name' => 'civicrm_dedupe_rule', - 'entity' => 'Rule', - 'bao' => 'CRM_Dedupe_BAO_Rule', - 'localizable' => 0, - 'add' => '1.8', - ], - 'rule_field' => [ - 'name' => 'rule_field', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Rule Field'), - 'description' => ts('The name of the field of the table referenced in rule_table'), - 'required' => TRUE, - 'maxlength' => 64, - 'size' => CRM_Utils_Type::BIG, - 'where' => 'civicrm_dedupe_rule.rule_field', - 'table_name' => 'civicrm_dedupe_rule', - 'entity' => 'Rule', - 'bao' => 'CRM_Dedupe_BAO_Rule', - 'localizable' => 0, - 'add' => '1.8', - ], - 'rule_length' => [ - 'name' => 'rule_length', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Rule Length'), - 'description' => ts('The length of the matching substring'), - 'where' => 'civicrm_dedupe_rule.rule_length', - 'table_name' => 'civicrm_dedupe_rule', - 'entity' => 'Rule', - 'bao' => 'CRM_Dedupe_BAO_Rule', - 'localizable' => 0, - 'html' => [ - 'type' => 'Text', - ], - 'add' => '1.8', - ], - 'rule_weight' => [ - 'name' => 'rule_weight', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Order'), - 'description' => ts('The weight of the rule'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_rule.rule_weight', - 'table_name' => 'civicrm_dedupe_rule', - 'entity' => 'Rule', - 'bao' => 'CRM_Dedupe_BAO_Rule', - 'localizable' => 0, - 'html' => [ - 'type' => 'Text', - ], - 'add' => '1.8', - ], - ]; - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); - } - return Civi::$statics[__CLASS__]['fields']; - } - - /** - * 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() { - if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { - Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); - } - return Civi::$statics[__CLASS__]['fieldKeys']; - } - - /** - * Returns the names of this table - * - * @return string - */ - public static function getTableName() { - return self::$_tableName; - } - - /** - * Returns if this table needs to be logged - * - * @return bool - */ - public function getLog() { - return self::$_log; - } - - /** - * Returns the list of fields that can be imported - * - * @param bool $prefix - * - * @return array - */ - public static function &import($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'dedupe_rule', $prefix, []); - return $r; - } - - /** - * Returns the list of fields that can be exported - * - * @param bool $prefix - * - * @return array - */ - public static function &export($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'dedupe_rule', $prefix, []); - return $r; - } - - /** - * Returns the list of indices - * - * @param bool $localize - * - * @return array - */ - public static function indices($localize = TRUE) { - $indices = []; - return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; - } - -} +class CRM_Dedupe_DAO_Rule extends CRM_Dedupe_DAO_DedupeRule {} diff --git a/civicrm/CRM/Dedupe/DAO/RuleGroup.php b/civicrm/CRM/Dedupe/DAO/RuleGroup.php index 901c580612..b471cf40ef 100644 --- a/civicrm/CRM/Dedupe/DAO/RuleGroup.php +++ b/civicrm/CRM/Dedupe/DAO/RuleGroup.php @@ -4,301 +4,9 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing * - * Generated from xml/schema/CRM/Dedupe/RuleGroup.xml - * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:114051c4c9bd7fd1e7854de7fc110884) */ /** - * Database access object for the RuleGroup entity. + * Database access object for the DedupeRuleGroup entity. */ -class CRM_Dedupe_DAO_RuleGroup extends CRM_Core_DAO { - const EXT = 'civicrm'; - const TABLE_ADDED = '1.8'; - - /** - * Static instance to hold the table name. - * - * @var string - */ - public static $_tableName = 'civicrm_dedupe_rule_group'; - - /** - * Should CiviCRM log any modifications to this table in the civicrm_log table. - * - * @var bool - */ - public static $_log = FALSE; - - /** - * Unique dedupe rule group id - * - * @var int - */ - public $id; - - /** - * The type of contacts this group applies to - * - * @var string - */ - public $contact_type; - - /** - * The weight threshold the sum of the rule weights has to cross to consider two contacts the same - * - * @var int - */ - public $threshold; - - /** - * Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically) - * - * @var string - */ - public $used; - - /** - * Name of the rule group - * - * @var string - */ - public $name; - - /** - * Label of the rule group - * - * @var string - */ - public $title; - - /** - * Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin - * - * @var bool - */ - public $is_reserved; - - /** - * Class constructor. - */ - public function __construct() { - $this->__table = 'civicrm_dedupe_rule_group'; - parent::__construct(); - } - - /** - * Returns localized title of this entity. - * - * @param bool $plural - * Whether to return the plural version of the title. - */ - public static function getEntityTitle($plural = FALSE) { - return $plural ? ts('Rule Groups') : ts('Rule Group'); - } - - /** - * Returns all the column names of this table - * - * @return array - */ - public static function &fields() { - if (!isset(Civi::$statics[__CLASS__]['fields'])) { - Civi::$statics[__CLASS__]['fields'] = [ - 'id' => [ - 'name' => 'id', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Rule Group ID'), - 'description' => ts('Unique dedupe rule group id'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_rule_group.id', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'html' => [ - 'type' => 'Number', - ], - 'readonly' => TRUE, - 'add' => '1.8', - ], - 'contact_type' => [ - 'name' => 'contact_type', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Contact Type'), - 'description' => ts('The type of contacts this group applies to'), - 'maxlength' => 12, - 'size' => CRM_Utils_Type::TWELVE, - 'where' => 'civicrm_dedupe_rule_group.contact_type', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'html' => [ - 'type' => 'Select', - ], - 'pseudoconstant' => [ - 'table' => 'civicrm_contact_type', - 'keyColumn' => 'name', - 'labelColumn' => 'label', - 'condition' => 'parent_id IS NULL', - ], - 'add' => '1.8', - ], - 'threshold' => [ - 'name' => 'threshold', - 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Threshold'), - 'description' => ts('The weight threshold the sum of the rule weights has to cross to consider two contacts the same'), - 'required' => TRUE, - 'where' => 'civicrm_dedupe_rule_group.threshold', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'html' => [ - 'type' => 'Text', - ], - 'add' => '1.8', - ], - 'used' => [ - 'name' => 'used', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Length'), - 'description' => ts('Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically)'), - 'required' => TRUE, - 'maxlength' => 12, - 'size' => CRM_Utils_Type::TWELVE, - 'where' => 'civicrm_dedupe_rule_group.used', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'html' => [ - 'type' => 'Radio', - ], - 'pseudoconstant' => [ - 'callback' => 'CRM_Core_SelectValues::getDedupeRuleTypes', - ], - 'add' => '4.3', - ], - 'name' => [ - 'name' => 'name', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Name'), - 'description' => ts('Name of the rule group'), - 'maxlength' => 64, - 'size' => CRM_Utils_Type::BIG, - 'where' => 'civicrm_dedupe_rule_group.name', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'add' => '2.1', - ], - 'title' => [ - 'name' => 'title', - 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Title'), - 'description' => ts('Label of the rule group'), - 'maxlength' => 255, - 'size' => CRM_Utils_Type::HUGE, - 'where' => 'civicrm_dedupe_rule_group.title', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'html' => [ - 'type' => 'Text', - ], - 'add' => '4.1', - ], - 'is_reserved' => [ - 'name' => 'is_reserved', - 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Reserved?'), - 'description' => ts('Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin'), - 'where' => 'civicrm_dedupe_rule_group.is_reserved', - 'table_name' => 'civicrm_dedupe_rule_group', - 'entity' => 'RuleGroup', - 'bao' => 'CRM_Dedupe_BAO_RuleGroup', - 'localizable' => 0, - 'html' => [ - 'type' => 'CheckBox', - ], - 'add' => '4.1', - ], - ]; - CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); - } - return Civi::$statics[__CLASS__]['fields']; - } - - /** - * 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() { - if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { - Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); - } - return Civi::$statics[__CLASS__]['fieldKeys']; - } - - /** - * Returns the names of this table - * - * @return string - */ - public static function getTableName() { - return self::$_tableName; - } - - /** - * Returns if this table needs to be logged - * - * @return bool - */ - public function getLog() { - return self::$_log; - } - - /** - * Returns the list of fields that can be imported - * - * @param bool $prefix - * - * @return array - */ - public static function &import($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'dedupe_rule_group', $prefix, []); - return $r; - } - - /** - * Returns the list of fields that can be exported - * - * @param bool $prefix - * - * @return array - */ - public static function &export($prefix = FALSE) { - $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'dedupe_rule_group', $prefix, []); - return $r; - } - - /** - * Returns the list of indices - * - * @param bool $localize - * - * @return array - */ - public static function indices($localize = TRUE) { - $indices = []; - return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; - } - -} +class CRM_Dedupe_DAO_RuleGroup extends CRM_Dedupe_DAO_DedupeRuleGroup {} diff --git a/civicrm/CRM/Dedupe/Finder.php b/civicrm/CRM/Dedupe/Finder.php index a6d670e03c..a04648e07c 100644 --- a/civicrm/CRM/Dedupe/Finder.php +++ b/civicrm/CRM/Dedupe/Finder.php @@ -39,7 +39,7 @@ class CRM_Dedupe_Finder { * @throws \CRM_Core_Exception */ public static function dupes($rgid, $cids = [], $checkPermissions = TRUE) { - $rgBao = new CRM_Dedupe_BAO_RuleGroup(); + $rgBao = new CRM_Dedupe_BAO_DedupeRuleGroup(); $rgBao->id = $rgid; $rgBao->contactIds = $cids; if (!$rgBao->find(TRUE)) { @@ -99,7 +99,7 @@ class CRM_Dedupe_Finder { $foundByID = FALSE; if ($ruleGroupID) { - $rgBao = new CRM_Dedupe_BAO_RuleGroup(); + $rgBao = new CRM_Dedupe_BAO_DedupeRuleGroup(); $rgBao->id = $ruleGroupID; $rgBao->contact_type = $ctype; if ($rgBao->find(TRUE)) { @@ -108,7 +108,7 @@ class CRM_Dedupe_Finder { } if (!$foundByID) { - $rgBao = new CRM_Dedupe_BAO_RuleGroup(); + $rgBao = new CRM_Dedupe_BAO_DedupeRuleGroup(); $rgBao->contact_type = $ctype; $rgBao->used = $used; if (!$rgBao->find(TRUE)) { @@ -258,7 +258,7 @@ class CRM_Dedupe_Finder { } $params = []; - $supportedFields = CRM_Dedupe_BAO_RuleGroup::supportedFields($ctype); + $supportedFields = CRM_Dedupe_BAO_DedupeRuleGroup::supportedFields($ctype); if (is_array($supportedFields)) { foreach ($supportedFields as $table => $fields) { if ($table === 'civicrm_address') { diff --git a/civicrm/CRM/Dedupe/Merger.php b/civicrm/CRM/Dedupe/Merger.php index 1a48c744b5..f347897568 100644 --- a/civicrm/CRM/Dedupe/Merger.php +++ b/civicrm/CRM/Dedupe/Merger.php @@ -1702,7 +1702,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * @return string */ public static function getMergeCacheKeyString($rule_group_id, $group_id, $criteria, $checkPermissions, $searchLimit) { - $contactType = CRM_Dedupe_BAO_RuleGroup::getContactTypeForRuleGroup($rule_group_id); + $contactType = CRM_Dedupe_BAO_DedupeRuleGroup::getContactTypeForRuleGroup($rule_group_id); $cacheKeyString = "merge_{$contactType}"; $cacheKeyString .= $rule_group_id ? "_{$rule_group_id}" : '_0'; $cacheKeyString .= $group_id ? "_{$group_id}" : '_0'; diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index 01aba26a8b..8501319ed2 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -1169,6 +1169,7 @@ WHERE civicrm_event.is_active = 1 'credit_card_exp_date' => CRM_Utils_Date::mysqlToIso(CRM_Utils_Date::format(CRM_Utils_Array::value('credit_card_exp_date', $participantParams))), 'selfcancelxfer_time' => abs($values['event']['selfcancelxfer_time']), 'selfservice_preposition' => $values['event']['selfcancelxfer_time'] < 0 ? 'after' : 'before', + 'currency' => $values['event']['currency'] ?? CRM_Core_Config::singleton()->defaultCurrency, ]); // CRM-13890 : NOTE wait list condition need to be given so that diff --git a/civicrm/CRM/Event/BAO/Participant.php b/civicrm/CRM/Event/BAO/Participant.php index d4a44a57a2..90b9a2f6aa 100644 --- a/civicrm/CRM/Event/BAO/Participant.php +++ b/civicrm/CRM/Event/BAO/Participant.php @@ -652,7 +652,7 @@ INNER JOIN civicrm_price_field field ON ( value.price_field_id = field.id 'contact_type' => $contactType, 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); if (is_array($fieldsArray)) { foreach ($fieldsArray as $value) { diff --git a/civicrm/CRM/Event/DAO/Event.php b/civicrm/CRM/Event/DAO/Event.php index 7b6f30f952..5403c25a2b 100644 --- a/civicrm/CRM/Event/DAO/Event.php +++ b/civicrm/CRM/Event/DAO/Event.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Event.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c5779073cea9c6b4a959070ec0e95b6e) + * (GenCodeChecksum:e0bee3952ac39a53952b6a7979a79e13) */ /** @@ -1736,7 +1736,7 @@ class CRM_Event_DAO_Event extends CRM_Core_DAO { 'entity' => 'Event', 'bao' => 'CRM_Event_BAO_Event', 'localizable' => 0, - 'FKClassName' => 'CRM_Dedupe_DAO_RuleGroup', + 'FKClassName' => 'CRM_Dedupe_DAO_DedupeRuleGroup', 'html' => [ 'type' => 'Select', 'label' => ts("Dedupe Rule"), diff --git a/civicrm/CRM/Event/Form/ManageEvent/Registration.php b/civicrm/CRM/Event/Form/ManageEvent/Registration.php index 30cb12c564..16fcd9c3f5 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Registration.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Registration.php @@ -236,7 +236,7 @@ class CRM_Event_Form_ManageEvent_Registration extends CRM_Event_Form_ManageEvent 'used' => 'Supervised', 'contact_type' => 'Individual', ]; - $dedupeRuleFields = CRM_Dedupe_BAO_Rule::dedupeRuleFields($params); + $dedupeRuleFields = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($params); foreach ($dedupeRuleFields as $key => $fields) { $ruleFields[$key] = ucwords(str_replace('_', ' ', $fields)); @@ -260,7 +260,7 @@ class CRM_Event_Form_ManageEvent_Registration extends CRM_Event_Form_ManageEvent $dedupeRules = [ '' => '- Unsupervised rule -', ]; - $dedupeRules += CRM_Dedupe_BAO_RuleGroup::getByType('Individual'); + $dedupeRules += CRM_Dedupe_BAO_DedupeRuleGroup::getByType('Individual'); $this->add('select', 'dedupe_rule_group_id', ts('Duplicate matching rule'), $dedupeRules); $participantStatuses = CRM_Event_PseudoConstant::participantStatus(); @@ -688,11 +688,11 @@ class CRM_Event_Form_ManageEvent_Registration extends CRM_Event_Form_ManageEvent if ($rgId > 0) { $rgParams['id'] = $rgId; } - $activeRg = CRM_Dedupe_BAO_RuleGroup::dedupeRuleFieldsWeight($rgParams); + $activeRg = CRM_Dedupe_BAO_DedupeRuleGroup::dedupeRuleFieldsWeight($rgParams); // get the combinations that could be a match for the rule $okCombos = $combos = []; - CRM_Dedupe_BAO_RuleGroup::combos($activeRg[0], $activeRg[1], $combos); + CRM_Dedupe_BAO_DedupeRuleGroup::combos($activeRg[0], $activeRg[1], $combos); // create an index of what combinations involve each field $index = []; diff --git a/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php b/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php index 36b4619f51..7e1144afc2 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php +++ b/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php @@ -35,32 +35,30 @@ class CRM_Event_Form_ManageEvent_ScheduleReminders extends CRM_Event_Form_Manage $mapping = CRM_Utils_Array::first(CRM_Core_BAO_ActionSchedule::getMappings([ 'id' => ($this->_isTemplate ? CRM_Event_ActionMapping::EVENT_TPL_MAPPING_ID : CRM_Event_ActionMapping::EVENT_NAME_MAPPING_ID), ])); - $reminderList = CRM_Core_BAO_ActionSchedule::getList(FALSE, $mapping, $this->_id); - if ($reminderList && is_array($reminderList)) { - // Add action links to each of the reminders - foreach ($reminderList as & $format) { - $action = CRM_Core_Action::UPDATE + CRM_Core_Action::DELETE; - if ($format['is_active']) { - $action += CRM_Core_Action::DISABLE; - } - else { - $action += CRM_Core_Action::ENABLE; - } - $scheduleReminder = new CRM_Admin_Page_ScheduleReminders(); - $links = $scheduleReminder->links(); - $links[CRM_Core_Action::DELETE]['qs'] .= "&context=event&compId={$this->_id}"; - $links[CRM_Core_Action::UPDATE]['qs'] .= "&context=event&compId={$this->_id}"; - $format['action'] = CRM_Core_Action::formLink( - $links, - $action, - ['id' => $format['id']], - ts('more'), - FALSE, - 'actionSchedule.manage.action', - 'ActionSchedule', - $this->_id - ); + $reminderList = CRM_Core_BAO_ActionSchedule::getList($mapping, $this->_id); + // Add action links to each of the reminders + foreach ($reminderList as & $format) { + $action = CRM_Core_Action::UPDATE + CRM_Core_Action::DELETE; + if ($format['is_active']) { + $action += CRM_Core_Action::DISABLE; } + else { + $action += CRM_Core_Action::ENABLE; + } + $scheduleReminder = new CRM_Admin_Page_ScheduleReminders(); + $links = $scheduleReminder->links(); + $links[CRM_Core_Action::DELETE]['qs'] .= "&context=event&compId={$this->_id}"; + $links[CRM_Core_Action::UPDATE]['qs'] .= "&context=event&compId={$this->_id}"; + $format['action'] = CRM_Core_Action::formLink( + $links, + $action, + ['id' => $format['id']], + ts('more'), + FALSE, + 'actionSchedule.manage.action', + 'ActionSchedule', + $this->_id + ); } $this->assign('rows', $reminderList); diff --git a/civicrm/CRM/Event/Form/Participant.php b/civicrm/CRM/Event/Form/Participant.php index cf8c3a3803..951c2e0536 100644 --- a/civicrm/CRM/Event/Form/Participant.php +++ b/civicrm/CRM/Event/Form/Participant.php @@ -1312,7 +1312,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment ); } - // CRM-13964 partial_payment_total + // CRM-13964 partial payment if ($amountOwed > $params['total_amount']) { // the owed amount $contributionParams['total_amount'] = $amountOwed; @@ -1360,7 +1360,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment } // also store lineitem stuff here - if ((($this->_lineItem & $this->_action & CRM_Core_Action::ADD) || + if ((($this->_lineItem && $this->_action & CRM_Core_Action::ADD) || ($this->_lineItem && CRM_Core_Action::UPDATE && !$this->_paymentId)) ) { foreach ($this->_contactIds as $num => $contactID) { diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index 95a1de0410..12d1cfbecc 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -36,6 +36,15 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { */ public $_eventId; + /** + * Get the event it. + * + * @return int + */ + protected function getEventID(): int { + return $this->_eventId; + } + /** * The array of ids of all the participant we are processing. * @@ -173,7 +182,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { * Set variables up before form is built. */ public function preProcess() { - $this->_eventId = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); + $this->_eventId = (int) CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); $this->_action = CRM_Utils_Request::retrieve('action', 'Alphanumeric', $this, FALSE, CRM_Core_Action::ADD); //CRM-4320 $this->_participantId = CRM_Utils_Request::retrieve('participantId', 'Positive', $this); @@ -210,14 +219,9 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { $this->_additionalParticipantIds = $this->get('additionalParticipantIds'); if (!$this->_values) { - // create redirect URL to send folks back to event info page is registration not available - $infoUrl = CRM_Utils_System::url('civicrm/event/info', "reset=1&id={$this->_eventId}", - FALSE, NULL, FALSE, TRUE - ); - // this is the first time we are hitting this, so check for permissions here if (!CRM_Core_Permission::event(CRM_Core_Permission::EDIT, $this->_eventId, 'register for events')) { - CRM_Core_Error::statusBounce(ts('You do not have permission to register for this event'), $infoUrl); + CRM_Core_Error::statusBounce(ts('You do not have permission to register for this event'), $this->getInfoPageUrl()); } // get all the values from the dao object @@ -236,7 +240,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } - $this->checkValidEvent($infoUrl); + $this->checkValidEvent(); // get the participant values, CRM-4320 $this->_allowConfirmation = FALSE; if ($this->_participantId) { @@ -263,7 +267,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { //lets redirecting to info only when to waiting list. $this->_allowWaitlist = $this->_values['event']['has_waitlist'] ?? NULL; if (!$this->_allowWaitlist) { - CRM_Utils_System::redirect($infoUrl); + CRM_Utils_System::redirect($this->getInfoPageUrl()); } } $this->set('isEventFull', $this->_isEventFull); @@ -300,18 +304,14 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { 'module' => 'CiviEvent', 'entity_id' => $this->_eventId, ]; - list($this->_values['custom_pre_id'], - $this->_values['custom_post_id'] - ) = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams); + [$this->_values['custom_pre_id'], $this->_values['custom_post_id']] = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams); // set profiles for additional participants if ($this->_values['event']['is_multiple_registrations']) { // CRM-4377: CiviEvent for the main participant, CiviEvent_Additional for additional participants $ufJoinParams['module'] = 'CiviEvent_Additional'; - list($this->_values['additional_custom_pre_id'], - $this->_values['additional_custom_post_id'], $preActive, $postActive - ) = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams); + [$this->_values['additional_custom_pre_id'], $this->_values['additional_custom_post_id'], $preActive, $postActive] = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams); // CRM-4377: we need to maintain backward compatibility, hence if there is profile for main contact // set same profile for additional contacts. @@ -440,7 +440,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { foreach ($vars as $v) { if (!empty($params[$v])) { - if ($v == 'receive_date') { + if ($v === 'receive_date') { $this->assign($v, CRM_Utils_Date::mysqlToIso($params[$v])); } else { @@ -1100,7 +1100,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { * @param array $optionFullIds * @param CRM_Core_Form $form */ - public static function resetElementValue($optionFullIds = [], &$form) { + public static function resetElementValue($optionFullIds, &$form) { if (!is_array($optionFullIds) || empty($optionFullIds) || !$form->isSubmitted() @@ -1173,7 +1173,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { * @param array $optionIds * @param CRM_Core_Form $form */ - public static function resetSubmittedValue($elementName, $optionIds = [], &$form) { + public static function resetSubmittedValue($elementName, $optionIds, &$form) { if (empty($elementName) || !$form->elementExists($elementName) || !$form->getSubmitValue($elementName) @@ -1375,14 +1375,12 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { /** * Check if event is valid. * - * @param string $redirect - * * @todo - combine this with CRM_Event_BAO_Event::validRegistrationRequest * (probably extract relevant values here & call that with them & handle bounces & redirects here -as * those belong in the form layer) * */ - public function checkValidEvent($redirect = NULL) { + protected function checkValidEvent(): void { // is the event active (enabled)? if (!$this->_values['event']['is_active']) { // form is inactive, die a fatal death @@ -1391,12 +1389,12 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { // is online registration is enabled? if (!$this->_values['event']['is_online_registration']) { - CRM_Core_Error::statusBounce(ts('Online registration is not currently available for this event (contact the site administrator for assistance).'), $redirect); + CRM_Core_Error::statusBounce(ts('Online registration is not currently available for this event (contact the site administrator for assistance).'), $this->getInfoPageUrl()); } // is this an event template ? if (!empty($this->_values['event']['is_template'])) { - CRM_Core_Error::statusBounce(ts('Event templates are not meant to be registered.'), $redirect); + CRM_Core_Error::statusBounce(ts('Event templates are not meant to be registered.'), $this->getInfoPageUrl()); } $now = date('YmdHis'); @@ -1408,7 +1406,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { $startDate && $startDate >= $now ) { - CRM_Core_Error::statusBounce(ts('Registration for this event begins on %1', [1 => CRM_Utils_Date::customFormat(CRM_Utils_Array::value('registration_start_date', $this->_values['event']))]), $redirect, ts('Sorry')); + CRM_Core_Error::statusBounce(ts('Registration for this event begins on %1', [1 => CRM_Utils_Date::customFormat(CRM_Utils_Array::value('registration_start_date', $this->_values['event']))]), $this->getInfoPageUrl(), ts('Sorry')); } $regEndDate = CRM_Utils_Date::processDate(CRM_Utils_Array::value('registration_end_date', @@ -1420,7 +1418,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { if (empty($regEndDate)) { $endDate = CRM_Utils_Date::customFormat(CRM_Utils_Array::value('event_end_date', $this->_values['event'])); } - CRM_Core_Error::statusBounce(ts('Registration for this event ended on %1', [1 => $endDate]), $redirect, ts('Sorry')); + CRM_Core_Error::statusBounce(ts('Registration for this event ended on %1', [1 => $endDate]), $this->getInfoPageUrl(), ts('Sorry')); } } @@ -1642,4 +1640,15 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { } } + /** + * Get redirect URL to send folks back to event info page is registration not available. + * + * @return string + */ + private function getInfoPageUrl(): string { + return CRM_Utils_System::url('civicrm/event/info', 'reset=1&id=' . $this->getEventID(), + FALSE, NULL, FALSE, TRUE + ); + } + } diff --git a/civicrm/CRM/Event/Form/Task/Batch.php b/civicrm/CRM/Event/Form/Task/Batch.php index 19e5a13c92..430285370c 100644 --- a/civicrm/CRM/Event/Form/Task/Batch.php +++ b/civicrm/CRM/Event/Form/Task/Batch.php @@ -358,11 +358,7 @@ class CRM_Event_Form_Task_Batch extends CRM_Event_Form_Task { //complete the contribution. // @todo use the api - ie civicrm_api3('Contribution', 'completetransaction', $input); // as this method is not preferred / supported. - CRM_Contribute_BAO_Contribution::completeOrder($input, [ - 'related_contact' => NULL, - 'participant' => $params['component_id'], - 'contributionRecur' => NULL, - ], $contribution->id ?? NULL); + CRM_Contribute_BAO_Contribution::completeOrder($input, NULL, $contribution->id ?? NULL); // reset template values before processing next transactions $template->clearTemplateVars(); diff --git a/civicrm/CRM/Event/Import/Parser.php b/civicrm/CRM/Event/Import/Parser.php index aa5282a866..d1b02676d4 100644 --- a/civicrm/CRM/Event/Import/Parser.php +++ b/civicrm/CRM/Event/Import/Parser.php @@ -60,7 +60,7 @@ abstract class CRM_Event_Import_Parser extends CRM_Import_Parser { */ public function run( $fileName, - $separator = ',', + $separator, &$mapper, $skipColumnHeader = FALSE, $mode = self::MODE_PREVIEW, diff --git a/civicrm/CRM/Event/Import/Parser/Participant.php b/civicrm/CRM/Event/Import/Parser/Participant.php index 423c37adea..e9ce6d6b71 100644 --- a/civicrm/CRM/Event/Import/Parser/Participant.php +++ b/civicrm/CRM/Event/Import/Parser/Participant.php @@ -201,7 +201,7 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { $val = explode(',', $val); if ($key == 'participant_role_id') { foreach ($val as $role) { - if (!in_array(trim($role), array_keys($roleIDs))) { + if (!array_key_exists(trim($role), $roleIDs)) { CRM_Contact_Import_Parser_Contact::addToErrorMsg('Participant Role Id', $errorMessage); break; } @@ -219,7 +219,7 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { elseif ($val && (($key == 'participant_status_id') || ($key == 'participant_status'))) { $statusIDs = CRM_Event_PseudoConstant::participantStatus(); if ($key == 'participant_status_id') { - if (!in_array(trim($val), array_keys($statusIDs))) { + if (!array_key_exists(trim($val), $statusIDs)) { CRM_Contact_Import_Parser_Contact::addToErrorMsg('Participant Status Id', $errorMessage); break; } @@ -396,7 +396,7 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { 'contact_type' => $this->_contactType, 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $disp = ''; foreach ($fieldsArray as $value) { diff --git a/civicrm/CRM/Event/Page/ManageEvent.php b/civicrm/CRM/Event/Page/ManageEvent.php index f0d05726c5..6c45eb732d 100644 --- a/civicrm/CRM/Event/Page/ManageEvent.php +++ b/civicrm/CRM/Event/Page/ManageEvent.php @@ -480,7 +480,7 @@ ORDER BY start_date desc * * @return string */ - public function whereClause(&$params, $sortBy = TRUE, $force) { + public function whereClause(&$params, $sortBy, $force) { $values = []; $clauses = []; $title = $this->get('title'); @@ -575,7 +575,7 @@ ORDER BY start_date desc $params['buttonBottom'] = 'PagerBottomButton'; $params['rowCount'] = $this->get(CRM_Utils_Pager::PAGE_ROWCOUNT); if (!$params['rowCount']) { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $query = " diff --git a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php index 43b5aff703..a9eb028d16 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php @@ -114,7 +114,7 @@ LIMIT $offset, $rowCount"; $params['buttonBottom'] = 'PagerBottomButton'; $params['rowCount'] = $this->get(CRM_Utils_Pager::PAGE_ROWCOUNT); if (!$params['rowCount']) { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $query = " diff --git a/civicrm/CRM/Event/Page/ParticipantListing/Simple.php b/civicrm/CRM/Event/Page/ParticipantListing/Simple.php index 58368dce2e..5452d805dd 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/Simple.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/Simple.php @@ -104,7 +104,7 @@ LIMIT $offset, $rowCount"; $params['buttonBottom'] = 'PagerBottomButton'; $params['rowCount'] = $this->get(CRM_Utils_Pager::PAGE_ROWCOUNT); if (!$params['rowCount']) { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $query = " diff --git a/civicrm/CRM/Extension/Manager.php b/civicrm/CRM/Extension/Manager.php index 5b32af8dd0..14c7128dd6 100644 --- a/civicrm/CRM/Extension/Manager.php +++ b/civicrm/CRM/Extension/Manager.php @@ -382,36 +382,41 @@ class CRM_Extension_Manager { $this->addProcess($keys, 'disable'); foreach ($keys as $key) { - switch ($origStatuses[$key]) { - case self::STATUS_INSTALLED: - $this->addProcess([$key], 'disabling'); - // throws Exception - list ($info, $typeManager) = $this->_getInfoTypeHandler($key); - $typeManager->onPreDisable($info); - $this->_setExtensionActive($info, 0); - $typeManager->onPostDisable($info); - $this->popProcess([$key]); - break; - - case self::STATUS_INSTALLED_MISSING: - // throws Exception - list ($info, $typeManager) = $this->_getMissingInfoTypeHandler($key); - $typeManager->onPreDisable($info); - $this->_setExtensionActive($info, 0); - $typeManager->onPostDisable($info); - break; - - case self::STATUS_DISABLED: - case self::STATUS_DISABLED_MISSING: - case self::STATUS_UNINSTALLED: - // ok, nothing to do - // Remove the 'disable' process as we're not doing that. - $this->popProcess([$key]); - break; - - case self::STATUS_UNKNOWN: - default: - throw new CRM_Extension_Exception("Cannot disable unknown extension: $key"); + if (isset($origStatuses[$key])) { + switch ($origStatuses[$key]) { + case self::STATUS_INSTALLED: + $this->addProcess([$key], 'disabling'); + // throws Exception + list ($info, $typeManager) = $this->_getInfoTypeHandler($key); + $typeManager->onPreDisable($info); + $this->_setExtensionActive($info, 0); + $typeManager->onPostDisable($info); + $this->popProcess([$key]); + break; + + case self::STATUS_INSTALLED_MISSING: + // throws Exception + list ($info, $typeManager) = $this->_getMissingInfoTypeHandler($key); + $typeManager->onPreDisable($info); + $this->_setExtensionActive($info, 0); + $typeManager->onPostDisable($info); + break; + + case self::STATUS_DISABLED: + case self::STATUS_DISABLED_MISSING: + case self::STATUS_UNINSTALLED: + // ok, nothing to do + // Remove the 'disable' process as we're not doing that. + $this->popProcess([$key]); + break; + + case self::STATUS_UNKNOWN: + default: + throw new CRM_Extension_Exception("Cannot disable unknown extension: $key"); + } + } + else { + throw new CRM_Extension_Exception("Cannot disable unknown extension: $key"); } } diff --git a/civicrm/CRM/Financial/BAO/FinancialItem.php b/civicrm/CRM/Financial/BAO/FinancialItem.php index d63db1dbb8..e3cc03c6a9 100644 --- a/civicrm/CRM/Financial/BAO/FinancialItem.php +++ b/civicrm/CRM/Financial/BAO/FinancialItem.php @@ -183,7 +183,13 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem { } /** - * Retrive entity financial trxn details. + * Retrieve entity financial trxn details. + * + * @deprecated - only called by tests - to be replaced with + * $trxn = (array) EntityFinancialTrxn::get() + * ->addWhere('id', '=', $contributionID) + * ->addWhere('entity_table', '=', 'civicrm_contribution') + * ->addSelect('*')->execute(); * * @param array $params * an assoc array of name/value pairs. @@ -283,4 +289,16 @@ WHERE cc.id IN (' . implode(',', $contactIds) . ') AND con.is_test = 0'; return civicrm_api3('FinancialItem', 'getsingle', $params); } + /** + * Whitelist of possible values for the entity_table field + * + * @return array + */ + public static function entityTables(): array { + return [ + 'civicrm_line_item' => ts('Line Item'), + 'civicrm_financial_trxn' => ts('Financial Trxn'), + ]; + } + } diff --git a/civicrm/CRM/Financial/BAO/FinancialType.php b/civicrm/CRM/Financial/BAO/FinancialType.php index 9003eb8d16..86d3528066 100644 --- a/civicrm/CRM/Financial/BAO/FinancialType.php +++ b/civicrm/CRM/Financial/BAO/FinancialType.php @@ -420,20 +420,20 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { * @param string $op * the mode of operation, can be add, view, edit, delete * @param bool $force + * @param int $contactID * * @return bool */ - public static function checkPermissionedLineItems($id, $op, $force = TRUE) { + public static function checkPermissionedLineItems($id, $op, $force = TRUE, $contactID = NULL) { if (!self::isACLFinancialTypeStatus()) { return TRUE; } $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($id); $flag = FALSE; foreach ($lineItems as $items) { - if (!CRM_Core_Permission::check($op . ' contributions of type ' . CRM_Contribute_PseudoConstant::financialType($items['financial_type_id']))) { + if (!CRM_Core_Permission::check($op . ' contributions of type ' . CRM_Contribute_PseudoConstant::financialType($items['financial_type_id']), $contactID)) { if ($force) { throw new CRM_Core_Exception(ts('You do not have permission to access this page.')); - break; } $flag = FALSE; break; diff --git a/civicrm/CRM/Financial/BAO/Order.php b/civicrm/CRM/Financial/BAO/Order.php index d4916e7e4e..960aa1a0ad 100644 --- a/civicrm/CRM/Financial/BAO/Order.php +++ b/civicrm/CRM/Financial/BAO/Order.php @@ -199,6 +199,38 @@ class CRM_Financial_BAO_Order { $this->priceSetID = $priceSetID; } + /** + * Set price set ID based on the contribution page id. + * + * @param int $contributionPageID + * + * @throws \CiviCRM_API3_Exception + */ + public function setPriceSetIDByContributionPageID(int $contributionPageID): void { + $this->setPriceSetIDByEntity('contribution_page', $contributionPageID); + } + + /** + * Set price set ID based on the event id. + * + * @param int $eventID + * + * @throws \CiviCRM_API3_Exception + */ + public function setPriceSetIDByEventPageID(int $eventID): void { + $this->setPriceSetIDByEntity('event', $eventID); + } + + /** + * Set the price set id based on looking up the entity. + * @param string $entity + * @param int $id + * + */ + protected function setPriceSetIDByEntity(string $entity, int $id): void { + $this->priceSetID = CRM_Price_BAO_PriceSet::getFor('civicrm_' . $entity, $id); + } + /** * Getter for price selection. * @@ -438,7 +470,7 @@ class CRM_Financial_BAO_Order { } /** - * Get the total tax amount for the order. + * Get the total amount for the order. * * @return float * @@ -447,7 +479,22 @@ class CRM_Financial_BAO_Order { public function getTotalAmount() :float { $amount = 0.0; foreach ($this->getLineItems() as $lineItem) { - $amount += $lineItem['line_total'] ?? 0.0; + $amount += ($lineItem['line_total'] ?? 0.0) + ($lineItem['tax_amount'] ?? 0.0); + } + return $amount; + } + + /** + * Get the total amount relating to memberships for the order. + * + * @return float + * + * @throws \CiviCRM_API3_Exception + */ + public function getMembershipTotalAmount() :float { + $amount = 0.0; + foreach ($this->getMembershipLineItems() as $lineItem) { + $amount += ($lineItem['line_total'] ?? 0.0) + ($lineItem['tax_amount'] ?? 0.0); } return $amount; } diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessor.php b/civicrm/CRM/Financial/BAO/PaymentProcessor.php index a24cde25ea..7c94cad4f6 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessor.php @@ -32,9 +32,11 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces * Parameters for Processor entity. * * @return CRM_Financial_DAO_PaymentProcessor - * @throws Exception + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ - public static function create($params) { + public static function create(array $params): CRM_Financial_DAO_PaymentProcessor { // If we are creating a new PaymentProcessor and have not specified the payment instrument to use, get the default from the Payment Processor Type. if (empty($params['id']) && empty($params['payment_instrument_id'])) { $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', [ @@ -88,16 +90,9 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces return $processor; } - /** - * Class constructor. - */ - public function __construct() { - parent::__construct(); - } - /** * Retrieve array of allowed credit cards for this payment processor. - * @param interger|null $paymentProcessorID id of processor. + * @param integer|null $paymentProcessorID id of processor. * @return array */ public static function getCreditCards($paymentProcessorID = NULL) { @@ -227,7 +222,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces * associated array with payment processor related fields */ public static function getPayment($paymentProcessorID, $mode = 'based_on_id') { - $capabilities = ($mode == 'test') ? ['TestMode'] : []; + $capabilities = ($mode === 'test') ? ['TestMode'] : []; $processors = self::getPaymentProcessors($capabilities, [$paymentProcessorID]); return $processors[$paymentProcessorID]; } @@ -305,10 +300,10 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces if ($isCurrentDomainOnly) { $retrievalParameters['domain_id'] = CRM_Core_Config::domainID(); } - if ($mode == 'test') { + if ($mode === 'test') { $retrievalParameters['is_test'] = 1; } - elseif ($mode == 'live') { + elseif ($mode === 'live') { $retrievalParameters['is_test'] = 0; } @@ -417,7 +412,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces } // Invalid processors will store a null value in 'object' (e.g. if not all required config fields are present). // This is determined by calling when loading the processor via the $processorObject->checkConfig() function. - if (!$processor['object'] instanceof \CRM_Core_Payment) { + if (!$processor['object'] instanceof CRM_Core_Payment) { unset($processors[$index]); continue; } @@ -504,7 +499,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces return $result; } - if ($component == 'membership') { + if ($component === 'membership') { $sql = " SELECT cr.payment_processor_id as ppID1, cp.payment_processor as ppID2, con.is_test FROM civicrm_membership mem @@ -514,7 +509,7 @@ INNER JOIN civicrm_contribution con ON ( mp.contribution_id = con.id ) LEFT JOIN civicrm_contribution_page cp ON ( con.contribution_page_id = cp.id ) WHERE mp.membership_id = %1"; } - elseif ($component == 'contribute') { + elseif ($component === 'contribute') { $sql = " SELECT cr.payment_processor_id as ppID1, cp.payment_processor as ppID2, con.is_test FROM civicrm_contribution con @@ -522,7 +517,7 @@ INNER JOIN civicrm_contribution con ON ( mp.contribution_id = con.id ) LEFT JOIN civicrm_contribution_page cp ON ( con.contribution_page_id = cp.id ) WHERE con.id = %1"; } - elseif ($component == 'recur') { + elseif ($component === 'recur') { // @deprecated - use getPaymentProcessorForRecurringContribution. $sql = " SELECT cr.payment_processor_id as ppID1, NULL as ppID2, cr.is_test @@ -544,13 +539,13 @@ INNER JOIN civicrm_contribution con ON ( mp.contribution_id = con.id ) $ppID = (isset($dao->ppID1) && $dao->ppID1) ? $dao->ppID1 : ($dao->ppID2 ?? NULL); $mode = (isset($dao->is_test) && $dao->is_test) ? 'test' : 'live'; - if (!$ppID || $type == 'id') { + if (!$ppID || $type === 'id') { $result = $ppID; } - elseif ($type == 'info') { + elseif ($type === 'info') { $result = self::getPayment($ppID, $mode); } - elseif ($type == 'obj' && is_numeric($ppID)) { + elseif ($type === 'obj' && is_numeric($ppID)) { try { $paymentProcessor = civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $ppID]); } diff --git a/civicrm/CRM/Financial/DAO/FinancialItem.php b/civicrm/CRM/Financial/DAO/FinancialItem.php index 6d1f8098f7..2e99cdfd69 100644 --- a/civicrm/CRM/Financial/DAO/FinancialItem.php +++ b/civicrm/CRM/Financial/DAO/FinancialItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b63c826a61c494010c7628672e82fc27) + * (GenCodeChecksum:c9deaca104b5b1126ad3a064c520d0c3) */ /** @@ -93,7 +93,7 @@ class CRM_Financial_DAO_FinancialItem extends CRM_Core_DAO { public $status_id; /** - * The table providing the source of this item such as civicrm_line_item + * May contain civicrm_line_item, civicrm_financial_trxn etc * * @var string */ @@ -315,7 +315,7 @@ class CRM_Financial_DAO_FinancialItem extends CRM_Core_DAO { 'name' => 'entity_table', 'type' => CRM_Utils_Type::T_STRING, 'title' => ts('Entity Table'), - 'description' => ts('The table providing the source of this item such as civicrm_line_item'), + 'description' => ts('May contain civicrm_line_item, civicrm_financial_trxn etc'), 'maxlength' => 64, 'size' => CRM_Utils_Type::BIG, 'where' => 'civicrm_financial_item.entity_table', @@ -323,6 +323,9 @@ class CRM_Financial_DAO_FinancialItem extends CRM_Core_DAO { 'entity' => 'FinancialItem', 'bao' => 'CRM_Financial_BAO_FinancialItem', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Financial_BAO_FinancialItem::entityTables', + ], 'add' => '4.3', ], 'entity_id' => [ diff --git a/civicrm/CRM/Grant/Selector/Search.php b/civicrm/CRM/Grant/Selector/Search.php index 07a2205f8a..454ab8aaec 100644 --- a/civicrm/CRM/Grant/Selector/Search.php +++ b/civicrm/CRM/Grant/Selector/Search.php @@ -211,7 +211,7 @@ class CRM_Grant_Selector_Search extends CRM_Core_Selector_Base implements CRM_Co $params['rowCount'] = $this->_limit; } else { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $params['buttonTop'] = 'PagerTopButton'; diff --git a/civicrm/CRM/Import/Form/MapField.php b/civicrm/CRM/Import/Form/MapField.php index 31212c0dee..41fe9a6da5 100644 --- a/civicrm/CRM/Import/Form/MapField.php +++ b/civicrm/CRM/Import/Form/MapField.php @@ -180,7 +180,7 @@ abstract class CRM_Import_Form_MapField extends CRM_Core_Form { * Message if insufficient fields are present. Empty string otherwise. */ protected static function validateRequiredContactMatchFields(string $contactType, array $importKeys): string { - [$ruleFields, $threshold] = CRM_Dedupe_BAO_RuleGroup::dedupeRuleFieldsWeight([ + [$ruleFields, $threshold] = CRM_Dedupe_BAO_DedupeRuleGroup::dedupeRuleFieldsWeight([ 'used' => 'Unsupervised', 'contact_type' => $contactType, ]); diff --git a/civicrm/CRM/Logging/Reverter.php b/civicrm/CRM/Logging/Reverter.php index eb1c9dedc1..9d65c0c938 100644 --- a/civicrm/CRM/Logging/Reverter.php +++ b/civicrm/CRM/Logging/Reverter.php @@ -140,7 +140,7 @@ class CRM_Logging_Reverter { // custom data tables - case in_array($table, array_keys($ctypes)): + case array_key_exists($table, $ctypes): foreach ($row as $id => $changes) { $inserts = ['id' => '%1']; $updates = []; diff --git a/civicrm/CRM/Logging/Schema.php b/civicrm/CRM/Logging/Schema.php index 6fc36509a4..356aaf8fae 100644 --- a/civicrm/CRM/Logging/Schema.php +++ b/civicrm/CRM/Logging/Schema.php @@ -242,6 +242,9 @@ AND (TABLE_NAME LIKE 'log_civicrm_%' $nonStandardTableNameString ) $tableNames = $this->tables; } + // Sort the table names so the sql output is consistent for those sites + // loading it asynchronously (using the setting 'logging_no_trigger_permission') + asort($tableNames); foreach ($tableNames as $table) { $validName = CRM_Core_DAO::shortenSQLName($table, 48, TRUE); @@ -518,10 +521,8 @@ AND (TABLE_NAME LIKE 'log_civicrm_%' $nonStandardTableNameString ) /** * Fix schema differences. - * - * @param bool $rebuildTrigger */ - public function fixSchemaDifferencesForAll($rebuildTrigger = FALSE) { + public function fixSchemaDifferencesForAll(): void { $diffs = []; $this->resetTableColumnsCache(); @@ -537,10 +538,6 @@ AND (TABLE_NAME LIKE 'log_civicrm_%' $nonStandardTableNameString ) foreach ($diffs as $table => $cols) { $this->fixSchemaDifferencesFor($table, $cols); } - if ($rebuildTrigger) { - // invoke the meta trigger creation call - CRM_Core_DAO::triggerRebuild(NULL, TRUE); - } } /** diff --git a/civicrm/CRM/Mailing/BAO/Mailing.php b/civicrm/CRM/Mailing/BAO/Mailing.php index 269bf3d8ea..576a5cfffd 100644 --- a/civicrm/CRM/Mailing/BAO/Mailing.php +++ b/civicrm/CRM/Mailing/BAO/Mailing.php @@ -1327,7 +1327,7 @@ ORDER BY civicrm_email.is_bulkmail DESC * * @return bool|mixed|null|string */ - private function getTokenData(&$token_a, $html = FALSE, &$contact, &$verp, &$urls, $event_queue_id) { + private function getTokenData(&$token_a, $html, &$contact, &$verp, &$urls, $event_queue_id) { $type = $token_a['type']; $token = $token_a['token']; $data = $token; diff --git a/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php b/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php index 856f577edb..530fa1ece3 100644 --- a/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php +++ b/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php @@ -271,8 +271,8 @@ class CRM_Mailing_Event_BAO_TrackableURLOpen extends CRM_Mailing_Event_DAO_Track * Result set */ public static function &getRows( - $mailing_id, $job_id = NULL, - $is_distinct = FALSE, $url_id, + $mailing_id, $job_id, + $is_distinct, $url_id, $offset = NULL, $rowCount = NULL, $sort = NULL, $contact_id = NULL ) { diff --git a/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php index ee26c8c76a..ff7415fa4e 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php @@ -299,7 +299,7 @@ WHERE email = %2 * @param int $job * The job ID. */ - public static function send_unsub_response($queue_id, $groups, $is_domain = FALSE, $job) { + public static function send_unsub_response($queue_id, $groups, $is_domain, $job) { $config = CRM_Core_Config::singleton(); $domain = CRM_Core_BAO_Domain::getDomain(); $jobObject = new CRM_Mailing_BAO_MailingJob(); diff --git a/civicrm/CRM/Mailing/Selector/Browse.php b/civicrm/CRM/Mailing/Selector/Browse.php index 91ac83909b..8151febab9 100644 --- a/civicrm/CRM/Mailing/Selector/Browse.php +++ b/civicrm/CRM/Mailing/Selector/Browse.php @@ -62,7 +62,7 @@ class CRM_Mailing_Selector_Browse extends CRM_Core_Selector_Base implements CRM_ */ public function getPagerParams($action, &$params) { $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['status'] = ts('Mailings %%StatusMessage%%'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; diff --git a/civicrm/CRM/Mailing/Selector/Event.php b/civicrm/CRM/Mailing/Selector/Event.php index 638125a3d1..9c5aa0cd09 100644 --- a/civicrm/CRM/Mailing/Selector/Event.php +++ b/civicrm/CRM/Mailing/Selector/Event.php @@ -107,7 +107,7 @@ class CRM_Mailing_Selector_Event extends CRM_Core_Selector_Base implements CRM_C */ public function getPagerParams($action, &$params) { $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['status'] = ts('%1 %%StatusMessage%%', [1 => $this->eventToTitle()]); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; diff --git a/civicrm/CRM/Mailing/Selector/Search.php b/civicrm/CRM/Mailing/Selector/Search.php index 2c2cdb7421..b37a2cc323 100644 --- a/civicrm/CRM/Mailing/Selector/Search.php +++ b/civicrm/CRM/Mailing/Selector/Search.php @@ -213,7 +213,7 @@ class CRM_Mailing_Selector_Search extends CRM_Core_Selector_Base implements CRM_ $params['rowCount'] = $this->_limit; } else { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $params['buttonTop'] = 'PagerTopButton'; diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index a3f77a558e..98f2f530e4 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -344,22 +344,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { // Record contribution for this membership and create a MembershipPayment // @todo deprecate this. - if (!empty($params['contribution_status_id']) && empty($params['relate_contribution_id'])) { + if (!empty($params['contribution_status_id'])) { $memInfo = array_merge($params, ['membership_id' => $membership->id]); $params['contribution'] = self::recordMembershipContribution($memInfo); } - // Add/update MembershipPayment record for this membership if it is a related contribution - // @todo remove this - called from one remaining place in CRM_Member_Form_Membership - if (!empty($params['relate_contribution_id'])) { - $membershipPaymentParams = [ - 'membership_id' => $membership->id, - 'membership_type_id' => $membership->membership_type_id, - 'contribution_id' => $params['relate_contribution_id'], - ]; - civicrm_api3('MembershipPayment', 'create', $membershipPaymentParams); - } - // If the membership has no associated contribution then we ensure // the line items are 'correct' here. This is a lazy legacy // hack whereby they are deleted and recreated @@ -936,7 +925,7 @@ INNER JOIN civicrm_membership_type type ON ( type.id = membership.membership_ty 'contact_type' => $contactType, 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $tmpContactField = []; if (is_array($fieldsArray)) { @@ -1773,6 +1762,8 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND } /** + * @deprecated + * * @param int $contactID * @param int $membershipTypeID * @param bool $is_test @@ -1786,7 +1777,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND * @param $membershipSource * @param $isPayLater * @param array $memParams - * @param array $formDates * @param null|CRM_Contribute_BAO_Contribution $contribution * @param array $lineItems * @@ -1794,7 +1784,8 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function processMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $membershipSource, $isPayLater, $memParams = [], $formDates = [], $contribution = NULL, $lineItems = []) { + public static function processMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $membershipSource, $isPayLater, $memParams = [], $contribution = NULL, $lineItems = []) { + CRM_Core_Error::deprecatedFunctionWarning('use the order api, BAO functions should only be called from unit tested core code.'); $renewalMode = $updateStatusId = FALSE; $allStatus = CRM_Member_PseudoConstant::membershipStatus(); $format = '%Y%m%d'; @@ -1856,10 +1847,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND $currentMembership['join_date'] = CRM_Utils_Date::customFormat($currentMembership['join_date'], $format); foreach (['start_date', 'end_date'] as $dateType) { - $currentMembership[$dateType] = $formDates[$dateType] ?? NULL; - if (empty($currentMembership[$dateType])) { - $currentMembership[$dateType] = $dates[$dateType] ?? NULL; - } + $currentMembership[$dateType] = $dates[$dateType] ?? NULL; } $currentMembership['is_test'] = $is_test; @@ -1891,11 +1879,8 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND // Insert renewed dates for CURRENT membership $memParams['join_date'] = CRM_Utils_Date::isoToMysql($membership->join_date); - $memParams['start_date'] = $formDates['start_date'] ?? CRM_Utils_Date::isoToMysql($membership->start_date); - $memParams['end_date'] = $formDates['end_date'] ?? NULL; - if (empty($memParams['end_date'])) { - $memParams['end_date'] = $dates['end_date'] ?? NULL; - } + $memParams['start_date'] = CRM_Utils_Date::isoToMysql($membership->start_date); + $memParams['end_date'] = $dates['end_date'] ?? NULL; $memParams['membership_type_id'] = $membershipTypeID; //set the log start date. @@ -1929,10 +1914,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND $dates = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipTypeID, NULL, NULL, NULL, $numRenewTerms); foreach (['join_date', 'start_date', 'end_date'] as $dateType) { - $memParams[$dateType] = $formDates[$dateType] ?? NULL; - if (empty($memParams[$dateType])) { - $memParams[$dateType] = $dates[$dateType] ?? NULL; - } + $memParams[$dateType] = $dates[$dateType] ?? NULL; } $status = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate(CRM_Utils_Date::customFormat($dates['start_date'], diff --git a/civicrm/CRM/Member/Form.php b/civicrm/CRM/Member/Form.php index 452bd38114..b5a5d5403f 100644 --- a/civicrm/CRM/Member/Form.php +++ b/civicrm/CRM/Member/Form.php @@ -352,6 +352,18 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { return (int) ($this->getSubmittedValue('soft_credit_contact_id') ?: $this->getSubmittedValue('contact_id')); } + /** + * Get the contact id for the contribution. + * + * @return int + */ + protected function getMembershipContactID(): int { + // It's not clear that $this->_contactID *could* be set outside + // tests when contact_id is not submitted - so this fallback + // is precautionary in order to be similar to past behaviour. + return (int) ($this->getSubmittedValue('contact_id') ?: $this->_contactID); + } + /** * Set variables in a way that can be accessed from different places. * diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index 7d6667a9ee..ed0442b8d5 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -945,6 +945,10 @@ DESC limit 1"); if (!empty($formValues['contribution_id'])) { $form->assign('contributionID', $formValues['contribution_id']); + $form->assign('currency', CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $formValues['contribution_id'], 'currency')); + } + else { + $form->assign('currency', CRM_Core_Config::singleton()->defaultCurrency); } if (!empty($formValues['contribution_status_id'])) { @@ -1144,11 +1148,10 @@ DESC limit 1"); $result = NULL; if ($this->isCreateRecurringContribution()) { $this->_params = $formValues; - - $contribution = civicrm_api3('Contribution', 'create', + $contribution = civicrm_api3('Order', 'create', [ 'contact_id' => $this->_contributorContactID, - 'line_item' => [$this->order->getPriceSetID() => $this->order->getLineItems()], + 'line_items' => $this->getLineItemForOrderApi(), 'is_test' => $this->isTest(), 'campaign_id' => $this->getSubmittedValue('campaign_id'), 'source' => CRM_Utils_Array::value('source', $paymentParams, CRM_Utils_Array::value('description', $paymentParams)), @@ -1159,12 +1162,13 @@ DESC limit 1"); 'total_amount' => $this->order->getTotalAmount(), 'invoice_id' => $this->getInvoiceID(), 'currency' => $this->getCurrency(), - 'contribution_status_id' => 'Pending', 'receipt_date' => $this->getSubmittedValue('send_receipt') ? date('YmdHis') : NULL, 'contribution_recur_id' => $this->getContributionRecurID(), 'skipCleanMoney' => TRUE, ] ); + $this->ids['Contribution'] = $contribution['id']; + $this->setMembershipIDsFromOrder($contribution); //create new soft-credit record, CRM-13981 if ($softParams) { @@ -1190,6 +1194,16 @@ DESC limit 1"); $result = $payment->doPayment($paymentParams); $formValues = array_merge($formValues, $result); $paymentStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $formValues['payment_status_id']); + if (!empty($params['contribution_id']) && $paymentStatus === 'Completed') { + civicrm_api3('Payment', 'create', [ + 'fee_amount' => $result['fee_amount'] ?? 0, + 'total_amount' => $this->order->getTotalAmount(), + 'payment_instrument_id' => $this->getPaymentInstrumentID(), + 'trxn_id' => $result['trxn_id'], + 'contribution_id' => $params['contribution_id'], + 'is_send_contribution_notification' => FALSE, + ]); + } } catch (\Civi\Payment\Exception\PaymentProcessorException $e) { if (!empty($paymentParams['contributionID'])) { @@ -1245,12 +1259,6 @@ DESC limit 1"); //create membership record. $count = 0; foreach ($this->_memTypeSelected as $memType) { - if ($count && - ($relateContribution = CRM_Member_BAO_Membership::getMembershipContributionId($this->getMembershipID())) - ) { - $membershipTypeValues[$memType]['relate_contribution_id'] = $relateContribution; - } - $membershipParams = array_merge($membershipTypeValues[$memType], $params); //CRM-15366 if (!empty($softParams) && !$this->isCreateRecurringContribution()) { @@ -1273,10 +1281,14 @@ DESC limit 1"); } $membershipParams['payment_instrument_id'] = $this->getPaymentInstrumentID(); // @todo stop passing $ids (membership and userId only are set above) - $this->setMembership((array) CRM_Member_BAO_Membership::create($membershipParams, $ids)); + if (!$this->isCreateRecurringContribution()) { + // For recurring we already created it 'the right way' (order api). + // In time we will do that for all paths through this code but for now + // we have not migrated the other paths. + $this->setMembership((array) CRM_Member_BAO_Membership::create($membershipParams, $ids)); + } $params['contribution'] = $membershipParams['contribution'] ?? NULL; unset($params['lineItems']); - $count++; } } @@ -1348,7 +1360,7 @@ DESC limit 1"); $this->assign('lineItem', !empty($lineItem) && !$isQuickConfig ? $lineItem : FALSE); $receiptSend = FALSE; - $contributionId = CRM_Member_BAO_Membership::getMembershipContributionId($this->getMembershipID()); + $contributionId = $this->ids['Contribution'] ?? CRM_Member_BAO_Membership::getMembershipContributionId($this->getMembershipID()); $membershipIds = $this->_membershipIDs; if ($contributionId && !empty($membershipIds)) { $contributionDetails = CRM_Contribute_BAO_Contribution::getContributionDetails( @@ -1783,12 +1795,15 @@ DESC limit 1"); * against breakage if code is moved around). * * @return array + * @throws \API_Exception + * @throws \CiviCRM_API3_Exception */ protected function getFormMembershipParams(): array { $submittedValues = $this->controller->exportValues($this->_name); return [ 'status_id' => $this->getSubmittedValue('status_id'), - 'source' => $this->getSubmittedValue('source'), + 'source' => $this->getSubmittedValue('source') ?? $this->getContributionSource(), + 'contact_id' => $this->getMembershipContactID(), 'is_override' => $this->getSubmittedValue('is_override'), 'status_override_end_date' => $this->getSubmittedValue('status_override_end_date'), 'campaign_id' => $this->getSubmittedValue('campaign_id'), @@ -1800,6 +1815,7 @@ DESC limit 1"); // when is_override false ignore is_admin statuses during membership // status calculation. similarly we did fix for import in CRM-3570. 'exclude_is_admin' => !$this->getSubmittedValue('is_override'), + 'contribution_recur_id' => $this->getContributionRecurID(), ]; } @@ -1921,7 +1937,7 @@ DESC limit 1"); */ protected function getMembership(): array { if (empty($this->membership)) { - $this->membership = civicrm_api3('Membership', 'get', ['id' => $this->getMembershipID()]); + $this->membership = civicrm_api3('Membership', 'get', ['id' => $this->getMembershipID()])['values'][$this->getMembershipID()]; } return $this->membership; } @@ -1938,4 +1954,51 @@ DESC limit 1"); $this->membership = $membership; } + /** + * Get line items formatted for the Order api. + * + * @return array + * + * @throws \CiviCRM_API3_Exception + */ + protected function getLineItemForOrderApi(): array { + $lineItems = []; + foreach ($this->order->getLineItems() as $line) { + $params = []; + if (!empty($line['membership_type_id'])) { + $params = $this->getMembershipParamsForType((int) $line['membership_type_id']); + } + $lineItems[] = [ + 'line_item' => [$line['price_field_value_id'] => $line], + 'params' => $params, + ]; + } + return $lineItems; + } + + /** + * Get the parameters for the given membership type. + * + * @param int $membershipTypeID + * + * @return mixed + * @throws \CiviCRM_API3_Exception + */ + protected function getMembershipParamsForType(int $membershipTypeID) { + return array_merge($this->getFormMembershipParams(), $this->getMembershipParameters()[$membershipTypeID]); + } + + /** + * @param array $contribution + */ + protected function setMembershipIDsFromOrder(array $contribution): void { + $ids = []; + foreach ($contribution['values'][$contribution['id']]['line_item'] as $line) { + if ($line['entity_table'] ?? '' === 'civicrm_membership') { + $ids[] = $line['entity_id']; + } + } + $this->setMembershipIDs($ids); + } + } diff --git a/civicrm/CRM/Member/Import/Form/MapField.php b/civicrm/CRM/Member/Import/Form/MapField.php index 4d341f9837..de1f18b1d7 100644 --- a/civicrm/CRM/Member/Import/Form/MapField.php +++ b/civicrm/CRM/Member/Import/Form/MapField.php @@ -315,7 +315,7 @@ class CRM_Member_Import_Form_MapField extends CRM_Import_Form_MapField { 'used' => 'Unsupervised', 'contact_type' => $contactTypes[$contactTypeId], ); - list($ruleFields, $threshold) = CRM_Dedupe_BAO_RuleGroup::dedupeRuleFieldsWeight($params); + list($ruleFields, $threshold) = CRM_Dedupe_BAO_DedupeRuleGroup::dedupeRuleFieldsWeight($params); $weightSum = 0; foreach ($importKeys as $key => $val) { if (array_key_exists($val, $ruleFields)) { diff --git a/civicrm/CRM/Member/Import/Parser.php b/civicrm/CRM/Member/Import/Parser.php index 6f6fcd0854..7397d9a821 100644 --- a/civicrm/CRM/Member/Import/Parser.php +++ b/civicrm/CRM/Member/Import/Parser.php @@ -61,7 +61,7 @@ abstract class CRM_Member_Import_Parser extends CRM_Import_Parser { */ public function run( $fileName, - $separator = ',', + $separator, &$mapper, $skipColumnHeader = FALSE, $mode = self::MODE_PREVIEW, diff --git a/civicrm/CRM/Member/Import/Parser/Membership.php b/civicrm/CRM/Member/Import/Parser/Membership.php index 0a649a2b23..08b9e6a493 100644 --- a/civicrm/CRM/Member/Import/Parser/Membership.php +++ b/civicrm/CRM/Member/Import/Parser/Membership.php @@ -448,7 +448,7 @@ class CRM_Member_Import_Parser_Membership extends CRM_Member_Import_Parser { 'contact_type' => $this->_contactType, 'used' => 'Unsupervised', ]; - $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); $disp = ''; foreach ($fieldsArray as $value) { diff --git a/civicrm/CRM/Member/Page/RecurringContributions.php b/civicrm/CRM/Member/Page/RecurringContributions.php index 3a497b748a..44c9c1062b 100644 --- a/civicrm/CRM/Member/Page/RecurringContributions.php +++ b/civicrm/CRM/Member/Page/RecurringContributions.php @@ -125,7 +125,7 @@ class CRM_Member_Page_RecurringContributions extends CRM_Core_Page { } $recurringContribution['action'] = CRM_Core_Action::formLink( - CRM_Contribute_Page_Tab::recurLinks($recurID, 'contribution'), + CRM_Contribute_Page_Tab::recurLinks($recurID), $action, [ 'cid' => $this->contactID, diff --git a/civicrm/CRM/Member/Page/Tab.php b/civicrm/CRM/Member/Page/Tab.php index 3d418592fc..965354c365 100644 --- a/civicrm/CRM/Member/Page/Tab.php +++ b/civicrm/CRM/Member/Page/Tab.php @@ -261,6 +261,17 @@ class CRM_Member_Page_Tab extends CRM_Core_Page { * @return null */ public function edit() { + // We're trying to edit existing memberships or create a new one so we'll first check that a membership + // type is configured and active, if we don't do this we instead show a permissions error and status bounce. + $membershipTypes = \Civi\Api4\MembershipType::get(TRUE) + ->addWhere('is_active', '=', TRUE) + // we only need one, more is great but a single result lets us proceed! + ->setLimit(1) + ->execute(); + if (empty($membershipTypes)) { + CRM_Core_Error::statusBounce(ts('You do not appear to have any active membership types configured, please add an active membership type and try again.')); + } + // set https for offline cc transaction $mode = CRM_Utils_Request::retrieve('mode', 'Alphanumeric', $this); if ($mode == 'test' || $mode == 'live') { diff --git a/civicrm/CRM/Member/Selector/Search.php b/civicrm/CRM/Member/Selector/Search.php index b03cef0a63..c57491f7b9 100644 --- a/civicrm/CRM/Member/Selector/Search.php +++ b/civicrm/CRM/Member/Selector/Search.php @@ -262,7 +262,7 @@ class CRM_Member_Selector_Search extends CRM_Core_Selector_Base implements CRM_C $params['rowCount'] = $this->_limit; } else { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $params['buttonTop'] = 'PagerTopButton'; diff --git a/civicrm/CRM/Pledge/Selector/Search.php b/civicrm/CRM/Pledge/Selector/Search.php index aef07fbcfa..c82b10c184 100644 --- a/civicrm/CRM/Pledge/Selector/Search.php +++ b/civicrm/CRM/Pledge/Selector/Search.php @@ -221,7 +221,7 @@ class CRM_Pledge_Selector_Search extends CRM_Core_Selector_Base { $params['rowCount'] = $this->_limit; } else { - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); } $params['buttonTop'] = 'PagerTopButton'; diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php index 0f0b3815ca..183019dbe5 100644 --- a/civicrm/CRM/Price/BAO/LineItem.php +++ b/civicrm/CRM/Price/BAO/LineItem.php @@ -52,11 +52,8 @@ class CRM_Price_BAO_LineItem extends CRM_Price_DAO_LineItem { $params['unit_price'] = 0; } } - - $taxRates = CRM_Core_PseudoConstant::getTaxRates(); - if (isset($params['financial_type_id'], $params['line_total'], $taxRates[$params['financial_type_id']])) { - $taxRate = $taxRates[$params['financial_type_id']]; - $params['tax_amount'] = ($taxRate / 100) * $params['line_total']; + if (isset($params['financial_type_id'], $params['line_total'])) { + $params['tax_amount'] = self::getTaxAmountForLineItem($params); } $lineItemBAO = new CRM_Price_BAO_LineItem(); @@ -424,7 +421,7 @@ WHERE li.contribution_id = %1"; * @param $amount * @param array $otherParams */ - public static function syncLineItems($entityId, $entityTable = 'civicrm_contribution', $amount, $otherParams = NULL) { + public static function syncLineItems($entityId, $entityTable, $amount, $otherParams = NULL) { if (!$entityId || CRM_Utils_System::isNull($amount)) { return; } @@ -490,10 +487,10 @@ WHERE li.contribution_id = %1"; public static function getLineItemArray(&$params, $entityId = NULL, $entityTable = 'contribution', $isRelatedID = FALSE) { if (!$entityId) { $priceSetDetails = CRM_Price_BAO_PriceSet::getDefaultPriceSet($entityTable); - $totalAmount = CRM_Utils_Array::value('partial_payment_total', $params, CRM_Utils_Array::value('total_amount', $params)); + $totalAmount = $params['total_amount'] ?? 0; $financialType = $params['financial_type_id'] ?? NULL; foreach ($priceSetDetails as $values) { - if ($entityTable == 'membership') { + if ($entityTable === 'membership') { if ($isRelatedID != $values['membership_type_id']) { continue; } @@ -502,7 +499,7 @@ WHERE li.contribution_id = %1"; } $financialType = $values['financial_type_id']; } - $params['line_item'][$values['setID']][$values['priceFieldID']] = [ + $lineItem = [ 'price_field_id' => $values['priceFieldID'], 'price_field_value_id' => $values['priceFieldValueID'], 'label' => $values['label'], @@ -512,6 +509,8 @@ WHERE li.contribution_id = %1"; 'financial_type_id' => $financialType, 'membership_type_id' => $values['membership_type_id'], ]; + $lineItem['tax_amount'] = self::getTaxAmountForLineItem($lineItem); + $params['line_item'][$values['setID']][$values['priceFieldID']] = $lineItem; break; } } @@ -1071,6 +1070,19 @@ WHERE li.contribution_id = %1"; return Civi::$statics[__CLASS__]['price_fields'][$priceFieldID]; } + /** + * Get the tax rate for the given line item. + * + * @param array $params + * + * @return float + */ + protected static function getTaxAmountForLineItem(array $params): float { + $taxRates = CRM_Core_PseudoConstant::getTaxRates(); + $taxRate = $taxRates[$params['financial_type_id']] ?? 0; + return ($taxRate / 100) * $params['line_total']; + } + /** * Helper function to retrieve financial trxn parameters to reverse * for given financial item identified by $financialItemID @@ -1229,4 +1241,17 @@ WHERE li.contribution_id = %1"; return CRM_Contribute_BAO_Contribution::checkContributeSettings('tax_term'); } + /** + * Whitelist of possible values for the entity_table field + * + * @return array + */ + public static function entityTables(): array { + return [ + 'civicrm_contribution' => ts('Contribution'), + 'civicrm_participant' => ts('Participant'), + 'civicrm_membership' => ts('Membership'), + ]; + } + } diff --git a/civicrm/CRM/Price/BAO/PriceField.php b/civicrm/CRM/Price/BAO/PriceField.php index 8d1113244b..f5435efda1 100644 --- a/civicrm/CRM/Price/BAO/PriceField.php +++ b/civicrm/CRM/Price/BAO/PriceField.php @@ -795,7 +795,7 @@ WHERE id IN (" . implode(',', array_keys($priceFields)) . ')'; $selectedAmounts[$opId] = $options[$opId]['amount']; } } - elseif (in_array($fields["price_{$fieldId}"], array_keys($options))) { + elseif (array_key_exists($fields["price_{$fieldId}"], $options)) { $selectedAmounts[$fields["price_{$fieldId}"]] = $options[$fields["price_{$fieldId}"]]['amount']; } } @@ -804,7 +804,7 @@ WHERE id IN (" . implode(',', array_keys($priceFields)) . ')'; // now we have all selected amount in hand. $totalAmount = array_sum($selectedAmounts); // The form offers a field to enter the amount paid. This may differ from the amount that is due to complete the purchase - $totalPaymentAmountEnteredOnForm = CRM_Utils_Array::value('partial_payment_total', $fields, CRM_Utils_Array::value('total_amount', $fields)); + $totalPaymentAmountEnteredOnForm = CRM_Utils_Array::value('total_amount', $fields); if ($totalAmount < 0) { $error['_qf_default'] = ts('%1 amount can not be less than zero. Please select the options accordingly.', [1 => $componentName]); } diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php index ca851e8745..53687d2834 100644 --- a/civicrm/CRM/Price/BAO/PriceSet.php +++ b/civicrm/CRM/Price/BAO/PriceSet.php @@ -1657,7 +1657,7 @@ WHERE ct.id = cp.financial_type_id AND case 'Text': $firstOption = reset($field['options']); $params["price_{$id}"] = [$firstOption['id'] => $params["price_{$id}"]]; - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem); $optionValueId = key($field['options']); if (CRM_Utils_Array::value('name', $field['options'][$optionValueId]) === 'contribution_amount') { @@ -1691,7 +1691,7 @@ WHERE ct.id = cp.financial_type_id AND $amount_override = NULL; if ($priceSetID && count(self::filterPriceFieldsFromParams($priceSetID, $params)) === 1) { - $amount_override = CRM_Utils_Array::value('partial_payment_total', $params, CRM_Utils_Array::value('total_amount', $params)); + $amount_override = CRM_Utils_Array::value('total_amount', $params); } CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, $amount_override); if (!empty($field['options'][$optionValueId]['tax_rate'])) { @@ -1706,7 +1706,7 @@ WHERE ct.id = cp.financial_type_id AND $params["price_{$id}"] = [$params["price_{$id}"] => 1]; $optionValueId = CRM_Utils_Array::key(1, $params["price_{$id}"]); - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem); if (!empty($field['options'][$optionValueId]['tax_rate'])) { $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); } @@ -1714,7 +1714,7 @@ WHERE ct.id = cp.financial_type_id AND case 'CheckBox': - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem); foreach ($params["price_{$id}"] as $optionId => $option) { if (!empty($field['options'][$optionId]['tax_rate'])) { $lineItem = self::setLineItem($field, $lineItem, $optionId, $totalTax); diff --git a/civicrm/CRM/Price/DAO/LineItem.php b/civicrm/CRM/Price/DAO/LineItem.php index c226921b4b..0aa851939e 100644 --- a/civicrm/CRM/Price/DAO/LineItem.php +++ b/civicrm/CRM/Price/DAO/LineItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/LineItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1c10b6b406bb73014b2fbe6ceb95fda3) + * (GenCodeChecksum:cffc97712c8823323cbeb39a0851363a) */ /** @@ -39,7 +39,7 @@ class CRM_Price_DAO_LineItem extends CRM_Core_DAO { public $id; /** - * table which has the transaction + * May contain civicrm_contribution, civicrm_participant or civicrm_membership * * @var string */ @@ -195,7 +195,7 @@ class CRM_Price_DAO_LineItem extends CRM_Core_DAO { 'name' => 'entity_table', 'type' => CRM_Utils_Type::T_STRING, 'title' => ts('Line Item Entity Type'), - 'description' => ts('table which has the transaction'), + 'description' => ts('May contain civicrm_contribution, civicrm_participant or civicrm_membership'), 'required' => TRUE, 'maxlength' => 64, 'size' => CRM_Utils_Type::BIG, @@ -204,6 +204,9 @@ class CRM_Price_DAO_LineItem extends CRM_Core_DAO { 'entity' => 'LineItem', 'bao' => 'CRM_Price_BAO_LineItem', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Price_BAO_LineItem::entityTables', + ], 'add' => '1.7', ], 'entity_id' => [ diff --git a/civicrm/CRM/Price/Form/Field.php b/civicrm/CRM/Price/Form/Field.php index a35a79dd39..3b1170e833 100644 --- a/civicrm/CRM/Price/Form/Field.php +++ b/civicrm/CRM/Price/Form/Field.php @@ -337,7 +337,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form { $this->addRule('options_per_line', ts('must be a numeric value'), 'numeric'); $this->add('textarea', 'help_pre', ts('Pre Field Help'), - CRM_Core_DAO::getAttribute('CRM_Price_DAO_PriceField', 'help_post') + CRM_Core_DAO::getAttribute('CRM_Price_DAO_PriceField', 'help_pre') ); // help post, mask, attributes, javascript ? diff --git a/civicrm/CRM/Profile/Selector/Listings.php b/civicrm/CRM/Profile/Selector/Listings.php index 21b738998b..72cad9e97d 100644 --- a/civicrm/CRM/Profile/Selector/Listings.php +++ b/civicrm/CRM/Profile/Selector/Listings.php @@ -250,7 +250,7 @@ class CRM_Profile_Selector_Listings extends CRM_Core_Selector_Base implements CR $status = CRM_Utils_System::isNull($this->_multiRecordTableName) ? ts('Contact %%StatusMessage%%') : ts('Contact Multi Records %%StatusMessage%%'); $params['status'] = $status; $params['csvString'] = NULL; - $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; + $params['rowCount'] = Civi::settings()->get('default_pager_size'); $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index fa1a841bf9..de0bb7b24f 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -13,6 +13,9 @@ * Class CRM_Report_Form */ class CRM_Report_Form extends CRM_Core_Form { + /** + * Deprecated constant, Reports should be updated to use the getRowCount function. + */ const ROW_COUNT_LIMIT = 50; /** @@ -37,6 +40,12 @@ class CRM_Report_Form extends CRM_Core_Form { */ protected $_id; + /** + * The Number of rows to display on screen + * @var int + */ + protected $_rowCount; + /** * The id of the report template * @@ -518,12 +527,30 @@ class CRM_Report_Form extends CRM_Core_Form { */ public $optimisedForOnlyFullGroupBy = TRUE; + /** + * Get the number of rows to show + * @return int + */ + public function getRowCount(): int { + return $this->_rowCount; + } + + /** + * set the number of rows to show + * @param $rowCount int + */ + public function setRowCount($rowCount): void { + $this->_rowCount = $rowCount; + } + /** * Class constructor. */ public function __construct() { parent::__construct(); + $this->setRowCount(\Civi::settings()->get('default_pager_size')); + $this->addClass('crm-report-form'); if ($this->_tagFilter) { @@ -2232,7 +2259,7 @@ class CRM_Report_Form extends CRM_Core_Form { $relative, $from, $to, $type = NULL, $fromTime = NULL, $toTime = NULL ) { $clauses = []; - if (in_array($relative, array_keys($this->getOperationPair(CRM_Report_Form::OP_DATE)))) { + if (array_key_exists($relative, $this->getOperationPair(CRM_Report_Form::OP_DATE))) { $sqlOP = $this->getSQLOperator($relative); return "( {$fieldName} {$sqlOP} )"; } @@ -2409,7 +2436,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND $this->moveSummaryColumnsToTheRightHandSide(); - if ($this->_limit && count($rows) >= self::ROW_COUNT_LIMIT) { + if ($this->_limit && count($rows) >= $this->getRowCount()) { return FALSE; } @@ -3576,11 +3603,12 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND /** * Set limit. * - * @param int $rowCount + * @param int|null $rowCount * * @return array */ - public function limit($rowCount = self::ROW_COUNT_LIMIT) { + public function limit($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); // lets do the pager if in html mode $this->_limit = NULL; @@ -3628,9 +3656,10 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND /** * Set pager. * - * @param int $rowCount + * @param int|null $rowCount */ - public function setPager($rowCount = self::ROW_COUNT_LIMIT) { + public function setPager($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); // CRM-14115, over-ride row count if rowCount is specified in URL if ($this->_dashBoardRowCount) { $rowCount = $this->_dashBoardRowCount; @@ -3734,7 +3763,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND return $this->legacySlowGroupFilterClause($field, $value, $op); } if ($op === 'notin') { - return " group_temp_table.id IS NULL "; + return " group_temp_table.contact_id IS NULL "; } // We will have used an inner join instead. return "1"; @@ -3744,39 +3773,17 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND * Create a table of the contact ids included by the group filter. * * This function is called by both the api (tests) and the UI. + * + * @throws \CiviCRM_API3_Exception */ - public function buildGroupTempTable() { + public function buildGroupTempTable(): void { if (!empty($this->groupTempTable) || empty($this->_params['gid_value']) || $this->groupFilterNotOptimised) { return; } + $this->groupTempTable = $this->createTemporaryTable('groups', 'contact_id INT', TRUE); $filteredGroups = (array) $this->_params['gid_value']; - - $groups = civicrm_api3('Group', 'get', [ - 'is_active' => 1, - 'id' => ['IN' => $filteredGroups], - 'saved_search_id' => ['>' => 0], - 'return' => 'id', - ]); - $smartGroups = array_keys($groups['values']); - - $query = " - SELECT DISTINCT group_contact.contact_id as id - FROM civicrm_group_contact group_contact - WHERE group_contact.group_id IN (" . implode(', ', $filteredGroups) . ") - AND group_contact.status = 'Added' "; - - if (!empty($smartGroups)) { - CRM_Contact_BAO_GroupContactCache::check($smartGroups); - $smartGroups = implode(',', $smartGroups); - $query .= " - UNION DISTINCT - SELECT smartgroup_contact.contact_id as id - FROM civicrm_group_contact_cache smartgroup_contact - WHERE smartgroup_contact.group_id IN ({$smartGroups}) "; - } - - $this->groupTempTable = $this->createTemporaryTable('rptgrp', $query); - CRM_Core_DAO::executeQuery("ALTER TABLE $this->groupTempTable ADD INDEX i_id(id)"); + CRM_Contact_BAO_GroupContactCache::populateTemporaryTableWithContactsInGroups($filteredGroups, $this->groupTempTable); + CRM_Core_DAO::executeQuery("ALTER TABLE $this->groupTempTable ADD INDEX contact_id(contact_id)"); } /** @@ -5193,12 +5200,12 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a if ($this->groupTempTable) { if ($this->_params['gid_op'] == 'in') { $this->_from = " FROM $this->groupTempTable group_temp_table INNER JOIN $baseTable $tableAlias - ON group_temp_table.id = $tableAlias.{$field} "; + ON group_temp_table.contact_id = $tableAlias.{$field} "; } else { $this->_from .= " LEFT JOIN $this->groupTempTable group_temp_table - ON $tableAlias.{$field} = group_temp_table.id "; + ON $tableAlias.{$field} = group_temp_table.contact_id "; } } } diff --git a/civicrm/CRM/Report/Form/ActivitySummary.php b/civicrm/CRM/Report/Form/ActivitySummary.php index 59dc3de711..38e20f360e 100644 --- a/civicrm/CRM/Report/Form/ActivitySummary.php +++ b/civicrm/CRM/Report/Form/ActivitySummary.php @@ -502,9 +502,10 @@ class CRM_Report_Form_ActivitySummary extends CRM_Report_Form { /** * Set pager. * - * @param int $rowCount + * @param int|null $rowCount */ - public function setPager($rowCount = self::ROW_COUNT_LIMIT) { + public function setPager($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); $this->_rowsFound = $this->totalRows; parent::setPager($rowCount); } diff --git a/civicrm/CRM/Report/Form/Contact/Detail.php b/civicrm/CRM/Report/Form/Contact/Detail.php index 47c98364f3..56fcb47c60 100644 --- a/civicrm/CRM/Report/Form/Contact/Detail.php +++ b/civicrm/CRM/Report/Form/Contact/Detail.php @@ -15,7 +15,6 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ class CRM_Report_Form_Contact_Detail extends CRM_Report_Form { - const ROW_COUNT_LIMIT = 10; protected $_summary = NULL; @@ -364,6 +363,7 @@ class CRM_Report_Form_Contact_Detail extends CRM_Report_Form { $this->_groupFilter = TRUE; $this->_tagFilter = TRUE; parent::__construct(); + $this->setRowCount(10); } public function preProcess() { @@ -805,30 +805,27 @@ HERESQL; /** * Override to set limit is 10 - * @param int $rowCount + * @param int|null $rowCount */ - public function limit($rowCount = self::ROW_COUNT_LIMIT) { + public function limit($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); parent::limit($rowCount); } /** * Override to set pager with limit is 10 - * @param int $rowCount + * @param int|null $rowCount */ - public function setPager($rowCount = self::ROW_COUNT_LIMIT) { + public function setPager($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); parent::setPager($rowCount); } public function postProcess() { - $this->beginPostProcess(); - - // get the acl clauses built before we assemble the query - $this->buildACLClause($this->_aliases['civicrm_contact']); - $sql = $this->buildQuery(TRUE); - $rows = $graphRows = $this->_contactSelected = []; + $rows = $this->_contactSelected = []; $this->buildRows($sql, $rows); foreach ($rows as $key => $val) { $rows[$key]['contactID'] = $val['civicrm_contact_id']; diff --git a/civicrm/CRM/Report/Form/Contact/Relationship.php b/civicrm/CRM/Report/Form/Contact/Relationship.php index 18ec0c7241..7937353467 100644 --- a/civicrm/CRM/Report/Form/Contact/Relationship.php +++ b/civicrm/CRM/Report/Form/Contact/Relationship.php @@ -824,7 +824,7 @@ class CRM_Report_Form_Contact_Relationship extends CRM_Report_Form { $fieldName, $relative, $from, $to, $type = NULL) { $clauses = []; - if (in_array($relative, array_keys($this->getOperationPair(CRM_Report_Form::OP_DATE)))) { + if (array_key_exists($relative, $this->getOperationPair(CRM_Report_Form::OP_DATE))) { return NULL; } diff --git a/civicrm/CRM/Report/Form/Contact/Summary.php b/civicrm/CRM/Report/Form/Contact/Summary.php index 9261fc6d08..2adf144166 100644 --- a/civicrm/CRM/Report/Form/Contact/Summary.php +++ b/civicrm/CRM/Report/Form/Contact/Summary.php @@ -147,17 +147,10 @@ class CRM_Report_Form_Contact_Summary extends CRM_Report_Form { } public function postProcess() { - $this->beginPostProcess(); - - // get the acl clauses built before we assemble the query - $this->buildACLClause($this->_aliases['civicrm_contact']); - $sql = $this->buildQuery(TRUE); - - $rows = $graphRows = []; + $rows = []; $this->buildRows($sql, $rows); - $this->formatDisplay($rows); $this->doTemplateAssignment($rows); $this->endPostProcess($rows); diff --git a/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php b/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php index d4cbdb557b..49ff34962a 100644 --- a/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php +++ b/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php @@ -349,9 +349,10 @@ class CRM_Report_Form_Contribute_DeferredRevenue extends CRM_Report_Form { /** * Set limit. * - * @param int $rowCount + * @param int|null $rowCount */ - public function limit($rowCount = self::ROW_COUNT_LIMIT) { + public function limit($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); $this->_limit = NULL; } diff --git a/civicrm/CRM/Report/Form/Contribute/History.php b/civicrm/CRM/Report/Form/Contribute/History.php index bc1a49fe02..1db29aa24c 100644 --- a/civicrm/CRM/Report/Form/Contribute/History.php +++ b/civicrm/CRM/Report/Form/Contribute/History.php @@ -477,20 +477,22 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { /** * Override to set limit to 10. * - * @param int $rowCount + * @param int|null $rowCount * * @return array */ - public function limit($rowCount = self::ROW_COUNT_LIMIT) { + public function limit($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); return parent::limit($rowCount); } /** * Override to set pager with limit is 10. * - * @param int $rowCount + * @param int|null $rowCount */ - public function setPager($rowCount = self::ROW_COUNT_LIMIT) { + public function setPager($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); parent::setPager($rowCount); } diff --git a/civicrm/CRM/Report/Form/Contribute/TopDonor.php b/civicrm/CRM/Report/Form/Contribute/TopDonor.php index 7b6c14f51f..c5e05b0e16 100644 --- a/civicrm/CRM/Report/Form/Contribute/TopDonor.php +++ b/civicrm/CRM/Report/Form/Contribute/TopDonor.php @@ -330,7 +330,8 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { /** * @param int $rowCount */ - public function limit($rowCount = CRM_Report_Form::ROW_COUNT_LIMIT) { + public function limit($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); // lets do the pager if in html mode $this->_limit = NULL; diff --git a/civicrm/CRM/Report/Form/Event/Income.php b/civicrm/CRM/Report/Form/Event/Income.php index 51caf3d4b1..d25a840054 100644 --- a/civicrm/CRM/Report/Form/Event/Income.php +++ b/civicrm/CRM/Report/Form/Event/Income.php @@ -15,7 +15,6 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ class CRM_Report_Form_Event_Income extends CRM_Report_Form { - const ROW_COUNT_LIMIT = 2; protected $_summary = NULL; protected $_noFields = TRUE; @@ -27,7 +26,6 @@ class CRM_Report_Form_Event_Income extends CRM_Report_Form { * Class constructor. */ public function __construct() { - $this->_columns = [ 'civicrm_event' => [ 'dao' => 'CRM_Event_DAO_Event', @@ -43,6 +41,7 @@ class CRM_Report_Form_Event_Income extends CRM_Report_Form { ]; parent::__construct(); + $this->setRowCount(2); } public function preProcess() { @@ -225,27 +224,29 @@ class CRM_Report_Form_Event_Income extends CRM_Report_Form { /** * @inheritDoc */ - public function limit($rowCount = self::ROW_COUNT_LIMIT) { + public function limit($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); parent::limit($rowCount); // Modify limit. $pageId = $this->get(CRM_Utils_Pager::PAGE_ID); //if pageId is greater than last page then display last page. - if ((($pageId * self::ROW_COUNT_LIMIT) - 1) > $this->_rowsFound) { - $pageId = ceil((float) $this->_rowsFound / (float) self::ROW_COUNT_LIMIT); + if ((($pageId * $rowCount) - 1) > $this->_rowsFound) { + $pageId = ceil((float) $this->_rowsFound / (float) $rowCount); $this->set(CRM_Utils_Pager::PAGE_ID, $pageId); } - $this->_limit = ($pageId - 1) * self::ROW_COUNT_LIMIT; + $this->_limit = ($pageId - 1) * $rowCount; } /** - * @param int $rowCount + * @param int|null $rowCount */ - public function setPager($rowCount = self::ROW_COUNT_LIMIT) { + public function setPager($rowCount = NULL) { + $rowCount = $rowCount ?? $this->getRowCount(); $params = [ 'total' => $this->_rowsFound, - 'rowCount' => self::ROW_COUNT_LIMIT, + 'rowCount' => $rowCount, 'status' => ts('Records %%StatusMessage%%'), 'buttonBottom' => 'PagerBottomButton', 'buttonTop' => 'PagerTopButton', @@ -297,7 +298,7 @@ class CRM_Report_Form_Event_Income extends CRM_Report_Form { $numRows = $this->_limit; if (CRM_Utils_Array::value('id_op', $this->_params, 'in') == 'in' || $noSelection) { - while ($count < self::ROW_COUNT_LIMIT) { + while ($count < $rowCount) { if (!isset($this->_params['id_value'][$numRows])) { break; } diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index 60d4ca3a67..b51992a9a4 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -268,7 +268,7 @@ class CRM_Upgrade_Incremental_Base { * * @return bool */ - public function updateSmartGroups($ctx, $actions) { + public static function updateSmartGroups($ctx, $actions) { $groupUpdateObject = new CRM_Upgrade_Incremental_SmartGroups(); $groupUpdateObject->updateGroups($actions); return TRUE; diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php b/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php index 5f86560b0c..4560afa58f 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveSeventeen.php @@ -104,7 +104,7 @@ class CRM_Upgrade_Incremental_php_FiveSeventeen extends CRM_Upgrade_Incremental_ /** * Update safe file types. */ - public function updateFileTypes() { + public static function updateFileTypes() { CRM_Core_BAO_OptionValue::ensureOptionValueExists([ 'option_group_id' => 'safe_file_extension', 'label' => 'pptx', diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveThirtyNine.php b/civicrm/CRM/Upgrade/Incremental/php/FiveThirtyNine.php new file mode 100644 index 0000000000..0661a7e706 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveThirtyNine.php @@ -0,0 +1,131 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Upgrade logic for FiveThirtyNine */ +class CRM_Upgrade_Incremental_php_FiveThirtyNine extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @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, "%1", has been added. This permission is now used to control access to the Manage Tags screen.', array(1 => ts('manage tags'))) . '</p>'; + // } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @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_39_alpha1($rev) { + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask('Update smart groups to rename filters on case_from and case_to to case_start_date and case_end_date', 'updateSmartGroups', [ + 'renameField' => [ + ['old' => 'case_from_relative', 'new' => 'case_start_date_relative'], + ['old' => 'case_from_start_date_high', 'new' => 'case_start_date_high'], + ['old' => 'case_from_start_date_low', 'new' => 'case_start_date_low'], + ['old' => 'case_to_relative', 'new' => 'case_end_date_relative'], + ['old' => 'case_to_end_date_high', 'new' => 'case_end_date_high'], + ['old' => 'case_to_end_date_low', 'new' => 'case_end_date_low'], + [ + 'old' => 'mailing_date_relative', + 'new' => 'mailing_job_start_date_relative', + ], + ['old' => 'mailing_date_high', 'new' => 'mailing_job_start_date_high'], + ['old' => 'mailing_date_low', 'new' => 'mailing_job_start_date_low'], + [ + 'old' => 'relation_start_date_low', + 'new' => 'relationship_start_date_low', + ], + [ + 'old' => 'relation_start_date_high', + 'new' => 'relationship_start_date_high', + ], + [ + 'old' => 'relation_start_date_relative', + 'new' => 'relationship_start_date_relative', + ], + [ + 'old' => 'relation_end_date_low', + 'new' => 'relationship_end_date_low', + ], + [ + 'old' => 'relation_end_date_high', + 'new' => 'relationship_end_date_high', + ], + [ + 'old' => 'relation_end_date_relative', + 'new' => 'relationship_end_date_relative', + ], + ['old' => 'event_start_date_low', 'new' => 'event_low'], + ['old' => 'event_end_date_high', 'new' => 'event_high'], + ], + ]); + $this->addTask('Update smart groups where jcalendar fields have been converted to datepicker', 'updateSmartGroups', [ + 'datepickerConversion' => [ + 'birth_date', + 'deceased_date', + 'case_start_date', + 'case_end_date', + 'mailing_job_start_date', + 'relationship_start_date', + 'relationship_end_date', + 'event', + 'relation_active_period_date', + 'created_date', + 'modified_date', + ], + ]); + + $this->addTask('Convert Log date searches to their final names either created date or modified date', 'updateSmartGroups', [ + 'renameLogFields' => [], + ]); + $this->addTask('Convert Custom data based smart groups from jcalendar to datepicker', 'updateSmartGroups', [ + 'convertCustomSmartGroups' => NULL, + ]); + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php index 4087b44135..4ba3102d98 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php @@ -93,49 +93,7 @@ class CRM_Upgrade_Incremental_php_FiveTwenty extends CRM_Upgrade_Incremental_Bas } $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); $this->addTask('Add "Template" contribution status', 'templateStatus'); - $this->addTask('Update smart groups to rename filters on case_from and case_to to case_start_date and case_end_date', 'updateSmartGroups', [ - 'renameField' => [ - ['old' => 'case_from_relative', 'new' => 'case_start_date_relative'], - ['old' => 'case_from_start_date_high', 'new' => 'case_start_date_high'], - ['old' => 'case_from_start_date_low', 'new' => 'case_start_date_low'], - ['old' => 'case_to_relative', 'new' => 'case_end_date_relative'], - ['old' => 'case_to_end_date_high', 'new' => 'case_end_date_high'], - ['old' => 'case_to_end_date_low', 'new' => 'case_end_date_low'], - ['old' => 'mailing_date_relative', 'new' => 'mailing_job_start_date_relative'], - ['old' => 'mailing_date_high', 'new' => 'mailing_job_start_date_high'], - ['old' => 'mailing_date_low', 'new' => 'mailing_job_start_date_low'], - ['old' => 'relation_start_date_low', 'new' => 'relationship_start_date_low'], - ['old' => 'relation_start_date_high', 'new' => 'relationship_start_date_high'], - ['old' => 'relation_start_date_relative', 'new' => 'relationship_start_date_relative'], - ['old' => 'relation_end_date_low', 'new' => 'relationship_end_date_low'], - ['old' => 'relation_end_date_high', 'new' => 'relationship_end_date_high'], - ['old' => 'relation_end_date_relative', 'new' => 'relationship_end_date_relative'], - ['old' => 'event_start_date_low', 'new' => 'event_low'], - ['old' => 'event_end_date_high', 'new' => 'event_high'], - ], - ]); - $this->addTask('Convert Log date searches to their final names either created date or modified date', 'updateSmartGroups', [ - 'renameLogFields' => [], - ]); - $this->addTask('Update smart groups where jcalendar fields have been converted to datepicker', 'updateSmartGroups', [ - 'datepickerConversion' => [ - 'birth_date', - 'deceased_date', - 'case_start_date', - 'case_end_date', - 'mailing_job_start_date', - 'relationship_start_date', - 'relationship_end_date', - 'event', - 'relation_active_period_date', - 'created_date', - 'modified_date', - ], - ]); $this->addTask('Clean up unused table "civicrm_persistent"', 'dropTableIfEmpty', 'civicrm_persistent'); - $this->addTask('Convert Custom data based smart groups from jcalendar to datepicker', 'updateSmartGroups', [ - 'convertCustomSmartGroups' => NULL, - ]); } public static function templateStatus(CRM_Queue_TaskContext $ctx) { diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySeven.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySeven.php index e84a025d24..f7f307c6c0 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySeven.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySeven.php @@ -71,7 +71,7 @@ class CRM_Upgrade_Incremental_php_FiveTwentySeven extends CRM_Upgrade_Incrementa $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); } - public function priceFieldValueLabelRequired($ctx) { + public static function priceFieldValueLabelRequired($ctx) { $locales = CRM_Core_I18n::getMultilingual(); if ($locales) { foreach ($locales as $locale) { @@ -86,7 +86,7 @@ class CRM_Upgrade_Incremental_php_FiveTwentySeven extends CRM_Upgrade_Incrementa return TRUE; } - public function nameMembershipTypeRequired($ctx) { + public static function nameMembershipTypeRequired($ctx) { $locales = CRM_Core_I18n::getMultilingual(); if ($locales) { foreach ($locales as $locale) { diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySix.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySix.php index b23c29d6e6..cc04839d95 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySix.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentySix.php @@ -81,7 +81,7 @@ class CRM_Upgrade_Incremental_php_FiveTwentySix extends CRM_Upgrade_Incremental_ /** * Update workflow_name based on workflow_id values. */ - public function populateWorkflowName() { + public static function populateWorkflowName() { CRM_Core_DAO::executeQuery('UPDATE civicrm_msg_template LEFT JOIN civicrm_option_value ov ON ov.id = workflow_id SET workflow_name = ov.name' diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.39.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.39.alpha1.mysql.tpl new file mode 100644 index 0000000000..e7ac1b36ae --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.39.alpha1.mysql.tpl @@ -0,0 +1,14 @@ +{* file to handle db changes in 5.39.alpha1 during upgrade *} + +CREATE TABLE IF NOT EXISTS `civicrm_translation` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique String ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Table where referenced item is stored', + `entity_field` varchar(64) NOT NULL COMMENT 'Field where referenced item is stored', + `entity_id` int NOT NULL COMMENT 'ID of the relevant entity.', + `language` varchar(5) NOT NULL COMMENT 'Relevant language', + `status_id` tinyint NOT NULL DEFAULT 1 COMMENT 'Specify whether the string is active, draft, etc', + `string` longtext NOT NULL COMMENT 'Translated string', + PRIMARY KEY (`id`), + INDEX `index_entity_lang`(entity_id, entity_table, language) +) +ENGINE=InnoDB ROW_FORMAT=DYNAMIC; diff --git a/civicrm/CRM/Utils/Array.php b/civicrm/CRM/Utils/Array.php index f2260f4502..06aa5a8faf 100644 --- a/civicrm/CRM/Utils/Array.php +++ b/civicrm/CRM/Utils/Array.php @@ -17,6 +17,31 @@ */ class CRM_Utils_Array { + /** + * Cast a value to an array. + * + * This is similar to PHP's `(array)`, but it also converts iterators. + * + * @param mixed $value + * @return array + */ + public static function cast($value) { + if (is_array($value)) { + return $value; + } + if ($value instanceof CRM_Utils_LazyArray || $value instanceof ArrayObject) { + // iterator_to_array() would work here, but getArrayCopy() doesn't require actual iterations. + return $value->getArrayCopy(); + } + if (is_iterable($value)) { + return iterator_to_array($value); + } + if (is_scalar($value)) { + return [$value]; + } + throw new \RuntimeException(sprintf("Cannot cast %s to array", gettype($value))); + } + /** * Returns $list[$key] if such element exists, or a default value otherwise. * diff --git a/civicrm/CRM/Utils/Cache/ArrayCache.php b/civicrm/CRM/Utils/Cache/ArrayCache.php index 45e0b4ed46..b5d947e88d 100644 --- a/civicrm/CRM/Utils/Cache/ArrayCache.php +++ b/civicrm/CRM/Utils/Cache/ArrayCache.php @@ -122,7 +122,7 @@ class CRM_Utils_Cache_ArrayCache implements CRM_Utils_Cache_Interface { * @return int|null */ public function getExpires($key) { - return $this->_expires[$key] ?: NULL; + return $this->_expires[$key] ?? NULL; } } diff --git a/civicrm/CRM/Utils/Check.php b/civicrm/CRM/Utils/Check.php index 290de63123..618b332b7b 100644 --- a/civicrm/CRM/Utils/Check.php +++ b/civicrm/CRM/Utils/Check.php @@ -114,7 +114,7 @@ class CRM_Utils_Check { return strcmp($a->getName(), $b->getName()); } // The Message constructor guarantees that these will always be integers. - return ($aSeverity < $bSeverity); + return ($aSeverity <=> $bSeverity); } /** diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index d33105c7c5..093862b844 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -966,9 +966,9 @@ class CRM_Utils_Date { */ public static function intervalAdd($unit, $interval, $date, $dontCareTime = FALSE) { if (is_array($date)) { - $hour = $date['H'] ?? NULL; - $minute = $date['i'] ?? NULL; - $second = $date['s'] ?? NULL; + $hour = $date['H'] ?? '00'; + $minute = $date['i'] ?? '00'; + $second = $date['s'] ?? '00'; $month = $date['M'] ?? NULL; $day = $date['d'] ?? NULL; $year = $date['Y'] ?? NULL; diff --git a/civicrm/CRM/Utils/File.php b/civicrm/CRM/Utils/File.php index 5c4ae3c548..79bbbd4dfc 100644 --- a/civicrm/CRM/Utils/File.php +++ b/civicrm/CRM/Utils/File.php @@ -622,38 +622,6 @@ HTACCESS; return FALSE; } - /** - * @param $directory - * - * @return string - * @deprecated - * Computation of a relative path requires some base. - * This implementation is problematic because it relies on an - * implicit base which was constructed problematically. - */ - public static function relativeDirectory($directory) { - // Do nothing on windows - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - return $directory; - } - - // check if directory is relative, if so return immediately - if (!self::isAbsolute($directory)) { - return $directory; - } - - // make everything relative from the baseFilePath - $basePath = self::baseFilePath(); - // check if basePath is a substr of $directory, if so - // return rest of string - if (substr($directory, 0, strlen($basePath)) == $basePath) { - return substr($directory, strlen($basePath)); - } - - // return the original value - return $directory; - } - /** * @param $directory * @param string $basePath diff --git a/civicrm/CRM/Utils/GeocodeProvider.php b/civicrm/CRM/Utils/GeocodeProvider.php index c5df3cac2a..5f6a6027a6 100644 --- a/civicrm/CRM/Utils/GeocodeProvider.php +++ b/civicrm/CRM/Utils/GeocodeProvider.php @@ -68,7 +68,7 @@ class CRM_Utils_GeocodeProvider { // or extend a base class. While we identify and implement a geocoding // abstraction library (rather than continue to roll our own), we settle for // this check. - if (!method_exists($provider, 'format') && $provider !== FALSE) { + if ($provider !== FALSE && !method_exists($provider, 'format')) { Civi::log()->error('Configured geocoder is invalid, must provide a format method', ['geocode_class' => $provider]); $provider = FALSE; } diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index 045a9bf25b..82877f3feb 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -517,9 +517,9 @@ abstract class CRM_Utils_Hook { * * @param string $op * The type of operation being performed. - * @param string $groupID + * @param int $groupID * The custom group ID. - * @param object $entityID + * @param int $entityID * The entityID of the row in the custom table. * @param array $params * The parameters that were sent into the calling function. @@ -527,7 +527,7 @@ abstract class CRM_Utils_Hook { * @return null * the return value is ignored */ - public static function custom($op, $groupID, $entityID, &$params) { + public static function custom(string $op, int $groupID, int $entityID, &$params) { return self::singleton() ->invoke(['op', 'groupID', 'entityID', 'params'], $op, $groupID, $entityID, $params, self::$_nullObject, self::$_nullObject, 'civicrm_custom'); } @@ -537,9 +537,9 @@ abstract class CRM_Utils_Hook { * * @param string $op * The type of operation being performed. - * @param string $groupID + * @param int $groupID * The custom group ID. - * @param object $entityID + * @param int $entityID * The entityID of the row in the custom table. * @param array $params * The parameters that were sent into the calling function. @@ -547,7 +547,7 @@ abstract class CRM_Utils_Hook { * @return null * the return value is ignored */ - public static function customPre($op, $groupID, $entityID, &$params) { + public static function customPre(string $op, int $groupID, int $entityID, array &$params) { return self::singleton() ->invoke(['op', 'groupID', 'entityID', 'params'], $op, $groupID, $entityID, $params, self::$_nullObject, self::$_nullObject, 'civicrm_customPre'); } @@ -1805,6 +1805,24 @@ abstract class CRM_Utils_Hook { ); } + /** + * Define the list of fields supported in APIv4 data-translation. + * + * @param array $fields + * List of data fields to translate, organized by table and column. + * Omitted/unlisted fields are not translated. Any listed field may be translated. + * Values should be TRUE. + * Ex: $fields['civicrm_event']['summary'] = TRUE + * @return mixed + */ + public static function translateFields(&$fields) { + return self::singleton()->invoke(['fields'], $fields, self::$_nullObject, + self::$_nullObject, self::$_nullObject, self::$_nullObject, + self::$_nullObject, + 'civicrm_translateFields' + ); + } + /** * This hook allows changes to the spec of which tables to log. * @@ -2545,7 +2563,7 @@ abstract class CRM_Utils_Hook { * @return mixed */ public static function check(&$messages, $statusNames = [], $includeDisabled = FALSE) { - return self::singleton()->invoke(['messages'], + return self::singleton()->invoke(['messages', 'statusNames', 'includeDisabled'], $messages, $statusNames, $includeDisabled, self::$_nullObject, self::$_nullObject, self::$_nullObject, 'civicrm_check' diff --git a/civicrm/CRM/Utils/Hook/UnitTests.php b/civicrm/CRM/Utils/Hook/UnitTests.php index 06d70f7454..7b07c1b5ce 100644 --- a/civicrm/CRM/Utils/Hook/UnitTests.php +++ b/civicrm/CRM/Utils/Hook/UnitTests.php @@ -22,12 +22,12 @@ class CRM_Utils_Hook_UnitTests extends CRM_Utils_Hook { * @var array */ protected $adhocHooks; - protected $civiModules = NULL; + protected $civiModules; /** * Call this in CiviUnitTestCase::setUp() */ - public function reset() { + public function reset(): void { $this->mockObject = NULL; $this->adhocHooks = []; } @@ -36,23 +36,24 @@ class CRM_Utils_Hook_UnitTests extends CRM_Utils_Hook { * Use a unit-testing mock object to handle hook invocations. * * e.g. hook_civicrm_foo === $mockObject->foo() - * Mocks with a magic `__call()` method are called for every hook invokation. + * Mocks with a magic `__call()` method are called for every hook invocation. * - * @param object $mockObject + * @param PHPUnit\Framework\MockObject\MockBuilder $mockObject */ - public function setMock($mockObject) { + public function setMock($mockObject): void { $this->mockObject = $mockObject; } /** * Register a function to run when invoking a specific hook. + * * @param string $hook * Hook name, e.g civicrm_pre. - * @param array $callable + * @param callable|array $callable * Function to call ie array(class, method). - * eg. array($this, mymethod) + * eg. array($this, myMethod) */ - public function setHook($hook, $callable) { + public function setHook(string $hook, $callable): void { $this->adhocHooks[$hook] = $callable; } @@ -76,7 +77,8 @@ class CRM_Utils_Hook_UnitTests extends CRM_Utils_Hook { * @param string $fnSuffix * Function suffix, this is effectively the hook name. * - * @return mixed + * @return array|bool + * @throws \CRM_Core_Exception */ public function invokeViaUF( $numParams, @@ -84,7 +86,7 @@ class CRM_Utils_Hook_UnitTests extends CRM_Utils_Hook { $fnSuffix) { $params = array(&$arg1, &$arg2, &$arg3, &$arg4, &$arg5, &$arg6); - $fResult1 = $fResult2 = $fResult3 = NULL; + $fResult2 = $fResult3 = NULL; // run standard hooks if ($this->civiModules === NULL) { diff --git a/civicrm/CRM/Utils/LazyArray.php b/civicrm/CRM/Utils/LazyArray.php new file mode 100644 index 0000000000..4ea6ab1659 --- /dev/null +++ b/civicrm/CRM/Utils/LazyArray.php @@ -0,0 +1,95 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * A lazy-array works much like a regular array or ArrayObject. However, it is + * initially empty - and it is only populated if used. + */ +class CRM_Utils_LazyArray implements ArrayAccess, IteratorAggregate, Countable { + + /** + * A function which generates a list of values. + * + * @var callable + * function(): iterable + */ + private $func; + + /** + * Cached values + * + * @var array|null + */ + private $cache; + + /** + * CRM_Utils_LazyList constructor. + * + * @param callable $func + * Function which provides a list of values (array/iterator/generator). + */ + public function __construct($func) { + $this->func = $func; + } + + /** + * Determine if the content has been fetched. + * + * @return bool + */ + public function isLoaded() { + return $this->cache !== NULL; + } + + public function load($force = FALSE) { + if ($this->cache === NULL || $force) { + $this->cache = CRM_Utils_Array::cast(call_user_func($this->func)); + } + return $this; + } + + public function offsetExists($offset) { + return isset($this->load()->cache[$offset]); + } + + public function &offsetGet($offset) { + return $this->load()->cache[$offset]; + } + + public function offsetSet($offset, $value) { + if ($offset === NULL) { + $this->load()->cache[] = $value; + } + else { + $this->load()->cache[$offset] = $value; + } + } + + public function offsetUnset($offset) { + unset($this->load()->cache[$offset]); + } + + public function getIterator() { + return new ArrayIterator($this->load()->cache); + } + + /** + * @return array + */ + public function getArrayCopy() { + return $this->load()->cache; + } + + public function count() { + return count($this->load()->cache); + } + +} diff --git a/civicrm/CRM/Utils/Mail/Incoming.php b/civicrm/CRM/Utils/Mail/Incoming.php index a119610812..1b5b71f1bf 100644 --- a/civicrm/CRM/Utils/Mail/Incoming.php +++ b/civicrm/CRM/Utils/Mail/Incoming.php @@ -446,7 +446,7 @@ class CRM_Utils_Mail_Incoming { * * @return int|null */ - public static function getContactID($email, $name = NULL, $create = TRUE, &$mail) { + public static function getContactID($email, $name, $create, &$mail) { $dao = CRM_Contact_BAO_Contact::matchContactOnEmail($email, 'Individual'); $contactID = NULL; diff --git a/civicrm/CRM/Utils/Pager.php b/civicrm/CRM/Utils/Pager.php index c07aa8798a..d0c7a1d557 100644 --- a/civicrm/CRM/Utils/Pager.php +++ b/civicrm/CRM/Utils/Pager.php @@ -32,7 +32,13 @@ class CRM_Utils_Pager extends Pager_Sliding { /** * Constants for static parameters of the pager */ - const ROWCOUNT = 50, PAGE_ID = 'crmPID', PAGE_ID_TOP = 'crmPID', PAGE_ID_BOTTOM = 'crmPID_B', PAGE_ROWCOUNT = 'crmRowCount'; + const PAGE_ID = 'crmPID', PAGE_ID_TOP = 'crmPID', PAGE_ID_BOTTOM = 'crmPID_B', PAGE_ROWCOUNT = 'crmRowCount'; + + /** + * Deprecated constants that might still be used by extensions but no longer by core + * @deprecated + */ + const ROWCOUNT = 50; /** * The output of the pager. This is a name/value array with various keys @@ -171,7 +177,7 @@ class CRM_Utils_Pager extends Pager_Sliding { * @return int * new pageId to display to the user */ - public function getPageID($defaultPageId = 1, &$params) { + public function getPageID($defaultPageId, &$params) { // POST has higher priority than GET vars // else if a value is set that has higher priority and finally the GET var $currentPage = $defaultPageId; @@ -198,13 +204,13 @@ class CRM_Utils_Pager extends Pager_Sliding { /** * Get the number of rows to display from either a GET / POST variable * - * @param int $defaultPageRowCount + * @param int|null $defaultPageRowCount * The default value if not set. * * @return int * the rowCount value to use */ - public function getPageRowCount($defaultPageRowCount = self::ROWCOUNT) { + public function getPageRowCount($defaultPageRowCount = NULL) { // POST has higher priority than GET vars if (isset($_POST[self::PAGE_ROWCOUNT])) { $rowCount = max((int ) @$_POST[self::PAGE_ROWCOUNT], 1); @@ -213,7 +219,12 @@ class CRM_Utils_Pager extends Pager_Sliding { $rowCount = max((int ) @$_GET[self::PAGE_ROWCOUNT], 1); } else { - $rowCount = $defaultPageRowCount; + if (empty($defaultPageRowCount)) { + $rowCount = Civi::settings()->get('default_pager_size'); + } + else { + $rowCount = $defaultPageRowCount; + } } return $rowCount; } diff --git a/civicrm/CRM/Utils/Request.php b/civicrm/CRM/Utils/Request.php index 49b84ad8cd..0ab38f4898 100644 --- a/civicrm/CRM/Utils/Request.php +++ b/civicrm/CRM/Utils/Request.php @@ -43,7 +43,7 @@ class CRM_Utils_Request { */ public static function id() { if (!isset(\Civi::$statics[__CLASS__]['id'])) { - \Civi::$statics[__CLASS__]['id'] = uniqid() . CRM_Utils_String::createRandom(CRM_Utils_String::ALPHANUMERIC, 4); + \Civi::$statics[__CLASS__]['id'] = uniqid() . CRM_Utils_String::createRandom(4, CRM_Utils_String::ALPHANUMERIC); } return \Civi::$statics[__CLASS__]['id']; } diff --git a/civicrm/CRM/Utils/System/Base.php b/civicrm/CRM/Utils/System/Base.php index 80ffa437e2..e08bad2c06 100644 --- a/civicrm/CRM/Utils/System/Base.php +++ b/civicrm/CRM/Utils/System/Base.php @@ -1057,4 +1057,12 @@ abstract class CRM_Utils_System_Base { public function invalidateRouteCache() { } + /** + * Should the admin be able to set the password when creating a user + * or does the CMS want it a different way. + */ + public function showPasswordFieldWhenAdminCreatesUser() { + return TRUE; + } + } diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index a506c36b93..a1ef60ee45 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -49,7 +49,7 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { if ($user_register_conf != 'visitors' && !$user->hasPermission('administer users')) { $account->block(); } - elseif ($verify_mail_conf) { + else { $account->activate(); } @@ -658,7 +658,7 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { return NULL; } - return \Drupal::languageManager()->getCurrentLanguage()->getId(); + return \Drupal::languageManager()->getConfigOverrideLanguage()->getId(); } /** diff --git a/civicrm/CRM/Utils/System/UnitTests.php b/civicrm/CRM/Utils/System/UnitTests.php index 179906dbec..6ac827fa91 100644 --- a/civicrm/CRM/Utils/System/UnitTests.php +++ b/civicrm/CRM/Utils/System/UnitTests.php @@ -27,6 +27,15 @@ class CRM_Utils_System_UnitTests extends CRM_Utils_System_Base { $this->supports_form_extensions = FALSE; } + public function initialize() { + parent::initialize(); + $test = $GLOBALS['CIVICRM_TEST_CASE'] ?? NULL; + if ($test && $test instanceof \Civi\Test\HeadlessInterface) { + $listenerMap = \Civi\Core\Event\EventScanner::findListeners($test); + \Civi::dispatcher()->addListenerMap($test, $listenerMap); + } + } + /** * @param string $name * @param string $value diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index 26acbb1a8a..d69c0fcc21 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -1462,4 +1462,12 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { add_action('profile_update', [$civicrm->users, 'update_user']); } + /** + * Depending on configuration, either let the admin enter the password + * when creating a user or let the user do it via email link. + */ + public function showPasswordFieldWhenAdminCreatesUser() { + return !$this->isUserRegistrationPermitted(); + } + } diff --git a/civicrm/CRM/Utils/Weight.php b/civicrm/CRM/Utils/Weight.php index 47154d1f4d..d4961f7769 100644 --- a/civicrm/CRM/Utils/Weight.php +++ b/civicrm/CRM/Utils/Weight.php @@ -280,7 +280,7 @@ class CRM_Utils_Weight { public static function &query( $queryType, $daoName, - $fieldValues = NULL, + $fieldValues, $queryData, $additionalWhere = NULL, $orderBy = NULL, diff --git a/civicrm/CRM/Utils/Zip.php b/civicrm/CRM/Utils/Zip.php index edcef5a720..a7dd244072 100644 --- a/civicrm/CRM/Utils/Zip.php +++ b/civicrm/CRM/Utils/Zip.php @@ -116,7 +116,7 @@ class CRM_Utils_Zip { */ public static function createTestZip($zipName, $dirs, $files) { $zip = new ZipArchive(); - $res = $zip->open($zipName, ZipArchive::CREATE); + $res = $zip->open($zipName, ZipArchive::OVERWRITE); if ($res === TRUE) { foreach ($dirs as $dir) { if (!$zip->addEmptyDir($dir)) { diff --git a/civicrm/Civi/API/Event/AuthorizeEvent.php b/civicrm/Civi/API/Event/AuthorizeEvent.php index 9d146a9b40..d50411fb65 100644 --- a/civicrm/Civi/API/Event/AuthorizeEvent.php +++ b/civicrm/Civi/API/Event/AuthorizeEvent.php @@ -11,8 +11,11 @@ namespace Civi\API\Event; +use Civi\Api4\Event\ActiveUserTrait; + /** * Class AuthorizeEvent + * * @package Civi\API\Event * * Determine whether the API request is allowed for the current user. @@ -22,24 +25,13 @@ namespace Civi\API\Event; * Event name: 'civi.api.authorize' */ class AuthorizeEvent extends Event { - /** - * @var bool - */ - private $authorized = FALSE; - /** - * Mark the request as authorized. - */ - public function authorize() { - $this->authorized = TRUE; - } + use AuthorizedTrait; + use ActiveUserTrait; - /** - * @return bool - * TRUE if the request has been authorized. - */ - public function isAuthorized() { - return $this->authorized; + public function __construct($apiProvider, $apiRequest, $apiKernel, int $userID) { + parent::__construct($apiProvider, $apiRequest, $apiKernel); + $this->setUser($userID); } } diff --git a/civicrm/Civi/API/Event/AuthorizedTrait.php b/civicrm/Civi/API/Event/AuthorizedTrait.php new file mode 100644 index 0000000000..af3367af1d --- /dev/null +++ b/civicrm/Civi/API/Event/AuthorizedTrait.php @@ -0,0 +1,48 @@ +<?php + +namespace Civi\API\Event; + +/** + * Trait AuthorizedTrait + * @package Civi\API\Event + */ +trait AuthorizedTrait { + + /** + * @var bool|null + * - TRUE: The action is explicitly authorized. + * - FALSE: The action is explicitly prohibited. + * - NULL: The authorization status has not been determined. + */ + private $authorized = NULL; + + /** + * Mark the request as authorized. + * + * @return static + */ + public function authorize() { + $this->authorized = TRUE; + return $this; + } + + /** + * @return bool|null + * TRUE if the request has been authorized. + */ + public function isAuthorized(): ?bool { + return $this->authorized; + } + + /** + * Change the authorization status. + * + * @param bool|null $authorized + * @return static + */ + public function setAuthorized(?bool $authorized) { + $this->authorized = $authorized; + return $this; + } + +} diff --git a/civicrm/Civi/API/Event/Event.php b/civicrm/Civi/API/Event/Event.php index 9a68b74339..c5ad2cc92b 100644 --- a/civicrm/Civi/API/Event/Event.php +++ b/civicrm/Civi/API/Event/Event.php @@ -17,6 +17,8 @@ namespace Civi\API\Event; */ class Event extends \Symfony\Component\EventDispatcher\Event { + use RequestTrait; + /** * @var \Civi\API\Kernel */ @@ -28,14 +30,6 @@ class Event extends \Symfony\Component\EventDispatcher\Event { */ protected $apiProvider; - /** - * @var array - * The full description of the API request. - * - * @see \Civi\API\Request::create - */ - protected $apiRequest; - /** * @param \Civi\API\Provider\ProviderInterface $apiProvider * The API responsible for executing the request. @@ -46,7 +40,7 @@ class Event extends \Symfony\Component\EventDispatcher\Event { public function __construct($apiProvider, $apiRequest, $apiKernel) { $this->apiKernel = $apiKernel; $this->apiProvider = $apiProvider; - $this->apiRequest = $apiRequest; + $this->setApiRequest($apiRequest); } /** @@ -65,24 +59,4 @@ class Event extends \Symfony\Component\EventDispatcher\Event { return $this->apiProvider; } - /** - * @return array - */ - public function getApiRequest() { - return $this->apiRequest; - } - - /** - * Create a brief string identifying the entity/action. Useful for - * pithy matching/switching. - * - * Ex: if ($e->getApiRequestSig() === '3.contact.get') { ... } - * - * @return string - * Ex: '3.contact.get' - */ - public function getApiRequestSig() { - return mb_strtolower($this->apiRequest['version'] . '.' . $this->apiRequest['entity'] . '.' . $this->apiRequest['action']); - } - } diff --git a/civicrm/Civi/API/Event/PrepareEvent.php b/civicrm/Civi/API/Event/PrepareEvent.php index 1c6576173c..452ee4c9c2 100644 --- a/civicrm/Civi/API/Event/PrepareEvent.php +++ b/civicrm/Civi/API/Event/PrepareEvent.php @@ -26,11 +26,11 @@ class PrepareEvent extends Event { /** * @param array $apiRequest * The full description of the API request. - * @return PrepareEvent + * @return static */ public function setApiRequest($apiRequest) { - $this->apiRequest = $apiRequest; - return $this; + // Elevate from 'protected' to 'public'. + return parent::setApiRequest($apiRequest); } /** diff --git a/civicrm/Civi/API/Event/RequestTrait.php b/civicrm/Civi/API/Event/RequestTrait.php new file mode 100644 index 0000000000..b216c5e1d7 --- /dev/null +++ b/civicrm/Civi/API/Event/RequestTrait.php @@ -0,0 +1,67 @@ +<?php + +namespace Civi\API\Event; + +/** + * Trait RequestTrait + * @package Civi\API\Event + * + * Most events emitted by the API subsystem should include information about the active API request. + */ +trait RequestTrait { + + /** + * @var \Civi\Api4\Generic\AbstractAction|array + * The full description of the API request. + * + * @see \Civi\API\Request::create + */ + protected $apiRequest; + + /** + * @return \Civi\Api4\Generic\AbstractAction|array + */ + public function getApiRequest() { + return $this->apiRequest; + } + + /** + * @param \Civi\Api4\Generic\AbstractAction|array $apiRequest + * The full description of the API request. + * @return static + */ + protected function setApiRequest($apiRequest) { + $this->apiRequest = $apiRequest; + return $this; + } + + /** + * Create a brief string identifying the entity/action. Useful for + * pithy matching/switching. + * + * Ex: if ($e->getApiRequestSig() === '3.contact.get') { ... } + * + * @return string + * Ex: '3.contact.get' + */ + public function getApiRequestSig(): string { + return mb_strtolower($this->apiRequest['version'] . '.' . $this->apiRequest['entity'] . '.' . $this->apiRequest['action']); + } + + /** + * @return string + * Ex: 'Contact', 'Activity' + */ + public function getEntityName(): string { + return $this->apiRequest['entity']; + } + + /** + * @return string + * Ex: 'create', 'update' + */ + public function getActionName(): string { + return $this->apiRequest['action']; + } + +} diff --git a/civicrm/Civi/API/Event/ResolveEvent.php b/civicrm/Civi/API/Event/ResolveEvent.php index 8d574a0327..cd2cba839e 100644 --- a/civicrm/Civi/API/Event/ResolveEvent.php +++ b/civicrm/Civi/API/Event/ResolveEvent.php @@ -46,7 +46,8 @@ class ResolveEvent extends Event { * The full description of the API request. */ public function setApiRequest($apiRequest) { - $this->apiRequest = $apiRequest; + // Elevate from 'protected' to 'public'. + return parent::setApiRequest($apiRequest); } } diff --git a/civicrm/Civi/API/Kernel.php b/civicrm/Civi/API/Kernel.php index f3cab8ed09..70395abd76 100644 --- a/civicrm/Civi/API/Kernel.php +++ b/civicrm/Civi/API/Kernel.php @@ -218,7 +218,7 @@ class Kernel { */ public function authorize($apiProvider, $apiRequest) { /** @var \Civi\API\Event\AuthorizeEvent $event */ - $event = $this->dispatcher->dispatch('civi.api.authorize', new AuthorizeEvent($apiProvider, $apiRequest, $this)); + $event = $this->dispatcher->dispatch('civi.api.authorize', new AuthorizeEvent($apiProvider, $apiRequest, $this, \CRM_Core_Session::getLoggedInContactID() ?: 0)); if (!$event->isAuthorized()) { throw new \Civi\API\Exception\UnauthorizedException("Authorization failed"); } diff --git a/civicrm/Civi/Angular/AngularLoader.php b/civicrm/Civi/Angular/AngularLoader.php index 2df7997ce5..a5d6d38b57 100644 --- a/civicrm/Civi/Angular/AngularLoader.php +++ b/civicrm/Civi/Angular/AngularLoader.php @@ -5,14 +5,12 @@ namespace Civi\Angular; * The AngularLoader loads any JS/CSS/JSON resources * required for setting up AngularJS. * - * The AngularLoader stops short of bootstrapping AngularJS. You may - * need to `<div ng-app="..."></div>` or `angular.bootstrap(...)`. + * This class is returned by 'angularjs.loader' service. Example use: * * ``` - * $loader = new AngularLoader(); - * $loader->setPageName('civicrm/case/a'); - * $loader->setModules(array('crmApp')); - * $loader->load(); + * Civi::service('angularjs.loader') + * ->addModules('moduleFoo') + * ->useApp(); // Optional, if Civi's routing is desired (full-page apps only) * ``` * * @link https://docs.angularjs.org/guide/bootstrap @@ -80,19 +78,23 @@ class AngularLoader { /** * Calling this method from outside this class is deprecated. * - * The correct way to use this class is as a service, which will load automatically. E.g.: + * Use the `angularjs.loader` service instead. * - * ``` - * Civi::service('angularjs.loader') - * ->addModules('moduleFoo') - * ->useApp(); // Optional, if Civi's routing is desired (full-page apps only) - * ``` - * - * @internal * @deprecated - * @return AngularLoader + * @return $this */ public function load() { + \CRM_Core_Error::deprecatedFunctionWarning('angularjs.loader service'); + return $this->loadAngularResources(); + } + + /** + * Load scripts, styles & settings for the active modules. + * + * @return $this + * @throws \CRM_Core_Exception + */ + private function loadAngularResources() { $angular = $this->getAngular(); $res = $this->getRes(); @@ -353,11 +355,15 @@ class AngularLoader { } /** + * Loader service callback when rendering a page region. + * + * Loads Angular resources if any modules have been requested for this page. + * * @param \Civi\Core\Event\GenericHookEvent $e */ public function onRegionRender($e) { if ($e->region->_name === $this->region && ($this->modules || $this->crmApp)) { - $this->load(); + $this->loadAngularResources(); $this->res->addScriptFile('civicrm', 'js/crm-angularjs-loader.js', 200, $this->getRegion(), FALSE); } } diff --git a/civicrm/Civi/Angular/Page/Main.php b/civicrm/Civi/Angular/Page/Main.php index c844fd3cc0..604158437e 100644 --- a/civicrm/Civi/Angular/Page/Main.php +++ b/civicrm/Civi/Angular/Page/Main.php @@ -10,60 +10,7 @@ namespace Civi\Angular\Page; class Main extends \CRM_Core_Page { /** - * The weight to assign to any Angular JS module files. - */ - const DEFAULT_MODULE_WEIGHT = 200; - - /** - * The resource manager. - * - * Do not use publicly. Inject your own copy! - * - * @var \CRM_Core_Resources - * @deprecated - */ - public $res; - - /** - * The Angular module manager. - * - * Do not use publicly. Inject your own copy! - * - * @var \Civi\Angular\Manager - * @deprecated - */ - public $angular; - - /** - * The region of the page into which JavaScript will be loaded. - * - * @var string - * @deprecated - */ - public $region; - - /** - * @param string $title - * Title of the page. - * @param int $mode - * Mode of the page. - * @param \CRM_Core_Resources|null $res - * Resource manager. - */ - public function __construct($title = NULL, $mode = NULL, $res = NULL) { - parent::__construct($title, $mode); - $this->res = \CRM_Core_Resources::singleton(); - $this->angular = \Civi::service('angular'); - $this->region = \CRM_Utils_Request::retrieve('snippet', 'String') ? 'ajax-snippet' : 'html-header'; - } - - /** - * This function takes care of all the things common to all - * pages. This typically involves assigning the appropriate - * smarty variable :) - * - * @return string - * The content generated by running this page + * Run the page */ public function run() { $this->registerResources(); @@ -74,14 +21,11 @@ class Main extends \CRM_Core_Page { * Register resources required by Angular. */ public function registerResources() { - $loader = new \Civi\Angular\AngularLoader(); - $loader->setPageName('civicrm/a'); + $loader = \Civi::service('angularjs.loader'); $loader->useApp([ 'activeRoute' => \CRM_Utils_Request::retrieve('route', 'String'), 'defaultRoute' => NULL, ]); - $loader->load(); - } } diff --git a/civicrm/Civi/Api4/ACL.php b/civicrm/Civi/Api4/ACL.php index 01de7979ea..df7ac101a1 100644 --- a/civicrm/Civi/Api4/ACL.php +++ b/civicrm/Civi/Api4/ACL.php @@ -30,7 +30,7 @@ namespace Civi\Api4; * * Creating a new ACL requires at minimum an entity table, entity ID and object_table. * - * @searchable false + * @searchable none * @see https://docs.civicrm.org/user/en/latest/initial-set-up/permissions-and-access-control * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/ACLEntityRole.php b/civicrm/Civi/Api4/ACLEntityRole.php new file mode 100644 index 0000000000..aa0047d4f9 --- /dev/null +++ b/civicrm/Civi/Api4/ACLEntityRole.php @@ -0,0 +1,30 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * This api exposes CiviCRM ACLEntityRole. + * + * @see https://docs.civicrm.org/user/en/latest/initial-set-up/permissions-and-access-control + * @package Civi\Api4 + */ +class ACLEntityRole extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Action/Address/AddressSaveTrait.php b/civicrm/Civi/Api4/Action/Address/AddressSaveTrait.php index af121c42b9..2f966d97e1 100644 --- a/civicrm/Civi/Api4/Action/Address/AddressSaveTrait.php +++ b/civicrm/Civi/Api4/Action/Address/AddressSaveTrait.php @@ -54,7 +54,7 @@ trait AddressSaveTrait { /** * @inheritDoc */ - protected function writeObjects($items) { + protected function writeObjects(&$items) { foreach ($items as &$item) { if ($this->streetParsing && !empty($item['street_address'])) { $item = array_merge($item, \CRM_Core_BAO_Address::parseStreetAddress($item['street_address'])); diff --git a/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php b/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php index 8f83c11206..33d2d15141 100644 --- a/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php +++ b/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php @@ -28,7 +28,7 @@ trait CiviCaseSaveTrait { * @param array $cases * @return array */ - protected function writeObjects($cases) { + protected function writeObjects(&$cases) { $cases = array_values($cases); $result = parent::writeObjects($cases); diff --git a/civicrm/Civi/Api4/Action/CustomValue/GetFields.php b/civicrm/Civi/Api4/Action/CustomValue/GetFields.php index 9ba2981dd8..63ab5c3e70 100644 --- a/civicrm/Civi/Api4/Action/CustomValue/GetFields.php +++ b/civicrm/Civi/Api4/Action/CustomValue/GetFields.php @@ -12,8 +12,6 @@ namespace Civi\Api4\Action\CustomValue; -use Civi\Api4\Service\Spec\SpecFormatter; - /** * Get fields for a custom group. */ @@ -24,20 +22,8 @@ class GetFields extends \Civi\Api4\Generic\DAOGetFieldsAction { $fields = $this->_itemsToGet('name'); /** @var \Civi\Api4\Service\Spec\SpecGatherer $gatherer */ $gatherer = \Civi::container()->get('spec_gatherer'); - $spec = $gatherer->getSpec('Custom_' . $this->getCustomGroup(), $this->getAction(), $this->includeCustom, $this->values); - return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions); - } - - /** - * @inheritDoc - */ - public function getParamInfo($param = NULL) { - $info = parent::getParamInfo($param); - if (!$param) { - // This param is meaningless here. - unset($info['includeCustom']); - } - return $info; + $spec = $gatherer->getSpec('Custom_' . $this->getCustomGroup(), $this->getAction(), TRUE, $this->values); + return $this->specToArray($spec->getFields($fields)); } } diff --git a/civicrm/Civi/Api4/Action/Entity/Get.php b/civicrm/Civi/Api4/Action/Entity/Get.php index 765a3703a9..fbfe399e4d 100644 --- a/civicrm/Civi/Api4/Action/Entity/Get.php +++ b/civicrm/Civi/Api4/Action/Entity/Get.php @@ -29,54 +29,41 @@ use Civi\Api4\Utils\CoreUtil; * * Scans for api entities in core, enabled components & enabled extensions. * - * Also includes pseudo-entities from multi-record custom groups by default. - * - * @method $this setIncludeCustom(bool $value) - * @method bool getIncludeCustom() + * Also includes pseudo-entities from multi-record custom groups. */ class Get extends \Civi\Api4\Generic\BasicGetAction { /** - * Include custom-field-based pseudo-entities? - * * @var bool + * @deprecated */ - protected $includeCustom = TRUE; + protected $includeCustom; /** * Scan all api directories to discover entities */ protected function getRecords() { $entities = []; - $toGet = $this->_itemsToGet('name'); - $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')], - array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath') - ); - $enabledComponents = array_keys(\CRM_Core_Component::getEnabledComponents()); - foreach ($locations as $location) { - $dir = \CRM_Utils_File::addTrailingSlash(dirname($location)) . 'Civi/Api4'; - if (is_dir($dir)) { - foreach (glob("$dir/*.php") as $file) { - $matches = []; - preg_match('/(\w*)\.php$/', $file, $matches); - $className = '\Civi\Api4\\' . $matches[1]; - if (is_a($className, '\Civi\Api4\Generic\AbstractEntity', TRUE)) { - $info = $className::getInfo(); - $entityName = $info['name']; - $daoName = $info['dao'] ?? NULL; - // Only include DAO entities from enabled components - if ((!$toGet || in_array($entityName, $toGet)) && - (!$daoName || !defined("{$daoName}::COMPONENT") || in_array($daoName::COMPONENT, $enabledComponents)) - ) { - $entities[$info['name']] = $info; - } + $namesRequested = $this->_itemsToGet('name'); + + if ($namesRequested) { + foreach ($namesRequested as $entityName) { + if (strpos($entityName, 'Custom_') !== 0) { + $className = CoreUtil::getApiClass($entityName); + if ($className) { + $this->loadEntity($className, $entities); } } } } + else { + foreach ($this->getAllApiClasses() as $className) { + $this->loadEntity($className, $entities); + } + } // Fetch custom entities unless we've already fetched everything requested - if ($this->includeCustom && (!$toGet || array_diff($toGet, array_keys($entities)))) { + if (!$namesRequested || array_diff($namesRequested, array_keys($entities))) { $this->addCustomEntities($entities); } @@ -84,6 +71,41 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { return $entities; } + /** + * @param \Civi\Api4\Generic\AbstractEntity $className + * @param array $entities + */ + private function loadEntity($className, array &$entities) { + $info = $className::getInfo(); + $daoName = $info['dao'] ?? NULL; + // Only include DAO entities from enabled components + if (!$daoName || !defined("{$daoName}::COMPONENT") || array_key_exists($daoName::COMPONENT, \CRM_Core_Component::getEnabledComponents())) { + $entities[$info['name']] = $info; + } + } + + /** + * @return \Civi\Api4\Generic\AbstractEntity[] + */ + private function getAllApiClasses() { + $classNames = []; + $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')], + array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath') + ); + foreach ($locations as $location) { + $dir = \CRM_Utils_File::addTrailingSlash(dirname($location)) . 'Civi/Api4'; + if (is_dir($dir)) { + foreach (glob("$dir/*.php") as $file) { + $className = 'Civi\Api4\\' . basename($file, '.php'); + if (is_a($className, 'Civi\Api4\Generic\AbstractEntity', TRUE)) { + $classNames[] = $className; + } + } + } + } + return $classNames; + } + /** * Add custom-field pseudo-entities * diff --git a/civicrm/Civi/Api4/Action/GetActions.php b/civicrm/Civi/Api4/Action/GetActions.php index e0dfbb597b..1720ee7016 100644 --- a/civicrm/Civi/Api4/Action/GetActions.php +++ b/civicrm/Civi/Api4/Action/GetActions.php @@ -79,7 +79,7 @@ class GetActions extends BasicGetAction { try { if (!isset($this->_actions[$actionName]) && (!$this->_actionsToGet || in_array($actionName, $this->_actionsToGet))) { $action = \Civi\API\Request::create($this->getEntityName(), $actionName, ['version' => 4]); - if (is_object($action) && (!$this->checkPermissions || $action->isAuthorized())) { + if (is_object($action) && (!$this->checkPermissions || $action->isAuthorized(\CRM_Core_Session::singleton()->getLoggedInContactID()))) { $this->_actions[$actionName] = ['name' => $actionName]; if ($this->_isFieldSelected('description', 'comment', 'see')) { $vars = ['entity' => $this->getEntityName(), 'action' => $actionName]; diff --git a/civicrm/Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php b/civicrm/Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php index 85492afdb4..546a94458f 100644 --- a/civicrm/Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php +++ b/civicrm/Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php @@ -46,7 +46,7 @@ trait GroupContactSaveTrait { /** * @inheritDoc */ - protected function writeObjects($items) { + protected function writeObjects(&$items) { foreach ($items as &$item) { $item['method'] = $this->method; $item['tracking'] = $this->tracking; diff --git a/civicrm/Civi/Api4/ActionSchedule.php b/civicrm/Civi/Api4/ActionSchedule.php index 2451af4292..4f2a6f1fe3 100644 --- a/civicrm/Civi/Api4/ActionSchedule.php +++ b/civicrm/Civi/Api4/ActionSchedule.php @@ -28,7 +28,7 @@ namespace Civi\Api4; * * Creating a new ActionSchedule requires at minimum a title, mapping_id and entity_value. * - * @searchable false + * @searchable none * @see https://docs.civicrm.org/user/en/latest/email/scheduled-reminders/ * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/Activity.php b/civicrm/Civi/Api4/Activity.php index 4b45829273..8166c62825 100644 --- a/civicrm/Civi/Api4/Activity.php +++ b/civicrm/Civi/Api4/Activity.php @@ -30,6 +30,7 @@ namespace Civi\Api4; * An activity is a record of some type of interaction with one or more contacts. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/activities/ + * @searchable primary * @package Civi\Api4 */ class Activity extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/ActivityContact.php b/civicrm/Civi/Api4/ActivityContact.php index 39ec1b3b95..767595de70 100644 --- a/civicrm/Civi/Api4/ActivityContact.php +++ b/civicrm/Civi/Api4/ActivityContact.php @@ -27,6 +27,7 @@ namespace Civi\Api4; * The record_type_id field determines the contact's role in the activity (source, target, or assignee). * @ui_join_filters record_type_id * + * @searchable bridge * @see \Civi\Api4\Activity * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/Address.php b/civicrm/Civi/Api4/Address.php index 242afbe0bd..a8e53641e6 100644 --- a/civicrm/Civi/Api4/Address.php +++ b/civicrm/Civi/Api4/Address.php @@ -22,14 +22,15 @@ namespace Civi\Api4; /** * Address Entity. * - * This entity holds the address informatiom of a contact. Each contact may hold + * This entity holds the address information of a contact. Each contact may hold * one or more addresses but must have different location types respectively. * * Creating a new address requires at minimum a contact's ID and location type ID - * and other attributes (although optional) like street address, city, country etc. + * and other attributes (although optional) like street address, city, country etc. * * @ui_join_filters location_type_id * + * @searchable secondary * @package Civi\Api4 */ class Address extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Batch.php b/civicrm/Civi/Api4/Batch.php index 8a75875070..7e48003af6 100644 --- a/civicrm/Civi/Api4/Batch.php +++ b/civicrm/Civi/Api4/Batch.php @@ -22,6 +22,7 @@ namespace Civi\Api4; /** * Batch entity. * + * @searchable secondary * @see https://docs.civicrm.org/user/en/latest/pledges/everyday-tasks/#batch-entry-of-pledges * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/Campaign.php b/civicrm/Civi/Api4/Campaign.php index 7d15c1b598..11e8834139 100644 --- a/civicrm/Civi/Api4/Campaign.php +++ b/civicrm/Civi/Api4/Campaign.php @@ -23,6 +23,7 @@ namespace Civi\Api4; * Campaign entity. * * @see https://docs.civicrm.org/user/en/latest/campaign/what-is-civicampaign/ + * @searchable secondary * @package Civi\Api4 */ class Campaign extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CaseActivity.php b/civicrm/Civi/Api4/CaseActivity.php index 95be921960..f38ce21ee9 100644 --- a/civicrm/Civi/Api4/CaseActivity.php +++ b/civicrm/Civi/Api4/CaseActivity.php @@ -24,6 +24,7 @@ namespace Civi\Api4; * * This connects an activity to one or more cases. * + * @searchable bridge * @see \Civi\Api4\Case * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/CaseContact.php b/civicrm/Civi/Api4/CaseContact.php index 4d8ae66130..a9351a9798 100644 --- a/civicrm/Civi/Api4/CaseContact.php +++ b/civicrm/Civi/Api4/CaseContact.php @@ -24,6 +24,7 @@ namespace Civi\Api4; * * This connects a client to a case. * + * @searchable bridge * @see \Civi\Api4\Case * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/CaseType.php b/civicrm/Civi/Api4/CaseType.php index ada029a598..a546412ceb 100644 --- a/civicrm/Civi/Api4/CaseType.php +++ b/civicrm/Civi/Api4/CaseType.php @@ -25,6 +25,7 @@ namespace Civi\Api4; * This contains configuration settings for each type of CiviCase. * * @see \Civi\Api4\Case + * @searchable none * @package Civi\Api4 */ class CaseType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CiviCase.php b/civicrm/Civi/Api4/CiviCase.php index e1fb635c19..189dba867d 100644 --- a/civicrm/Civi/Api4/CiviCase.php +++ b/civicrm/Civi/Api4/CiviCase.php @@ -25,6 +25,7 @@ namespace Civi\Api4; * Note that the class for this entity is named "CiviCase" because "Case" is a keyword reserved by php. * * @see https://docs.civicrm.org/user/en/latest/case-management/what-is-civicase/ + * @searchable primary * @package Civi\Api4 */ class CiviCase extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Contact.php b/civicrm/Civi/Api4/Contact.php index 59abcc742e..9c24e00d75 100644 --- a/civicrm/Civi/Api4/Contact.php +++ b/civicrm/Civi/Api4/Contact.php @@ -28,6 +28,7 @@ namespace Civi\Api4; * Creating a new contact requires at minimum a name or email address. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/ + * @searchable primary * @package Civi\Api4 */ class Contact extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/ContactType.php b/civicrm/Civi/Api4/ContactType.php index ac6731e569..df3c753676 100644 --- a/civicrm/Civi/Api4/ContactType.php +++ b/civicrm/Civi/Api4/ContactType.php @@ -30,6 +30,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/#contact-subtypes * @see \Civi\Api4\Contact + * @searchable none * @package Civi\Api4 */ class ContactType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Contribution.php b/civicrm/Civi/Api4/Contribution.php index 99743ba015..fe7bc91624 100644 --- a/civicrm/Civi/Api4/Contribution.php +++ b/civicrm/Civi/Api4/Contribution.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * Contribution entity. * + * @searchable primary * @package Civi\Api4 */ class Contribution extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/ContributionPage.php b/civicrm/Civi/Api4/ContributionPage.php index cfafb5b018..845780e7a0 100644 --- a/civicrm/Civi/Api4/ContributionPage.php +++ b/civicrm/Civi/Api4/ContributionPage.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * ContributionPage entity. * + * @searchable secondary * @package Civi\Api4 */ class ContributionPage extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/ContributionRecur.php b/civicrm/Civi/Api4/ContributionRecur.php index 4d3884d15f..75380c7f0a 100644 --- a/civicrm/Civi/Api4/ContributionRecur.php +++ b/civicrm/Civi/Api4/ContributionRecur.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * ContributionRecur entity. * + * @searchable secondary * @package Civi\Api4 */ class ContributionRecur extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/ContributionSoft.php b/civicrm/Civi/Api4/ContributionSoft.php index 17dc9fd05b..8271fa2225 100644 --- a/civicrm/Civi/Api4/ContributionSoft.php +++ b/civicrm/Civi/Api4/ContributionSoft.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * ContributionSoft entity. * + * @searchable secondary * @package Civi\Api4 */ class ContributionSoft extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Country.php b/civicrm/Civi/Api4/Country.php index ccc9442789..9441b4ac6c 100644 --- a/civicrm/Civi/Api4/Country.php +++ b/civicrm/Civi/Api4/Country.php @@ -21,6 +21,7 @@ namespace Civi\Api4; /** * Country entity. * + * @searchable secondary * @package Civi\Api4 */ class Country extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CustomField.php b/civicrm/Civi/Api4/CustomField.php index 1d4b7e104b..2428efc93a 100644 --- a/civicrm/Civi/Api4/CustomField.php +++ b/civicrm/Civi/Api4/CustomField.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * CustomField entity. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class CustomField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CustomGroup.php b/civicrm/Civi/Api4/CustomGroup.php index 7a87a2bde0..ba1729d82a 100644 --- a/civicrm/Civi/Api4/CustomGroup.php +++ b/civicrm/Civi/Api4/CustomGroup.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * CustomGroup entity. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class CustomGroup extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CustomValue.php b/civicrm/Civi/Api4/CustomValue.php index 8b9b3411db..e036aa48e8 100644 --- a/civicrm/Civi/Api4/CustomValue.php +++ b/civicrm/Civi/Api4/CustomValue.php @@ -122,6 +122,13 @@ class CustomValue { ->setCheckPermissions($checkPermissions); } + /** + * @return \Civi\Api4\Generic\CheckAccessAction + */ + public static function checkAccess($customGroup) { + return new Generic\CheckAccessAction("Custom_$customGroup", __FUNCTION__); + } + /** * @see \Civi\Api4\Generic\AbstractEntity::permissions() * @return array @@ -142,7 +149,7 @@ class CustomValue { return [ 'class' => __CLASS__, 'type' => ['CustomValue'], - 'searchable' => TRUE, + 'searchable' => 'secondary', 'see' => [ 'https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/#multiple-record-fieldsets', '\Civi\Api4\CustomGroup', diff --git a/civicrm/Civi/Api4/Dashboard.php b/civicrm/Civi/Api4/Dashboard.php index 24b42557a6..a8c424f19d 100644 --- a/civicrm/Civi/Api4/Dashboard.php +++ b/civicrm/Civi/Api4/Dashboard.php @@ -28,7 +28,7 @@ namespace Civi\Api4; * Displaying an item to a user is done with the `DashboardContact` entity. * * @see \Civi\Api4\DashboardContact - * @searchable false + * @searchable none * @package Civi\Api4 */ class Dashboard extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/DashboardContact.php b/civicrm/Civi/Api4/DashboardContact.php index f2538b326c..91eae6be2f 100644 --- a/civicrm/Civi/Api4/DashboardContact.php +++ b/civicrm/Civi/Api4/DashboardContact.php @@ -23,8 +23,9 @@ namespace Civi\Api4; * * This places a dashboard item on a user's home screen. * + * @searchable bridge * @see \Civi\Api4\Dashboard - * @searchable false + * @searchable none * @package Civi\Api4 */ class DashboardContact extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/DedupeException.php b/civicrm/Civi/Api4/DedupeException.php new file mode 100644 index 0000000000..1100587b68 --- /dev/null +++ b/civicrm/Civi/Api4/DedupeException.php @@ -0,0 +1,33 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * DedupeException entity. + * + * This api exposes CiviCRM (dedupe) exceptions. + * + * @searchable none + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/ + * @package Civi\Api4 + */ +class DedupeException extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/DedupeRule.php b/civicrm/Civi/Api4/DedupeRule.php new file mode 100644 index 0000000000..dafcda898e --- /dev/null +++ b/civicrm/Civi/Api4/DedupeRule.php @@ -0,0 +1,33 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * DedupeRule entity. + * + * This api exposes CiviCRM (dedupe) rules. + * + * @searchable none + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/ + * @package Civi\Api4 + */ +class DedupeRule extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/DedupeRuleGroup.php b/civicrm/Civi/Api4/DedupeRuleGroup.php new file mode 100644 index 0000000000..70433a1c04 --- /dev/null +++ b/civicrm/Civi/Api4/DedupeRuleGroup.php @@ -0,0 +1,33 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * DedupeRuleGroup entity. + * + * This api exposes CiviCRM (dedupe) groups. + * + * @searchable none + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/ + * @package Civi\Api4 + */ +class DedupeRuleGroup extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Domain.php b/civicrm/Civi/Api4/Domain.php index 8d356fac32..88e2df9eb5 100644 --- a/civicrm/Civi/Api4/Domain.php +++ b/civicrm/Civi/Api4/Domain.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * Domains - multisite instances of CiviCRM. * * @see https://docs.civicrm.org/sysadmin/en/latest/setup/multisite/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class Domain extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Email.php b/civicrm/Civi/Api4/Email.php index cfb9ef99e8..c9ec6d4bad 100644 --- a/civicrm/Civi/Api4/Email.php +++ b/civicrm/Civi/Api4/Email.php @@ -26,6 +26,7 @@ namespace Civi\Api4; * * Creating a new email address requires at minimum a contact's ID and email * + * @searchable secondary * @package Civi\Api4 */ class Email extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Entity.php b/civicrm/Civi/Api4/Entity.php index 31b3aeed6c..e66a9bec70 100644 --- a/civicrm/Civi/Api4/Entity.php +++ b/civicrm/Civi/Api4/Entity.php @@ -24,6 +24,7 @@ namespace Civi\Api4; * * @see \Civi\Api4\Generic\AbstractEntity * + * @searchable none * @package Civi\Api4 */ class Entity extends Generic\AbstractEntity { @@ -63,6 +64,7 @@ class Entity extends Generic\AbstractEntity { 'options' => [ 'AbstractEntity' => 'AbstractEntity', 'DAOEntity' => 'DAOEntity', + 'CustomValue' => 'CustomValue', 'BasicEntity' => 'BasicEntity', 'EntityBridge' => 'EntityBridge', 'OptionList' => 'OptionList', @@ -84,13 +86,23 @@ class Entity extends Generic\AbstractEntity { 'name' => 'dao', 'description' => 'Class name for dao-based entities', ], + [ + 'name' => 'id_field', + 'description' => 'Name of unique identifier field (e.g. "id")', + ], [ 'name' => 'label_field', 'description' => 'Field to show when displaying a record', ], [ 'name' => 'searchable', - 'description' => 'Should this entity be selectable in search kit UI', + 'description' => 'How should this entity be presented in search UIs', + 'options' => [ + 'primary' => ts('Primary'), + 'secondary' => ts('Secondary'), + 'bridge' => ts('Bridge'), + 'none' => ts('None'), + ], ], [ 'name' => 'paths', diff --git a/civicrm/Civi/Api4/EntityFinancialAccount.php b/civicrm/Civi/Api4/EntityFinancialAccount.php index 0963f73a93..e8f4750ce9 100644 --- a/civicrm/Civi/Api4/EntityFinancialAccount.php +++ b/civicrm/Civi/Api4/EntityFinancialAccount.php @@ -23,12 +23,24 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/#financial-accounts * - * @bridge entity_id financial_account_id * @ui_join_filters account_relationship * + * @searchable bridge * @package Civi\Api4 */ class EntityFinancialAccount extends Generic\DAOEntity { use Generic\Traits\EntityBridge; + /** + * @return array + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['bridge'] = [ + 'entity_id' => [], + 'financial_account_id' => [], + ]; + return $info; + } + } diff --git a/civicrm/Civi/Api4/EntityFinancialTrxn.php b/civicrm/Civi/Api4/EntityFinancialTrxn.php index 3ad135bfdc..568f57d482 100644 --- a/civicrm/Civi/Api4/EntityFinancialTrxn.php +++ b/civicrm/Civi/Api4/EntityFinancialTrxn.php @@ -24,11 +24,23 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/ * - * @bridge entity_id financial_trxn_id - * + * @searchable bridge * @package Civi\Api4 */ class EntityFinancialTrxn extends Generic\DAOEntity { use Generic\Traits\EntityBridge; + use Generic\Traits\ReadOnly; + + /** + * @return array + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['bridge'] = [ + 'entity_id' => [], + 'financial_trxn_id' => [], + ]; + return $info; + } } diff --git a/civicrm/Civi/Api4/EntityTag.php b/civicrm/Civi/Api4/EntityTag.php index 2febe72254..62fe8b6870 100644 --- a/civicrm/Civi/Api4/EntityTag.php +++ b/civicrm/Civi/Api4/EntityTag.php @@ -22,7 +22,7 @@ namespace Civi\Api4; * EntityTag - links tags to contacts, activities, etc. * * @see \Civi\Api4\Tag - * + * @searchable bridge * @package Civi\Api4 */ class EntityTag extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Event.php b/civicrm/Civi/Api4/Event.php index 66c504a534..021ebc9818 100644 --- a/civicrm/Civi/Api4/Event.php +++ b/civicrm/Civi/Api4/Event.php @@ -24,6 +24,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/events/what-is-civievent/ * + * @searchable primary * @package Civi\Api4 */ class Event extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Event/ActiveUserTrait.php b/civicrm/Civi/Api4/Event/ActiveUserTrait.php new file mode 100644 index 0000000000..3cb8c82352 --- /dev/null +++ b/civicrm/Civi/Api4/Event/ActiveUserTrait.php @@ -0,0 +1,43 @@ +<?php + +namespace Civi\Api4\Event; + +trait ActiveUserTrait { + + /** + * Contact ID of the active/target user (whose access we must check). + * 0 for anonymous. + * + * @var int + */ + private $userID; + + /** + * @param int|null $userID + * Contact ID of the active/target user (whose access we must check). + * 0 for anonymous. + * @return $this + */ + protected function setUser(int $userID) { + $loggedInContactID = \CRM_Core_Session::getLoggedInContactID() ?: 0; + if ($userID !== $loggedInContactID) { + throw new \RuntimeException("The API subsystem does not yet fully support variable user IDs."); + // Traditionally, the API events did not emit information about the current user; it was assumed + // that the user was the logged-in user. This may be expanded in the future to support some more edge-cases. + // For now, the semantics are unchanged - but we've begun reporting the active userID so that + // consumers can start adopting it. + } + $this->userID = $userID; + return $this; + } + + /** + * @return int + * Contact ID of the active/target user (whose access we must check). + * 0 for anonymous. + */ + public function getUserID(): int { + return $this->userID; + } + +} diff --git a/civicrm/Civi/Api4/Event/AuthorizeRecordEvent.php b/civicrm/Civi/Api4/Event/AuthorizeRecordEvent.php new file mode 100644 index 0000000000..ba480de842 --- /dev/null +++ b/civicrm/Civi/Api4/Event/AuthorizeRecordEvent.php @@ -0,0 +1,75 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4\Event; + +use Civi\API\Event\AuthorizedTrait; +use Civi\API\Event\RequestTrait; +use Civi\Core\Event\GenericHookEvent; + +/** + * Determine if the a user has access to a given record. + * + * Event name: 'civi.api4.authorizeRecord' + */ +class AuthorizeRecordEvent extends GenericHookEvent { + + use RequestTrait; + use AuthorizedTrait; + use ActiveUserTrait; + + /** + * All (known/loaded) values of individual record being accessed. + * The record should provide an 'id' but may otherwise be incomplete; guard accordingly. + * + * @var array + */ + private $record; + + /** + * CheckAccessEvent constructor. + * + * @param \Civi\Api4\Generic\AbstractAction $apiRequest + * @param array $record + * All (known/loaded) values of individual record being accessed. + * The record should provide an 'id' but may otherwise be incomplete; guard accordingly. + * @param int $userID + * Contact ID of the active/target user (whose access we must check). + * 0 for anonymous. + */ + public function __construct($apiRequest, array $record, int $userID) { + $this->setApiRequest($apiRequest); + $this->record = $record; + $this->setUser($userID); + } + + /** + * @inheritDoc + */ + public function getHookValues() { + return [$this->getApiRequest(), $this->record, &$this->authorized]; + } + + /** + * @return array + */ + public function getRecord(): array { + return $this->record; + } + +} diff --git a/civicrm/Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php b/civicrm/Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php deleted file mode 100644 index ceb6ccc842..0000000000 --- a/civicrm/Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ - - -namespace Civi\Api4\Event\Subscriber; - -use Civi\Api4\Generic\DAOCreateAction; -use Civi\Api4\OptionValue; - -class ActivityPreCreationSubscriber extends Generic\PreCreationSubscriber { - - /** - * @param \Civi\Api4\Generic\DAOCreateAction $request - * @throws \API_Exception - * @throws \Exception - */ - protected function modify(DAOCreateAction $request) { - $activityType = $request->getValue('activity_type'); - if ($activityType) { - \CRM_Core_Error::deprecatedFunctionWarning('Use activity_type_id:name instead of activity_type in APIv4'); - $result = OptionValue::get(FALSE) - ->addWhere('name', '=', $activityType) - ->addWhere('option_group.name', '=', 'activity_type') - ->execute(); - - if ($result->count() !== 1) { - throw new \Exception('Activity type must match a *single* type'); - } - - $request->addValue('activity_type_id', $result->first()['value']); - } - } - - /** - * @param \Civi\Api4\Generic\DAOCreateAction $request - * - * @return bool - */ - protected function applies(DAOCreateAction $request) { - return $request->getEntityName() === 'Activity'; - } - -} diff --git a/civicrm/Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php b/civicrm/Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php index 70fecac907..e71e6707e0 100644 --- a/civicrm/Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php +++ b/civicrm/Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php @@ -40,7 +40,7 @@ class PermissionCheckSubscriber implements EventSubscriberInterface { /* @var \Civi\Api4\Generic\AbstractAction $apiRequest */ $apiRequest = $event->getApiRequest(); if ($apiRequest['version'] == 4) { - if (!$apiRequest->getCheckPermissions() || $apiRequest->isAuthorized()) { + if (!$apiRequest->getCheckPermissions() || $apiRequest->isAuthorized(\CRM_Core_Session::singleton()->getLoggedInContactID())) { $event->authorize(); $event->stopPropagation(); } diff --git a/civicrm/Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php b/civicrm/Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php index e1aaa65216..65b7cc1bdf 100644 --- a/civicrm/Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php +++ b/civicrm/Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php @@ -37,6 +37,9 @@ class ValidateFieldsSubscriber extends Generic\AbstractPrepareSubscriber { if (!empty($info['type']) && !self::checkType($value, $info['type'])) { throw new \API_Exception('Parameter "' . $param . '" is not of the correct type. Expecting ' . implode(' or ', $info['type']) . '.'); } + if (!empty($info['deprecated']) && isset($value)) { + \CRM_Core_Error::deprecatedWarning('APIv4 ' . $apiRequest->getEntityName() . ".$param parameter is deprecated."); + } } } } diff --git a/civicrm/Civi/Api4/Event/ValidateValuesEvent.php b/civicrm/Civi/Api4/Event/ValidateValuesEvent.php new file mode 100644 index 0000000000..6444ad3b67 --- /dev/null +++ b/civicrm/Civi/Api4/Event/ValidateValuesEvent.php @@ -0,0 +1,162 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4\Event; + +use Civi\API\Event\RequestTrait; +use Civi\Core\Event\GenericHookEvent; + +/** + * The ValidateValuesEvent ('civi.api4.validate') is emitted when creating or saving an entire record via APIv4. + * It is emitted once for every record is updated. + * + * Example #1: Walk each record and validate some fields + * + * function(ValidateValuesEvent $e) { + * if ($e->entity !== 'Foozball') return; + * foreach ($e->records as $r => $record) { + * if (strtotime($record['start_time']) < CRM_Utils_Time::time()) { + * $e->addError($r, 'start_time', 'past', ts('Start time has already passed.')); + * } + * if ($record['length'] * $record['width'] * $record['height'] > VOLUME_LIMIT) { + * $e->addError($r, ['length', 'width', 'height'], 'excessive_volume', ts('The record is too big.')); + * } + * } + * } + * + * Example #2: Prohibit recording `Contribution` records on `Student` contacts. + * + * function(ValidateValuesEvent $e) { + * if ($e->entity !== 'Contribution') return; + * $contactSubTypes = CRM_Utils_SQL_Select::from('civicrm_contact') + * ->where('id IN (#ids)', ['ids' => array_column($e->records, 'contact_id')]) + * ->select('id, contact_sub_type') + * ->execute()->fetchMap('id', 'contact_sub_type'); + * foreach ($e->records as $r => $record) { + * if ($contactSubTypes[$record['contact_id']] === 'Student') { + * $e->addError($r, 'contact_id', 'student_prohibited', ts('Donations from student records are strictly prohibited.')); + * } + * } + * } + */ +class ValidateValuesEvent extends GenericHookEvent { + + use RequestTrait; + + /** + * List of updated records. + * + * The list of `$records` reflects only the list of new values assigned + * by this action. It may or may not correspond to an existing row in the database. + * It is similar to the `$records` list used by `save()`. + * + * @var array|\CRM_Utils_LazyArray + * @see \Civi\Api4\Generic\AbstractSaveAction::$records + */ + public $records; + + /** + * Detailed, side-by-side comparison of old and new values. + * + * This requires loading the list of old values from the database. Consequently, + * reading `$diffs` is more expensive than reading `$records`, so you should only use it if + * really necessary. + * + * The list of $diffs may be important if you are enforcing a rule that involves + * multiple fields. (Ex: "Validate that the state_id and country_id match.") + * + * When possible, $records and $diffs will have the same number of items (with corresponding + * keys). However, in the case of a batch `update()`, the list of diffs will be longer. + * + * @var array|\CRM_Utils_LazyArray + * Each item is a record of the form ['old' => $fieldValues, 'new' => $fieldValues] + */ + public $diffs; + + /** + * List of error messages. + * + * @var array + * Array(string $errorName => string $errorMessage) + * Note: + */ + public $errors = []; + + /** + * ValidateValuesEvent constructor. + * + * @param \Civi\Api4\Generic\AbstractAction $apiRequest + * @param array|\CRM_Utils_LazyArray $records + * List of updates (akin to SaveAction::$records). + * @param array|\CRM_Utils_LazyArray $diffs + * List of differences (comparing old values and new values). + */ + public function __construct($apiRequest, $records, $diffs) { + $this->setApiRequest($apiRequest); + $this->records = $records; + $this->diffs = $diffs; + $this->errors = []; + } + + /** + * @inheritDoc + */ + public function getHookValues() { + return [$this->getApiRequest(), $this->records, &$this->errors]; + } + + /** + * Add an error. + * + * @param string|int $recordKey + * The validator may work with multiple records. This should identify the specific record. + * Each record is identified by its offset (`$records[$recordKey] === [...the record...]`). + * @param string|array $field + * The name of the field which has an error. + * If the error is multi-field (e.g. mismatched password-confirmation), then use an array. + * If the error is independent of any field, then use []. + * @param string $name + * @param string|NULL $message + * @return $this + */ + public function addError($recordKey, $field, string $name, string $message = NULL): self { + $this->errors[] = [ + 'record' => $recordKey, + 'fields' => (array) $field, + 'name' => $name, + 'message' => $message ?: ts('Error code (%1)', [1 => $name]), + ]; + return $this; + } + + /** + * Convert the list of errors an exception. + * + * @return \API_Exception + */ + public function toException() { + // We should probably have a better way to report the errors in a structured/list format. + return new \API_Exception(ts('Found %1 error(s) in submitted %2 record(s) of type "%3": %4', [ + 1 => count($this->errors), + 2 => count(array_unique(array_column($this->errors, 'record'))), + 3 => $this->getEntityName(), + 4 => implode(', ', array_column($this->errors, 'message')), + ])); + } + +} diff --git a/civicrm/Civi/Api4/FinancialAccount.php b/civicrm/Civi/Api4/FinancialAccount.php index 53bb3af33f..04b1dd821a 100644 --- a/civicrm/Civi/Api4/FinancialAccount.php +++ b/civicrm/Civi/Api4/FinancialAccount.php @@ -25,6 +25,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/contributions/key-concepts-and-configurations/#financial-types-financial-accounts-and-accounting-codes * + * @searchable secondary * @package Civi\Api4 */ class FinancialAccount extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/FinancialItem.php b/civicrm/Civi/Api4/FinancialItem.php new file mode 100644 index 0000000000..ced033b3c4 --- /dev/null +++ b/civicrm/Civi/Api4/FinancialItem.php @@ -0,0 +1,35 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * Financial Item entity. + * + * Financial Items are low level accounting entries. They track the amounts paid to each line item. + * + * If your interest is really in payments you should use that api. + * + * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/#financial-items + * + * @package Civi\Api4 + */ +class FinancialItem extends Generic\DAOEntity { + use Generic\Traits\ReadOnly; + +} diff --git a/civicrm/Civi/Api4/FinancialTrxn.php b/civicrm/Civi/Api4/FinancialTrxn.php index eafd153047..f96f515196 100644 --- a/civicrm/Civi/Api4/FinancialTrxn.php +++ b/civicrm/Civi/Api4/FinancialTrxn.php @@ -28,8 +28,10 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/#financial-transactions * + * @searchable secondary * @package Civi\Api4 */ class FinancialTrxn extends Generic\DAOEntity { + use Generic\Traits\ReadOnly; } diff --git a/civicrm/Civi/Api4/FinancialType.php b/civicrm/Civi/Api4/FinancialType.php index 1c6bbaac94..2a389bd37a 100644 --- a/civicrm/Civi/Api4/FinancialType.php +++ b/civicrm/Civi/Api4/FinancialType.php @@ -25,8 +25,10 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/contributions/key-concepts-and-configurations/#financial-types-financial-accounts-and-accounting-codes * + * @searchable secondary * @package Civi\Api4 */ class FinancialType extends Generic\DAOEntity { + use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/Generic/AbstractAction.php b/civicrm/Civi/Api4/Generic/AbstractAction.php index 050fd5a6ca..a91e85853f 100644 --- a/civicrm/Civi/Api4/Generic/AbstractAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractAction.php @@ -390,8 +390,9 @@ abstract class AbstractAction implements \ArrayAccess { * This function is called if checkPermissions is set to true. * * @return bool + * @internal Implement/override in civicrm-core.git only. Signature may evolve. */ - public function isAuthorized() { + public function isAuthorized(): bool { $permissions = $this->getPermissions(); return \CRM_Core_Permission::check($permissions); } @@ -433,14 +434,19 @@ abstract class AbstractAction implements \ArrayAccess { */ public function entityFields() { if (!$this->_entityFields) { + $allowedTypes = ['Field', 'Filter', 'Extra']; + if (method_exists($this, 'getCustomGroup')) { + $allowedTypes[] = 'Custom'; + } $getFields = \Civi\API\Request::create($this->getEntityName(), 'getFields', [ 'version' => 4, 'checkPermissions' => $this->checkPermissions, 'action' => $this->getActionName(), - 'includeCustom' => FALSE, + 'where' => [['type', 'IN', $allowedTypes]], ]); $result = new Result(); - $getFields->_run($result); + // Pass TRUE for the private $isInternal param + $getFields->_run($result, TRUE); $this->_entityFields = (array) $result->indexBy('name'); } return $this->_entityFields; diff --git a/civicrm/Civi/Api4/Generic/AbstractBatchAction.php b/civicrm/Civi/Api4/Generic/AbstractBatchAction.php index 7a0e6e8c19..f0701590f1 100644 --- a/civicrm/Civi/Api4/Generic/AbstractBatchAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractBatchAction.php @@ -54,9 +54,23 @@ abstract class AbstractBatchAction extends AbstractQueryAction { } /** + * Get a list of records for this batch. + * * @return array */ protected function getBatchRecords() { + return (array) $this->getBatchAction()->execute(); + } + + /** + * Get a query which resolves the list of records for this batch. + * + * This is similar to `getBatchRecords()`, but you may further refine the + * API call (e.g. selecting different fields or data-pages) before executing. + * + * @return \Civi\Api4\Generic\AbstractGetAction + */ + protected function getBatchAction() { $params = [ 'checkPermissions' => $this->checkPermissions, 'where' => $this->where, @@ -67,8 +81,7 @@ abstract class AbstractBatchAction extends AbstractQueryAction { if (empty($this->reload)) { $params['select'] = $this->select; } - - return (array) civicrm_api4($this->getEntityName(), 'get', $params); + return \Civi\API\Request::create($this->getEntityName(), 'get', ['version' => 4] + $params); } /** diff --git a/civicrm/Civi/Api4/Generic/AbstractCreateAction.php b/civicrm/Civi/Api4/Generic/AbstractCreateAction.php index c77236e979..c8b75eb870 100644 --- a/civicrm/Civi/Api4/Generic/AbstractCreateAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractCreateAction.php @@ -19,6 +19,10 @@ namespace Civi\Api4\Generic; +use Civi\Api4\Event\ValidateValuesEvent; +use Civi\API\Exception\UnauthorizedException; +use Civi\Api4\Utils\CoreUtil; + /** * Base class for all `Create` api actions. * @@ -57,12 +61,26 @@ abstract class AbstractCreateAction extends AbstractAction { /** * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ protected function validateValues() { + // FIXME: There should be a protocol to report a full list of errors... Perhaps a subclass of API_Exception? $unmatched = $this->checkRequiredFields($this->getValues()); if ($unmatched) { throw new \API_Exception("Mandatory values missing from Api4 {$this->getEntityName()}::{$this->getActionName()}: " . implode(", ", $unmatched), "mandatory_missing", ["fields" => $unmatched]); } + + if ($this->checkPermissions && !CoreUtil::checkAccessRecord($this, $this->getValues(), \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } + + $e = new ValidateValuesEvent($this, [$this->getValues()], new \CRM_Utils_LazyArray(function () { + return [['old' => NULL, 'new' => $this->getValues()]]; + })); + \Civi::dispatcher()->dispatch('civi.api4.validate', $e); + if (!empty($e->errors)) { + throw $e->toException(); + } } } diff --git a/civicrm/Civi/Api4/Generic/AbstractEntity.php b/civicrm/Civi/Api4/Generic/AbstractEntity.php index 754d33f387..ce0fb9d29b 100644 --- a/civicrm/Civi/Api4/Generic/AbstractEntity.php +++ b/civicrm/Civi/Api4/Generic/AbstractEntity.php @@ -55,6 +55,13 @@ abstract class AbstractEntity { */ abstract public static function getFields(); + /** + * @return \Civi\Api4\Generic\CheckAccessAction + */ + public static function checkAccess() { + return new CheckAccessAction(self::getEntityName(), __FUNCTION__); + } + /** * Returns a list of permissions needed to access the various actions in this api. * @@ -139,6 +146,7 @@ abstract class AbstractEntity { 'type' => [self::stripNamespace(get_parent_class(static::class))], 'paths' => static::getEntityPaths(), 'class' => static::class, + 'id_field' => 'id', ]; // Add info for entities with a corresponding DAO $dao = \CRM_Core_DAO_AllCoreTables::getFullName($info['name']); @@ -151,7 +159,9 @@ abstract class AbstractEntity { foreach (ReflectionUtils::getTraits(static::class) as $trait) { $info['type'][] = self::stripNamespace($trait); } - $info['searchable'] = !in_array('OptionList', $info['type']); + // Entities without a @searchable annotation will default to secondary, + // which makes them visible in SearchKit but not at the top of the list. + $info['searchable'] = 'secondary'; $reflection = new \ReflectionClass(static::class); $info = array_merge($info, ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $info['name']])); unset($info['package'], $info['method']); diff --git a/civicrm/Civi/Api4/Generic/AbstractSaveAction.php b/civicrm/Civi/Api4/Generic/AbstractSaveAction.php index b12dc33204..578e1dfc72 100644 --- a/civicrm/Civi/Api4/Generic/AbstractSaveAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractSaveAction.php @@ -19,6 +19,10 @@ namespace Civi\Api4\Generic; +use Civi\Api4\Event\ValidateValuesEvent; +use Civi\API\Exception\UnauthorizedException; +use Civi\Api4\Utils\CoreUtil; + /** * Create or update one or more $ENTITIES. * @@ -91,8 +95,10 @@ abstract class AbstractSaveAction extends AbstractAction { /** * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ protected function validateValues() { + // FIXME: There should be a protocol to report a full list of errors... Perhaps a subclass of API_Exception? $unmatched = []; foreach ($this->records as $record) { if (empty($record[$this->idField])) { @@ -102,6 +108,34 @@ abstract class AbstractSaveAction extends AbstractAction { if ($unmatched) { throw new \API_Exception("Mandatory values missing from Api4 {$this->getEntityName()}::{$this->getActionName()}: " . implode(", ", $unmatched), "mandatory_missing", ["fields" => $unmatched]); } + + if ($this->checkPermissions) { + foreach ($this->records as $record) { + $action = empty($record[$this->idField]) ? 'create' : 'update'; + if (!CoreUtil::checkAccessDelegated($this->getEntityName(), $action, $record, \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } + } + } + + $e = new ValidateValuesEvent($this, $this->records, new \CRM_Utils_LazyArray(function() { + $existingIds = array_column($this->records, $this->idField); + $existing = civicrm_api4($this->getEntityName(), 'get', [ + 'checkPermissions' => $this->checkPermissions, + 'where' => [[$this->idField, 'IN', $existingIds]], + ], $this->idField); + + $result = []; + foreach ($this->records as $k => $new) { + $old = isset($new[$this->idField]) ? $existing[$new[$this->idField]] : NULL; + $result[$k] = ['old' => $old, 'new' => $new]; + } + return $result; + })); + \Civi::dispatcher()->dispatch('civi.api4.validate', $e); + if (!empty($e->errors)) { + throw $e->toException(); + } } /** diff --git a/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php b/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php index 91e8c3feac..42a61cccf7 100644 --- a/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php @@ -19,6 +19,8 @@ namespace Civi\Api4\Generic; +use Civi\Api4\Event\ValidateValuesEvent; + /** * Base class for all `Update` api actions * @@ -70,4 +72,23 @@ abstract class AbstractUpdateAction extends AbstractBatchAction { return $this; } + /** + * @throws \API_Exception + */ + protected function validateValues() { + // FIXME: There should be a protocol to report a full list of errors... Perhaps a subclass of API_Exception? + $e = new ValidateValuesEvent($this, [$this->values], new \CRM_Utils_LazyArray(function () { + $existing = $this->getBatchAction()->setSelect(['*'])->execute(); + $result = []; + foreach ($existing as $record) { + $result[] = ['old' => $record, 'new' => $this->values]; + } + return $result; + })); + \Civi::dispatcher()->dispatch('civi.api4.validate', $e); + if (!empty($e->errors)) { + throw $e->toException(); + } + } + } diff --git a/civicrm/Civi/Api4/Generic/BasicBatchAction.php b/civicrm/Civi/Api4/Generic/BasicBatchAction.php index d1787bd44a..25b662e56b 100644 --- a/civicrm/Civi/Api4/Generic/BasicBatchAction.php +++ b/civicrm/Civi/Api4/Generic/BasicBatchAction.php @@ -20,6 +20,8 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; +use Civi\API\Exception\UnauthorizedException; +use Civi\Api4\Utils\CoreUtil; /** * $ACTION one or more $ENTITIES. @@ -65,6 +67,9 @@ class BasicBatchAction extends AbstractBatchAction { */ public function _run(Result $result) { foreach ($this->getBatchRecords() as $item) { + if ($this->checkPermissions && !CoreUtil::checkAccessRecord($this, $item, \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } $result[] = $this->doTask($item); } } diff --git a/civicrm/Civi/Api4/Generic/BasicEntity.php b/civicrm/Civi/Api4/Generic/BasicEntity.php index 96122f909a..66ea70c00e 100644 --- a/civicrm/Civi/Api4/Generic/BasicEntity.php +++ b/civicrm/Civi/Api4/Generic/BasicEntity.php @@ -132,8 +132,17 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicReplaceAction */ public static function replace($checkPermissions = TRUE) { - return (new BasicReplaceAction(static::getEntityName(), __FUNCTION__)) + return (new BasicReplaceAction(static::getEntityName(), __FUNCTION__, static::$idField)) ->setCheckPermissions($checkPermissions); } + /** + * @inheritDoc + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['id_field'] = static::$idField; + return $info; + } + } diff --git a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php index c554e5c1d9..1261260fc0 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php @@ -68,6 +68,12 @@ class BasicGetFieldsAction extends BasicGetAction { */ protected $values = []; + /** + * @var bool + * @deprecated + */ + protected $includeCustom; + /** * To implement getFields for your own entity: * @@ -94,7 +100,9 @@ class BasicGetFieldsAction extends BasicGetAction { else { $values = $this->getRecords(); } - $this->formatResults($values); + // $isInternal param is not part of function signature (to be compatible with parent class) + $isInternal = func_get_args()[1] ?? FALSE; + $this->formatResults($values, $isInternal); $this->queryArray($values, $result); } @@ -109,9 +117,11 @@ class BasicGetFieldsAction extends BasicGetAction { * Instead just override $this->fields and this function will respect that. * * @param array $values + * @param bool $isInternal */ - protected function formatResults(&$values) { - $fields = array_column($this->fields(), 'name'); + protected function formatResults(&$values, $isInternal) { + $fieldDefaults = array_column($this->fields(), 'default_value', 'name') + + array_fill_keys(array_column($this->fields(), 'name'), NULL); // Enforce field permissions if ($this->checkPermissions) { foreach ($values as $key => $field) { @@ -120,21 +130,22 @@ class BasicGetFieldsAction extends BasicGetAction { } } } + // Unless this is an internal getFields call, filter out @internal properties + $internalProps = $isInternal ? [] : array_filter(array_column($this->fields(), '@internal', 'name')); foreach ($values as &$field) { $defaults = array_intersect_key([ 'title' => empty($field['name']) ? NULL : ucwords(str_replace('_', ' ', $field['name'])), 'entity' => $this->getEntityName(), - 'required' => FALSE, - 'readonly' => FALSE, 'options' => !empty($field['pseudoconstant']), - 'data_type' => \CRM_Utils_Array::value('type', $field, 'String'), - ], array_flip($fields)); - $field += $defaults; - $field['label'] = $field['label'] ?? $field['title']; + ], $fieldDefaults); + $field += $defaults + $fieldDefaults; + if (array_key_exists('label', $fieldDefaults)) { + $field['label'] = $field['label'] ?? $field['title'] ?? $field['name']; + } if (isset($defaults['options'])) { $field['options'] = $this->formatOptionList($field['options']); } - $field += array_fill_keys($fields, NULL); + $field = array_diff_key($field, $internalProps); } } @@ -202,18 +213,6 @@ class BasicGetFieldsAction extends BasicGetAction { return $this; } - /** - * @param bool $includeCustom - * @return $this - */ - public function setIncludeCustom(bool $includeCustom) { - // Be forgiving if the param doesn't exist and don't throw an exception - if (property_exists($this, 'includeCustom')) { - $this->includeCustom = $includeCustom; - } - return $this; - } - /** * Helper function to retrieve options from an option group (for non-DAO entities). * @@ -254,6 +253,17 @@ class BasicGetFieldsAction extends BasicGetAction { 'data_type' => 'String', 'description' => ts('Explanation of the purpose of the field'), ], + [ + 'name' => 'type', + 'data_type' => 'String', + 'default_value' => 'Field', + 'options' => [ + 'Field' => ts('Primary Field'), + 'Custom' => ts('Custom Field'), + 'Filter' => ts('Search Filter'), + 'Extra' => ts('Extra API Field'), + ], + ], [ 'name' => 'default_value', 'data_type' => 'String', @@ -261,6 +271,7 @@ class BasicGetFieldsAction extends BasicGetAction { [ 'name' => 'required', 'data_type' => 'Boolean', + 'default_value' => FALSE, ], [ 'name' => 'required_if', @@ -269,10 +280,16 @@ class BasicGetFieldsAction extends BasicGetAction { [ 'name' => 'options', 'data_type' => 'Array', + 'default_value' => FALSE, + ], + [ + 'name' => 'operators', + 'data_type' => 'Array', + 'description' => 'If set, limits the operators that can be used on this field for "get" actions.', ], [ 'name' => 'data_type', - 'data_type' => 'String', + 'default_value' => 'String', 'options' => [ 'Array' => ts('Array'), 'Boolean' => ts('Boolean'), @@ -288,13 +305,13 @@ class BasicGetFieldsAction extends BasicGetAction { 'name' => 'input_type', 'data_type' => 'String', 'options' => [ - 'ChainSelect' => ts('ChainSelect'), - 'CheckBox' => ts('CheckBox'), - 'Date' => ts('Date'), - 'EntityRef' => ts('EntityRef'), + 'ChainSelect' => ts('Chain-Select'), + 'CheckBox' => ts('Checkboxes'), + 'Date' => ts('Date Picker'), + 'EntityRef' => ts('Autocomplete Entity'), 'File' => ts('File'), 'Number' => ts('Number'), - 'Radio' => ts('Radio'), + 'Radio' => ts('Radio Buttons'), 'Select' => ts('Select'), 'Text' => ts('Text'), ], @@ -319,10 +336,12 @@ class BasicGetFieldsAction extends BasicGetAction { 'name' => 'readonly', 'data_type' => 'Boolean', 'description' => 'True for auto-increment, calculated, or otherwise non-editable fields.', + 'default_value' => FALSE, ], [ 'name' => 'output_formatters', 'data_type' => 'Array', + '@internal' => TRUE, ], ]; } diff --git a/civicrm/Civi/Api4/Generic/BasicUpdateAction.php b/civicrm/Civi/Api4/Generic/BasicUpdateAction.php index a7bc7e9bb2..1eaabfe28c 100644 --- a/civicrm/Civi/Api4/Generic/BasicUpdateAction.php +++ b/civicrm/Civi/Api4/Generic/BasicUpdateAction.php @@ -20,6 +20,8 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; +use Civi\API\Exception\UnauthorizedException; +use Civi\Api4\Utils\CoreUtil; /** * Update one or more $ENTITY with new values. @@ -58,8 +60,13 @@ class BasicUpdateAction extends AbstractUpdateAction { */ public function _run(Result $result) { $this->formatWriteValues($this->values); + $this->validateValues(); foreach ($this->getBatchRecords() as $item) { - $result[] = $this->writeRecord($this->values + $item); + $record = $this->values + $item; + if ($this->checkPermissions && !CoreUtil::checkAccessRecord($this, $record, \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } + $result[] = $this->writeRecord($record); } } diff --git a/civicrm/Civi/Api4/Generic/CheckAccessAction.php b/civicrm/Civi/Api4/Generic/CheckAccessAction.php new file mode 100644 index 0000000000..c1f0e919d3 --- /dev/null +++ b/civicrm/Civi/Api4/Generic/CheckAccessAction.php @@ -0,0 +1,80 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Generic; + +use Civi\Api4\Utils\CoreUtil; + +/** + * Check if current user is authorized to perform specified action on a given $ENTITY. + * + * @method $this setAction(string $action) + * @method string getAction() + * @method $this setValues(array $values) + * @method array getValues() + */ +class CheckAccessAction extends AbstractAction { + + /** + * @var string + * @required + */ + protected $action; + + /** + * @var array + * @required + */ + protected $values = []; + + /** + * @param \Civi\Api4\Generic\Result $result + */ + public function _run(Result $result) { + // Prevent circular checks + if ($this->action === 'checkAccess') { + $granted = TRUE; + } + else { + $granted = CoreUtil::checkAccessDelegated($this->getEntityName(), $this->action, $this->values, \CRM_Core_Session::getLoggedInContactID() ?: 0); + } + $result->exchangeArray([['access' => $granted]]); + } + + /** + * This action is always allowed + * + * @return bool + */ + public function isAuthorized(): bool { + return TRUE; + } + + /** + * Add an item to the values array + * @param string $fieldName + * @param mixed $value + * @return $this + */ + public function addValue(string $fieldName, $value) { + $this->values[$fieldName] = $value; + return $this; + } + +} diff --git a/civicrm/Civi/Api4/Generic/DAOCreateAction.php b/civicrm/Civi/Api4/Generic/DAOCreateAction.php index d2371d3180..cf88e31910 100644 --- a/civicrm/Civi/Api4/Generic/DAOCreateAction.php +++ b/civicrm/Civi/Api4/Generic/DAOCreateAction.php @@ -33,13 +33,11 @@ class DAOCreateAction extends AbstractCreateAction { */ public function _run(Result $result) { $this->formatWriteValues($this->values); + $this->fillDefaults($this->values); $this->validateValues(); - $params = $this->values; - $this->fillDefaults($params); - $resultArray = $this->writeObjects([$params]); - - $result->exchangeArray($resultArray); + $items = [$this->values]; + $result->exchangeArray($this->writeObjects($items)); } /** diff --git a/civicrm/Civi/Api4/Generic/DAODeleteAction.php b/civicrm/Civi/Api4/Generic/DAODeleteAction.php index e9f4c36d90..902d28838a 100644 --- a/civicrm/Civi/Api4/Generic/DAODeleteAction.php +++ b/civicrm/Civi/Api4/Generic/DAODeleteAction.php @@ -19,6 +19,9 @@ namespace Civi\Api4\Generic; +use Civi\API\Exception\UnauthorizedException; +use Civi\Api4\Utils\CoreUtil; + /** * Delete one or more $ENTITIES. * @@ -37,6 +40,15 @@ class DAODeleteAction extends AbstractBatchAction { } $items = $this->getBatchRecords(); + + if ($this->getCheckPermissions()) { + foreach ($items as $key => $item) { + if (!CoreUtil::checkAccessRecord($this, $item, \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } + $items[$key]['check_permissions'] = TRUE; + } + } if ($items) { $result->exchangeArray($this->deleteObjects($items)); } @@ -51,13 +63,6 @@ class DAODeleteAction extends AbstractBatchAction { $ids = []; $baoName = $this->getBaoName(); - if ($this->getCheckPermissions()) { - foreach (array_keys($items) as $key) { - $items[$key]['check_permissions'] = TRUE; - $this->checkContactPermissions($baoName, $items[$key]); - } - } - if ($this->getEntityName() !== 'EntityTag' && method_exists($baoName, 'del')) { foreach ($items as $item) { $args = [$item['id']]; @@ -71,9 +76,8 @@ class DAODeleteAction extends AbstractBatchAction { } } else { - foreach ($items as $item) { - $baoName::deleteRecord($item); - $ids[] = ['id' => $item['id']]; + foreach ($baoName::deleteRecords($items) as $instance) { + $ids[] = ['id' => $instance->id]; } } return $ids; diff --git a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php index 1ad7c3d3fb..a8a359b5d1 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php @@ -19,21 +19,12 @@ namespace Civi\Api4\Generic; -use Civi\Api4\Service\Spec\SpecFormatter; - /** * @inheritDoc * @method bool getIncludeCustom() */ class DAOGetFieldsAction extends BasicGetFieldsAction { - /** - * Include custom fields for this entity, or only core fields? - * - * @var bool - */ - protected $includeCustom = TRUE; - /** * Get fields for a DAO-based entity. * @@ -41,14 +32,19 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { */ protected function getRecords() { $fieldsToGet = $this->_itemsToGet('name'); + $typesToGet = $this->_itemsToGet('type'); /** @var \Civi\Api4\Service\Spec\SpecGatherer $gatherer */ $gatherer = \Civi::container()->get('spec_gatherer'); - // Any fields name with a dot in it is either custom or an implicit join - if ($fieldsToGet) { - $this->includeCustom = strpos(implode('', $fieldsToGet), '.') !== FALSE; + $includeCustom = TRUE; + if ($typesToGet) { + $includeCustom = in_array('Custom', $typesToGet, TRUE); } - $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $this->includeCustom, $this->values); - $fields = SpecFormatter::specToArray($spec->getFields($fieldsToGet), $this->loadOptions, $this->values); + elseif ($fieldsToGet) { + // Any fields name with a dot in it is either custom or an implicit join + $includeCustom = strpos(implode('', $fieldsToGet), '.') !== FALSE; + } + $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $includeCustom, $this->values); + $fields = $this->specToArray($spec->getFields($fieldsToGet)); foreach ($fieldsToGet ?? [] as $fieldName) { if (empty($fields[$fieldName]) && strpos($fieldName, '.') !== FALSE) { $fkField = $this->getFkFieldSpec($fieldName, $fields); @@ -61,6 +57,24 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { return $fields; } + /** + * @param \Civi\Api4\Service\Spec\FieldSpec[] $fields + * + * @return array + */ + protected function specToArray($fields) { + $fieldArray = []; + + foreach ($fields as $field) { + if ($this->loadOptions) { + $field->getOptions($this->values, $this->loadOptions, $this->checkPermissions); + } + $fieldArray[$field->getName()] = $field->toArray(); + } + + return $fieldArray; + } + /** * @param string $fieldName * @param array $fields @@ -106,6 +120,11 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { 'name' => 'custom_group_id', 'data_type' => 'Integer', ]; + $fields[] = [ + 'name' => 'sql_filters', + 'data_type' => 'Array', + '@internal' => TRUE, + ]; return $fields; } diff --git a/civicrm/Civi/Api4/Generic/DAOUpdateAction.php b/civicrm/Civi/Api4/Generic/DAOUpdateAction.php index 0d4bf17551..33adb73a2d 100644 --- a/civicrm/Civi/Api4/Generic/DAOUpdateAction.php +++ b/civicrm/Civi/Api4/Generic/DAOUpdateAction.php @@ -19,6 +19,9 @@ namespace Civi\Api4\Generic; +use Civi\API\Exception\UnauthorizedException; +use Civi\Api4\Utils\CoreUtil; + /** * Update one or more $ENTITY with new values. * @@ -60,7 +63,12 @@ class DAOUpdateAction extends AbstractUpdateAction { // Update a single record by ID unless select requires more than id if ($this->getSelect() === ['id'] && count($this->where) === 1 && $this->where[0][0] === 'id' && $this->where[0][1] === '=' && !empty($this->where[0][2])) { $this->values['id'] = $this->where[0][2]; - $result->exchangeArray($this->writeObjects([$this->values])); + if ($this->checkPermissions && !CoreUtil::checkAccessRecord($this, $this->values, \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } + $items = [$this->values]; + $this->validateValues(); + $result->exchangeArray($this->writeObjects($items)); return; } @@ -68,8 +76,12 @@ class DAOUpdateAction extends AbstractUpdateAction { $items = $this->getBatchRecords(); foreach ($items as &$item) { $item = $this->values + $item; + if ($this->checkPermissions && !CoreUtil::checkAccessRecord($this, $item, \CRM_Core_Session::getLoggedInContactID() ?: 0)) { + throw new UnauthorizedException("ACL check failed"); + } } + $this->validateValues(); $result->exchangeArray($this->writeObjects($items)); } diff --git a/civicrm/Civi/Api4/Generic/Traits/CustomValueActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/CustomValueActionTrait.php index 5a7a0e3312..6d595b04ae 100644 --- a/civicrm/Civi/Api4/Generic/Traits/CustomValueActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/CustomValueActionTrait.php @@ -51,7 +51,7 @@ trait CustomValueActionTrait { /** * @inheritDoc */ - protected function writeObjects($items) { + protected function writeObjects(&$items) { $fields = $this->entityFields(); foreach ($items as $idx => $item) { FormattingUtil::formatWriteParams($item, $fields); diff --git a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php index 2a94bfbe4f..af61135448 100644 --- a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php @@ -103,25 +103,32 @@ trait DAOActionTrait { * @throws \API_Exception * @throws \CRM_Core_Exception */ - protected function writeObjects($items) { + protected function writeObjects(&$items) { $baoName = $this->getBaoName(); - // Some BAOs are weird and don't support a straightforward "create" method. - $oddballs = [ + // TODO: Opt-in more entities to use the new writeRecords BAO method. + $functionNames = [ + 'Address' => 'add', + 'CustomField' => 'writeRecords', 'EntityTag' => 'add', 'GroupContact' => 'add', ]; - $method = $oddballs[$this->getEntityName()] ?? 'create'; - if (!method_exists($baoName, $method)) { - $method = 'add'; + $method = $functionNames[$this->getEntityName()] ?? NULL; + if (!isset($method)) { + $method = method_exists($baoName, 'create') ? 'create' : (method_exists($baoName, 'add') ? 'add' : 'writeRecords'); } $result = []; - foreach ($items as $item) { + foreach ($items as &$item) { $entityId = $item['id'] ?? NULL; FormattingUtil::formatWriteParams($item, $this->entityFields()); $this->formatCustomParams($item, $entityId); + + // Skip individual processing if using writeRecords + if ($method === 'writeRecords') { + continue; + } $item['check_permissions'] = $this->getCheckPermissions(); // For some reason the contact bao requires this @@ -129,18 +136,11 @@ trait DAOActionTrait { $item['contact_id'] = $entityId; } - if ($this->getCheckPermissions()) { - $this->checkContactPermissions($baoName, $item); - } - if ($this->getEntityName() === 'Address') { $createResult = $baoName::$method($item, $this->fixAddress); } - elseif (method_exists($baoName, $method)) { - $createResult = $baoName::$method($item); - } else { - $createResult = $baoName::writeRecord($item); + $createResult = $baoName::$method($item); } if (!$createResult) { @@ -150,6 +150,16 @@ trait DAOActionTrait { $result[] = $this->baoToArray($createResult, $item); } + + // Use bulk `writeRecords` method if the BAO doesn't have a create or add method + // TODO: reverse this from opt-in to opt-out and default to using `writeRecords` for all BAOs + if ($method === 'writeRecords') { + $items = array_values($items); + foreach ($baoName::writeRecords($items) as $i => $createResult) { + $result[] = $this->baoToArray($createResult, $items[$i]); + } + } + FormattingUtil::formatOutputValues($result, $this->entityFields(), $this->getEntityName()); return $result; } @@ -245,26 +255,4 @@ trait DAOActionTrait { return isset($info[$fieldName]) ? ['suffix' => $suffix] + $info[$fieldName] : NULL; } - /** - * Check edit/delete permissions for contacts and related entities. - * - * @param string $baoName - * @param array $item - * - * @throws \Civi\API\Exception\UnauthorizedException - */ - protected function checkContactPermissions($baoName, $item) { - if ($baoName === 'CRM_Contact_BAO_Contact' && !empty($item['id'])) { - $permission = $this->getActionName() === 'delete' ? \CRM_Core_Permission::DELETE : \CRM_Core_Permission::EDIT; - if (!\CRM_Contact_BAO_Contact_Permission::allow($item['id'], $permission)) { - throw new \Civi\API\Exception\UnauthorizedException('Permission denied to modify contact record'); - } - } - else { - // Fixme: decouple from v3 - require_once 'api/v3/utils.php'; - _civicrm_api3_check_edit_permissions($baoName, $item); - } - } - } diff --git a/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php b/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php index ff0d4120d2..2b5807b67e 100644 --- a/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php +++ b/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php @@ -23,17 +23,16 @@ trait EntityBridge { /** * Adds "bridge" info, which should specify an array of two field names from this entity * - * This automatic function can be overridden by annotating the APIv4 entity like - * `@bridge contact_id group_id` + * This automatic function can be overridden by adding a getInfo function to the api entity class. * * @return array */ public static function getInfo() { $info = parent::getInfo(); - if (!empty($info['dao']) && empty($info['bridge'])) { + if (!empty($info['dao'])) { foreach (($info['dao'])::fields() as $field) { if (!empty($field['FKClassName']) || $field['name'] === 'entity_id') { - $info['bridge'][] = $field['name']; + $info['bridge'][$field['name']] = []; } } } diff --git a/civicrm/Civi/Api4/Generic/Traits/OptionList.php b/civicrm/Civi/Api4/Generic/Traits/OptionList.php index 70936e0119..3dea083bfd 100644 --- a/civicrm/Civi/Api4/Generic/Traits/OptionList.php +++ b/civicrm/Civi/Api4/Generic/Traits/OptionList.php @@ -16,8 +16,7 @@ namespace Civi\Api4\Generic\Traits; * * The options appear in the field metadata for other entities that reference this one via pseudoconstant. * - * Note: At time of writing, this trait does nothing except toggle the searchable flag, (and adds "OptionList" to the "type" in Entity::get() metadata). - * @searchable false (FYI annotation isn't functional because this is a trait - workaround in AbstractEntity::getInfo) + * Note: At time of writing, this trait does nothing except add "OptionList" to the "type" in Entity::get() metadata. */ trait OptionList { diff --git a/civicrm/Civi/Api4/Generic/Traits/ReadOnly.php b/civicrm/Civi/Api4/Generic/Traits/ReadOnly.php new file mode 100644 index 0000000000..5c9abe2ce9 --- /dev/null +++ b/civicrm/Civi/Api4/Generic/Traits/ReadOnly.php @@ -0,0 +1,78 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Generic\Traits; + +/** + * Trait for Entities not intended to be publicly writable. + */ +trait ReadOnly { + + /** + * Not intended to be used outside CiviCRM core code. + * + * @inheritDoc + * @internal + */ + public static function save($checkPermissions = TRUE) { + return parent::save($checkPermissions); + } + + /** + * Not intended to be used outside CiviCRM core code. + * + * @inheritDoc + * @internal + */ + public static function create($checkPermissions = TRUE) { + return parent::create($checkPermissions); + } + + /** + * Not intended to be used outside CiviCRM core code. + * + * @inheritDoc + * @internal + */ + public static function update($checkPermissions = TRUE) { + return parent::update($checkPermissions); + } + + /** + * Not intended to be used outside CiviCRM core code. + * + * @inheritDoc + * @internal + */ + public static function delete($checkPermissions = TRUE) { + return parent::delete($checkPermissions); + } + + /** + * Not intended to be used outside CiviCRM core code. + * + * @inheritDoc + * @internal + */ + public static function replace($checkPermissions = TRUE) { + return parent::replace($checkPermissions); + } + + /** + * @return array + */ + public static function permissions() { + $permissions = parent::permissions(); + $permissions['create'] = $permissions['update'] = $permissions['delete'] = \CRM_Core_Permission::ALWAYS_DENY_PERMISSION; + return $permissions; + } + +} diff --git a/civicrm/Civi/Api4/Grant.php b/civicrm/Civi/Api4/Grant.php index a0dc1dfd98..470672fc87 100644 --- a/civicrm/Civi/Api4/Grant.php +++ b/civicrm/Civi/Api4/Grant.php @@ -25,6 +25,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/grants/what-is-civigrant/ * + * @searchable primary * @package Civi\Api4 */ class Grant extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Group.php b/civicrm/Civi/Api4/Group.php index 1b685361b0..4764d76b4d 100644 --- a/civicrm/Civi/Api4/Group.php +++ b/civicrm/Civi/Api4/Group.php @@ -23,6 +23,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/groups-and-tags/#groups * + * @searchable secondary * @package Civi\Api4 */ class Group extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/GroupContact.php b/civicrm/Civi/Api4/GroupContact.php index 086fb9b273..850fe78b44 100644 --- a/civicrm/Civi/Api4/GroupContact.php +++ b/civicrm/Civi/Api4/GroupContact.php @@ -24,9 +24,10 @@ namespace Civi\Api4; * A contact can either be "Added" "Removed" or "Pending" in a group. * CiviCRM only considers them to be "in" a group if their status is "Added". * - * @bridge group_id contact_id + * @ui_join_filters status + * + * @searchable bridge * @see \Civi\Api4\Group - * @searchable false * @package Civi\Api4 */ class GroupContact extends Generic\DAOEntity { @@ -59,4 +60,16 @@ class GroupContact extends Generic\DAOEntity { ->setCheckPermissions($checkPermissions); } + /** + * @return array + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['bridge'] = [ + 'group_id' => ['description' => ts('Static (non-smart) group contacts')], + 'contact_id' => ['description' => ts('Static (non-smart) group contacts')], + ]; + return $info; + } + } diff --git a/civicrm/Civi/Api4/GroupNesting.php b/civicrm/Civi/Api4/GroupNesting.php index a8376088b9..b2428b1a65 100644 --- a/civicrm/Civi/Api4/GroupNesting.php +++ b/civicrm/Civi/Api4/GroupNesting.php @@ -22,7 +22,7 @@ namespace Civi\Api4; * GroupNesting entity. * * @see \Civi\Api4\Group - * @searchable false + * @searchable none * @package Civi\Api4 */ class GroupNesting extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/GroupOrganization.php b/civicrm/Civi/Api4/GroupOrganization.php index 87b683810b..c392cf91a4 100644 --- a/civicrm/Civi/Api4/GroupOrganization.php +++ b/civicrm/Civi/Api4/GroupOrganization.php @@ -23,6 +23,9 @@ namespace Civi\Api4; * * Relates groups to organizations. * + * FIXME: For now, excluding this from SearchKit because it's confusingly similar to GroupContact + * @searchable none + * * @see \Civi\Api4\Group * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/IM.php b/civicrm/Civi/Api4/IM.php index ff39fabeb7..f563d3c717 100644 --- a/civicrm/Civi/Api4/IM.php +++ b/civicrm/Civi/Api4/IM.php @@ -22,6 +22,7 @@ namespace Civi\Api4; /** * IM entity. * + * @searchable secondary * @package Civi\Api4 */ class IM extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/LineItem.php b/civicrm/Civi/Api4/LineItem.php index c630346a4b..ca425f9278 100644 --- a/civicrm/Civi/Api4/LineItem.php +++ b/civicrm/Civi/Api4/LineItem.php @@ -21,8 +21,10 @@ namespace Civi\Api4; /** * LineItem entity. * + * @searchable secondary * @package Civi\Api4 */ class LineItem extends Generic\DAOEntity { + use Generic\Traits\ReadOnly; } diff --git a/civicrm/Civi/Api4/LocBlock.php b/civicrm/Civi/Api4/LocBlock.php index 03c2c9752c..d68c961ed1 100644 --- a/civicrm/Civi/Api4/LocBlock.php +++ b/civicrm/Civi/Api4/LocBlock.php @@ -17,7 +17,7 @@ namespace Civi\Api4; * * Links addresses, emails & phones to Events. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class LocBlock extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/LocationType.php b/civicrm/Civi/Api4/LocationType.php index 35d96e91aa..3b8c2d793b 100644 --- a/civicrm/Civi/Api4/LocationType.php +++ b/civicrm/Civi/Api4/LocationType.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * LocationType entity. * + * @searchable none * @package Civi\Api4 */ class LocationType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/MailSettings.php b/civicrm/Civi/Api4/MailSettings.php index d2f6e5e0de..4730e8a18a 100644 --- a/civicrm/Civi/Api4/MailSettings.php +++ b/civicrm/Civi/Api4/MailSettings.php @@ -22,7 +22,7 @@ namespace Civi\Api4; /** * MailSettings entity. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class MailSettings extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Mapping.php b/civicrm/Civi/Api4/Mapping.php index 9c74f7d497..e7d6cbf11d 100644 --- a/civicrm/Civi/Api4/Mapping.php +++ b/civicrm/Civi/Api4/Mapping.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * * This is a collection of MappingFields, for reuse in import, export, etc. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class Mapping extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/MappingField.php b/civicrm/Civi/Api4/MappingField.php index bde710c401..7e8b4ce4bc 100644 --- a/civicrm/Civi/Api4/MappingField.php +++ b/civicrm/Civi/Api4/MappingField.php @@ -24,7 +24,7 @@ namespace Civi\Api4; * This represents one field in a Mapping collection. * * @see \Civi\Api4\Mapping - * @searchable false + * @searchable none * @package Civi\Api4 */ class MappingField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/MembershipType.php b/civicrm/Civi/Api4/MembershipType.php index ed49d85f2a..089d8076ff 100644 --- a/civicrm/Civi/Api4/MembershipType.php +++ b/civicrm/Civi/Api4/MembershipType.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * MembershipType entity. * + * @searchable secondary * @package Civi\Api4 */ class MembershipType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/MessageTemplate.php b/civicrm/Civi/Api4/MessageTemplate.php index 5f05a517d5..d20f1054ec 100644 --- a/civicrm/Civi/Api4/MessageTemplate.php +++ b/civicrm/Civi/Api4/MessageTemplate.php @@ -22,7 +22,7 @@ namespace Civi\Api4; * MsgTemplate entity. * * This is a collection of MsgTemplate, for reuse in import, export, etc. - * @searchable false + * @searchable none * @package Civi\Api4 */ class MessageTemplate extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Navigation.php b/civicrm/Civi/Api4/Navigation.php index 57963db4e4..fd15888301 100644 --- a/civicrm/Civi/Api4/Navigation.php +++ b/civicrm/Civi/Api4/Navigation.php @@ -21,7 +21,7 @@ namespace Civi\Api4; /** * Navigation entity. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class Navigation extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Note.php b/civicrm/Civi/Api4/Note.php index 575a780a3e..baf205301f 100644 --- a/civicrm/Civi/Api4/Note.php +++ b/civicrm/Civi/Api4/Note.php @@ -22,6 +22,7 @@ namespace Civi\Api4; /** * Note entity. * + * @searchable secondary * @package Civi\Api4 */ class Note extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/OpenID.php b/civicrm/Civi/Api4/OpenID.php index c316e3f915..c9c56472f7 100644 --- a/civicrm/Civi/Api4/OpenID.php +++ b/civicrm/Civi/Api4/OpenID.php @@ -22,6 +22,7 @@ namespace Civi\Api4; /** * OpenID entity. * + * @searchable secondary * @package Civi\Api4 */ class OpenID extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/OptionGroup.php b/civicrm/Civi/Api4/OptionGroup.php index a25bed1694..26d5817ce0 100644 --- a/civicrm/Civi/Api4/OptionGroup.php +++ b/civicrm/Civi/Api4/OptionGroup.php @@ -23,6 +23,7 @@ namespace Civi\Api4; * OptionGroup entity. * * @see \Civi\Api4\OptionValue + * @searchable none * @package Civi\Api4 */ class OptionGroup extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/OptionValue.php b/civicrm/Civi/Api4/OptionValue.php index 0b3e672e78..7722160d8e 100644 --- a/civicrm/Civi/Api4/OptionValue.php +++ b/civicrm/Civi/Api4/OptionValue.php @@ -23,6 +23,7 @@ namespace Civi\Api4; * OptionValue entity. * * @see \Civi\Api4\OptionGroup + * @searchable none * @package Civi\Api4 */ class OptionValue extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PCPBlock.php b/civicrm/Civi/Api4/PCPBlock.php index 9fe55c0eb3..0e7532a26e 100644 --- a/civicrm/Civi/Api4/PCPBlock.php +++ b/civicrm/Civi/Api4/PCPBlock.php @@ -21,6 +21,7 @@ namespace Civi\Api4; /** * PCP Block entity. * + * @searchable secondary * @package Civi\Api4 */ class PCPBlock extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Participant.php b/civicrm/Civi/Api4/Participant.php index 221ea1f677..9658035310 100644 --- a/civicrm/Civi/Api4/Participant.php +++ b/civicrm/Civi/Api4/Participant.php @@ -21,6 +21,7 @@ namespace Civi\Api4; /** * Participant entity, stores the participation record of a contact in an event. * + * @searchable primary * @package Civi\Api4 */ class Participant extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PaymentProcessor.php b/civicrm/Civi/Api4/PaymentProcessor.php index c864069478..f88f88da55 100644 --- a/civicrm/Civi/Api4/PaymentProcessor.php +++ b/civicrm/Civi/Api4/PaymentProcessor.php @@ -22,6 +22,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/ * + * @searchable none * @package Civi\Api4 */ class PaymentProcessor extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PaymentProcessorType.php b/civicrm/Civi/Api4/PaymentProcessorType.php index 2c2b9aba6a..5b41c80859 100644 --- a/civicrm/Civi/Api4/PaymentProcessorType.php +++ b/civicrm/Civi/Api4/PaymentProcessorType.php @@ -22,6 +22,7 @@ namespace Civi\Api4; * * @see \Civi\Api4\PaymentProcessor * + * @searchable none * @package Civi\Api4 */ class PaymentProcessorType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PaymentToken.php b/civicrm/Civi/Api4/PaymentToken.php index e7ba25bcd2..c4fca79d5c 100644 --- a/civicrm/Civi/Api4/PaymentToken.php +++ b/civicrm/Civi/Api4/PaymentToken.php @@ -22,6 +22,7 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/contributions/payment-processors/#managing-recurring-contributions * + * @searchable secondary * @package Civi\Api4 */ class PaymentToken extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Permission.php b/civicrm/Civi/Api4/Permission.php index 95a63bc9ea..f046cbf888 100644 --- a/civicrm/Civi/Api4/Permission.php +++ b/civicrm/Civi/Api4/Permission.php @@ -25,7 +25,7 @@ namespace Civi\Api4; * It may be poorly suited to recursive usage (e.g. permissions defined dynamically * on top of permissions!) or during install/uninstall processes. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class Permission extends Generic\AbstractEntity { diff --git a/civicrm/Civi/Api4/Phone.php b/civicrm/Civi/Api4/Phone.php index 64760a8085..38e8575550 100644 --- a/civicrm/Civi/Api4/Phone.php +++ b/civicrm/Civi/Api4/Phone.php @@ -26,6 +26,7 @@ namespace Civi\Api4; * * Creating a new phone of a contact, requires at minimum a contact's ID and phone number * + * @searchable secondary * @package Civi\Api4 */ class Phone extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PledgePayment.php b/civicrm/Civi/Api4/PledgePayment.php index 0ece2ddc62..daa7ffad83 100644 --- a/civicrm/Civi/Api4/PledgePayment.php +++ b/civicrm/Civi/Api4/PledgePayment.php @@ -22,6 +22,7 @@ namespace Civi\Api4; /** * PledgePayment entity. * + * @searchable secondary * @package Civi\Api4 */ class PledgePayment extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PriceField.php b/civicrm/Civi/Api4/PriceField.php index 66aaa4428a..341a70bbf6 100644 --- a/civicrm/Civi/Api4/PriceField.php +++ b/civicrm/Civi/Api4/PriceField.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * PriceField entity. * + * @searchable secondary * @package Civi\Api4 */ class PriceField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PriceFieldValue.php b/civicrm/Civi/Api4/PriceFieldValue.php index 851abbcf6e..d9bb5f578b 100644 --- a/civicrm/Civi/Api4/PriceFieldValue.php +++ b/civicrm/Civi/Api4/PriceFieldValue.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * PriceFieldValue entity. * + * @searchable secondary * @package Civi\Api4 */ class PriceFieldValue extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/PriceSet.php b/civicrm/Civi/Api4/PriceSet.php index 91a7e27d91..df178613ca 100644 --- a/civicrm/Civi/Api4/PriceSet.php +++ b/civicrm/Civi/Api4/PriceSet.php @@ -15,6 +15,7 @@ namespace Civi\Api4; /** * PriceSet entity. * + * @searchable secondary * @package Civi\Api4 */ class PriceSet extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index 83033154f8..27b232d8c4 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -50,11 +50,6 @@ class Api4SelectQuery { */ protected $apiFieldSpec; - /** - * @var array - */ - protected $entityFieldNames = []; - /** * @var array */ @@ -97,7 +92,6 @@ class Api4SelectQuery { // Build field lists foreach ($this->api->entityFields() as $field) { - $this->entityFieldNames[] = $field['name']; $field['sql_name'] = '`' . self::MAIN_TABLE_ALIAS . '`.`' . $field['column_name'] . '`'; $this->addSpecField($field['name'], $field); } @@ -205,7 +199,7 @@ class Api4SelectQuery { $select = array_diff($select ?? $this->getSelect(), ['row_count']); // An empty select is the same as * if (empty($select)) { - $select = $this->entityFieldNames; + $select = $this->selectMatchingFields('*'); } else { if ($this->forceSelectId) { @@ -236,7 +230,7 @@ class Api4SelectQuery { // If the joined_entity.id isn't in the fieldspec already, autoJoinFK will attempt to add the entity. $idField = substr($wildField, 0, strrpos($wildField, '.')) . '.id'; $this->autoJoinFK($idField); - $matches = SelectUtil::getMatchingFields($wildField, array_keys($this->apiFieldSpec)); + $matches = $this->selectMatchingFields($wildField); array_splice($select, $pos, 1, $matches); } $select = array_unique($select); @@ -247,7 +241,7 @@ class Api4SelectQuery { foreach ($expr->getFields() as $fieldName) { $field = $this->getField($fieldName); // Remove expressions with unknown fields without raising an error - if (!$field) { + if (!$field || !in_array($field['type'], ['Field', 'Custom'], TRUE)) { $select = array_diff($select, [$item]); $this->debug('undefined_fields', $fieldName); $valid = FALSE; @@ -264,6 +258,20 @@ class Api4SelectQuery { } } + /** + * Get all fields for SELECT clause matching a wildcard pattern + * + * @param $pattern + * @return array + */ + private function selectMatchingFields($pattern) { + // Only core & custom fields can be selected + $availableFields = array_filter($this->apiFieldSpec, function($field) { + return in_array($field['type'], ['Field', 'Custom'], TRUE); + }); + return SelectUtil::getMatchingFields($pattern, array_keys($availableFields)); + } + /** * Add WHERE clause to query */ @@ -352,12 +360,13 @@ class Api4SelectQuery { * @param array $clause * @param string $type * WHERE|HAVING|ON + * @param int $depth * @return string SQL where clause * * @throws \API_Exception * @uses composeClause() to generate the SQL etc. */ - protected function treeWalkClauses($clause, $type) { + protected function treeWalkClauses($clause, $type, $depth = 0) { // Skip empty leaf. if (in_array($clause[0], ['AND', 'OR', 'NOT']) && empty($clause[1])) { return ''; @@ -368,12 +377,12 @@ class Api4SelectQuery { // handle branches if (count($clause[1]) === 1) { // a single set so AND|OR is immaterial - return $this->treeWalkClauses($clause[1][0], $type); + return $this->treeWalkClauses($clause[1][0], $type, $depth + 1); } else { $sql_subclauses = []; foreach ($clause[1] as $subclause) { - $sql_subclauses[] = $this->treeWalkClauses($subclause, $type); + $sql_subclauses[] = $this->treeWalkClauses($subclause, $type, $depth + 1); } return '(' . implode("\n" . $clause[0], $sql_subclauses) . ')'; } @@ -383,10 +392,10 @@ class Api4SelectQuery { if (!is_string($clause[1][0])) { $clause[1] = ['AND', $clause[1]]; } - return 'NOT (' . $this->treeWalkClauses($clause[1], $type) . ')'; + return 'NOT (' . $this->treeWalkClauses($clause[1], $type, $depth + 1) . ')'; default: - return $this->composeClause($clause, $type); + return $this->composeClause($clause, $type, $depth); } } @@ -395,11 +404,13 @@ class Api4SelectQuery { * @param array $clause [$fieldName, $operator, $criteria] * @param string $type * WHERE|HAVING|ON + * @param int $depth * @return string SQL * @throws \API_Exception * @throws \Exception */ - protected function composeClause(array $clause, string $type) { + protected function composeClause(array $clause, string $type, int $depth) { + $field = NULL; // Pad array for unary operators [$expr, $operator, $value] = array_pad($clause, 3, NULL); if (!in_array($operator, CoreUtil::getOperators(), TRUE)) { @@ -454,7 +465,7 @@ class Api4SelectQuery { if ($fieldName && $valExpr->getType() === 'SqlString') { $value = $valExpr->getExpr(); FormattingUtil::formatInputValue($value, $fieldName, $this->apiFieldSpec[$fieldName], $operator); - return $this->createSQLClause($fieldAlias, $operator, $value, $this->apiFieldSpec[$fieldName]); + return $this->createSQLClause($fieldAlias, $operator, $value, $this->apiFieldSpec[$fieldName], $depth); } else { $value = $valExpr->render($this->apiFieldSpec); @@ -467,7 +478,7 @@ class Api4SelectQuery { } } - $sqlClause = $this->createSQLClause($fieldAlias, $operator, $value, $field ?? NULL); + $sqlClause = $this->createSQLClause($fieldAlias, $operator, $value, $field, $depth); if ($sqlClause === NULL) { throw new \API_Exception("Invalid value in $type clause for '$expr'"); } @@ -479,10 +490,25 @@ class Api4SelectQuery { * @param string $operator * @param mixed $value * @param array|null $field + * @param int $depth * @return array|string|NULL * @throws \Exception */ - protected function createSQLClause($fieldAlias, $operator, $value, $field) { + protected function createSQLClause($fieldAlias, $operator, $value, $field, int $depth) { + if (!empty($field['operators']) && !in_array($operator, $field['operators'], TRUE)) { + throw new \API_Exception('Illegal operator for ' . $field['name']); + } + // Some fields use a callback to generate their sql + if (!empty($field['sql_filters'])) { + $sql = []; + foreach ($field['sql_filters'] as $filter) { + $clause = is_callable($filter) ? $filter($fieldAlias, $operator, $value, $this, $depth) : NULL; + if ($clause) { + $sql[] = $clause; + } + } + return $sql ? implode(' AND ', $sql) : NULL; + } if ($operator === 'CONTAINS') { switch ($field['serialize'] ?? NULL) { case \CRM_Core_DAO::SERIALIZE_JSON: @@ -795,7 +821,7 @@ class Api4SelectQuery { // Get the 2 bridge reference columns as CRM_Core_Reference_* objects $joinRef = $baseRef = NULL; foreach ($bridgeDAO::getReferenceColumns() as $ref) { - if (in_array($ref->getReferenceKey(), $bridgeFields)) { + if (array_key_exists($ref->getReferenceKey(), $bridgeFields)) { if (!$joinRef && in_array($joinEntity, $ref->getTargetEntities())) { $joinRef = $ref; } diff --git a/civicrm/Civi/Api4/Relationship.php b/civicrm/Civi/Api4/Relationship.php index 276da78074..cc5a55c5c7 100644 --- a/civicrm/Civi/Api4/Relationship.php +++ b/civicrm/Civi/Api4/Relationship.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * Relationship entity. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/relationships/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class Relationship extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/RelationshipCache.php b/civicrm/Civi/Api4/RelationshipCache.php index 2f5ad02cc3..7a4b774fbc 100644 --- a/civicrm/Civi/Api4/RelationshipCache.php +++ b/civicrm/Civi/Api4/RelationshipCache.php @@ -22,8 +22,8 @@ namespace Civi\Api4; /** * RelationshipCache - readonly table to facilitate joining and finding contacts by relationship. * + * @searchable secondary * @see \Civi\Api4\Relationship - * @bridge near_contact_id far_contact_id * @ui_join_filters near_relation * @package Civi\Api4 */ @@ -48,4 +48,16 @@ class RelationshipCache extends Generic\AbstractEntity { ->setCheckPermissions($checkPermissions); } + /** + * @return array + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['bridge'] = [ + 'near_contact_id' => ['description' => ts('One or more contacts with a relationship to this contact')], + 'far_contact_id' => ['description' => ts('One or more contacts with a relationship to this contact')], + ]; + return $info; + } + } diff --git a/civicrm/Civi/Api4/RelationshipType.php b/civicrm/Civi/Api4/RelationshipType.php index 883a7c48b4..774da48432 100644 --- a/civicrm/Civi/Api4/RelationshipType.php +++ b/civicrm/Civi/Api4/RelationshipType.php @@ -24,6 +24,7 @@ namespace Civi\Api4; * * @see \Civi\Api4\Relationship * + * @searchable secondary * @package Civi\Api4 */ class RelationshipType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Route.php b/civicrm/Civi/Api4/Route.php index b6b095bf10..f40444037c 100644 --- a/civicrm/Civi/Api4/Route.php +++ b/civicrm/Civi/Api4/Route.php @@ -26,7 +26,7 @@ namespace Civi\Api4; * Note: this is a read-only api as routes are set via xml files and hooks. * * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterMenu/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class Route extends \Civi\Api4\Generic\AbstractEntity { diff --git a/civicrm/Civi/Api4/SavedSearch.php b/civicrm/Civi/Api4/SavedSearch.php index 79c5e0c2e9..26a8994645 100644 --- a/civicrm/Civi/Api4/SavedSearch.php +++ b/civicrm/Civi/Api4/SavedSearch.php @@ -25,7 +25,7 @@ namespace Civi\Api4; * Stores search parameters for populating smart groups with live results. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/smart-groups/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class SavedSearch extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Service/Spec/CustomFieldSpec.php b/civicrm/Civi/Api4/Service/Spec/CustomFieldSpec.php index 0222473ae5..c233a91581 100644 --- a/civicrm/Civi/Api4/Service/Spec/CustomFieldSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/CustomFieldSpec.php @@ -23,17 +23,17 @@ class CustomFieldSpec extends FieldSpec { /** * @var int */ - protected $customFieldId; + public $customFieldId; /** * @var int */ - protected $customGroup; + public $customGroup; /** * @var string */ - protected $tableName; + public $type = 'Custom'; /** * @inheritDoc @@ -91,22 +91,4 @@ class CustomFieldSpec extends FieldSpec { return $this; } - /** - * @return string - */ - public function getCustomTableName() { - return $this->tableName; - } - - /** - * @param string $customFieldColumnName - * - * @return $this - */ - public function setCustomTableName($customFieldColumnName) { - $this->tableName = $customFieldColumnName; - - return $this; - } - } diff --git a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php index 2b24df11af..6bc6600955 100644 --- a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php @@ -19,108 +19,132 @@ namespace Civi\Api4\Service\Spec; -use Civi\Api4\Utils\CoreUtil; - class FieldSpec { /** * @var mixed */ - protected $defaultValue; + public $defaultValue; /** * @var string */ - protected $name; + public $name; /** * @var string */ - protected $label; + public $label; /** * @var string */ - protected $title; + public $title; /** * @var string */ - protected $entity; + public $type = 'Extra'; /** * @var string */ - protected $description; + public $entity; + + /** + * @var string + */ + public $description; /** * @var bool */ - protected $required = FALSE; + public $required = FALSE; /** * @var bool */ - protected $requiredIf; + public $requiredIf; /** * @var array|bool */ - protected $options; + public $options; + + /** + * @var string + */ + public $tableName; + + /** + * @var callable + */ + private $optionsCallback; /** * @var string */ - protected $dataType; + public $dataType; /** * @var string */ - protected $inputType; + public $inputType; /** * @var array */ - protected $inputAttrs = []; + public $inputAttrs = []; + + /** + * @var string[] + */ + public $operators; /** * @var string */ - protected $fkEntity; + public $fkEntity; /** * @var int */ - protected $serialize; + public $serialize; /** * @var string */ - protected $helpPre; + public $helpPre; /** * @var string */ - protected $helpPost; + public $helpPost; /** * @var array */ - protected $permission; + public $permission; /** * @var string */ - protected $columnName; + public $columnName; /** * @var bool */ - protected $readonly = FALSE; + public $readonly = FALSE; /** * @var callable[] */ - protected $outputFormatters = []; + public $outputFormatters; + + + /** + * @var callable[] + */ + public $sqlFilters; /** * Aliases for the valid data types @@ -140,7 +164,7 @@ class FieldSpec { */ public function __construct($name, $entity, $dataType = 'String') { $this->entity = $entity; - $this->name = $this->columnName = $name; + $this->name = $name; $this->setDataType($dataType); } @@ -216,6 +240,17 @@ class FieldSpec { return $this; } + /** + * @param string $entity + * + * @return $this + */ + public function setEntity($entity) { + $this->entity = $entity; + + return $this; + } + /** * @return string */ @@ -372,10 +407,13 @@ class FieldSpec { } /** - * @return callable[] + * @param string[] $operators + * @return $this */ - public function getOutputFormatters() { - return $this->outputFormatters; + public function setOperators($operators) { + $this->operators = $operators; + + return $this; } /** @@ -393,47 +431,62 @@ class FieldSpec { * @return $this */ public function addOutputFormatter($outputFormatter) { + if (!$this->outputFormatters) { + $this->outputFormatters = []; + } $this->outputFormatters[] = $outputFormatter; return $this; } /** - * @return bool + * @param callable[] $sqlFilters + * @return $this */ - public function getreadonly() { - return $this->readonly; + public function setSqlFilters($sqlFilters) { + $this->sqlFilters = $sqlFilters; + + return $this; } /** - * @param bool $readonly + * @param callable $sqlFilter * @return $this */ - public function setreadonly($readonly) { - $this->readonly = (bool) $readonly; + public function addSqlFilter($sqlFilter) { + if (!$this->sqlFilters) { + $this->sqlFilters = []; + } + $this->sqlFilters[] = $sqlFilter; return $this; } /** - * @return string|NULL + * @param string $type + * @return $this */ - public function getHelpPre() { - return $this->helpPre; + public function setType(string $type) { + $this->type = $type; + + return $this; } /** - * @param string|NULL $helpPre + * @param bool $readonly + * @return $this */ - public function setHelpPre($helpPre) { - $this->helpPre = is_string($helpPre) && strlen($helpPre) ? $helpPre : NULL; + public function setReadonly($readonly) { + $this->readonly = (bool) $readonly; + + return $this; } /** - * @return string|NULL + * @param string|NULL $helpPre */ - public function getHelpPost() { - return $this->helpPost; + public function setHelpPre($helpPre) { + $this->helpPre = is_string($helpPre) && strlen($helpPre) ? $helpPre : NULL; } /** @@ -443,6 +496,23 @@ class FieldSpec { $this->helpPost = is_string($helpPost) && strlen($helpPost) ? $helpPost : NULL; } + /** + * @param string $tableName + * @return $this + */ + public function setTableName($tableName) { + $this->tableName = $tableName; + + return $this; + } + + /** + * @return string + */ + public function getTableName() { + return $this->tableName; + } + /** * Add valid types that are not not part of \CRM_Utils_Type::dataTypes * @@ -458,119 +528,38 @@ class FieldSpec { /** * @param array $values * @param array|bool $return + * @param bool $checkPermissions * @return array */ - public function getOptions($values = [], $return = TRUE) { - if (!isset($this->options) || $this->options === TRUE) { - $fieldName = $this->getName(); - - if ($this instanceof CustomFieldSpec) { - // buildOptions relies on the custom_* type of field names - $fieldName = sprintf('custom_%d', $this->getCustomFieldId()); - } - - // BAO::buildOptions returns a single-dimensional list, we call that first because of the hook contract, - // @see CRM_Utils_Hook::fieldOptions - // We then supplement the data with additional properties if requested. - $bao = CoreUtil::getBAOFromApiName($this->getEntity()); - $optionLabels = $bao::buildOptions($fieldName, NULL, $values); - - if (!is_array($optionLabels) || !$optionLabels) { - $this->options = FALSE; + public function getOptions($values = [], $return = TRUE, $checkPermissions = TRUE) { + if (!isset($this->options)) { + if ($this->optionsCallback) { + $this->options = ($this->optionsCallback)($this, $values, $return, $checkPermissions); } else { - $this->options = \CRM_Utils_Array::makeNonAssociative($optionLabels, 'id', 'label'); - if (is_array($return)) { - self::addOptionProps($bao, $fieldName, $values, $return); - } + $this->options = FALSE; } } return $this->options; } /** - * Augment the 2 values returned by BAO::buildOptions (id, label) with extra properties (name, description, color, icon, etc). - * - * We start with BAO::buildOptions in order to respect hooks which may be adding/removing items, then we add the extra data. + * @param array|bool $options * - * @param \CRM_Core_DAO $baoName - * @param string $fieldName - * @param array $values - * @param array $return - */ - private function addOptionProps($baoName, $fieldName, $values, $return) { - // FIXME: For now, call the buildOptions function again and then combine the arrays. Not an ideal approach. - // TODO: Teach CRM_Core_Pseudoconstant to always load multidimensional option lists so we can get more properties like 'color' and 'icon', - // however that might require a change to the hook_civicrm_fieldOptions signature so that's a bit tricky. - if (in_array('name', $return)) { - $props['name'] = $baoName::buildOptions($fieldName, 'validate', $values); - } - $return = array_diff($return, ['id', 'name', 'label']); - // CRM_Core_Pseudoconstant doesn't know how to fetch extra stuff like icon, description, color, etc., so we have to invent that wheel here... - if ($return) { - $optionIds = implode(',', array_column($this->options, 'id')); - $optionIndex = array_flip(array_column($this->options, 'id')); - if ($this instanceof CustomFieldSpec) { - $optionGroupId = \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $this->getCustomFieldId(), 'option_group_id'); - } - else { - $dao = new $baoName(); - $fieldSpec = $dao->getFieldSpec($fieldName); - $pseudoconstant = $fieldSpec['pseudoconstant'] ?? NULL; - $optionGroupName = $pseudoconstant['optionGroupName'] ?? NULL; - $optionGroupId = $optionGroupName ? \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', $optionGroupName, 'id', 'name') : NULL; - } - if (!empty($optionGroupId)) { - $extraStuff = \CRM_Core_BAO_OptionValue::getOptionValuesArray($optionGroupId); - $keyColumn = $pseudoconstant['keyColumn'] ?? 'value'; - foreach ($extraStuff as $item) { - if (isset($optionIndex[$item[$keyColumn]])) { - foreach ($return as $ret) { - // Note: our schema is inconsistent about whether `description` fields allow html, - // but it's usually assumed to be plain text, so we strip_tags() to standardize it. - $this->options[$optionIndex[$item[$keyColumn]]][$ret] = ($ret === 'description' && isset($item[$ret])) ? strip_tags($item[$ret]) : $item[$ret] ?? NULL; - } - } - } - } - else { - // Fetch the abbr if requested using context: abbreviate - if (in_array('abbr', $return)) { - $props['abbr'] = $baoName::buildOptions($fieldName, 'abbreviate', $values); - $return = array_diff($return, ['abbr']); - } - // Fetch anything else (color, icon, description) - if ($return && !empty($pseudoconstant['table']) && \CRM_Utils_Rule::commaSeparatedIntegers($optionIds)) { - $sql = "SELECT * FROM {$pseudoconstant['table']} WHERE id IN (%1)"; - $query = \CRM_Core_DAO::executeQuery($sql, [1 => [$optionIds, 'CommaSeparatedIntegers']]); - while ($query->fetch()) { - foreach ($return as $ret) { - if (property_exists($query, $ret)) { - // Note: our schema is inconsistent about whether `description` fields allow html, - // but it's usually assumed to be plain text, so we strip_tags() to standardize it. - $this->options[$optionIndex[$query->id]][$ret] = $ret === 'description' ? strip_tags($query->$ret) : $query->$ret; - } - } - } - } - } - } - if (isset($props)) { - foreach ($this->options as &$option) { - foreach ($props as $name => $prop) { - $option[$name] = $prop[$option['id']] ?? NULL; - } - } - } + * @return $this + */ + public function setOptions($options) { + $this->options = $options; + return $this; } /** - * @param array|bool $options + * @param callable $callback * * @return $this */ - public function setOptions($options) { - $this->options = $options; + public function setOptionsCallback($callback) { + $this->optionsCallback = $callback; return $this; } @@ -593,33 +582,46 @@ class FieldSpec { } /** - * @return string + * @return string|NULL */ - public function getColumnName() { + public function getColumnName(): ?string { return $this->columnName; } /** - * @param string $columnName + * @param string|null $columnName * * @return $this */ - public function setColumnName($columnName) { + public function setColumnName(?string $columnName) { $this->columnName = $columnName; return $this; } /** - * @param array $values + * Gets all public variables, converted to snake_case + * * @return array */ - public function toArray($values = []) { + public function toArray() { + // Anonymous class will only have access to public vars + $getter = new class { + + function getPublicVars($object) { + return get_object_vars($object); + } + + }; + + // If getOptions was never called, make options a boolean + if (!isset($this->options)) { + $this->options = isset($this->optionsCallback); + } + $ret = []; - foreach (get_object_vars($this) as $key => $val) { + foreach ($getter->getPublicVars($this) as $key => $val) { $key = strtolower(preg_replace('/(?=[A-Z])/', '_$0', $key)); - if (!$values || in_array($key, $values)) { - $ret[$key] = $val; - } + $ret[$key] = $val; } return $ret; } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ACLEntityRoleCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ACLEntityRoleCreationSpecProvider.php new file mode 100644 index 0000000000..0b4b27d520 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/ACLEntityRoleCreationSpecProvider.php @@ -0,0 +1,40 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\RequestSpec; + +class ACLEntityRoleCreationSpecProvider implements Generic\SpecProviderInterface { + + /** + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $spec->getFieldByName('is_active')->setDefaultValue(1); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'ACLEntityRole' && $action === 'create'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ActivitySpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ActivitySpecProvider.php index 95504953b1..8c5b824678 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/ActivitySpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/ActivitySpecProvider.php @@ -32,21 +32,29 @@ class ActivitySpecProvider implements Generic\SpecProviderInterface { $field = new FieldSpec('source_contact_id', 'Activity', 'Integer'); $field->setTitle(ts('Source Contact')); + $field->setLabel(ts('Added by')); $field->setDescription(ts('Contact who created this activity.')); $field->setRequired($action === 'create'); $field->setFkEntity('Contact'); + $field->setInputType('EntityRef'); $spec->addFieldSpec($field); $field = new FieldSpec('target_contact_id', 'Activity', 'Array'); $field->setTitle(ts('Target Contacts')); + $field->setLabel(ts('With Contact(s)')); $field->setDescription(ts('Contact(s) involved in this activity.')); $field->setFkEntity('Contact'); + $field->setInputType('EntityRef'); + $field->setInputAttrs(['multiple' => TRUE]); $spec->addFieldSpec($field); $field = new FieldSpec('assignee_contact_id', 'Activity', 'Array'); $field->setTitle(ts('Assignee Contacts')); + $field->setLabel(ts('Assigned to')); $field->setDescription(ts('Contact(s) assigned to this activity.')); $field->setFkEntity('Contact'); + $field->setInputType('EntityRef'); + $field->setInputAttrs(['multiple' => TRUE]); $spec->addFieldSpec($field); } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/BatchCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/BatchCreationSpecProvider.php new file mode 100644 index 0000000000..d45ae81e50 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/BatchCreationSpecProvider.php @@ -0,0 +1,43 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\RequestSpec; + +class BatchCreationSpecProvider implements Generic\SpecProviderInterface { + + /** + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $spec->getFieldByName('created_id')->setDefaultValue('user_contact_id'); + $spec->getFieldByName('created_date')->setDefaultValue('now'); + $spec->getFieldByName('modified_id')->setDefaultValue('user_contact_id'); + $spec->getFieldByName('modified_date')->setDefaultValue('now'); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'Batch' && $action === 'create'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php index ce0dcf726f..73b828cdf2 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php @@ -33,6 +33,8 @@ class CaseCreationSpecProvider implements Generic\SpecProviderInterface { $creator->setDescription('Contact who created the case.'); $creator->setFkEntity('Contact'); $creator->setInputType('EntityRef'); + $creator->setRequired(TRUE); + $creator->setDefaultValue('user_contact_id'); $spec->addFieldSpec($creator); $contact = new FieldSpec('contact_id', $spec->getEntity(), 'Array'); @@ -59,6 +61,18 @@ class CaseCreationSpecProvider implements Generic\SpecProviderInterface { $duration->setInputType('Number'); $duration->setDescription('Open Case activity duration (minutes).'); $spec->addFieldSpec($duration); + + $defaultStatus = \CRM_Core_DAO::singleValueQuery('SELECT value FROM civicrm_option_value + WHERE is_default + AND domain_id = ' . \CRM_Core_BAO_Domain::getDomain()->id . ' + AND option_group_id = (SELECT id FROM civicrm_option_group WHERE name = "case_status") + LIMIT 1'); + if ($defaultStatus) { + $status = $spec->getFieldByName('status_id'); + $status->setDefaultValue((int) $defaultStatus); + } + + $spec->getFieldByName('start_date')->setDefaultValue('now'); } /** diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php new file mode 100644 index 0000000000..8f3683a15f --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php @@ -0,0 +1,102 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Query\Api4SelectQuery; +use Civi\Api4\Service\Spec\FieldSpec; +use Civi\Api4\Service\Spec\RequestSpec; + +class ContactGetSpecProvider implements Generic\SpecProviderInterface { + + /** + * @param \Civi\Api4\Service\Spec\RequestSpec $spec + */ + public function modifySpec(RequestSpec $spec) { + $field = new FieldSpec('groups', 'Contact', 'Array'); + $field->setLabel(ts('In Groups')) + ->setTitle(ts('Groups')) + ->setColumnName('id') + ->setDescription(ts('Groups (or sub-groups of groups) to which this contact belongs')) + ->setType('Filter') + ->setOperators(['IN', 'NOT IN']) + ->addSqlFilter([__CLASS__, 'getContactGroupSql']) + ->setOptionsCallback([__CLASS__, 'getGroupList']); + $spec->addFieldSpec($field); + } + + /** + * @param string $entity + * @param string $action + * + * @return bool + */ + public function applies($entity, $action) { + return $entity === 'Contact' && $action === 'get'; + } + + /** + * @param string $fieldAlias + * @param string $operator + * @param mixed $value + * @param \Civi\Api4\Query\Api4SelectQuery $query + * @param int $depth + * return string + */ + public static function getContactGroupSql(string $fieldAlias, string $operator, $value, Api4SelectQuery $query, int $depth): string { + $tempTable = \CRM_Utils_SQL_TempTable::build(); + $tempTable->createWithColumns('contact_id INT'); + $tableName = $tempTable->getName(); + \CRM_Contact_BAO_GroupContactCache::populateTemporaryTableWithContactsInGroups($value, $tableName); + // SQL optimization - use INNER JOIN if the base table is Contact & this clause is not nested + if ($fieldAlias === '`a`.`id`' && $operator === "IN" && !$depth) { + $query->getQuery()->join($tableName, "INNER JOIN `$tableName` ON $fieldAlias = `$tableName`.contact_id"); + return '1'; + } + // Else use IN or NOT IN (this filter only supports those 2 operators) + else { + return "$fieldAlias $operator (SELECT contact_id FROM `$tableName`)"; + } + } + + /** + * Callback function to build option lists groups pseudo-field. + * + * @param \Civi\Api4\Service\Spec\FieldSpec $spec + * @param array $values + * @param bool|array $returnFormat + * @param bool $checkPermissions + * @return array + */ + public static function getGroupList($spec, $values, $returnFormat, $checkPermissions) { + $groups = $checkPermissions ? \CRM_Core_PseudoConstant::group() : \CRM_Core_PseudoConstant::allGroup(NULL, FALSE); + $options = \CRM_Utils_Array::makeNonAssociative($groups, 'id', 'label'); + if ($options && is_array($returnFormat) && in_array('name', $returnFormat)) { + $groupIndex = array_flip(array_keys($groups)); + $dao = \CRM_Core_DAO::executeQuery('SELECT id, name FROM civicrm_group WHERE id IN (%1)', [ + 1 => [implode(',', array_keys($groups)), 'CommaSeparatedIntegers'], + ]); + while ($dao->fetch()) { + $options[$groupIndex[$dao->id]]['name'] = $dao->name; + } + } + return $options; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php index 5e61b2a54f..3cc363afc7 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php @@ -31,15 +31,19 @@ class CustomValueSpecProvider implements Generic\SpecProviderInterface { $action = $spec->getAction(); if ($action !== 'create') { $idField = new FieldSpec('id', $spec->getEntity(), 'Integer'); + $idField->setType('Field'); + $idField->setColumnName('id'); $idField->setTitle(ts('Custom Value ID')); - $idField->setreadonly(TRUE); + $idField->setReadonly(TRUE); $spec->addFieldSpec($idField); } $entityField = new FieldSpec('entity_id', $spec->getEntity(), 'Integer'); + $entityField->setType('Field'); + $entityField->setColumnName('entity_id'); $entityField->setTitle(ts('Entity ID')); $entityField->setRequired($action === 'create'); $entityField->setFkEntity('Contact'); - $entityField->setreadonly(TRUE); + $entityField->setReadonly(TRUE); $spec->addFieldSpec($entityField); } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php index 8bbb299b45..bb6e0c72ab 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php @@ -30,6 +30,9 @@ class EmailCreationSpecProvider implements Generic\SpecProviderInterface { $spec->getFieldByName('email')->setRequired(TRUE); $spec->getFieldByName('on_hold')->setRequired(FALSE); $spec->getFieldByName('is_bulkmail')->setRequired(FALSE); + + $defaultLocationType = \CRM_Core_BAO_LocationType::getDefault()->id ?? NULL; + $spec->getFieldByName('location_type_id')->setDefaultValue($defaultLocationType); } /** diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/FinancialItemCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/FinancialItemCreationSpecProvider.php new file mode 100644 index 0000000000..4567d2bed1 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/FinancialItemCreationSpecProvider.php @@ -0,0 +1,52 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\RequestSpec; + +class FinancialItemCreationSpecProvider implements Generic\SpecProviderInterface { + + // I'm not sure it makes sense to have a default `entity_table`... actually, I don't even know if it makes + // sense to expose `FinancialItem` as a public API, for what that's worth. But it's there, so clearly it does. + // And the ConformanceTests require that you be able to create (and read-back) a record using metadata. + + const DEFAULT_TABLE = 'civicrm_line_item'; + const DEFAULT_ENTITY = 'LineItem'; + + /** + * @param \Civi\Api4\Service\Spec\RequestSpec $spec + */ + public function modifySpec(RequestSpec $spec) { + $spec->getFieldByName('entity_table')->setRequired(TRUE); + $spec->getFieldByName('entity_id')->setRequired(TRUE); + $spec->getFieldByName('entity_table')->setDefaultValue(self::DEFAULT_TABLE); + } + + /** + * @param string $entity + * @param string $action + * + * @return bool + */ + public function applies($entity, $action) { + return $entity === 'FinancialItem' && $action === 'create'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/RequestSpec.php b/civicrm/Civi/Api4/Service/Spec/RequestSpec.php index dbf460a3ba..d9e2b5bf13 100644 --- a/civicrm/Civi/Api4/Service/Spec/RequestSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/RequestSpec.php @@ -19,6 +19,8 @@ namespace Civi\Api4\Service\Spec; +use Civi\Api4\Utils\CoreUtil; + class RequestSpec { /** @@ -31,6 +33,11 @@ class RequestSpec { */ protected $action; + /** + * @var string + */ + protected $entityTableName; + /** * @var FieldSpec[] */ @@ -43,9 +50,16 @@ class RequestSpec { public function __construct($entity, $action) { $this->entity = $entity; $this->action = $action; + $this->entityTableName = CoreUtil::getTableName($entity); } public function addFieldSpec(FieldSpec $field) { + if (!$field->getEntity()) { + $field->setEntity($this->entity); + } + if (!$field->getTableName()) { + $field->setTableName($this->entityTableName); + } $this->fields[] = $field; } diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php index 341ab2bbd1..7a5aee1813 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php @@ -19,30 +19,11 @@ namespace Civi\Api4\Service\Spec; +use Civi\Api4\Utils\CoreUtil; use CRM_Core_DAO_AllCoreTables as AllCoreTables; class SpecFormatter { - /** - * @param FieldSpec[] $fields - * @param bool $includeFieldOptions - * @param array $values - * - * @return array - */ - public static function specToArray($fields, $includeFieldOptions = FALSE, $values = []) { - $fieldArray = []; - - foreach ($fields as $field) { - if ($includeFieldOptions) { - $field->getOptions($values, $includeFieldOptions); - } - $fieldArray[$field->getName()] = $field->toArray(); - } - - return $fieldArray; - } - /** * @param array $data * @param string $entity @@ -58,7 +39,7 @@ class SpecFormatter { $field->setName($data['custom_group.name'] . '.' . $data['name']); } else { - $field->setCustomTableName($data['custom_group.table_name']); + $field->setTableName($data['custom_group.table_name']); } $field->setColumnName($data['column_name']); $field->setCustomFieldId($data['id'] ?? NULL); @@ -67,17 +48,23 @@ class SpecFormatter { $field->setLabel($data['custom_group.title'] . ': ' . $data['label']); $field->setHelpPre($data['help_pre'] ?? NULL); $field->setHelpPost($data['help_post'] ?? NULL); - $field->setOptions(self::customFieldHasOptions($data)); - $field->setreadonly($data['is_view']); + if (self::customFieldHasOptions($data)) { + $field->setOptionsCallback([__CLASS__, 'getOptions']); + } + $field->setReadonly($data['is_view']); } else { $name = $data['name'] ?? NULL; $field = new FieldSpec($name, $entity, $dataTypeName); + $field->setType('Field'); + $field->setColumnName($name); $field->setRequired(!empty($data['required'])); $field->setTitle($data['title'] ?? NULL); $field->setLabel($data['html']['label'] ?? NULL); - $field->setOptions(!empty($data['pseudoconstant'])); - $field->setreadonly(!empty($data['readonly'])); + if (!empty($data['pseudoconstant'])) { + $field->setOptionsCallback([__CLASS__, 'getOptions']); + } + $field->setReadonly(!empty($data['readonly'])); } $field->setSerialize($data['serialize'] ?? NULL); $field->setDefaultValue($data['default'] ?? NULL); @@ -135,6 +122,119 @@ class SpecFormatter { return $dataTypeName; } + /** + * Callback function to build option lists for all DAO & custom fields. + * + * @param FieldSpec $spec + * @param array $values + * @param bool|array $returnFormat + * @param bool $checkPermissions + * @return array|false + */ + public static function getOptions($spec, $values, $returnFormat, $checkPermissions) { + $fieldName = $spec->getName(); + + if ($spec instanceof CustomFieldSpec) { + // buildOptions relies on the custom_* type of field names + $fieldName = sprintf('custom_%d', $spec->getCustomFieldId()); + } + + // BAO::buildOptions returns a single-dimensional list, we call that first because of the hook contract, + // @see CRM_Utils_Hook::fieldOptions + // We then supplement the data with additional properties if requested. + $bao = CoreUtil::getBAOFromApiName($spec->getEntity()); + $optionLabels = $bao::buildOptions($fieldName, NULL, $values); + + if (!is_array($optionLabels) || !$optionLabels) { + $options = FALSE; + } + else { + $options = \CRM_Utils_Array::makeNonAssociative($optionLabels, 'id', 'label'); + if (is_array($returnFormat)) { + self::addOptionProps($options, $spec, $bao, $fieldName, $values, $returnFormat); + } + } + return $options; + } + + /** + * Augment the 2 values returned by BAO::buildOptions (id, label) with extra properties (name, description, color, icon, etc). + * + * We start with BAO::buildOptions in order to respect hooks which may be adding/removing items, then we add the extra data. + * + * @param array $options + * @param FieldSpec $spec + * @param \CRM_Core_DAO $baoName + * @param string $fieldName + * @param array $values + * @param array $returnFormat + */ + private static function addOptionProps(&$options, $spec, $baoName, $fieldName, $values, $returnFormat) { + // FIXME: For now, call the buildOptions function again and then combine the arrays. Not an ideal approach. + // TODO: Teach CRM_Core_Pseudoconstant to always load multidimensional option lists so we can get more properties like 'color' and 'icon', + // however that might require a change to the hook_civicrm_fieldOptions signature so that's a bit tricky. + if (in_array('name', $returnFormat)) { + $props['name'] = $baoName::buildOptions($fieldName, 'validate', $values); + } + $returnFormat = array_diff($returnFormat, ['id', 'name', 'label']); + // CRM_Core_Pseudoconstant doesn't know how to fetch extra stuff like icon, description, color, etc., so we have to invent that wheel here... + if ($returnFormat) { + $optionIds = implode(',', array_column($options, 'id')); + $optionIndex = array_flip(array_column($options, 'id')); + if ($spec instanceof CustomFieldSpec) { + $optionGroupId = \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $spec->getCustomFieldId(), 'option_group_id'); + } + else { + $dao = new $baoName(); + $fieldSpec = $dao->getFieldSpec($fieldName); + $pseudoconstant = $fieldSpec['pseudoconstant'] ?? NULL; + $optionGroupName = $pseudoconstant['optionGroupName'] ?? NULL; + $optionGroupId = $optionGroupName ? \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', $optionGroupName, 'id', 'name') : NULL; + } + if (!empty($optionGroupId)) { + $extraStuff = \CRM_Core_BAO_OptionValue::getOptionValuesArray($optionGroupId); + $keyColumn = $pseudoconstant['keyColumn'] ?? 'value'; + foreach ($extraStuff as $item) { + if (isset($optionIndex[$item[$keyColumn]])) { + foreach ($returnFormat as $ret) { + // Note: our schema is inconsistent about whether `description` fields allow html, + // but it's usually assumed to be plain text, so we strip_tags() to standardize it. + $options[$optionIndex[$item[$keyColumn]]][$ret] = ($ret === 'description' && isset($item[$ret])) ? strip_tags($item[$ret]) : $item[$ret] ?? NULL; + } + } + } + } + else { + // Fetch the abbr if requested using context: abbreviate + if (in_array('abbr', $returnFormat)) { + $props['abbr'] = $baoName::buildOptions($fieldName, 'abbreviate', $values); + $returnFormat = array_diff($returnFormat, ['abbr']); + } + // Fetch anything else (color, icon, description) + if ($returnFormat && !empty($pseudoconstant['table']) && \CRM_Utils_Rule::commaSeparatedIntegers($optionIds)) { + $sql = "SELECT * FROM {$pseudoconstant['table']} WHERE id IN (%1)"; + $query = \CRM_Core_DAO::executeQuery($sql, [1 => [$optionIds, 'CommaSeparatedIntegers']]); + while ($query->fetch()) { + foreach ($returnFormat as $ret) { + if (property_exists($query, $ret)) { + // Note: our schema is inconsistent about whether `description` fields allow html, + // but it's usually assumed to be plain text, so we strip_tags() to standardize it. + $options[$optionIndex[$query->id]][$ret] = $ret === 'description' ? strip_tags($query->$ret) : $query->$ret; + } + } + } + } + } + } + if (isset($props)) { + foreach ($options as &$option) { + foreach ($props as $name => $prop) { + $option[$name] = $prop[$option['id']] ?? NULL; + } + } + } + } + /** * @param \Civi\Api4\Service\Spec\FieldSpec $fieldSpec * @param array $data @@ -150,7 +250,10 @@ class SpecFormatter { 'Link' => 'Url', ]; $inputType = $map[$inputType] ?? $inputType; - if ($inputType == 'Select' && !empty($data['serialize'])) { + if ($dataTypeName === 'ContactReference') { + $inputType = 'EntityRef'; + } + if (in_array($inputType, ['Select', 'EntityRef'], TRUE) && !empty($data['serialize'])) { $inputAttrs['multiple'] = TRUE; } if ($inputType == 'Date' && !empty($inputAttrs['formatType'])) { diff --git a/civicrm/Civi/Api4/Setting.php b/civicrm/Civi/Api4/Setting.php index f97627b6aa..a41baa6180 100644 --- a/civicrm/Civi/Api4/Setting.php +++ b/civicrm/Civi/Api4/Setting.php @@ -25,7 +25,7 @@ namespace Civi\Api4; * Used to read/write persistent setting data from CiviCRM. * * @see \Civi\Core\SettingsBag - * @searchable false + * @searchable none * @package Civi\Api4 */ class Setting extends Generic\AbstractEntity { diff --git a/civicrm/Civi/Api4/StateProvince.php b/civicrm/Civi/Api4/StateProvince.php index 97ec5e5259..640cc30a2f 100644 --- a/civicrm/Civi/Api4/StateProvince.php +++ b/civicrm/Civi/Api4/StateProvince.php @@ -21,6 +21,7 @@ namespace Civi\Api4; /** * StateProvince entity. * + * @searchable secondary * @package Civi\Api4 */ class StateProvince extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/StatusPreference.php b/civicrm/Civi/Api4/StatusPreference.php index 4a2ece25dd..e3b01c5d7c 100644 --- a/civicrm/Civi/Api4/StatusPreference.php +++ b/civicrm/Civi/Api4/StatusPreference.php @@ -24,7 +24,7 @@ namespace Civi\Api4; * * For setting "hush" preferences for system check alerts. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class StatusPreference extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/System.php b/civicrm/Civi/Api4/System.php index 9ba22ab58f..1f1f4d4b5d 100644 --- a/civicrm/Civi/Api4/System.php +++ b/civicrm/Civi/Api4/System.php @@ -21,6 +21,7 @@ namespace Civi\Api4; /** * A collection of system maintenance/diagnostic utilities. * + * @searchable none * @package Civi\Api4 */ class System extends Generic\AbstractEntity { diff --git a/civicrm/Civi/Api4/Tag.php b/civicrm/Civi/Api4/Tag.php index 8cc13f1d16..57d94d74f4 100644 --- a/civicrm/Civi/Api4/Tag.php +++ b/civicrm/Civi/Api4/Tag.php @@ -26,6 +26,7 @@ namespace Civi\Api4; * They are connected to those entities via the EntityTag table. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/groups-and-tags/#tags + * @searchable secondary * @package Civi\Api4 */ class Tag extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFField.php b/civicrm/Civi/Api4/UFField.php index 6d044da207..0de725af34 100644 --- a/civicrm/Civi/Api4/UFField.php +++ b/civicrm/Civi/Api4/UFField.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * UFField entity - aka profile fields. * * @see \Civi\Api4\UFGroup - * @searchable false + * @searchable none * @package Civi\Api4 */ class UFField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFGroup.php b/civicrm/Civi/Api4/UFGroup.php index 2f80638a07..3f82f12f76 100644 --- a/civicrm/Civi/Api4/UFGroup.php +++ b/civicrm/Civi/Api4/UFGroup.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * UFGroup entity - AKA profiles. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/profiles/ - * @searchable false + * @searchable none * @package Civi\Api4 */ class UFGroup extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFJoin.php b/civicrm/Civi/Api4/UFJoin.php index b1c874a93f..e2f0b3b243 100644 --- a/civicrm/Civi/Api4/UFJoin.php +++ b/civicrm/Civi/Api4/UFJoin.php @@ -23,7 +23,7 @@ namespace Civi\Api4; * UFJoin entity - links profiles to the components/extensions they are used for. * * @see \Civi\Api4\UFGroup - * @searchable false + * @searchable none * @package Civi\Api4 */ class UFJoin extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFMatch.php b/civicrm/Civi/Api4/UFMatch.php index 05cd8fa5a5..87df0cbf98 100644 --- a/civicrm/Civi/Api4/UFMatch.php +++ b/civicrm/Civi/Api4/UFMatch.php @@ -22,7 +22,7 @@ namespace Civi\Api4; /** * UFMatch entity - links civicrm contacts with users created externally * - * @searchable false + * @searchable none * @package Civi\Api4 */ class UFMatch extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Utils/CoreUtil.php b/civicrm/Civi/Api4/Utils/CoreUtil.php index c5b0d5e829..8399142500 100644 --- a/civicrm/Civi/Api4/Utils/CoreUtil.php +++ b/civicrm/Civi/Api4/Utils/CoreUtil.php @@ -19,6 +19,7 @@ namespace Civi\Api4\Utils; +use Civi\API\Request; use CRM_Core_DAO_AllCoreTables as AllCoreTables; class CoreUtil { @@ -151,4 +152,65 @@ class CoreUtil { return $customGroupName && \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customGroupName, 'is_multiple', 'name'); } + /** + * Check if current user is authorized to perform specified action on a given entity. + * + * @param \Civi\Api4\Generic\AbstractAction $apiRequest + * @param array $record + * @param int|string $userID + * Contact ID of the user we are testing,. 0 for the anonymous user. + * @return bool + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \Civi\API\Exception\NotImplementedException + * @throws \Civi\API\Exception\UnauthorizedException + */ + public static function checkAccessRecord(\Civi\Api4\Generic\AbstractAction $apiRequest, array $record, int $userID) { + // For get actions, just run a get and ACLs will be applied to the query. + // It's a cheap trick and not as efficient as not running the query at all, + // but BAO::checkAccess doesn't consistently check permissions for the "get" action. + if (is_a($apiRequest, '\Civi\Api4\Generic\DAOGetAction')) { + return (bool) $apiRequest->addSelect('id')->addWhere('id', '=', $record['id'])->execute()->count(); + } + + $event = new \Civi\Api4\Event\AuthorizeRecordEvent($apiRequest, $record, $userID); + \Civi::dispatcher()->dispatch('civi.api4.authorizeRecord', $event); + + // Note: $bao::_checkAccess() is a quasi-listener. TODO: Convert to straight-up listener. + if ($event->isAuthorized() === NULL) { + $baoName = self::getBAOFromApiName($apiRequest->getEntityName()); + if ($baoName && method_exists($baoName, '_checkAccess')) { + $authorized = $baoName::_checkAccess($event->getEntityName(), $event->getActionName(), $event->getRecord(), $event->getUserID()); + $event->setAuthorized($authorized); + } + else { + $event->setAuthorized(TRUE); + } + } + return $event->isAuthorized(); + } + + /** + * If the permissions of record $A are based on record $B, then use `checkAccessDelegated($B...)` + * to make see if access to $B is permitted. + * + * @param string $entityName + * @param string $actionName + * @param array $record + * @param int $userID + * Contact ID of the user we are testing, or 0 for the anonymous user. + * + * @return bool + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + public static function checkAccessDelegated(string $entityName, string $actionName, array $record, int $userID) { + $apiRequest = Request::create($entityName, $actionName, ['version' => 4]); + // TODO: Should probably emit civi.api.authorize for checking guardian permission; but in APIv4 with std cfg, this is de-facto equivalent. + if (!$apiRequest->isAuthorized()) { + return FALSE; + } + return static::checkAccessRecord($apiRequest, $record, $userID); + } + } diff --git a/civicrm/Civi/Api4/Utils/ReflectionUtils.php b/civicrm/Civi/Api4/Utils/ReflectionUtils.php index 781a87b127..c48f921d0c 100644 --- a/civicrm/Civi/Api4/Utils/ReflectionUtils.php +++ b/civicrm/Civi/Api4/Utils/ReflectionUtils.php @@ -95,12 +95,6 @@ class ReflectionUtils { elseif ($key == 'throws' || $key == 'see') { $info[$key][] = implode(' ', $words); } - elseif ($key == 'searchable') { - $info[$key] = strtolower($words[0]) !== 'false'; - } - elseif ($key == 'bridge') { - $info[$key] = $words; - } elseif ($key == 'param' && $words) { $type = $words[0][0] !== '$' ? explode('|', array_shift($words)) : NULL; $param = rtrim(array_shift($words), '-:()/'); diff --git a/civicrm/Civi/Api4/Website.php b/civicrm/Civi/Api4/Website.php index f800c09b65..d155f81416 100644 --- a/civicrm/Civi/Api4/Website.php +++ b/civicrm/Civi/Api4/Website.php @@ -22,6 +22,7 @@ namespace Civi\Api4; /** * Website entity. * + * @searchable secondary * @package Civi\Api4 */ class Website extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/WordReplacement.php b/civicrm/Civi/Api4/WordReplacement.php new file mode 100644 index 0000000000..ffe6e0107f --- /dev/null +++ b/civicrm/Civi/Api4/WordReplacement.php @@ -0,0 +1,32 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * WordReplacement entity. + * + * This entity stores global string replacements for the CiviCRM UI. + * + * @searchable secondary + * @package Civi\Api4 + */ +class WordReplacement extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Core/CiviEventDispatcher.php b/civicrm/Civi/Core/CiviEventDispatcher.php index dd3bc3f7e5..f2ddb6431e 100644 --- a/civicrm/Civi/Core/CiviEventDispatcher.php +++ b/civicrm/Civi/Core/CiviEventDispatcher.php @@ -2,6 +2,7 @@ namespace Civi\Core; +use Civi\Core\Event\HookStyleListener; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\Event; @@ -89,6 +90,52 @@ class CiviEventDispatcher extends EventDispatcher { } } + /** + * Add a test listener. + * + * @param string $eventName + * Ex: 'civi.internal.event' + * Ex: 'hook_civicrm_publicEvent' + * Ex: '&hook_civicrm_publicEvent' (an alias for 'hook_civicrm_publicEvent' in which the listener abides hook-style ordered parameters). + * This notation is handy when attaching via listener-maps (e.g. `getSubscribedEvents()`). + * @param callable $listener + * @param int $priority + */ + public function addListener($eventName, $listener, $priority = 0) { + if ($eventName[0] === '&') { + $eventName = substr($eventName, 1); + $listener = new HookStyleListener($listener); + } + parent::addListener($eventName, $listener, $priority); + } + + /** + * Adds a series of event listeners from methods in a class. + * + * @param string|object $target + * The object/class which will receive the notifications. + * Use a string (class-name) if the listeners are static methods. + * Use an object-instance if the listeners are regular methods. + * @param array $events + * List of events/methods/priorities. + * @see \Symfony\Component\EventDispatcher\EventSubscriberInterface::getSubscribedEvents() + */ + public function addListenerMap($target, array $events) { + foreach ($events as $eventName => $params) { + if (\is_string($params)) { + $this->addListener($eventName, [$target, $params]); + } + elseif (\is_string($params[0])) { + $this->addListener($eventName, [$target, $params[0]], isset($params[1]) ? $params[1] : 0); + } + else { + foreach ($params as $listener) { + $this->addListener($eventName, [$target, $listener[0]], isset($listener[1]) ? $listener[1] : 0); + } + } + } + } + /** * Adds a service as event listener. * diff --git a/civicrm/Civi/Core/Container.php b/civicrm/Civi/Core/Container.php index c4f8ca72ab..0632c649c4 100644 --- a/civicrm/Civi/Core/Container.php +++ b/civicrm/Civi/Core/Container.php @@ -1,6 +1,7 @@ <?php namespace Civi\Core; +use Civi\Core\Event\EventScanner; use Civi\Core\Lock\LockManager; use Symfony\Component\Config\ConfigCache; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -338,6 +339,16 @@ class Container { ))->addTag('kernel.event_subscriber')->setPublic(TRUE); } + $dispatcherDefn = $container->getDefinition('dispatcher'); + foreach (\CRM_Core_DAO_AllCoreTables::getBaoClasses() as $baoEntity => $baoClass) { + $listenerMap = EventScanner::findListeners($baoClass, $baoEntity); + if ($listenerMap) { + $file = (new \ReflectionClass($baoClass))->getFileName(); + $container->addResource(new \Symfony\Component\Config\Resource\FileResource($file)); + $dispatcherDefn->addMethodCall('addListenerMap', [$baoClass, $listenerMap]); + } + } + \CRM_Api4_Services::hook_container($container); \CRM_Utils_Hook::container($container); @@ -360,13 +371,28 @@ class Container { /** @var CiviEventDispatcher $dispatcher */ $dispatcher = static::getBootService('dispatcher.boot'); + // Sometimes, you have a generic event ('hook_pre') and wish to fire more targeted aliases ('hook_pre::MyEntity') to allow shorter subscriber lists. + $aliasEvent = function($eventName, $fieldName) { + return function($e) use ($eventName, $fieldName) { + \Civi::dispatcher()->dispatch($eventName . "::" . $e->{$fieldName}, $e); + }; + }; + $aliasMethodEvent = function($eventName, $methodName) { + return function($e) use ($eventName, $methodName) { + \Civi::dispatcher()->dispatch($eventName . "::" . $e->{$methodName}(), $e); + }; + }; + + $dispatcher->addListener('civi.api4.validate', $aliasMethodEvent('civi.api4.validate', 'getEntityName'), 100); + $dispatcher->addListener('civi.api4.authorizeRecord', $aliasMethodEvent('civi.api4.authorizeRecord', 'getEntityName'), 100); + $dispatcher->addListener('civi.core.install', ['\Civi\Core\InstallationCanary', 'check']); $dispatcher->addListener('civi.core.install', ['\Civi\Core\DatabaseInitializer', 'initialize']); $dispatcher->addListener('civi.core.install', ['\Civi\Core\LocalizationInitializer', 'initialize']); $dispatcher->addListener('hook_civicrm_post', ['\CRM_Core_Transaction', 'addPostCommit'], -1000); - $dispatcher->addListener('hook_civicrm_pre', ['\Civi\Core\Event\PreEvent', 'dispatchSubevent'], 100); + $dispatcher->addListener('hook_civicrm_pre', $aliasEvent('hook_civicrm_pre', 'entity'), 100); $dispatcher->addListener('civi.dao.preDelete', ['\CRM_Core_BAO_EntityTag', 'preDeleteOtherEntity']); - $dispatcher->addListener('hook_civicrm_post', ['\Civi\Core\Event\PostEvent', 'dispatchSubevent'], 100); + $dispatcher->addListener('hook_civicrm_post', $aliasEvent('hook_civicrm_post', 'entity'), 100); $dispatcher->addListener('hook_civicrm_post::Activity', ['\Civi\CCase\Events', 'fireCaseChange']); $dispatcher->addListener('hook_civicrm_post::Case', ['\Civi\CCase\Events', 'fireCaseChange']); $dispatcher->addListener('hook_civicrm_caseChange', ['\Civi\CCase\Events', 'delegateToXmlListeners']); @@ -381,6 +407,7 @@ class Container { $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Utils_VisualBundle', 'buildAssetJs']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Utils_VisualBundle', 'buildAssetCss']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Core_Resources', 'renderMenubarStylesheet']); + $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Core_Resources', 'renderL10nJs']); $dispatcher->addListener('hook_civicrm_coreResourceList', ['\CRM_Utils_System', 'appendCoreResources']); $dispatcher->addListener('hook_civicrm_getAssetUrl', ['\CRM_Utils_System', 'alterAssetUrl']); $dispatcher->addListener('hook_civicrm_alterExternUrl', ['\CRM_Utils_System', 'migrateExternUrl'], 1000); @@ -388,10 +415,6 @@ class Container { $dispatcher->addListener('hook_civicrm_permissionList', ['CRM_Core_Permission_List', 'findCiviPermissions'], 950); $dispatcher->addListener('hook_civicrm_permissionList', ['CRM_Core_Permission_List', 'findCmsPermissions'], 925); - $dispatcher->addListener('hook_civicrm_triggerInfo', ['\CRM_Contact_BAO_RelationshipCache', 'onHookTriggerInfo']); - $dispatcher->addListener('civi.dao.postInsert', ['\CRM_Core_BAO_RecurringEntity', 'triggerInsert']); - $dispatcher->addListener('civi.dao.postUpdate', ['\CRM_Core_BAO_RecurringEntity', 'triggerUpdate']); - $dispatcher->addListener('civi.dao.postDelete', ['\CRM_Core_BAO_RecurringEntity', 'triggerDelete']); $dispatcher->addListener('hook_civicrm_postSave_civicrm_domain', ['\CRM_Core_BAO_Domain', 'onPostSave']); $dispatcher->addListener('hook_civicrm_unhandled_exception', [ 'CRM_Core_LegacyErrorHandler', diff --git a/civicrm/Civi/Core/Event/EventPrinter.php b/civicrm/Civi/Core/Event/EventPrinter.php new file mode 100644 index 0000000000..0c2cfb6235 --- /dev/null +++ b/civicrm/Civi/Core/Event/EventPrinter.php @@ -0,0 +1,50 @@ +<?php + + +namespace Civi\Core\Event; + +/** + * This provides some rarely used debug utilities. + * + * @package Civi\Core\Event + */ +class EventPrinter { + + /** + * Prepare a name to identify a callable element. + * + * @param mixed $callback + * @return string + */ + public static function formatName($callback): string { + $normalizeNamespace = function($symbol) { + return $symbol{0} === '\\' ? substr($symbol, 1) : $symbol; + }; + if (is_array($callback)) { + [$a, $b] = $callback; + if (is_object($a)) { + return $normalizeNamespace(get_class($a)) . "->$b(\$e)"; + } + elseif (is_string($a)) { + return $normalizeNamespace($a) . "::$b(\$e)"; + } + } + elseif (is_string($callback)) { + return $normalizeNamespace($callback) . '(\$e)'; + } + elseif ($callback instanceof ServiceListener || $callback instanceof HookStyleListener) { + return (string) $callback; + } + else { + try { + $f = new \ReflectionFunction($callback); + return 'closure<' . $f->getFileName() . '@' . $f->getStartLine() . '>($e)'; + } + catch (\ReflectionException $e) { + } + } + + return 'unidentified'; + } + +} diff --git a/civicrm/Civi/Core/Event/EventScanner.php b/civicrm/Civi/Core/Event/EventScanner.php new file mode 100644 index 0000000000..912e313168 --- /dev/null +++ b/civicrm/Civi/Core/Event/EventScanner.php @@ -0,0 +1,176 @@ +<?php + +namespace Civi\Core\Event; + +/** + * The `EventScanner` is a utility for scanning a class to see if it has any event-listeners. It may check + * for common interfaces and conventions. Example: + * + * ``` + * $map = EventScanner::findListeners($someObject); + * $dispatcher->addListenerMap($someObject, $map); + * ``` + */ +class EventScanner { + + /** + * In-memory cache of the listener-maps found on various classes. + * + * This cache is a little unusual -- it is geared toward improving unit-tests. Bear in mind: + * + * - The `EventScanner` is fundamentally scanning class-structure. + * - Within a given PHP process, the class-structure cannot change. Therefore, the cached view in `static::$listenerMaps` cannot be stale. + * - There are three kinds of PHP processes: + * 1. System-flushes -- During this operation, we rebuild the `Container`. This may do some scanning, and the results will be recorded in `Container`. + * 2. Ordinary page-loads -- We use the `Container` cache. It shouldn't need any more scans. + * 3. Headless unit-tests -- For these, we must frequently tear-down and rebuild a fresh `Container`, often with varying decisions about + * which extensions/services/classes to activate. The container-cache does not operate. + * + * Here's how `$listenerMaps` plays out in each: + * + * 1. The `$listenerMaps` is not needed or used. + * 2. The `$listenerMaps` (and `EventScanner` generally) is not needed or used. + * 3. The `$listenerMaps` is used frequently, preventing redundant scanning. + * + * A more common approach would be to use `Civi::$statics` or `Civi::cache()`. These would be inappropriate because we want the data to be + * preserved across multiple test-runs -- and because the underlying data (PHP class-structure) does not change within a unit-test. + * + * @var array + * Ex: ['api_v3_SyntaxConformanceTest' => [...listener-names...]] + */ + private static $listenerMaps = []; + + /** + * Scan an object or class for event listeners. + * + * Note: This requires scanning. Consequently, it should not be run in bulk on a regular (runtime) basis. Instead, store + * the listener-maps in a cache (e.g. `Container`). + * + * @param string|object $target + * The object/class which will receive the notifications. + * Use a string (class-name) if the listeners are static methods. + * Use an object-instance if the listeners are regular methods. + * @param string|null $self + * If the target $class is focused on a specific entity/form/etc, use the `$self` parameter to specify it. + * This will activate support for `self_{$event}` methods. + * Ex: if '$self' is 'Contact', then 'function self_hook_civicrm_pre()' maps to 'hook_civicrm_pre::Contact'. + * @return array + * List of events/listeners. Format is compatible with 'getSubscribedEvents()'. + * Ex: ['some.event' => [['firstFunc'], ['secondFunc']] + */ + public static function findListeners($target, $self = NULL): array { + $class = is_object($target) ? get_class($target) : $target; + $key = "$class::" . ($self ?: ''); + if (isset(self::$listenerMaps[$key])) { + return self::$listenerMaps[$key]; + } + + $listenerMap = []; + // FIXME: Inteface misnomer + if (is_subclass_of($class, '\Civi\Test\HookInterface')) { + $listenerMap = static::mergeListenerMap($listenerMap, static::findFunctionListeners($class, $self)); + } + if (is_subclass_of($class, '\Symfony\Component\EventDispatcher\EventSubscriberInterface')) { + $listenerMap = static::mergeListenerMap($listenerMap, static::normalizeListenerMap($class::getSubscribedEvents())); + } + + if (CIVICRM_UF === 'UnitTests') { + self::$listenerMaps[$key] = $listenerMap; + } + return $listenerMap; + } + + /** + * @param string $class + * @param string|null $self + * If the target $class is focused on a specific entity/form/etc, use the `$self` parameter to specify it. + * This will activate support for `self_{$event}` methods. + * Ex: if '$self' is 'Contact', then 'function self_hook_civicrm_pre()' maps to 'hook_civicrm_pre::Contact'. + * @return array + */ + protected static function findFunctionListeners(string $class, $self = NULL): array { + $listenerMap = []; + + /** + * @param string $underscore + * Ex: 'civi_foo_bar', 'hook_civicrm_foo' + * @return string + * Ex: 'civi.foo.bar', 'hook_civicrm_foo' + */ + $toEventName = function ($underscore) { + if (substr($underscore, 0, 5) === 'hook_') { + return $underscore; + } + else { + return str_replace('_', '.', $underscore); + } + }; + + $addListener = function ($event, $func, $priority = 0) use (&$listenerMap) { + $listenerMap[$event][] = [$func, $priority]; + }; + + foreach (get_class_methods($class) as $func) { + if (preg_match('/^(hook_|on_|self_)/', $func, $m)) { + switch ($m[1]) { + case 'hook_': + $addListener('&' . $func, $func); + break; + + case 'on_': + $addListener($toEventName(substr($func, 3)), $func); + break; + + case 'self_': + if ($self === NULL) { + throw new \RuntimeException("Cannot add self_*() listeners for $class"); + } + $addListener($toEventName(substr($func, 5)) . '::' . $self, $func); + break; + } + } + } + + return $listenerMap; + } + + /** + * Convert the listeners to a standard flavor. + * + * @param iterable $listenerMap + * List of events/listeners. Listeners may be given in singular or plural form. + * Ex: ['some.event' => 'oneListener'] + * Ex: ['some.event' => ['oneListener', 100]] + * Ex: ['some.event' => [['firstListener', 100], ['secondListener']]] + * @return array + * List of events/listeners. All listeners are described in plural form. + * Ex: ['some.event' => [['firstListener', 100], ['secondListener']]] + */ + protected static function normalizeListenerMap(iterable $listenerMap): array { + $r = []; + foreach ($listenerMap as $eventName => $params) { + $r[$eventName] = []; + if (\is_string($params)) { + $r[$eventName][] = [$params]; + } + elseif (\is_string($params[0])) { + $r[$eventName][] = $params; + } + else { + $r[$eventName] = array_merge($r[$eventName], $params); + } + } + return $r; + } + + protected static function mergeListenerMap(array $left, array $right): array { + if ($left === []) { + return $right; + } + foreach ($right as $eventName => $listeners) { + $left[$eventName] = array_merge($left[$eventName] ?? [], $listeners); + } + return $left; + } + +} diff --git a/civicrm/Civi/Core/Event/HookStyleListener.php b/civicrm/Civi/Core/Event/HookStyleListener.php new file mode 100644 index 0000000000..28a3ee85a8 --- /dev/null +++ b/civicrm/Civi/Core/Event/HookStyleListener.php @@ -0,0 +1,42 @@ +<?php + +namespace Civi\Core\Event; + +/** + * This is an adapter which allows you to attach hook-style functions directly to the dispatcher. + * Example: + * + * ```php + * function listen_to_hook_foo($arg1, &$arg2, $arg3) { ... } + * Civi::dispatcher()->addListener('hook_civicrm_foo', new HookStyleListener('listen_to_hook_foo')); + * ``` + * + * @package Civi\Core\Event + */ +class HookStyleListener { + + /** + * @var array + * Ex: ['SomeClass', 'someMethod'] + */ + private $callback = NULL; + + /** + * @param array $callback + * Ex: ['SomeClass', 'someMethod'] + */ + public function __construct($callback) { + $this->callback = $callback; + } + + public function __invoke(GenericHookEvent $e) { + $result = call_user_func_array($this->callback, $e->getHookValues()); + $e->addReturnValues($result); + } + + public function __toString(): string { + $name = EventPrinter::formatName($this->callback); + return preg_replace('/\(\$?e?\)$/', '(&...)', $name); + } + +} diff --git a/civicrm/Civi/Core/Event/PostEvent.php b/civicrm/Civi/Core/Event/PostEvent.php index 100be7b754..f3885af444 100644 --- a/civicrm/Civi/Core/Event/PostEvent.php +++ b/civicrm/Civi/Core/Event/PostEvent.php @@ -17,17 +17,6 @@ namespace Civi\Core\Event; */ class PostEvent extends GenericHookEvent { - /** - * This adapter automatically emits a narrower event. - * - * For example, `hook_civicrm_pre(Contact, ...)` will also dispatch `hook_civicrm_pre::Contact`. - * - * @param \Civi\Core\Event\PostEvent $event - */ - public static function dispatchSubevent(PostEvent $event) { - \Civi::dispatcher()->dispatch("hook_civicrm_post::" . $event->entity, $event); - } - /** * One of: 'create'|'edit'|'delete' * diff --git a/civicrm/Civi/Core/Event/PreEvent.php b/civicrm/Civi/Core/Event/PreEvent.php index dc08f1d0c9..db25c344e0 100644 --- a/civicrm/Civi/Core/Event/PreEvent.php +++ b/civicrm/Civi/Core/Event/PreEvent.php @@ -17,17 +17,6 @@ namespace Civi\Core\Event; */ class PreEvent extends GenericHookEvent { - /** - * This adapter automatically emits a narrower event. - * - * For example, `hook_civicrm_pre(Contact, ...)` will also dispatch `hook_civicrm_pre::Contact`. - * - * @param \Civi\Core\Event\PreEvent $event - */ - public static function dispatchSubevent(PreEvent $event) { - \Civi::dispatcher()->dispatch("hook_civicrm_pre::" . $event->entity, $event); - } - /** * One of: 'create'|'edit'|'delete' * diff --git a/civicrm/Civi/Core/Event/ServiceListener.php b/civicrm/Civi/Core/Event/ServiceListener.php index ae5b70c8f6..63df85bc71 100644 --- a/civicrm/Civi/Core/Event/ServiceListener.php +++ b/civicrm/Civi/Core/Event/ServiceListener.php @@ -64,10 +64,10 @@ class ServiceListener { } } if ($class) { - return sprintf('$(%s)->%s() [%s]', $this->inertCb[0], $this->inertCb[1], $class); + return sprintf('$(%s)->%s($e) [%s]', $this->inertCb[0], $this->inertCb[1], $class); } else { - return sprintf('\$(%s)->%s()', $this->inertCb[0], $this->inertCb[1]); + return sprintf('\$(%s)->%s($e)', $this->inertCb[0], $this->inertCb[1]); } } diff --git a/civicrm/Civi/Core/SqlTriggers.php b/civicrm/Civi/Core/SqlTriggers.php index 609916eab4..de0b5a9de9 100644 --- a/civicrm/Civi/Core/SqlTriggers.php +++ b/civicrm/Civi/Core/SqlTriggers.php @@ -60,7 +60,7 @@ class SqlTriggers { * @param string $onlyTableName * the specific table requiring a rebuild; or NULL to rebuild all tables. */ - public function createTriggers(&$info, $onlyTableName = NULL) { + public function createTriggers($info, $onlyTableName = NULL) { // Validate info array, should probably raise errors? if (is_array($info) == FALSE) { return; @@ -138,6 +138,10 @@ class SqlTriggers { } } + // Sort tables alphabetically in order to output in a consistent order + // for sites that like to diff this output over time + // (ie. with the logging_no_trigger_permission setting in place). + asort($triggers); // now spit out the sql foreach ($triggers as $tableName => $tables) { if ($onlyTableName != NULL && $onlyTableName != $tableName) { diff --git a/civicrm/Civi/Payment/PropertyBag.php b/civicrm/Civi/Payment/PropertyBag.php index 7a1119aea3..25e4a1d369 100644 --- a/civicrm/Civi/Payment/PropertyBag.php +++ b/civicrm/Civi/Payment/PropertyBag.php @@ -153,11 +153,13 @@ class PropertyBag implements \ArrayAccess { } catch (InvalidArgumentException $e) { - CRM_Core_Error::deprecatedFunctionWarning( - "proper getCustomProperty('$offset') for non-core properties. " - . $e->getMessage(), - "PropertyBag array access to get '$offset'" - ); + if (!$this->getSuppressLegacyWarnings()) { + CRM_Core_Error::deprecatedFunctionWarning( + "proper getCustomProperty('$offset') for non-core properties. " + . $e->getMessage(), + "PropertyBag array access to get '$offset'" + ); + } try { return $this->getCustomProperty($offset, 'default'); @@ -172,10 +174,12 @@ class PropertyBag implements \ArrayAccess { } } - CRM_Core_Error::deprecatedFunctionWarning( - "get" . ucfirst($offset) . "()", - "PropertyBag array access for core property '$offset'" - ); + if (!$this->getSuppressLegacyWarnings()) { + CRM_Core_Error::deprecatedFunctionWarning( + "get" . ucfirst($offset) . "()", + "PropertyBag array access for core property '$offset'" + ); + } return $this->get($prop, 'default'); } @@ -265,7 +269,7 @@ class PropertyBag implements \ArrayAccess { throw new \InvalidArgumentException("Unknown property '$prop'."); } // Remaining case is legacy name that's been translated. - if (!$this->suppressLegacyWarnings) { + if (!$this->getSuppressLegacyWarnings()) { CRM_Core_Error::deprecatedFunctionWarning("Canonical property name '$newName'", "Legacy property name '$prop'"); } @@ -296,7 +300,7 @@ class PropertyBag implements \ArrayAccess { * * @return PropertyBag $this object so you can chain set setters. */ - protected function set($prop, $label = 'default', $value) { + protected function set($prop, $label, $value) { $this->props[$label][$prop] = $value; return $this; } @@ -341,13 +345,14 @@ class PropertyBag implements \ArrayAccess { // Suppress legacy warnings for merging an array of data as this // suits our migration plan at this moment. Future behaviour may differ. // @see https://github.com/civicrm/civicrm-core/pull/17643 - $this->suppressLegacyWarnings = TRUE; + $suppressLegacyWarnings = $this->getSuppressLegacyWarnings(); + $this->setSuppressLegacyWarnings(TRUE); foreach ($data as $key => $value) { if ($value !== NULL && $value !== '') { $this->offsetSet($key, $value); } } - $this->suppressLegacyWarnings = FALSE; + $this->setSuppressLegacyWarnings($suppressLegacyWarnings); } /** diff --git a/civicrm/Civi/Test/ACLPermissionTrait.php b/civicrm/Civi/Test/ACLPermissionTrait.php new file mode 100644 index 0000000000..91b6681cf6 --- /dev/null +++ b/civicrm/Civi/Test/ACLPermissionTrait.php @@ -0,0 +1,199 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +/** + * Trait Civi\Test\ACLPermissionTrait. + * + * Trait for working with ACLs in tests + */ +trait ACLPermissionTrait { + + /** + * ContactID of allowed Contact + * @var int + */ + protected $allowedContactId = 0; + + /** + * Array of allowed contactIds + * @var array + */ + protected $allowedContacts = []; + + /** + * Ids created for the scenario in use. + * + * @var array + */ + protected $scenarioIDs = []; + + /** + * All results returned. + * + * @implements CRM_Utils_Hook::aclWhereClause + * + * @param string $type + * @param array $tables + * @param array $whereTables + * @param int $contactID + * @param string $where + */ + public function aclWhereHookAllResults($type, &$tables, &$whereTables, &$contactID, &$where) { + $where = " (1) "; + } + + /** + * No results returned. + * + * @implements CRM_Utils_Hook::aclWhereClause + * + * @param string $type + * @param array $tables + * @param array $whereTables + * @param int $contactID + * @param string $where + */ + public function aclWhereHookNoResults($type, &$tables, &$whereTables, &$contactID, &$where) { + } + + /** + * All but first results returned. + * + * @implements CRM_Utils_Hook::aclWhereClause + * + * @param string $type + * @param array $tables + * @param array $whereTables + * @param int $contactID + * @param string $where + */ + public function aclWhereOnlySecond($type, &$tables, &$whereTables, &$contactID, &$where) { + $where = " contact_a.id > 1"; + } + + /** + * Only specified contact returned. + * + * @implements CRM_Utils_Hook::aclWhereClause + * + * @param string $type + * @param array $tables + * @param array $whereTables + * @param int $contactID + * @param string $where + */ + public function aclWhereOnlyOne($type, &$tables, &$whereTables, &$contactID, &$where) { + $where = " contact_a.id = " . $this->allowedContactId; + } + + /** + * Results after the allowedContact are returned. + * + * @implements CRM_Utils_Hook::aclWhereClause + * + * @param string $type + * @param array $tables + * @param array $whereTables + * @param int $contactID + * @param string $where + */ + public function aclWhereGreaterThan($type, &$tables, &$whereTables, &$contactID, &$where) { + $where = " contact_a.id > " . $this->allowedContactId; + } + + /** + * Set up a core ACL. + * + * It is recommended that this helper function is accessed through a scenario function. + * + * @param array $permissionedEntities Array of groups for whom ACLs enable access. + * @param string|int $groupAllowedAccess Group permitted to access the permissioned Group + * An ID of 0 means that 'Everyone' can access the group. + * @param string $operation View|Edit|Create|Delete|Search|All + * @param string $entity Group|CustomGroup|Profile|Event + * + * @throws CRM_Core_Exception + */ + public function setupCoreACLPermittedAcl($permissionedEntities = [], $groupAllowedAccess = 'Everyone', $operation = 'View', $entity = 'Group') { + $tableMap = ['Group' => 'civicrm_saved_search', 'CustomGroup' => 'civicrm_custom_group', 'Profile' => 'civicrm_uf_match', 'Event' => 'civicrm_event']; + $entityTable = $tableMap[$entity]; + + $permittedRoleID = ($groupAllowedAccess === 'Everyone') ? 0 : $groupAllowedAccess; + if ($permittedRoleID !== 0) { + throw new \CRM_Core_Exception('only handling everyone group as yet'); + } + + foreach ($permissionedEntities as $permissionedEntityID) { + $this->callAPISuccess('Acl', 'create', [ + 'name' => uniqid(), + 'operation' => $operation, + 'entity_id' => $permittedRoleID, + 'object_id' => $permissionedEntityID, + 'object_table' => $entityTable, + ]); + } + } + + /** + * Set up a scenario where everyone can access the permissioned group. + * + * A scenario in this class involves multiple defined assets. In this case we create + * - a group to which the everyone has permission + * - a contact in the group + * - a contact not in the group + * + * These are arrayed as follows + * $this->scenarioIDs['Contact'] = ['permitted_contact' => x, 'non_permitted_contact' => y] + * $this->scenarioIDs['Group'] = ['permitted_group' => x] + */ + public function setupScenarioCoreACLEveryonePermittedToGroup() { + $this->quickCleanup(['civicrm_acl_cache', 'civicrm_acl_contact_cache']); + $this->scenarioIDs['Group']['permitted_group'] = $this->groupCreate(); + $this->scenarioIDs['Contact']['permitted_contact'] = $this->individualCreate(); + $result = $this->callAPISuccess('GroupContact', 'create', ['group_id' => $this->scenarioIDs['Group']['permitted_group'], 'contact_id' => $this->scenarioIDs['Contact']['permitted_contact'], 'status' => 'Added']); + $this->scenarioIDs['Contact']['non_permitted_contact'] = $this->individualCreate(); + \CRM_Core_Config::singleton()->userPermissionClass->permissions = []; + $this->setupCoreACLPermittedAcl([$this->scenarioIDs['Group']['permitted_group']]); + } + + /** + * Set up a scenario where everyone can access the permissioned group. + * + * A scenario in this class involves multiple defined assets. In this case we create + * - a group to which the everyone has permission + * - a contact in the group + * - a contact not in the group + * + * These are arrayed as follows + * $this->scenarioIDs['Contact'] = ['permitted_contact' => x, 'non_permitted_contact' => y] + * $this->scenarioIDs['Group'] = ['permitted_group' => x] + */ + public function setupScenarioCoreACLEveryonePermittedToEvent() { + $this->quickCleanup(['civicrm_acl_cache', 'civicrm_acl_contact_cache']); + $this->scenarioIDs['Event']['permitted_event'] = $this->eventCreate()['id']; + $this->scenarioIDs['Contact']['permitted_contact'] = $this->individualCreate(); + \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['view event info']; + $this->setupCoreACLPermittedAcl([$this->scenarioIDs['Event']['permitted_event']], 'Everyone', 'View', 'Event'); + } + + /** + * Clean up places where permissions get cached. + */ + protected function cleanupCachedPermissions() { + if (isset(\Civi::$statics['CRM_Contact_BAO_Contact_Permission'])) { + unset(\Civi::$statics['CRM_Contact_BAO_Contact_Permission']); + } + \CRM_Core_DAO::executeQuery('TRUNCATE civicrm_acl_contact_cache'); + } + +} diff --git a/civicrm/Civi/Test/Api3TestTrait.php b/civicrm/Civi/Test/Api3TestTrait.php index a9b985178b..58e5563a03 100644 --- a/civicrm/Civi/Test/Api3TestTrait.php +++ b/civicrm/Civi/Test/Api3TestTrait.php @@ -81,7 +81,7 @@ trait Api3TestTrait { $prefix .= ': '; } if ($expectedError && !empty($apiResult['is_error'])) { - $this->assertContains($expectedError, $apiResult['error_message'], 'api error message not as expected' . $prefix); + $this->assertStringContainsString($expectedError, $apiResult['error_message'], 'api error message not as expected' . $prefix); } $this->assertEquals(1, $apiResult['is_error'], "api call should have failed but it succeeded " . $prefix . (print_r($apiResult, TRUE))); $this->assertNotEmpty($apiResult['error_message']); @@ -228,6 +228,9 @@ trait Api3TestTrait { $params += [ 'version' => $this->_apiversion, ]; + if (!empty($this->isGetSafe) && !isset($params['return'])) { + $params['return'] = 'id'; + } $result = $this->civicrm_api($entity, 'getsingle', $params); if (!is_array($result) || !empty($result['is_error']) || isset($result['values'])) { $unfilteredResult = $this->civicrm_api($entity, 'get', ['version' => $this->_apiversion]); diff --git a/civicrm/Civi/Test/CiviTestListener.php b/civicrm/Civi/Test/CiviTestListener.php index af5c2cc268..8f4c21d7a4 100644 --- a/civicrm/Civi/Test/CiviTestListener.php +++ b/civicrm/Civi/Test/CiviTestListener.php @@ -51,18 +51,13 @@ else { public function startTest(\PHPUnit\Framework\Test $test) { if ($this->isCiviTest($test)) { error_reporting(E_ALL); + $GLOBALS['CIVICRM_TEST_CASE'] = $test; } if ($test instanceof HeadlessInterface) { $this->bootHeadless($test); } - if ($test instanceof HookInterface) { - // Note: bootHeadless() indirectly resets any hooks, which means that hook_civicrm_config - // is unsubscribable. However, after bootHeadless(), we're free to subscribe to hooks again. - $this->registerHooks($test); - } - if ($test instanceof TransactionalInterface) { $this->tx = new \CRM_Core_Transaction(TRUE); $this->tx->rollback(); @@ -82,6 +77,7 @@ else { } \CRM_Utils_Time::resetTime(); if ($this->isCiviTest($test)) { + unset($GLOBALS['CIVICRM_TEST_CASE']); error_reporting(E_ALL & ~E_NOTICE); $this->errorScope = NULL; } @@ -112,25 +108,6 @@ else { } } - /** - * @param \Civi\Test\HookInterface $test - * @return array - * Array(string $hookName => string $methodName)). - */ - protected function findTestHooks(HookInterface $test) { - $class = get_class($test); - if (!isset($this->cache[$class])) { - $funcs = []; - foreach (get_class_methods($class) as $func) { - if (preg_match('/^hook_/', $func)) { - $funcs[substr($func, 5)] = $func; - } - } - $this->cache[$class] = $funcs; - } - return $this->cache[$class]; - } - /** * @param \PHPUnit\Framework\Test $test * @return bool @@ -139,25 +116,6 @@ else { return $test instanceof HookInterface || $test instanceof HeadlessInterface; } - /** - * Find any hook functions in $test and register them. - * - * @param \Civi\Test\HookInterface $test - */ - protected function registerHooks(HookInterface $test) { - if (CIVICRM_UF !== 'UnitTests') { - // This is not ideal -- it's just a side-effect of how hooks and E2E tests work. - // We can temporarily subscribe to hooks in-process, but for other processes, it gets messy. - throw new \RuntimeException('CiviHookTestInterface requires CIVICRM_UF=UnitTests'); - } - \CRM_Utils_Hook::singleton()->reset(); - /** @var \CRM_Utils_Hook_UnitTests $hooks */ - $hooks = \CRM_Utils_Hook::singleton(); - foreach ($this->findTestHooks($test) as $hook => $func) { - $hooks->setHook($hook, [$test, $func]); - } - } - /** * The first time we come across HeadlessInterface or EndToEndInterface, we'll * try to autoboot. diff --git a/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php b/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php index 1efbacce13..42161cb12b 100644 --- a/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php +++ b/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php @@ -43,18 +43,13 @@ class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { public function startTest(\PHPUnit\Framework\Test $test): void { if ($this->isCiviTest($test)) { error_reporting(E_ALL); + $GLOBALS['CIVICRM_TEST_CASE'] = $test; } if ($test instanceof HeadlessInterface) { $this->bootHeadless($test); } - if ($test instanceof HookInterface) { - // Note: bootHeadless() indirectly resets any hooks, which means that hook_civicrm_config - // is unsubscribable. However, after bootHeadless(), we're free to subscribe to hooks again. - $this->registerHooks($test); - } - if ($test instanceof TransactionalInterface) { $this->tx = new \CRM_Core_Transaction(TRUE); $this->tx->rollback(); @@ -74,6 +69,7 @@ class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { } \CRM_Utils_Time::resetTime(); if ($this->isCiviTest($test)) { + unset($GLOBALS['CIVICRM_TEST_CASE']); error_reporting(E_ALL & ~E_NOTICE); $this->errorScope = NULL; } @@ -103,25 +99,6 @@ class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { } } - /** - * @param \Civi\Test\HookInterface $test - * @return array - * Array(string $hookName => string $methodName)). - */ - protected function findTestHooks(HookInterface $test) { - $class = get_class($test); - if (!isset($this->cache[$class])) { - $funcs = []; - foreach (get_class_methods($class) as $func) { - if (preg_match('/^hook_/', $func)) { - $funcs[substr($func, 5)] = $func; - } - } - $this->cache[$class] = $funcs; - } - return $this->cache[$class]; - } - /** * @param \PHPUnit\Framework\Test $test * @return bool @@ -130,25 +107,6 @@ class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { return $test instanceof HookInterface || $test instanceof HeadlessInterface; } - /** - * Find any hook functions in $test and register them. - * - * @param \Civi\Test\HookInterface $test - */ - protected function registerHooks(HookInterface $test) { - if (CIVICRM_UF !== 'UnitTests') { - // This is not ideal -- it's just a side-effect of how hooks and E2E tests work. - // We can temporarily subscribe to hooks in-process, but for other processes, it gets messy. - throw new \RuntimeException('CiviHookTestInterface requires CIVICRM_UF=UnitTests'); - } - \CRM_Utils_Hook::singleton()->reset(); - /** @var \CRM_Utils_Hook_UnitTests $hooks */ - $hooks = \CRM_Utils_Hook::singleton(); - foreach ($this->findTestHooks($test) as $hook => $func) { - $hooks->setHook($hook, [$test, $func]); - } - } - /** * The first time we come across HeadlessInterface or EndToEndInterface, we'll * try to autoboot. diff --git a/civicrm/Civi/Test/ContactTestTrait.php b/civicrm/Civi/Test/ContactTestTrait.php index 4985acc70a..d48eba1add 100644 --- a/civicrm/Civi/Test/ContactTestTrait.php +++ b/civicrm/Civi/Test/ContactTestTrait.php @@ -18,12 +18,14 @@ trait ContactTestTrait { /** * Emulate a logged in user since certain functions use that. * value to store a record in the DB (like activity) + * * @see https://issues.civicrm.org/jira/browse/CRM-8180 * * @return int * Contact ID of the created user. + * @throws \CiviCRM_API3_Exception */ - public function createLoggedInUser() { + public function createLoggedInUser(): int { $params = [ 'first_name' => 'Logged In', 'last_name' => 'User ' . rand(), diff --git a/civicrm/Civi/Test/HookInterface.php b/civicrm/Civi/Test/HookInterface.php index 4885cd0677..12b0cb7588 100644 --- a/civicrm/Civi/Test/HookInterface.php +++ b/civicrm/Civi/Test/HookInterface.php @@ -17,12 +17,29 @@ namespace Civi\Test; * } * ``` * + * Similarly, to subscribe using Symfony-style listeners, create function with the 'on_' prefix: + * + * ``` + * class MyTest extends \PHPUnit_Framework_TestCase implements \Civi\Test\HookInterface { + * public function on_civi_api_authorize(AuthorizeEvent $e): void { + * echo "Running civi.api.authorize\n"; + * } + * public function on_hook_civicrm_post(GenericHookEvent $e): void { + * echo "Running hook_civicrm_post\n"; + * } + * } + * ``` + * * At time of writing, there are a few limitations in how HookInterface is handled * by CiviTestListener: * * - The test must execute in-process (aka HeadlessInterface; aka CIVICRM_UF==UnitTests). * End-to-end tests (multi-process tests) are not supported. * - Early bootstrap hooks (e.g. hook_civicrm_config) are not supported. + * - This does not support priorities or registering multiple listeners. + * + * If you need more advanced registration abilities, consider using `Civi::dispatcher()` + * or `EventDispatcherInterface`. * * @see CiviTestListener */ diff --git a/civicrm/Civi/Test/Legacy/CiviTestListener.php b/civicrm/Civi/Test/Legacy/CiviTestListener.php index d7e3a1ad9d..4a71a74504 100644 --- a/civicrm/Civi/Test/Legacy/CiviTestListener.php +++ b/civicrm/Civi/Test/Legacy/CiviTestListener.php @@ -41,17 +41,13 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { public function startTest(\PHPUnit_Framework_Test $test) { if ($this->isCiviTest($test)) { error_reporting(E_ALL); + $GLOBALS['CIVICRM_TEST_CASE'] = $test; } if ($test instanceof \Civi\Test\HeadlessInterface) { $this->bootHeadless($test); } - if ($test instanceof \Civi\Test\HookInterface) { - // Note: bootHeadless() indirectly resets any hooks, which means that hook_civicrm_config - // is unsubscribable. However, after bootHeadless(), we're free to subscribe to hooks again. - $this->registerHooks($test); - } if ($test instanceof \Civi\Test\TransactionalInterface) { $this->tx = new \CRM_Core_Transaction(TRUE); $this->tx->rollback(); @@ -71,6 +67,7 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { } \CRM_Utils_Time::resetTime(); if ($this->isCiviTest($test)) { + unset($GLOBALS['CIVICRM_TEST_CASE']); error_reporting(E_ALL & ~E_NOTICE); $this->errorScope = NULL; } @@ -101,25 +98,6 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { } } - /** - * @param \Civi\Test\HookInterface $test - * @return array - * Array(string $hookName => string $methodName)). - */ - protected function findTestHooks(\Civi\Test\HookInterface $test) { - $class = get_class($test); - if (!isset($this->cache[$class])) { - $funcs = []; - foreach (get_class_methods($class) as $func) { - if (preg_match('/^hook_/', $func)) { - $funcs[substr($func, 5)] = $func; - } - } - $this->cache[$class] = $funcs; - } - return $this->cache[$class]; - } - /** * @param \PHPUnit_Framework_Test $test * @return bool @@ -128,25 +106,6 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { return $test instanceof \Civi\Test\HookInterface || $test instanceof \Civi\Test\HeadlessInterface; } - /** - * Find any hook functions in $test and register them. - * - * @param \Civi\Test\HookInterface $test - */ - protected function registerHooks(\Civi\Test\HookInterface $test) { - if (CIVICRM_UF !== 'UnitTests') { - // This is not ideal -- it's just a side-effect of how hooks and E2E tests work. - // We can temporarily subscribe to hooks in-process, but for other processes, it gets messy. - throw new \RuntimeException('CiviHookTestInterface requires CIVICRM_UF=UnitTests'); - } - \CRM_Utils_Hook::singleton()->reset(); - /** @var \CRM_Utils_Hook_UnitTests $hooks */ - $hooks = \CRM_Utils_Hook::singleton(); - foreach ($this->findTestHooks($test) as $hook => $func) { - $hooks->setHook($hook, [$test, $func]); - } - } - /** * The first time we come across HeadlessInterface or EndToEndInterface, we'll * try to autoboot. diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index 72cc5c6fa5..5cc419a646 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -284,7 +284,7 @@ specialParams.push('limit', 'offset'); } return _.transform($scope.availableParams, function(genericParams, param, name) { - if (!_.contains(specialParams, name) && + if (!_.contains(specialParams, name) && !param.deprecated && !(typeof paramType !== 'undefined' && !_.contains(paramType, param.type[0])) && !(typeof defaultNull !== 'undefined' && ((param.default === null) !== defaultNull)) ) { diff --git a/civicrm/api/v3/AclRole.php b/civicrm/api/v3/AclRole.php index aa7254f70c..450806c4d9 100644 --- a/civicrm/api/v3/AclRole.php +++ b/civicrm/api/v3/AclRole.php @@ -24,7 +24,7 @@ * API result array */ function civicrm_api3_acl_role_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'EntityRole'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ACLEntityRole'); } /** diff --git a/civicrm/api/v3/Batch.php b/civicrm/api/v3/Batch.php index 8eedd82429..0b68afe415 100644 --- a/civicrm/api/v3/Batch.php +++ b/civicrm/api/v3/Batch.php @@ -37,11 +37,6 @@ function civicrm_api3_batch_create($params) { * Array of parameters determined by getfields. */ function _civicrm_api3_batch_create_spec(&$params) { - //@todo - the entity table field looks like it is not actually required & should probably be removed (or a description added if - // it is actually required) - $params['entity_table']['api.default'] = "civicrm_batch"; - $params['entity_table']['type'] = CRM_Utils_Type::T_STRING; - $params['entity_table']['title'] = 'Batch Entity Table - remove?'; $params['created_id']['api.default'] = 'user_contact_id'; $params['created_date']['api.default'] = 'now'; $params['modified_id']['api.default'] = 'user_contact_id'; diff --git a/civicrm/api/v3/Contribution.php b/civicrm/api/v3/Contribution.php index 277c368d4b..459b684982 100644 --- a/civicrm/api/v3/Contribution.php +++ b/civicrm/api/v3/Contribution.php @@ -51,7 +51,7 @@ function civicrm_api3_contribution_create($params) { $op = CRM_Core_Action::UPDATE; } CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types, $op); - if (!in_array($params['financial_type_id'], array_keys($types))) { + if (!array_key_exists($params['financial_type_id'], $types)) { throw new API_Exception('You do not have permission to create this contribution'); } } @@ -204,23 +204,13 @@ function _civicrm_api3_contribution_create_legacy_support_45(&$params) { function civicrm_api3_contribution_delete($params) { $contributionID = !empty($params['contribution_id']) ? $params['contribution_id'] : $params['id']; - // First check contribution financial type - $financialType = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $contributionID, 'financial_type_id'); - // Now check permissioned lineitems & permissioned contribution - if (!empty($params['check_permissions']) && CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && - ( - !CRM_Core_Permission::check('delete contributions of type ' . CRM_Contribute_PseudoConstant::financialType($financialType)) - || !CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($contributionID, 'delete', FALSE) - ) - ) { + if (!empty($params['check_permissions']) && !\Civi\Api4\Utils\CoreUtil::checkAccessDelegated('Contribution', 'delete', ['id' => $contributionID], CRM_Core_Session::getLoggedInContactID() ?: 0)) { throw new API_Exception('You do not have permission to delete this contribution'); } if (CRM_Contribute_BAO_Contribution::deleteContribution($contributionID)) { return civicrm_api3_create_success([$contributionID => 1]); } - else { - throw new API_Exception('Could not delete contribution'); - } + throw new API_Exception('Could not delete contribution'); } /** @@ -671,7 +661,7 @@ function _ipn_process_transaction($params, $contribution, $input, $ids) { static $domainFromName; static $domainFromEmail; if (empty($domainFromEmail) && (empty($params['receipt_from_name']) || empty($params['receipt_from_email']))) { - list($domainFromName, $domainFromEmail) = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); + [$domainFromName, $domainFromEmail] = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); } $input['receipt_from_name'] = CRM_Utils_Array::value('receipt_from_name', $params, $domainFromName); $input['receipt_from_email'] = CRM_Utils_Array::value('receipt_from_email', $params, $domainFromEmail); @@ -681,11 +671,9 @@ function _ipn_process_transaction($params, $contribution, $input, $ids) { if (!empty($params['payment_instrument_id'])) { $input['payment_instrument_id'] = $params['payment_instrument_id']; } - return CRM_Contribute_BAO_Contribution::completeOrder($input, [ - 'related_contact' => $ids['related_contact'] ?? NULL, - 'participant' => !empty($objects['participant']) ? $objects['participant']->id : NULL, - 'contributionRecur' => !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, - ], $objects['contribution']->id ?? NULL, + return CRM_Contribute_BAO_Contribution::completeOrder($input, + !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, + $objects['contribution']->id ?? NULL, $params['is_post_payment_create'] ?? NULL); } diff --git a/civicrm/api/v3/Contribution/Transact.php b/civicrm/api/v3/Contribution/Transact.php index 5250aada2b..5133362b9c 100644 --- a/civicrm/api/v3/Contribution/Transact.php +++ b/civicrm/api/v3/Contribution/Transact.php @@ -58,7 +58,7 @@ function civicrm_api3_contribution_transact($params) { $params['invoice_id'] = CRM_Utils_Array::value('invoice_id', $params, md5(uniqid(rand(), TRUE))); $paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getPayment($params['payment_processor'], $params['payment_processor_mode']); - $paymentProcessor['object']->doPayment($params); + $params = $paymentProcessor['object']->doPayment($params); $params['payment_instrument_id'] = $paymentProcessor['object']->getPaymentInstrumentID(); diff --git a/civicrm/api/v3/Exception.php b/civicrm/api/v3/Exception.php index 726c8e1262..e85643b422 100644 --- a/civicrm/api/v3/Exception.php +++ b/civicrm/api/v3/Exception.php @@ -31,7 +31,7 @@ function civicrm_api3_exception_get($params) { * @return array api result array */ function civicrm_api3_exception_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Exception'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'DedupeException'); } /** diff --git a/civicrm/api/v3/Generic.php b/civicrm/api/v3/Generic.php index 586d34f5b9..9a55547607 100644 --- a/civicrm/api/v3/Generic.php +++ b/civicrm/api/v3/Generic.php @@ -511,7 +511,12 @@ function _civicrm_api3_generic_get_metadata_options(&$metadata, $apiRequest, $fi return; } - $fieldsToResolve = $apiRequest['params']['options']['get_options']; + if (!is_array($apiRequest['params']['options'])) { + $fieldsToResolve = []; + } + else { + $fieldsToResolve = $apiRequest['params']['options']['get_options']; + } if (!empty($metadata[$fieldname]['options']) || (!in_array($fieldname, $fieldsToResolve) && !in_array('all', $fieldsToResolve))) { return; diff --git a/civicrm/api/v3/Order.php b/civicrm/api/v3/Order.php index 8e9c5b89dc..870b07fbd4 100644 --- a/civicrm/api/v3/Order.php +++ b/civicrm/api/v3/Order.php @@ -24,8 +24,9 @@ * * @return array * Array of Order, if error an array with an error id and error message + * @throws \CiviCRM_API3_Exception */ -function civicrm_api3_order_get($params) { +function civicrm_api3_order_get(array $params): array { $contributions = []; $params['api.line_item.get'] = ['qty' => ['<>' => 0]]; $isSequential = FALSE; @@ -53,7 +54,7 @@ function civicrm_api3_order_get($params) { * @param array $params * Array of parameters determined by getfields. */ -function _civicrm_api3_order_get_spec(&$params) { +function _civicrm_api3_order_get_spec(array &$params) { $params['id']['api.aliases'] = ['order_id']; $params['id']['title'] = ts('Contribution / Order ID'); } @@ -70,23 +71,25 @@ function _civicrm_api3_order_get_spec(&$params) { * @throws \CiviCRM_API3_Exception * @throws API_Exception */ -function civicrm_api3_order_create($params) { +function civicrm_api3_order_create(array $params): array { civicrm_api3_verify_one_mandatory($params, NULL, ['line_items', 'total_amount']); $entity = NULL; $entityIds = []; - $params['contribution_status_id'] = $params['contribution_status_id'] ?? 'Pending'; - if ($params['contribution_status_id'] !== 'Pending' && 'Pending' !== CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['contribution_status_id'])) { - CRM_Core_Error::deprecatedFunctionWarning("Creating a Order with a status other than pending is deprecated. Please do not set contribution_status_id, it will default to Pending. You can chain payment creation e.g civicrm_api3('Order', 'create', ['blah' => 'blah', 'contribution_status_id' => 'Pending', 'api.Payment.create => ['total_amount' => 5]]"); - } + $params['contribution_status_id'] = 'Pending'; + $priceSetID = NULL; if (!empty($params['line_items']) && is_array($params['line_items'])) { - $priceSetID = NULL; CRM_Contribute_BAO_Contribution::checkLineItems($params); foreach ($params['line_items'] as $lineItems) { $entityParams = $lineItems['params'] ?? []; if (!empty($entityParams) && !empty($lineItems['line_item'])) { $item = reset($lineItems['line_item']); - $entity = str_replace('civicrm_', '', $item['entity_table']); + if (!empty($item['membership_type_id'])) { + $entity = 'membership'; + } + else { + $entity = str_replace('civicrm_', '', $item['entity_table']); + } } if ($entityParams) { @@ -146,6 +149,8 @@ function civicrm_api3_order_create($params) { } $contribution = civicrm_api3('Contribution', 'create', $contributionParams); + $contribution['values'][$contribution['id']]['line_item'] = $params['line_item'][$priceSetID] ?? []; + // add payments if ($entity && !empty($contribution['id'])) { foreach ($entityIds as $entityId) { @@ -154,10 +159,10 @@ function civicrm_api3_order_create($params) { $entity . '_id' => $entityId, ]; // if entity is pledge then build pledge param - if ($entity == 'pledge') { + if ($entity === 'pledge') { $paymentParams += $entityParams; } - elseif ($entity == 'membership') { + elseif ($entity === 'membership') { $paymentParams['isSkipLineItem'] = TRUE; } civicrm_api3($entity . '_payment', 'create', $paymentParams); @@ -171,11 +176,12 @@ function civicrm_api3_order_create($params) { * * @param array $params * Input parameters. + * * @return array * @throws API_Exception * @throws CiviCRM_API3_Exception */ -function civicrm_api3_order_delete($params) { +function civicrm_api3_order_delete(array $params): array { $contribution = civicrm_api3('Contribution', 'get', [ 'return' => ['is_test'], 'id' => $params['id'], @@ -196,8 +202,9 @@ function civicrm_api3_order_delete($params) { * Input parameters. * * @return array + * @throws \CiviCRM_API3_Exception */ -function civicrm_api3_order_cancel($params) { +function civicrm_api3_order_cancel(array $params) { $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); $params['contribution_status_id'] = array_search('Cancelled', $contributionStatuses); $result = civicrm_api3('Contribution', 'create', $params); @@ -212,7 +219,7 @@ function civicrm_api3_order_cancel($params) { * @param array $params * Array of parameters determined by getfields. */ -function _civicrm_api3_order_cancel_spec(&$params) { +function _civicrm_api3_order_cancel_spec(array &$params) { $params['contribution_id'] = [ 'api.required' => 1, 'title' => 'Contribution ID', @@ -228,7 +235,7 @@ function _civicrm_api3_order_cancel_spec(&$params) { * @param array $params * Array of parameters determined by getfields. */ -function _civicrm_api3_order_create_spec(&$params) { +function _civicrm_api3_order_create_spec(array &$params) { $params['contact_id'] = [ 'name' => 'contact_id', 'title' => 'Contact ID', @@ -268,7 +275,7 @@ function _civicrm_api3_order_create_spec(&$params) { * @param array $params * Array of parameters determined by getfields. */ -function _civicrm_api3_order_delete_spec(&$params) { +function _civicrm_api3_order_delete_spec(array &$params) { $params['contribution_id'] = [ 'api.required' => TRUE, 'title' => 'Contribution ID', diff --git a/civicrm/api/v3/Profile.php b/civicrm/api/v3/Profile.php index c14b4b6c84..c7c337d209 100644 --- a/civicrm/api/v3/Profile.php +++ b/civicrm/api/v3/Profile.php @@ -489,7 +489,7 @@ function _civicrm_api3_profile_getbillingpseudoprofile(&$params) { * * @return array|void */ -function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = 1, $is_flush) { +function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour, $is_flush) { static $profileFields = []; if ($is_flush) { $profileFields = []; @@ -533,6 +533,7 @@ function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = $hardCodedEntityFields = [ 'state_province' => 'state_province_id', 'country' => 'country_id', + 'county' => 'county_id', 'participant_status' => 'status_id', 'gender' => 'gender_id', 'financial_type' => 'financial_type_id', @@ -614,7 +615,7 @@ function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = * @return bool */ function _civicrm_api3_order_by_weight($a, $b) { - return ($b['weight'] ?? 0) < ($a['weight'] ?? 0); + return ($b['weight'] ?? 0) < ($a['weight'] ?? 0) ? 1 : -1; } /** diff --git a/civicrm/api/v3/RuleGroup.php b/civicrm/api/v3/RuleGroup.php index 74421b8618..0fcfa1f1ae 100644 --- a/civicrm/api/v3/RuleGroup.php +++ b/civicrm/api/v3/RuleGroup.php @@ -27,7 +27,7 @@ * API result array */ function civicrm_api3_rule_group_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'RuleGroup'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'DedupeRuleGroup'); } /** diff --git a/civicrm/api/v3/examples/Contribution/Create.ex.php b/civicrm/api/v3/examples/Contribution/Create.ex.php index 1d47cb3a30..c8fedf7f64 100644 --- a/civicrm/api/v3/examples/Contribution/Create.ex.php +++ b/civicrm/api/v3/examples/Contribution/Create.ex.php @@ -81,7 +81,7 @@ function contribution_create_expectedresult() { 'check_number' => '', 'campaign_id' => '', 'creditnote_id' => '', - 'tax_amount' => '', + 'tax_amount' => 0, 'revenue_recognition_date' => '', 'is_template' => '', 'contribution_type_id' => '1', diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index f67ada4890..c9a7f03fef 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -89,7 +89,7 @@ function civicrm_api3_verify_mandatory($params, $daoName = NULL, $keys = [], $ve else { // Disallow empty values except for the number zero. // TODO: create a utility for this since it's needed in many places. - if (!array_key_exists($key, $params) || (empty($params[$key]) && $params[$key] !== 0 && $params[$key] !== '0')) { + if (!array_key_exists($key, $params) || (empty($params[$key]) && $params[$key] !== 0.0 && $params[$key] !== 0 && $params[$key] !== '0')) { $unmatched[] = $key; } } @@ -320,9 +320,8 @@ function _civicrm_api3_get_DAO($name) { if ($name === 'MailingRecipients') { return 'CRM_Mailing_DAO_Recipients'; } - // FIXME: DAO should be renamed CRM_ACL_DAO_AclRole if ($name === 'AclRole') { - return 'CRM_ACL_DAO_EntityRole'; + return 'CRM_ACL_DAO_ACLEntityRole'; } // FIXME: DAO should be renamed CRM_SMS_DAO_SmsProvider // But this would impact SMS extensions so need to coordinate @@ -330,6 +329,18 @@ function _civicrm_api3_get_DAO($name) { if ($name === 'SmsProvider') { return 'CRM_SMS_DAO_Provider'; } + // Entity was renamed to CRM_Dedupe_DAO_DedupeRule for APIv4 + if ($name === 'Rule') { + return 'CRM_Dedupe_DAO_DedupeRule'; + } + // Entity was renamed to CRM_Dedupe_DAO_DedupeRuleGroup for APIv4 + if ($name === 'RuleGroup') { + return 'CRM_Dedupe_DAO_DedupeRuleGroup'; + } + // Entity was renamed to CRM_Dedupe_DAO_DedupeException for APIv4 + if ($name === 'Exception') { + return 'CRM_Dedupe_DAO_DedupeException'; + } // FIXME: DAO names should follow CamelCase convention if ($name === 'Im' || $name === 'Acl' || $name === 'Pcp') { $name = strtoupper($name); diff --git a/civicrm/bin/regen.sh b/civicrm/bin/regen.sh index 4b27d9c070..db3e70511b 100755 --- a/civicrm/bin/regen.sh +++ b/civicrm/bin/regen.sh @@ -57,6 +57,9 @@ $MYSQLDUMP -cent --skip-triggers $DBNAME $TABLENAMES > civicrm_generated.mysql cat civicrm_sample_custom_data.mysql >> civicrm_generated.mysql #cat civicrm_devel_config.mysql >> civicrm_generated.mysql cat civicrm_dummy_processor.mysql >> civicrm_generated.mysql +# adapted from https://bugs.mysql.com/bug.php?id=65465 +sed -i -e 's/VALUES (/VALUES\n (/g' civicrm_generated.mysql +sed -i -e 's/),(\|), (/),\n (/g' civicrm_generated.mysql $MYSQLADMCMD -f drop $DBNAME $MYSQLADMCMD create $DBNAME $MYSQLCMD < civicrm.mysql diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 1c0e07ed4c..fbbcc6829e 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.38.1', + return array( 'version' => '5.39.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index 28d6eb4832..6e15bd0388 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -44,7 +44,7 @@ "require": { "php": "~7.2", "cache/integration-tests": "~0.17.0", - "dompdf/dompdf" : "~0.8", + "dompdf/dompdf" : "~1.0.0", "firebase/php-jwt": ">=3 <6", "electrolinux/phpquery": "^0.9.6", "symfony/config": "~3.0 || ~4.4", @@ -56,13 +56,13 @@ "symfony/var-dumper": "~3.0 || ~4.4 || ~5.1", "psr/log": "~1.0", "symfony/finder": "~3.0 || ~4.4", - "tecnickcom/tcpdf" : "6.3.*", + "tecnickcom/tcpdf" : "6.4.*", "totten/ca-config": "~17.05", "zetacomponents/base": "1.9.*", "zetacomponents/mail": "1.9.*", "marcj/topsort": "~1.1", - "phpoffice/phpword": "^0.15.0", - "pear/validate_finance_creditcard": "dev-master", + "phpoffice/phpword": "^0.18.0", + "pear/validate_finance_creditcard": "0.7.0", "civicrm/civicrm-cxn-rpc": "~0.20.12.01 || ~0.19.01.10", "pear/auth_sasl": "1.1.0", "pear/net_smtp": "1.9.*", @@ -281,12 +281,6 @@ "pear/net_smtp": { "Add in CiviCRM custom error message for CRM-8744": "https://raw.githubusercontent.com/civicrm/civicrm-core/a6a0ff13d2a155ad962529595dceaef728116f96/tools/scripts/composer/patches/net-smtp-patch.patch" }, - "phpoffice/common": { - "Fix handling of libxml_disable_entity_loader": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpoffice-common-xml-entity-fix.patch" - }, - "phpoffice/phpword": { - "Fix handling of libxml_disable_entity_loader": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpword-libxml-fix-global-handling.patch" - }, "zetacomponents/mail": { "CiviCRM Custom Patches for ZetaCompoents mail": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/civicrm-custom-patches-zetacompoents-mail.patch", "Allow single quotes to be used in return path": "https://github.com/zetacomponents/Mail/pull/86.patch" diff --git a/civicrm/composer.lock b/civicrm/composer.lock index 2db336efc9..48ef36a914 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#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d3072858bd39b61c20a204de8000e68f", + "content-hash": "e7cca2de5a5b2bd54ac4c14b677845ed", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -566,16 +566,16 @@ }, { "name": "dompdf/dompdf", - "version": "v0.8.6", + "version": "v1.0.2", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" + "reference": "8768448244967a46d6e67b891d30878e0e15d25c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/8768448244967a46d6e67b891d30878e0e15d25c", + "reference": "8768448244967a46d6e67b891d30878e0e15d25c", "shasum": "" }, "require": { @@ -583,11 +583,11 @@ "ext-mbstring": "*", "phenx/php-font-lib": "^0.5.2", "phenx/php-svg-lib": "^0.3.3", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "mockery/mockery": "^1.3", - "phpunit/phpunit": "^7.5", + "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5" }, "suggest": { @@ -630,7 +630,11 @@ ], "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", "homepage": "https://github.com/dompdf/dompdf", - "time": "2020-08-30T22:54:22+00:00" + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v1.0.2" + }, + "time": "2021-01-08T14:18:52+00:00" }, { "name": "electrolinux/phpquery", @@ -916,6 +920,123 @@ ], "time": "2019-07-01T23:21:34+00:00" }, + { + "name": "laminas/laminas-escaper", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-escaper": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "time": "2019-12-31T16:43:30+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-09-14T14:23:00+00:00" + }, { "name": "league/csv", "version": "9.2.1", @@ -1227,43 +1348,6 @@ ], "time": "2020-10-15T08:29:30+00:00" }, - { - "name": "pclzip/pclzip", - "version": "2.8.2", - "source": { - "type": "git", - "url": "https://github.com/ivanlanin/pclzip.git", - "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ivanlanin/pclzip/zipball/19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", - "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "pclzip.lib.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Vincent Blavet" - } - ], - "description": "A PHP library that offers compression and extraction functions for Zip formatted archives", - "homepage": "http://www.phpconcept.net/pclzip", - "keywords": [ - "php", - "zip" - ], - "time": "2014-06-05T11:42:24+00:00" - }, { "name": "pear/auth_sasl", "version": "v1.1.0", @@ -1817,16 +1901,16 @@ }, { "name": "pear/validate_finance_creditcard", - "version": "dev-master", + "version": "0.7.0", "source": { "type": "git", "url": "https://github.com/pear/Validate_Finance_CreditCard.git", - "reference": "a74da657d7a6f24b7e669294b32812e9a947519f" + "reference": "f138fb80b2305c1fe7ca33216b895b868396f1e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Validate_Finance_CreditCard/zipball/a74da657d7a6f24b7e669294b32812e9a947519f", - "reference": "a74da657d7a6f24b7e669294b32812e9a947519f", + "url": "https://api.github.com/repos/pear/Validate_Finance_CreditCard/zipball/f138fb80b2305c1fe7ca33216b895b868396f1e9", + "reference": "f138fb80b2305c1fe7ca33216b895b868396f1e9", "shasum": "" }, "require": { @@ -1857,7 +1941,11 @@ } ], "description": "Validation class for credit cards.", - "time": "2016-09-12T08:01:21+00:00" + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Validate_Finance_CreditCard", + "source": "https://github.com/pear/Validate_Finance_CreditCard" + }, + "time": "2021-05-19T22:03:15+00:00" }, { "name": "phenx/php-font-lib", @@ -1936,97 +2024,36 @@ "homepage": "https://github.com/PhenX/php-svg-lib", "time": "2019-09-11T20:02:13+00:00" }, - { - "name": "phpoffice/common", - "version": "0.2.9", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/Common.git", - "reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/Common/zipball/edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d", - "reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d", - "shasum": "" - }, - "require": { - "pclzip/pclzip": "^2.8", - "php": ">=5.3.0" - }, - "require-dev": { - "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "2.*", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^4.8.36 || ^7.0", - "sebastian/phpcpd": "2.*", - "squizlabs/php_codesniffer": "2.*" - }, - "type": "library", - "extra": { - "patches_applied": { - "Fix handling of libxml_disable_entity_loader": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpoffice-common-xml-entity-fix.patch" - } - }, - "autoload": { - "psr-4": { - "PhpOffice\\Common\\": "src/Common/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Mark Baker" - }, - { - "name": "Franck Lefevre", - "homepage": "http://rootslabs.net" - } - ], - "description": "PHPOffice Common", - "homepage": "http://phpoffice.github.io", - "keywords": [ - "common", - "component", - "office", - "php" - ], - "time": "2018-07-13T14:12:34+00:00" - }, { "name": "phpoffice/phpword", - "version": "0.15.0", + "version": "0.18.1", "source": { "type": "git", "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "dfa2f36cad2b632b7ab1c56473e4f5db9a7caf7f" + "reference": "06b90e39a36872c6ee73534e1a073f4b3132fc6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/dfa2f36cad2b632b7ab1c56473e4f5db9a7caf7f", - "reference": "dfa2f36cad2b632b7ab1c56473e4f5db9a7caf7f", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/06b90e39a36872c6ee73534e1a073f4b3132fc6a", + "reference": "06b90e39a36872c6ee73534e1a073f4b3132fc6a", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^5.3.3 || ^7.0", - "phpoffice/common": "^0.2.9", - "zendframework/zend-escaper": "^2.2" + "laminas/laminas-escaper": "^2.2", + "php": "^5.3.3 || ^7.0 || ^8.0" }, "require-dev": { - "dompdf/dompdf": "0.8.*", + "dompdf/dompdf": "0.8.* || 1.0.*", "ext-gd": "*", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^2.2", - "mpdf/mpdf": "5.7.4 || 6.* || 7.*", + "mpdf/mpdf": "5.7.4 || 6.* || 7.* || 8.*", "php-coveralls/php-coveralls": "1.1.0 || ^2.0", - "phploc/phploc": "2.* || 3.* || 4.*", + "phploc/phploc": "2.* || 3.* || 4.* || 5.* || 6.* || 7.*", "phpmd/phpmd": "2.*", "phpunit/phpunit": "^4.8.36 || ^7.0", - "squizlabs/php_codesniffer": "^2.9", + "squizlabs/php_codesniffer": "^2.9 || ^3.5", "tecnickcom/tcpdf": "6.*" }, "suggest": { @@ -2039,10 +2066,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.16-dev" - }, - "patches_applied": { - "Fix handling of libxml_disable_entity_loader": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpword-libxml-fix-global-handling.patch" + "dev-develop": "0.18-dev" } }, "autoload": { @@ -2063,6 +2087,10 @@ "email": "me@gabrielbull.com", "homepage": "http://gabrielbull.com/" }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, { "name": "Ivan Lanin", "homepage": "http://ivan.lanin.org" @@ -2071,10 +2099,6 @@ "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" } @@ -2106,7 +2130,11 @@ "word", "writer" ], - "time": "2018-07-14T16:59:43+00:00" + "support": { + "issues": "https://github.com/PHPOffice/PHPWord/issues", + "source": "https://github.com/PHPOffice/PHPWord/tree/0.18.1" + }, + "time": "2021-03-08T01:06:35+00:00" }, { "name": "phpseclib/phpseclib", @@ -2602,16 +2630,16 @@ }, { "name": "symfony/config", - "version": "v3.4.40", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "3634991bea549e73c45a964c38f30ceeae6ed877" + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/3634991bea549e73c45a964c38f30ceeae6ed877", - "reference": "3634991bea549e73c45a964c38f30ceeae6ed877", + "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", "shasum": "" }, "require": { @@ -2633,11 +2661,6 @@ "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Config\\": "" @@ -2662,6 +2685,9 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2676,20 +2702,20 @@ "type": "tidelift" } ], - "time": "2020-04-12T14:33:46+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.40", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d10ff5503b0b27711087eef4ac7835a752fe42fd" + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d10ff5503b0b27711087eef4ac7835a752fe42fd", - "reference": "d10ff5503b0b27711087eef4ac7835a752fe42fd", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", "shasum": "" }, "require": { @@ -2718,11 +2744,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" @@ -2747,6 +2768,9 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2761,20 +2785,20 @@ "type": "tidelift" } ], - "time": "2020-04-13T09:33:40+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.40", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48" + "reference": "31fde73757b6bad247c54597beef974919ec6860" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9d4e22943b73acc1ba50595b7de1a01fe9dbad48", - "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", + "reference": "31fde73757b6bad247c54597beef974919ec6860", "shasum": "" }, "require": { @@ -2786,6 +2810,7 @@ "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0|~4.0", + "symfony/debug": "~3.4|~4.4", "symfony/dependency-injection": "~3.3|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/stopwatch": "~2.8|~3.0|~4.0" @@ -2795,11 +2820,6 @@ "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -2824,6 +2844,9 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2838,20 +2861,20 @@ "type": "tidelift" } ], - "time": "2020-03-15T09:38:08+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.40", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515" + "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/78a93e5606a19d0fb490afc3c4a9b7ecd86e1515", - "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", "shasum": "" }, "require": { @@ -2859,11 +2882,6 @@ "symfony/polyfill-ctype": "~1.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" @@ -2888,6 +2906,9 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2902,31 +2923,26 @@ "type": "tidelift" } ], - "time": "2020-04-12T16:54:01+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/finder", - "version": "v3.4.40", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200" + "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200", - "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200", + "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", + "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -2951,7 +2967,24 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-02-14T07:34:21+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-11-16T17:02:08+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3318,27 +3351,22 @@ }, { "name": "symfony/process", - "version": "v3.4.40", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271" + "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f5104c9dcbc2cfad45d01d5150c1da9836967271", - "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271", + "url": "https://api.github.com/repos/symfony/process/zipball/b8648cf1d5af12a44a51d07ef9bf980921f15fca", + "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -3363,6 +3391,9 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3377,20 +3408,20 @@ "type": "tidelift" } ], - "time": "2020-04-12T14:33:46+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.4.44", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3e31b82077039b1ea3b5a203ec1e3016606f4484" + "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3e31b82077039b1ea3b5a203ec1e3016606f4484", - "reference": "3e31b82077039b1ea3b5a203ec1e3016606f4484", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d", + "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d", "shasum": "" }, "require": { @@ -3410,11 +3441,6 @@ "ext-symfony_debug": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "files": [ "Resources/functions/dump.php" @@ -3446,6 +3472,9 @@ "debug", "dump" ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3460,20 +3489,20 @@ "type": "tidelift" } ], - "time": "2020-08-17T07:27:37+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "tecnickcom/tcpdf", - "version": "6.3.5", + "version": "6.4.1", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549" + "reference": "5ba838befdb37ef06a16d9f716f35eb03cb1b329" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/19a535eaa7fb1c1cac499109deeb1a7a201b4549", - "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/5ba838befdb37ef06a16d9f716f35eb03cb1b329", + "reference": "5ba838befdb37ef06a16d9f716f35eb03cb1b329", "shasum": "" }, "require": { @@ -3522,7 +3551,17 @@ "pdf417", "qrcode" ], - "time": "2020-02-14T14:20:12+00:00" + "support": { + "issues": "https://github.com/tecnickcom/TCPDF/issues", + "source": "https://github.com/tecnickcom/TCPDF/tree/6.4.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tcpdf%20project", + "type": "custom" + } + ], + "time": "2021-03-27T16:00:33+00:00" }, { "name": "togos/gitignore", @@ -3845,52 +3884,6 @@ ], "time": "2019-08-11T00:04:39+00:00" }, - { - "name": "zendframework/zend-escaper", - "version": "2.4.13", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "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" - ], - "abandoned": "laminas/laminas-escaper", - "time": "2015-05-07T14:55:31+00:00" - }, { "name": "zetacomponents/base", "version": "1.9.1", @@ -4039,9 +4032,7 @@ "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "pear/validate_finance_creditcard": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/civicrm/css/admin.css b/civicrm/css/admin.css index 41d332fd41..f32f51f710 100644 --- a/civicrm/css/admin.css +++ b/civicrm/css/admin.css @@ -44,6 +44,21 @@ text-align: center; } +.crm-container .crm-extensions-version { + white-space: nowrap; +} +.crm-container .crm-extensions-stage { + margin-left: 5px; +} + +.crm-container .crm-extensions-stage.fa-flask { + color: #eba12d; +} + +.crm-container .crm-extensions-stage.fa-check-circle { + color: #00994D; +} + @media screen and (min-width: 480px) { #crm-container .admin-section-items { column-count: 2; diff --git a/civicrm/css/api4-explorer.css b/civicrm/css/api4-explorer.css index d2bd350647..02dd6dbadf 100644 --- a/civicrm/css/api4-explorer.css +++ b/civicrm/css/api4-explorer.css @@ -152,22 +152,6 @@ padding: 5px 10px; } -/* Collapsible optgroups for select2 */ -div.select2-drop.collapsible-optgroups-enabled .select2-result-with-children:not(.optgroup-expanded) > .select2-result-sub > li.select2-result { - display: none; -} -div.select2-drop.collapsible-optgroups-enabled .select2-result-with-children > .select2-result-label:before { - font-family: FontAwesome; - content: "\f0da"; - display: inline-block; - padding-right: 3px; - vertical-align: middle; - font-weight: normal; -} -div.select2-drop.collapsible-optgroups-enabled .select2-result-with-children.optgroup-expanded > .select2-result-label:before { - content: "\f0d7"; -} - #bootstrap-theme.api4-explorer-page .form-control.huge { width: 25em; } diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css index 775346a855..c91c5a000c 100644 --- a/civicrm/css/civicrm.css +++ b/civicrm/css/civicrm.css @@ -3111,6 +3111,22 @@ tbody.scrollContent tr.alternateRow { box-sizing: border-box; } +/* Collapsible optgroups for select2 */ +div.select2-drop.collapsible-optgroups-enabled .select2-result-with-children:not(.optgroup-expanded) > .select2-result-sub > li.select2-result { + display: none; +} +div.select2-drop.collapsible-optgroups-enabled .select2-result-with-children > .select2-result-label:before { + font-family: FontAwesome; + content: "\f0da"; + display: inline-block; + padding-right: 3px; + vertical-align: middle; + font-weight: normal; +} +div.select2-drop.collapsible-optgroups-enabled .select2-result-with-children.optgroup-expanded > .select2-result-label:before { + content: "\f0d7"; +} + span.crm-select-item-color { display: inline-block; width: .8em; diff --git a/civicrm/css/joomla.css b/civicrm/css/joomla.css index 80b9ad96f0..87d333b4ac 100644 --- a/civicrm/css/joomla.css +++ b/civicrm/css/joomla.css @@ -399,3 +399,17 @@ body.admin.com_civicrm #content-right { body.ui-dialog-open #status { z-index: 100 !important; } + +/* Joomla 4 */ + +body.admin.com_civicrm.layout-default #content > .row > .col-md-12 { + padding: 0; +} + +body.admin.com_civicrm.layout-default #subhead { + display: none; +} + +body.admin.com_civicrm.layout-default .crm-container .crm-dashlet { + max-width: 50vw; /* fixes over-wide news dashlet */ +} diff --git a/civicrm/css/menubar-joomla.css b/civicrm/css/menubar-joomla.css index 48422b5e38..6469677697 100644 --- a/civicrm/css/menubar-joomla.css +++ b/civicrm/css/menubar-joomla.css @@ -1,8 +1,9 @@ @media (min-width: $breakMin) { - + body.crm-menubar-over-cms-menu.crm-menubar-visible { padding-top: $menubarHeight; } + body.crm-menubar-over-cms-menu.crm-menubar-visible.crm-menubar-wrapped { padding-top: calc($menubarHeight * 2); } @@ -10,11 +11,12 @@ body.crm-menubar-below-cms-menu.crm-menubar-visible { margin-top: $menubarHeight; } + body.crm-menubar-below-cms-menu.crm-menubar-visible.crm-menubar-wrapped { margin-top: calc($menubarHeight * 2); } - } + @media (max-width: $breakMax) { body #civicrm-menu-nav { @@ -25,5 +27,56 @@ margin-top: 3px; margin-left: 6px; } +} + +/* Joomla 4 */ + +body.admin.com_civicrm.layout-default #crm-qsearch label { + color: #fff; +} + +@media (min-width: $breakMin) { + + body.crm-menubar-below-cms-menu.crm-menubar-visible.layout-default { + margin-top: 0; + } + + body.crm-menubar-below-cms-menu.layout-default > #civicrm-menu-nav #civicrm-menu { + top: 70px; + z-index: 1000; + position: absolute; + border-top: 1px solid #aaa; + } + + body.crm-menubar-below-cms-menu.layout-default #header { + margin-bottom: calc($menubarHeight + 1px); + } + + body.crm-menubar-below-cms-menu.crm-menubar-wrapped.layout-default #header { + margin-bottom: 81px; + } +} + +@media (max-width: $breakMin) { + + body.com_civicrm.layout-default #header { + min-height: 45px; + padding: 10px 0; + margin-bottom: $menubarHeight; + } + body.admin.com_civicrm.layout-default #civicrm-menu-nav { + margin-top: 45px; + background: #1b1b1b; + z-index: 1000; + height: $menubarHeight; + border-top: 1px solid #aaa; + } } + +@media (max-width: 575px) { + + body.admin.com_civicrm.layout-default #civicrm-menu-nav { + margin-top: 77px; + } +} diff --git a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php index eace44476d..06619a649c 100644 --- a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php +++ b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php @@ -51,14 +51,16 @@ class AfformAdminMeta { } /** - * @param $entityName - * @return array + * Get info about an api entity, with special handling for contact types + * @param string $entityName + * @return array|null */ - public static function getApiEntity($entityName) { - if (in_array($entityName, ['Individual', 'Household', 'Organization'])) { - $contactTypes = \CRM_Contact_BAO_ContactType::basicTypeInfo(); + public static function getApiEntity(string $entityName) { + $contactTypes = \CRM_Contact_BAO_ContactType::basicTypeInfo(); + if (isset($contactTypes[$entityName])) { return [ 'entity' => 'Contact', + 'contact_type' => $entityName, 'label' => $contactTypes[$entityName]['label'], ]; } @@ -66,6 +68,10 @@ class AfformAdminMeta { ->addWhere('name', '=', $entityName) ->addSelect('title', 'icon') ->execute()->first(); + if (!$info) { + // Disabled contact type or nonexistent api entity + return NULL; + } return [ 'entity' => $entityName, 'label' => $info['title'], @@ -81,10 +87,9 @@ class AfformAdminMeta { public static function getFields($entityName, $params = []) { $params += [ 'checkPermissions' => FALSE, - 'includeCustom' => TRUE, 'loadOptions' => ['id', 'label'], 'action' => 'create', - 'select' => ['name', 'label', 'input_type', 'input_attrs', 'required', 'options', 'help_pre', 'help_post', 'serialize', 'data_type', 'fk_entity'], + 'select' => ['name', 'label', 'input_type', 'input_attrs', 'required', 'options', 'help_pre', 'help_post', 'serialize', 'data_type', 'fk_entity', 'readonly'], 'where' => [['input_type', 'IS NOT NULL']], ]; if (in_array($entityName, ['Individual', 'Household', 'Organization'])) { @@ -121,32 +126,37 @@ class AfformAdminMeta { $contactTypes = \CRM_Contact_BAO_ContactType::basicTypeInfo(); + // Call getFields on getFields to get input type labels + $inputTypeLabels = \Civi\Api4\Contact::getFields() + ->setLoadOptions(TRUE) + ->setAction('getFields') + ->addWhere('name', '=', 'input_type') + ->execute() + ->column('options')[0]; + // Scan all extensions for entities & input types foreach (\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles() as $ext) { $dir = \CRM_Utils_File::addTrailingSlash(dirname($ext['filePath'])); if (is_dir($dir)) { // Scan for entities foreach (glob($dir . 'afformEntities/*.php') as $file) { - $entity = include $file; - $afformEntity = basename($file, '.php'); - // Contact pseudo-entities (Individual, Organization, Household) get special treatment, - // notably their fields are pre-loaded since they are both commonly-used and nonstandard - if (!empty($entity['contact_type'])) { - // Skip disabled contact types - if (!isset($contactTypes[$entity['contact_type']])) { - continue; - } - $entity['label'] = $contactTypes[$entity['contact_type']]['label']; - } - elseif (empty($entity['label']) || empty($entity['icon'])) { - $entity += self::getApiEntity($entity['entity']); + $entityInfo = include $file; + $entityName = basename($file, '.php'); + $apiInfo = self::getApiEntity($entityInfo['entity'] ?? $entityName); + // Skip disabled contact types & entities from disabled components/extensions + if (!$apiInfo) { + continue; } - $data['entities'][$afformEntity] = $entity; + $entityInfo += $apiInfo; + $data['entities'][$entityName] = $entityInfo; } - // Scan for input types + // Scan for input types, use label from getFields if available foreach (glob($dir . 'ang/afGuiEditor/inputType/*.html') as $file) { $name = basename($file, '.html'); - $data['inputType'][$name] = $name; + $data['inputType'][] = [ + 'name' => $name, + 'label' => $inputTypeLabels[$name] ?? E::ts($name), + ]; } } } diff --git a/civicrm/ext/afform/admin/afformEntities/Activity.php b/civicrm/ext/afform/admin/afformEntities/Activity.php index ae8a651eba..860d68fd1d 100644 --- a/civicrm/ext/afform/admin/afformEntities/Activity.php +++ b/civicrm/ext/afform/admin/afformEntities/Activity.php @@ -1,7 +1,11 @@ <?php return [ - 'entity' => 'Activity', - 'defaults' => "{'url-autofill': '1'}", + 'defaults' => "{ + data: { + source_contact_id: 'user_contact_id', + activity_type_id: '' + } + }", 'boilerplate' => [ ['#tag' => 'af-field', 'name' => 'subject'], ], diff --git a/civicrm/ext/afform/admin/afformEntities/Household.php b/civicrm/ext/afform/admin/afformEntities/Household.php index cf569b3432..20cbab0c6d 100644 --- a/civicrm/ext/afform/admin/afformEntities/Household.php +++ b/civicrm/ext/afform/admin/afformEntities/Household.php @@ -1,13 +1,10 @@ <?php return [ - 'entity' => 'Contact', - 'contact_type' => 'Household', 'defaults' => "{ data: { contact_type: 'Household', source: afform.title - }, - 'url-autofill': '1' + } }", 'icon' => 'fa-home', 'boilerplate' => [ diff --git a/civicrm/ext/afform/admin/afformEntities/Individual.php b/civicrm/ext/afform/admin/afformEntities/Individual.php index cc580425e4..31e5ace425 100644 --- a/civicrm/ext/afform/admin/afformEntities/Individual.php +++ b/civicrm/ext/afform/admin/afformEntities/Individual.php @@ -1,13 +1,10 @@ <?php return [ - 'entity' => 'Contact', - 'contact_type' => 'Individual', 'defaults' => "{ data: { contact_type: 'Individual', source: afform.title - }, - 'url-autofill': '1' + } }", 'icon' => 'fa-user', 'boilerplate' => [ diff --git a/civicrm/ext/afform/admin/afformEntities/Organization.php b/civicrm/ext/afform/admin/afformEntities/Organization.php index 5335b6ddc2..ecbf7fdd70 100644 --- a/civicrm/ext/afform/admin/afformEntities/Organization.php +++ b/civicrm/ext/afform/admin/afformEntities/Organization.php @@ -1,13 +1,10 @@ <?php return [ - 'entity' => 'Contact', - 'contact_type' => 'Organization', 'defaults' => "{ data: { contact_type: 'Organization', source: afform.title - }, - 'url-autofill': '1' + } }", 'icon' => 'fa-building', 'boilerplate' => [ diff --git a/civicrm/ext/afform/admin/ang/afAdmin.js b/civicrm/ext/afform/admin/ang/afAdmin.js index a298306d32..e118f5c8d3 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin.js +++ b/civicrm/ext/afform/admin/ang/afAdmin.js @@ -11,8 +11,7 @@ // Load data for lists afforms: function(crmApi4) { return crmApi4('Afform', 'get', { - select: ['name', 'title', 'type', 'is_public', 'server_route', 'has_local', 'has_base'], - orderBy: {title: 'ASC'} + select: ['name', 'title', 'type', 'server_route', 'is_public', 'has_local', 'has_base', 'is_dashlet', 'contact_summary:label'] }); } } diff --git a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js index f966af1746..df46006d1b 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js @@ -4,6 +4,8 @@ angular.module('afAdmin').controller('afAdminList', function($scope, afforms, crmApi4, crmStatus) { var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = $scope.$ctrl = this; + this.sortField = 'title'; + this.sortDir = false; $scope.crmUrl = CRM.url; @@ -22,10 +24,24 @@ this.afforms = _.transform(afforms, function(afforms, afform) { afform.type = afform.type || 'system'; + // Aggregate a couple fields for the "Placement" column + afform.placement = []; + if (afform.is_dashlet) { + afform.placement.push(ts('Dashboard')); + } + if (afform['contact_summary:label']) { + afform.placement.push(afform['contact_summary:label']); + } afforms[afform.type] = afforms[afform.type] || []; afforms[afform.type].push(afform); }, {}); + // Change sort field/direction when clicking a column header + this.sortBy = function(col) { + ctrl.sortDir = ctrl.sortField === col ? !ctrl.sortDir : false; + ctrl.sortField = col; + }; + $scope.$bindToRoute({ expr: '$ctrl.tab', param: 'tab', diff --git a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html index 276e4d0538..3a61badce1 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html @@ -37,28 +37,44 @@ <table> <thead> <tr> - <th>{{:: ts('Title') }}</th> - <th>{{:: ts('Name') }}</th> - <th>{{:: ts('Page') }}</th> - <th>{{:: ts('Style') }}</th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('title')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'title'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'title'"></i> + {{:: ts('Title') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('name')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'name'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'name'"></i> + {{:: ts('Name') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('server_route')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'server_route'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'server_route'"></i> + {{:: ts('Page') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('placement.length')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'placement.length'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'placement.length'"></i> + {{:: ts('Placement') }} + </th> <th></th> </tr> </thead> <tbody> - <tr ng-repeat="afform in $ctrl.afforms[$ctrl.tab] | filter:$ctrl.searchAfformList"> - <td>{{afform.title}}</td> + <tr ng-repeat="afform in $ctrl.afforms[$ctrl.tab] | filter:$ctrl.searchAfformList | orderBy:$ctrl.sortField:$ctrl.sortDir"> + <td>{{ afform.title }}</td> <td> - <code>{{afform.name}}</code> + <code>{{ afform.name }}</code> </td> <td> - <a ng-if="afform.server_route" ng-href="{{ crmUrl(afform.server_route) }}" target="_blank"> - <code>{{afform.server_route}}</code> + <a ng-if="afform.server_route" ng-href="{{:: crmUrl(afform.server_route, null, afform.is_public ? 'front' : 'back') }}" target="_blank"> + <code>{{ afform.server_route }}</code> </a> </td> - <td>{{afform.is_public ? ts('Frontend') : ts('Backend')}}</td> + <td>{{ afform.placement.join(', ') }}</td> <td class="text-right"> - <a ng-if="afform.type !== 'system'" href="#/edit/{{ afform.name }}" class="btn btn-xs btn-primary">{{ ts('Edit') }}</a> - <a ng-if="afform.type !== 'system'" href="#/clone/{{ afform.name }}" class="btn btn-xs btn-primary">{{ ts('Clone') }}</a> + <a ng-if="afform.type !== 'system'" href="#/edit/{{ afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Edit') }}</a> + <a ng-if="afform.type !== 'system'" href="#/clone/{{ afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Clone') }}</a> <a href ng-if="afform.has_local" class="btn btn-xs btn-danger" crm-confirm="{type: afform.has_base ? 'revert' : 'delete', obj: afform}" on-yes="$ctrl.revert(afform)"> {{ afform.has_base ? ts('Revert') : ts('Delete') }} </a> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor.css b/civicrm/ext/afform/admin/ang/afGuiEditor.css index 3667005a12..a36906c024 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor.css +++ b/civicrm/ext/afform/admin/ang/afGuiEditor.css @@ -1,14 +1,22 @@ +#bootstrap-theme.afadmin-list th[ng-click] { + cursor: pointer; +} +#bootstrap-theme.afadmin-list th i.fa-sort-desc, +#bootstrap-theme.afadmin-list th i.fa-sort-asc { + color: #1a5a82; +} +#bootstrap-theme.afadmin-list th:not(:hover) i.fa-sort { + opacity: .5; +} + #afGuiEditor #afGuiEditor-palette { margin-right: 5px; + height: 100%; } #afGuiEditor #afGuiEditor-canvas { margin-left: 5px; -} - -#afGuiEditor .panel-body { - padding: 5px 12px; - position: relative; + height: 100%; } #afGuiEditor fieldset legend { @@ -26,13 +34,43 @@ margin-bottom: 10px; } -#afGuiEditor #afGuiEditor-palette-tabs li { - top: 1px; +#afGuiEditor .panel { + height: 100%; } - -#afGuiEditor #afGuiEditor-palette-tabs li > a { - padding: 10px 15px; +#afGuiEditor .panel-heading { + height: 44px; + padding: 5px 10px 10px 10px; + border-bottom: 1px solid #ddd; +} +#afGuiEditor .panel-heading ul.nav-tabs { + border-bottom: 0 none; + padding: 0!important; +} +#afGuiEditor .panel-heading ul.nav-tabs li { + top: 6px; + margin: 0; +} +#afGuiEditor .panel-heading ul.nav-tabs li.fluid-width-tab { + white-space: nowrap; + overflow: hidden; +} +#afGuiEditor .panel-heading ul.nav-tabs li.active { + max-width: 50%; +} +#afGuiEditor .panel-heading ul.nav-tabs li > a { + padding: 5px 3px 5px 8px; + height: 33px; font-size: 12px; + margin: 0; +} + +#afGuiEditor .panel-body { + padding: 5px 12px; + position: relative; + height: calc(100% - 44px); + overflow-y: scroll; + overflow-x: hidden; + border-top: none!important; } #afGuiEditor .af-gui-columns { @@ -49,7 +87,7 @@ } #afGuiEditor .crm-editable-enabled, -#afGuiEditor-palette-tabs > li > a > span { +#afGuiEditor .panel-heading ul.nav-tabs li > a > span { display: inline-block; padding: 0 4px !important; border: 2px solid transparent !important; @@ -112,7 +150,7 @@ left: 0; padding-left: 15px; } -#afGuiEditor:not(.af-gui-dragging) #afGuiEditor-canvas:hover .af-gui-bar { +#afGuiEditor:not(.af-gui-dragging *) #afGuiEditor-canvas:hover .af-gui-bar { opacity: 1; transition: opacity .2s; } @@ -122,6 +160,16 @@ transition: opacity .1s; } +/* Disable menu while dragging */ +body.af-gui-dragging #civicrm-menu { + pointer-events: none; +} +/* Disable scrollbars while dragging */ +body.af-gui-dragging { + overflow-x: hidden; + overflow-y: hidden; +} + #afGuiEditor .af-gui-bar .btn.active { background-color: #b3b3b3; } @@ -130,6 +178,10 @@ color: #696969; font-style: italic; } +#afGuiEditor .af-gui-bar > .form-inline > select { + height: 21px; + min-height: 21px; +} #afGuiEditor .af-gui-element { position: relative; @@ -142,9 +194,11 @@ position: relative; padding: 22px 3px 3px; min-height: 40px; - display: block; + margin-bottom: 10px; + margin-top: 10px; } +#afGuiEditor af-gui-container, #afGuiEditor af-gui-markup, #afGuiEditor af-gui-field, #afGuiEditor af-gui-edit-options { @@ -160,10 +214,12 @@ #afGuiEditor .af-gui-container-type-fieldset { box-shadow: 0 0 5px #bbbbbb; + margin-top: 20px; + margin-bottom: 20px; } #afGuiEditor .af-gui-container:hover, -#afGuiEditor.af-gui-dragging .af-gui-container { +.af-gui-dragging #afGuiEditor .af-gui-container { border: 2px dashed #757575; } #afGuiEditor .af-gui-container.af-gui-dragtarget { @@ -217,6 +273,20 @@ margin-top: 10px; } +#afGuiEditor .ui-sortable-helper { + height: 20px !important; + opacity: .5; + overflow: visible; +} +#afGuiEditor .ui-sortable-helper > * { + background-color: #d5d5d5; +} +#afGuiEditor .ui-sortable-helper .af-gui-palette-item { + height: 30px; + width: 300px; + border: 2px dashed #0071bd; +} + #afGuiEditor .af-gui-entity-palette-select-list { max-height: 400px; overflow-y: auto; @@ -288,9 +358,9 @@ padding-left: 15px; } -#afGuiEditor .af-gui-button > .btn.disabled { - cursor: default !important; - color: white !important; +#afGuiEditor #afGuiEditor-canvas-body .btn[disabled] { + cursor: default; + color: white; } #afGuiEditor .af-gui-button > .btn.disabled .crm-editable-enabled:hover:not(:focus) { border-color: #f4f4f4 !important; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor.js b/civicrm/ext/afform/admin/ang/afGuiEditor.js index a545b6ba29..6fde62204a 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor.js @@ -181,7 +181,7 @@ $('#af-gui-icon-picker').crmIconPicker(); }); // Add css class while dragging - $('#crm-container') + $(document) .on('sortover', function(e) { $('.af-gui-container').removeClass('af-gui-dragtarget'); $(e.target).closest('.af-gui-container').addClass('af-gui-dragtarget'); @@ -190,10 +190,10 @@ $(this).removeClass('af-gui-dragtarget'); }) .on('sortstart', '#afGuiEditor', function() { - $('#afGuiEditor').addClass('af-gui-dragging'); + $('body').addClass('af-gui-dragging'); }) - .on('sortstop', '#afGuiEditor', function() { - $('.af-gui-dragging').removeClass('af-gui-dragging'); + .on('sortstop', function() { + $('body').removeClass('af-gui-dragging'); $('.af-gui-dragtarget').removeClass('af-gui-dragtarget'); }); }); diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js index 112ef9bf01..13a4bbe5ad 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js @@ -20,32 +20,42 @@ controllerAs: 'editor', controller: function($scope, crmApi4, afGui, $parse, $timeout, $location) { var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'); - $scope.crmUrl = CRM.url; - $scope.afform = null; + this.afform = null; $scope.saving = false; $scope.selectedEntityName = null; this.meta = afGui.meta; - var editor = this; + var editor = this, + sortableOptions = {}; this.$onInit = function() { // Load the current form plus blocks & fields afGui.resetMeta(); afGui.addMeta(this.data); initializeForm(); + + $timeout(fixEditorHeight); + $timeout(editor.adjustTabWidths); + $(window) + .on('resize.afGuiEditor', fixEditorHeight) + .on('resize.afGuiEditor', editor.adjustTabWidths); + }; + + this.$onDestroy = function() { + $(window).off('.afGuiEditor'); }; // Initialize the current form function initializeForm() { - $scope.afform = editor.data.definition; - if (!$scope.afform) { + editor.afform = editor.data.definition; + if (!editor.afform) { alert('Error: unknown form'); } if (editor.mode === 'clone') { - delete $scope.afform.name; - delete $scope.afform.server_route; - $scope.afform.is_dashlet = false; - $scope.afform.title += ' ' + ts('(copy)'); + delete editor.afform.name; + delete editor.afform.server_route; + editor.afform.is_dashlet = false; + editor.afform.title += ' ' + ts('(copy)'); } $scope.canvasTab = 'layout'; $scope.layoutHtml = ''; @@ -54,7 +64,7 @@ if (editor.getFormType() === 'form') { editor.allowEntityConfig = true; - editor.layout['#children'] = afGui.findRecursive($scope.afform.layout, {'#tag': 'af-form'})[0]['#children']; + editor.layout['#children'] = afGui.findRecursive(editor.afform.layout, {'#tag': 'af-form'})[0]['#children']; $scope.entities = _.mapValues(afGui.findRecursive(editor.layout['#children'], {'#tag': 'af-entity'}, 'name'), backfillEntityDefaults); if (editor.mode === 'create') { @@ -64,8 +74,8 @@ } else if (editor.getFormType() === 'block') { - editor.layout['#children'] = $scope.afform.layout; - editor.blockEntity = $scope.afform.join || $scope.afform.block; + editor.layout['#children'] = editor.afform.layout; + editor.blockEntity = editor.afform.join || editor.afform.block; $scope.entities[editor.blockEntity] = backfillEntityDefaults({ type: editor.blockEntity, name: editor.blockEntity, @@ -74,7 +84,7 @@ } else if (editor.getFormType() === 'search') { - editor.layout['#children'] = afGui.findRecursive($scope.afform.layout, {'af-fieldset': ''})[0]['#children']; + editor.layout['#children'] = afGui.findRecursive(editor.afform.layout, {'af-fieldset': ''})[0]['#children']; editor.searchDisplay = afGui.findRecursive(editor.layout['#children'], function(item) { return item['#tag'] && item['#tag'].indexOf('crm-search-display-') === 0; })[0]; @@ -83,18 +93,18 @@ // Set changesSaved to true on initial load, false thereafter whenever changes are made to the model $scope.changesSaved = editor.mode === 'edit' ? 1 : false; - $scope.$watch('afform', function () { + $scope.$watch('editor.afform', function () { $scope.changesSaved = $scope.changesSaved === 1; }, true); } this.getFormType = function() { - return $scope.afform.type; + return editor.afform.type; }; $scope.updateLayoutHtml = function() { $scope.layoutHtml = '...Loading...'; - crmApi4('Afform', 'convert', {layout: $scope.afform.layout, from: 'deep', to: 'html', formatWhitespace: true}) + crmApi4('Afform', 'convert', {layout: editor.afform.layout, from: 'deep', to: 'html', formatWhitespace: true}) .then(function(r){ $scope.layoutHtml = r[0].layout || '(Error)'; }) @@ -140,12 +150,17 @@ delete $scope.entities[type + num].loading; if (selectTab) { editor.selectEntity(type + num); + $timeout(function() { + editor.scrollToEntity(type + num); + }); } + $timeout(editor.adjustTabWidths); } if (meta.fields) { addToCanvas(); } else { + $timeout(editor.adjustTabWidths); crmApi4('Afform', 'loadAdminData', { definition: {type: 'form'}, entity: type @@ -165,6 +180,7 @@ this.selectEntity = function(entityName) { $scope.selectedEntityName = entityName; + $timeout(editor.adjustTabWidths); }; this.getEntity = function(entityName) { @@ -175,19 +191,42 @@ return $scope.selectedEntityName; }; + this.getEntityDefn = function(entity) { + if (entity.type === 'Contact' && entity.data.contact_type) { + return editor.meta.entities[entity.data.contact_type]; + } + return editor.meta.entities[entity.type]; + }; + + // Scroll an entity's first fieldset into view of the canvas + this.scrollToEntity = function(entityName) { + var $canvas = $('#afGuiEditor-canvas-body'), + $entity = $('.af-gui-container-type-fieldset[data-entity="' + entityName + '"]').first(), + // Scrolltop value needed to place entity's fieldset at top of canvas + scrollValue = $canvas.scrollTop() + ($entity.offset().top - $canvas.offset().top), + // Maximum possible scrollTop (height minus contents height, adjusting for padding) + maxScroll = $('#afGuiEditor-canvas-body > *').height() - $canvas.height() + 20; + // Exceeding the maximum scrollTop breaks the animation so keep it under the limit + $canvas.animate({scrollTop: scrollValue > maxScroll ? maxScroll : scrollValue}, 500); + }; + this.getAfform = function() { - return $scope.afform; + return editor.afform; + }; + + this.getEntities = function(filter) { + return filter ? _.filter($scope.entities, filter) : _.toArray($scope.entities); }; this.toggleContactSummary = function() { - if ($scope.afform.contact_summary) { - $scope.afform.contact_summary = false; - if ($scope.afform.type === 'search') { + if (editor.afform.contact_summary) { + editor.afform.contact_summary = false; + if (editor.afform.type === 'search') { delete editor.searchDisplay.filters; } } else { - $scope.afform.contact_summary = 'block'; - if ($scope.afform.type === 'search') { + editor.afform.contact_summary = 'block'; + if (editor.afform.type === 'search') { editor.searchDisplay.filters = editor.searchFilters[0].key; } } @@ -228,6 +267,30 @@ return options; } + this.getLink = function() { + if (editor.afform.server_route) { + return CRM.url(editor.afform.server_route, null, editor.afform.is_public ? 'front' : 'back'); + } + }; + + // Options for ui-sortable in field palette + this.getSortableOptions = function(entityName) { + if (!sortableOptions[entityName + '']) { + sortableOptions[entityName + ''] = { + helper: 'clone', + appendTo: '#afGuiEditor-canvas-body > af-gui-container', + containment: '#afGuiEditor-canvas-body', + update: editor.onDrop, + items: '> div:not(.disabled)', + connectWith: '#afGuiEditor-canvas ' + (entityName ? '[data-entity="' + entityName + '"] > ' : '') + '[ui-sortable]', + placeholder: 'af-gui-dropzone', + tolerance: 'pointer', + scrollSpeed: 8 + }; + } + return sortableOptions[entityName + '']; + }; + // Validates that a drag-n-drop action is allowed this.onDrop = function(event, ui) { var sort = ui.item.sortable; @@ -238,34 +301,34 @@ $target = $(sort.droptarget[0]), $item = $(ui.item[0]); // Fields cannot be dropped outside their own entity - if ($item.is('[af-gui-field]') || $item.has('[af-gui-field]').length) { + if ($item.find('af-gui-field').length) { if ($source.closest('[data-entity]').attr('data-entity') !== $target.closest('[data-entity]').attr('data-entity')) { return sort.cancel(); } } // Entity-fieldsets cannot be dropped into other entity-fieldsets - if ((sort.model['af-fieldset'] || $item.has('.af-gui-fieldset').length) && $target.closest('.af-gui-fieldset').length) { + if ((sort.model['af-fieldset'] || $item.find('.af-gui-fieldset').length) && $target.closest('.af-gui-fieldset').length) { return sort.cancel(); } } }; $scope.save = function() { - var afform = JSON.parse(angular.toJson($scope.afform)); + var afform = JSON.parse(angular.toJson(editor.afform)); // This might be set to undefined by validation afform.server_route = afform.server_route || ''; $scope.saving = $scope.changesSaved = true; crmApi4('Afform', 'save', {formatWhitespace: true, records: [afform]}) .then(function (data) { $scope.saving = false; - $scope.afform.name = data[0].name; + editor.afform.name = data[0].name; if (editor.mode !== 'edit') { $location.url('/edit/' + data[0].name); } }); }; - $scope.$watch('afform.title', function(newTitle, oldTitle) { + $scope.$watch('editor.afform.title', function(newTitle, oldTitle) { if (typeof oldTitle === 'string') { _.each($scope.entities, function(entity) { if (entity.data && entity.data.source === oldTitle) { @@ -274,6 +337,27 @@ }); } }); + + // Force editor panels to a fixed height, to avoid palette scrolling offscreen + function fixEditorHeight() { + var height = $(window).height() - $('#afGuiEditor').offset().top; + $('#afGuiEditor').height(Math.floor(height)); + } + + // Compress tabs on small screens + this.adjustTabWidths = function() { + $('#afGuiEditor .panel-heading ul.nav-tabs li.active').css('max-width', ''); + $('#afGuiEditor .panel-heading ul.nav-tabs').each(function() { + var remainingSpace = Math.floor($(this).width()) - 1, + inactiveTabs = $(this).children('li.fluid-width-tab').not('.active'); + $(this).children('.active,:not(.fluid-width-tab)').each(function() { + remainingSpace -= $(this).width(); + }); + if (inactiveTabs.length) { + inactiveTabs.css('max-width', Math.floor(remainingSpace / inactiveTabs.length) + 'px'); + } + }); + }; } }); diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorCanvas.html b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorCanvas.html index df975f1058..4321a8851a 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorCanvas.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorCanvas.html @@ -2,14 +2,14 @@ <div class="panel-heading"> <div class="form-inline pull-right"> - <div class="form-group" ng-if="changesSaved && !saving && afform.server_route"> - <a target="_blank" href="{{ crmUrl(afform.server_route) }}"> + <div class="form-group" ng-if="changesSaved && !saving && editor.afform.server_route"> + <a target="_blank" href="{{ editor.getLink() }}"> <i class="crm-i fa-external-link"></i> {{:: ts('View Page') }} </a> </div> <div class="btn-group btn-group-md"> - <button type="submit" class="btn" ng-class="{'btn-primary': !changesSaved && !saving, 'btn-warning': saving, 'btn-success': changesSaved}" ng-disabled="changesSaved || saving || !afform.title" ng-click="save()"> + <button type="submit" class="btn" ng-class="{'btn-primary': !changesSaved && !saving, 'btn-warning': saving, 'btn-success': changesSaved}" ng-disabled="changesSaved || saving || !editor.afform.title" ng-click="save()"> <i class="crm-i" ng-class="{'fa-check': !saving, 'fa-spin fa-spinner': saving}"></i> <span ng-if="changesSaved && !saving">{{:: ts('Saved') }}</span> <span ng-if="!changesSaved && !saving">{{:: ts('Save') }}</span> @@ -21,11 +21,13 @@ <ul class="nav nav-tabs"> <li role="presentation" ng-class="{active: canvasTab === 'layout'}"> <a href ng-click="canvasTab = 'layout'"> + <i class="crm-i fa-list-alt"></i> <span>{{:: ts('Form Layout') }}</span> </a> </li> <li role="presentation" ng-class="{active: canvasTab === 'markup'}"> <a href ng-click="canvasTab = 'markup'; updateLayoutHtml()"> + <i class="crm-i fa-code"></i> <span>{{:: ts('Markup') }}</span> </a> </li> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorPalette.html b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorPalette.html index 02d2b40686..fe098c0f96 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorPalette.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditorPalette.html @@ -1,27 +1,31 @@ <div id="afGuiEditor-palette-config" class="panel panel-default"> - <ul id="afGuiEditor-palette-tabs" class="panel-heading nav nav-tabs"> - <li role="presentation" ng-class="{active: selectedEntityName === null}"> + <div class="panel-heading"> + <ul id="afGuiEditor-palette-tabs" class="nav nav-tabs"> + <li role="presentation" class="fluid-width-tab" ng-class="{active: selectedEntityName === null}" title="{{:: ts('Form Settings') }}"> <a href ng-click="editor.selectEntity(null)"> + <i class="crm-i fa-gear"></i> <span>{{:: ts('Form Settings') }}</span> </a> </li> - <li role="presentation" ng-repeat="entity in entities" ng-class="{active: selectedEntityName === entity.name}"> - <a href ng-click="editor.selectEntity(entity.name)"> - <span ng-if="!entity.loading && editor.allowEntityConfig" crm-ui-editable ng-model="entity.label">{{ entity.label }}</span> - <span ng-if="!entity.loading && !editor.allowEntityConfig">{{ entity.label }}</span> + <li role="presentation" ng-repeat="entity in entities" class="fluid-width-tab" ng-class="{active: selectedEntityName === entity.name}" title="{{ entity.label }}"> + <a href ng-click="editor.selectEntity(entity.name); editor.scrollToEntity(entity.name);"> + <i class="crm-i {{:: editor.getEntityDefn(entity).icon }}"></i> + <span ng-if="!entity.loading && editor.allowEntityConfig && selectedEntityName === entity.name" crm-ui-editable ng-model="entity.label" ng-change="editor.adjustTabWidths()">{{ entity.label }}</span> + <span ng-if="!entity.loading && !(editor.allowEntityConfig && selectedEntityName === entity.name)">{{ entity.label }}</span> <i ng-if="entity.loading" class="crm-i fa-spin fa-spinner"></i> </a> </li> - <li role="presentation" ng-repeat="(key, searchDisplay) in editor.meta.searchDisplays" ng-class="{active: selectedEntityName === key}"> + <li role="presentation" ng-repeat="(key, searchDisplay) in editor.meta.searchDisplays" class="fluid-width-tab" ng-class="{active: selectedEntityName === key}" title="{{ searchDisplay.label }}"> <a href ng-click="editor.selectEntity(key)"> + <i class="crm-i {{:: searchDisplay['type:icon'] }}"></i> <span>{{ searchDisplay.label }}</span> </a> </li> - <li role="presentation" class="dropdown" ng-if="editor.allowEntityConfig"> - <a href class="dropdown-toggle" data-toggle="dropdown" title="{{ ts('Add Entity') }}"> - <span><i class="crm-i fa-plus"></i></span> + <li role="presentation" class="dropdown" ng-if="editor.allowEntityConfig" title="{{:: ts('Add Entity') }}"> + <a href class="dropdown-toggle" data-toggle="dropdown"> + <i class="crm-i fa-plus"></i> </a> - <ul class="dropdown-menu"> + <ul class="dropdown-menu dropdown-menu-right"> <li ng-repeat="(entityName, entity) in editor.meta.entities" ng-if="entity.defaults"> <a href ng-click="editor.addEntity(entityName, true)"> <i class="crm-i {{:: entity.icon }}"></i> @@ -31,6 +35,7 @@ </ul> </li> </ul> + </div> <div class="panel-body" ng-include="'~/afGuiEditor/config-form.html'" ng-if="selectedEntityName === null"></div> <div class="panel-body" ng-repeat="entity in entities" ng-if="selectedEntityName === entity.name"> <af-gui-entity entity="entity"></af-gui-entity> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js index e2d2c249a8..8a806cfd44 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js @@ -72,7 +72,9 @@ function filterFields(fields) { return _.transform(fields, function(fieldList, field) { - if (!search || _.contains(field.name, search) || _.contains(field.label.toLowerCase(), search)) { + if (!field.readonly && + (!search || _.contains(field.name, search) || _.contains(field.label.toLowerCase(), search)) + ) { fieldList.push(fieldDefaults(field)); } }, []); diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.html b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.html index 1c337c553d..57f26202cf 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.html @@ -22,26 +22,26 @@ <div class="af-gui-entity-palette-select-list"> <div ng-if="elementList.length"> <label>{{:: ts('Elements') }}</label> - <div ui-sortable="{update: buildPaletteLists, items: '> div:not(.disabled)', connectWith: '[ui-sortable]', placeholder: 'af-gui-dropzone'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="elementList"> + <div ui-sortable="$ctrl.editor.getSortableOptions()" ui-sortable-update="buildPaletteLists" ng-model="elementList"> <div ng-repeat="element in elementList" > - {{:: elementTitles[$index] }} + <div class="af-gui-palette-item">{{:: elementTitles[$index] }}</div> </div> </div> </div> <div ng-if="blockList.length"> <label>{{:: ts('Blocks') }}</label> - <div ui-sortable="{update: buildPaletteLists, items: '> div:not(.disabled)', connectWith: '[data-entity=\'' + $ctrl.entity.name + '\'] > [ui-sortable]', placeholder: 'af-gui-dropzone'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="blockList"> + <div ui-sortable="$ctrl.editor.getSortableOptions($ctrl.entity.name)" ui-sortable-update="buildPaletteLists" ng-model="blockList"> <div ng-repeat="block in blockList" ng-class="{disabled: blockInUse(block)}"> - {{:: blockTitles[$index] }} + <div class="af-gui-palette-item">{{:: blockTitles[$index] }}</div> </div> </div> </div> <div ng-repeat="fieldGroup in fieldList"> <div ng-if="fieldGroup.fields.length"> <label>{{ fieldGroup.label }}</label> - <div ui-sortable="{update: buildPaletteLists, items: '> div:not(.disabled)', connectWith: '[data-entity=\'' + fieldGroup.entityName + '\'] > [ui-sortable]', placeholder: 'af-gui-dropzone'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="fieldGroup.fields"> + <div ui-sortable="$ctrl.editor.getSortableOptions(fieldGroup.entityName)" ui-sortable-update="buildPaletteLists" ng-model="fieldGroup.fields"> <div ng-repeat="field in fieldGroup.fields" ng-class="{disabled: fieldInUse(field.name)}"> - {{:: getField(fieldGroup.entityType, field.name).label }} + <div class="af-gui-palette-item">{{:: getField(fieldGroup.entityType, field.name).label }}</div> </div> </div> </div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js index 57dab3b119..9ca8f4c98b 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js @@ -3,12 +3,15 @@ "use strict"; // Cribbed from the Api4 Explorer - angular.module('afGuiEditor').directive('afGuiFieldValue', function() { + angular.module('afGuiEditor').directive('afGuiFieldValue', function(afGui) { return { scope: { field: '=afGuiFieldValue' }, - require: 'ngModel', + require: { + ngModel: 'ngModel', + editor: '^^afGuiEditor' + }, link: function (scope, element, attrs, ctrl) { var ts = scope.ts = CRM.ts('org.civicrm.afform_admin'), multi; @@ -25,7 +28,8 @@ } function makeWidget(field) { - var $el = $(element), + var options, + $el = $(element), inputType = field.input_type, dataType = field.data_type; multi = field.serialize || dataType === 'Array'; @@ -34,9 +38,14 @@ } else if (field.fk_entity || field.options || dataType === 'Boolean') { if (field.fk_entity) { - $el.crmEntityRef({entity: field.fk_entity, select:{multiple: multi}}); + // Static options for choosing current user or other entities on the form + options = field.fk_entity === 'Contact' ? ['user_contact_id'] : []; + _.each(ctrl.editor.getEntities({type: field.fk_entity}), function(entity) { + options.push({id: entity.name, label: entity.label, icon: afGui.meta.entities[entity.type].icon}); + }); + $el.crmEntityRef({entity: field.fk_entity, select: {multiple: multi}, static: options}); } else if (field.options) { - var options = _.transform(field.options, function(options, val) { + options = _.transform(field.options, function(options, val) { options.push({id: val.id, text: val.label}); }, []); $el.select2({data: options, multiple: multi}); @@ -72,13 +81,13 @@ }; // Copied from ng-list - ctrl.$parsers.push(parseList); - ctrl.$formatters.push(function(value) { + ctrl.ngModel.$parsers.push(parseList); + ctrl.ngModel.$formatters.push(function(value) { return _.isArray(value) ? value.join(', ') : value; }); // Copied from ng-list - ctrl.$isEmpty = function(value) { + ctrl.ngModel.$isEmpty = function(value) { return !value || !value.length; }; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.html b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.html index 9115234d9a..17a131afcf 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.html @@ -7,25 +7,25 @@ <div class="af-gui-entity-palette-select-list"> <div ng-if="elementList.length"> <label>{{:: ts('Elements') }}</label> - <div ui-sortable="{update: buildPaletteLists, items: '> div:not(.disabled)', connectWith: '[ui-sortable]', placeholder: 'af-gui-dropzone'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="elementList"> + <div ui-sortable="$ctrl.editor.getSortableOptions()" ui-sortable-update="buildPaletteLists" ng-model="elementList"> <div ng-repeat="element in elementList" > - {{:: elementTitles[$index] }} + <div class="af-gui-palette-item">{{:: elementTitles[$index] }}</div> </div> </div> </div> <div ng-if="blockList.length"> <label>{{:: ts('Blocks') }}</label> - <div ui-sortable="{update: buildPaletteLists, items: '> div:not(.disabled)', connectWith: '[ui-sortable]', placeholder: 'af-gui-dropzone'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="blockList"> + <div ui-sortable="$ctrl.editor.getSortableOptions()" ui-sortable-update="buildPaletteLists" ng-model="blockList"> <div ng-repeat="block in blockList" ng-class="{disabled: blockInUse(block)}"> - {{:: blockTitles[$index] }} + <div class="af-gui-palette-item">{{:: blockTitles[$index] }}</div> </div> </div> </div> <div ng-if="calcFieldList.length"> <label>{{:: ts('Calculated Fields') }}</label> - <div ui-sortable="{update: buildPaletteLists, items: '> div:not(.disabled)', connectWith: '[ui-sortable]', placeholder: 'af-gui-dropzone'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="calcFieldList"> + <div ui-sortable="$ctrl.editor.getSortableOptions()" ui-sortable-update="buildPaletteLists" ng-model="calcFieldList"> <div ng-repeat="field in calcFieldList" ng-class="{disabled: fieldInUse(field.name)}"> - {{:: field.defn.label }} + <div class="af-gui-palette-item">{{:: field.defn.label }}></div> </div> </div> </div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html index 0bce83afd6..59d04705b9 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html @@ -2,26 +2,26 @@ <div class="form-group"> <label for="af_config_form_title"> - {{:: ts('Title:') }} <span class="crm-marker">*</span> + {{:: ts('Title') }} <span class="crm-marker">*</span> </label> <p class="help-block">{{:: ts('Public title (usually displayed at the top of the form).') }}</p> - <input ng-model="afform.title" class="form-control" id="af_config_form_title" required title="{{:: ts('Required') }}" /> + <input ng-model="editor.afform.title" class="form-control" id="af_config_form_title" required title="{{:: ts('Required') }}" /> </div> <div class="form-group"> <label for="af_config_form_description"> - {{:: ts('Description:') }} + {{:: ts('Description') }} </label> - <textarea ng-model="afform.description" class="form-control" id="af_config_form_description"></textarea> + <textarea ng-model="editor.afform.description" class="form-control" id="af_config_form_description"></textarea> <p class="help-block">{{:: ts("Internal note about the form's purpose (not displayed on form).") }}</p> <!-- Description is "semi-private": not generally public, but not audited for secrecy --> </div> <div class="form-group"> <label for="af_config_form_permission"> - {{:: ts('Permission:') }} + {{:: ts('Permission') }} </label> - <input ng-model="afform.permission" class="form-control" id="af_config_form_permission" crm-ui-select="{data: editor.meta.permissions}" /> + <input ng-model="editor.afform.permission" class="form-control" id="af_config_form_permission" crm-ui-select="{data: editor.meta.permissions}" /> <p class="help-block">{{:: ts('What permission is required to use this form?') }}</p> </div> @@ -30,31 +30,31 @@ <div class="form-group" ng-class="{'has-error': !!config_form.server_route.$error.pattern}"> <label for="af_config_form_server_route"> - {{:: ts('Page:') }} + {{:: ts('Page') }} </label> - <input ng-model="afform.server_route" name="server_route" class="form-control" id="af_config_form_server_route" pattern="^civicrm\/[-0-9a-zA-Z\/_]+$" onfocus="this.value = this.value || 'civicrm/'" onblur="if (this.value === 'civicrm/') this.value = ''" title="{{:: ts('Path must begin with "civicrm/"') }}"> + <input ng-model="editor.afform.server_route" name="server_route" class="form-control" id="af_config_form_server_route" pattern="^civicrm\/[-0-9a-zA-Z\/_]+$" onfocus="this.value = this.value || 'civicrm/'" onblur="if (this.value === 'civicrm/') this.value = ''" title="{{:: ts('Path must begin with "civicrm/"') }}"> <p class="help-block">{{:: ts('Expose the form as a standalone webpage. (Example: "civicrm/my-form")') }}</p> </div> - <div class="form-group" ng-if="!!afform.server_route"> + <div class="form-group" ng-if="!!editor.afform.server_route"> <label> - <input type="checkbox" ng-model="afform.is_public"> - {{:: ts('Style page to match front-end website') }} + <input type="checkbox" ng-model="editor.afform.is_public"> + {{:: ts('Accessible on front-end of website') }} </label> </div> - <div class="form-group" ng-if="!!afform.server_route"> + <div class="form-group" ng-if="!!editor.afform.server_route"> <label> - <input type="checkbox" ng-model="afform.is_token"> - {{:: ts('Provide email token') }} + <input type="checkbox" ng-model="editor.afform.is_token"> + {{:: ts('Provide Email Token') }} </label> <p class="help-block">{{:: ts('Allows CiviMail authors to easily link to this page') }}</p> </div> <div class="form-group"> <label> - <input type="checkbox" ng-model="afform.is_dashlet"> - {{:: ts('Add to dashboard') }} + <input type="checkbox" ng-model="editor.afform.is_dashlet"> + {{:: ts('Add to Dashboard') }} </label> <p class="help-block">{{:: ts('Allow CiviCRM users to add the form to their home dashboard.') }}</p> </div> @@ -62,17 +62,17 @@ <div class="form-group"> <div class="form-inline"> <label> - <input type="checkbox" ng-checked="afform.contact_summary" ng-click="editor.toggleContactSummary()"> - {{:: ts('Add to contact summary page') }} + <input type="checkbox" ng-checked="editor.afform.contact_summary" ng-click="editor.toggleContactSummary()"> + {{:: ts('Add to Contact Summary Page') }} </label> - <select class="form-control" ng-model="afform.contact_summary" ng-if="afform.contact_summary"> + <select class="form-control" ng-model="editor.afform.contact_summary" ng-if="editor.afform.contact_summary"> <option value="block">{{:: ts('As Block') }}</option> <option value="tab">{{:: ts('As Tab') }}</option> </select> </div> <p class="help-block">{{:: ts('Placement can be configured using the Contact Layout Editor.') }}</p> </div> - <div class="form-group" ng-if="afform.contact_summary && editor.searchDisplay && editor.searchFilters.length > 1"> + <div class="form-group" ng-if="editor.afform.contact_summary && editor.searchDisplay && editor.searchFilters.length > 1"> <div class="form-inline"> <label for="af_config_form_search_filters"> {{:: ts('Filter on:') }} @@ -92,7 +92,7 @@ <label for="af_config_redirect"> {{:: ts('Post-Submit Page') }} </label> - <input ng-model="afform.redirect" name="redirect" class="form-control" id="af_config_redirect" title="{{:: ts('Post-Submit Page') }}" pattern="^((http|https):\/\/|\/|civicrm\/)[-0-9a-zA-Z\/_.]\S+$" title="{{:: ts('Post-Submit Page must be either an absolute url, a relative url or a path starting with CiviCRM') }}"/> + <input ng-model="editor.afform.redirect" name="redirect" class="form-control" id="af_config_redirect" title="{{:: ts('Post-Submit Page') }}" pattern="^((http|https):\/\/|\/|civicrm\/)[-0-9a-zA-Z\/_.]\S+$" title="{{:: ts('Post-Submit Page must be either an absolute url, a relative url or a path starting with CiviCRM') }}"/> <p class="help-block">{{:: ts('Enter a URL or path that the form should redirect to following a successful submission.') }}</p> </div> </fieldset> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.html index b223477682..91b7009859 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.html @@ -8,7 +8,7 @@ </div> </div> </div> -<button type="button" class="btn {{ getSetStyle() }} disabled"> +<button type="button" class="btn {{ getSetStyle() }}" disabled> <span class="crm-editable-enabled" ng-click="pickIcon()" > <i class="crm-i {{ $ctrl.node['crm-icon'] }}"></i> </span> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js index 0b4d6a4d01..3cc79a086d 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js @@ -43,6 +43,8 @@ connectWith: '[ui-sortable]', cancel: 'input,textarea,button,select,option,a,.dropdown-menu', placeholder: 'af-gui-dropzone', + tolerance: 'pointer', + scrollSpeed: 8, containment: '#afGuiEditor-canvas-body' }; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html index 75652a8bc6..01d7acc719 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html @@ -2,7 +2,7 @@ <div href ng-click="$event.stopPropagation()" class="af-gui-field-select-in-dropdown"> <label>{{:: ts('Type:') }}</label> <select class="form-control" ng-model="getSet('input_type')" ng-model-options="{getterSetter: true}" title="{{:: ts('Field type') }}"> - <option ng-repeat="(type, label) in meta.inputType" value="{{ type }}" ng-if="inputTypeCanBe(type)">{{ label }}</option> + <option ng-repeat="type in $ctrl.inputTypes" value="{{ type.name }}">{{ type.label }}</option> </select> </div> </li> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js index 325f3bb3da..1be634793f 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js @@ -21,6 +21,7 @@ {id: '1', label: ts('Yes')}, {id: '0', label: ts('No')} ], + entityRefOptions = [], singleElement = [''], // When search-by-range is enabled the second element gets a suffix for some properties like "placeholder2" rangeElements = ['', '2'], @@ -29,7 +30,29 @@ relativeDatesWithoutPickRange = relativeDatesWithPickRange.slice(1); this.$onInit = function() { - $scope.meta = afGui.meta; + ctrl.inputTypes = _.transform(_.cloneDeep(afGui.meta.inputType), function(inputTypes, type) { + if (inputTypeCanBe(type.name)) { + // Change labels for EntityRef fields + if (ctrl.getDefn().input_type === 'EntityRef') { + var entity = ctrl.getFkEntity(); + if (entity && type.name === 'EntityRef') { + type.label = ts('Autocomplete %1', {1: entity.label}); + } + if (entity && type.name === 'Number') { + type.label = ts('%1 ID', {1: entity.label}); + } + if (entity && type.name === 'Select') { + type.label = ts('Select Form %1', {1: entity.label}); + } + } + inputTypes.push(type); + } + }); + }; + + this.getFkEntity = function() { + var fkEntity = ctrl.getDefn().fk_entity; + return ctrl.editor.meta.entities[fkEntity]; }; this.isSearch = function() { @@ -52,7 +75,7 @@ this.canBeMultiple = function() { return this.isSearch() && !_.includes(['Date', 'Timestamp'], ctrl.getDefn().data_type) && - $scope.getProp('input_type') === 'Select'; + _.includes(['Select', 'EntityRef'], $scope.getProp('input_type')); }; this.getRangeElements = function(type) { @@ -92,6 +115,17 @@ if (_.includes(['Date', 'Timestamp'], $scope.getProp('data_type'))) { return $scope.getProp('search_range') ? relativeDatesWithPickRange : relativeDatesWithoutPickRange; } + if (ctrl.getDefn().input_type === 'EntityRef') { + // Build a list of all entities in this form that can be referenced by this field. + var newOptions = _.map(ctrl.editor.getEntities({type: ctrl.getDefn().fk_entity}), function(entity) { + return {id: entity.name, label: entity.label}; + }, []); + // Store it in a stable variable for the sake of ng-repeat + if (!angular.equals(newOptions, entityRefOptions)) { + entityRefOptions = newOptions; + } + return entityRefOptions; + } return ctrl.getDefn().options || ($scope.getProp('input_type') === 'CheckBox' ? null : yesNo); }; @@ -104,15 +138,18 @@ $('#afGuiEditor').addClass('af-gui-editing-content'); }; - $scope.inputTypeCanBe = function(type) { + function inputTypeCanBe(type) { var defn = ctrl.getDefn(); + if (defn.input_type === type) { + return true; + } switch (type) { case 'CheckBox': case 'Radio': return defn.options || defn.data_type === 'Boolean'; case 'Select': - return defn.options || defn.data_type === 'Boolean' || (defn.input_type === 'Date' && ctrl.isSearch()); + return defn.options || defn.data_type === 'Boolean' || defn.input_type === 'EntityRef' || (defn.input_type === 'Date' && ctrl.isSearch()); case 'Date': return defn.input_type === 'Date'; @@ -121,13 +158,16 @@ case 'RichTextEditor': return (defn.data_type === 'Text' || defn.data_type === 'String'); - case 'ChainSelect': - return defn.input_type === 'ChainSelect'; + case 'Text': + return !(defn.options || defn.input_type === 'Date' || defn.input_type === 'EntityRef' || defn.data_type === 'Boolean'); + + case 'Number': + return !(defn.options || defn.data_type === 'Boolean'); default: - return true; + return false; } - }; + } // Returns a value from either the local field defn or the base defn $scope.getProp = function(propName) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Contact.html b/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Contact.html index f81fdda0f7..7d53b8e261 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Contact.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Contact.html @@ -1,9 +1,9 @@ <div ng-include="'~/afGuiEditor/entityConfig/Generic.html'"></div> -<div class="form-inline"> - <label> - {{:: ts('Autofill as:') }} +<div class="form-inline" ng-if="$ctrl.entity.actions.update"> + <label class="control-label" for="{{:: $ctrl.entity.name + '_autofill' }}"> + {{:: ts('Auto-Update') }} </label> - <select ng-model="$ctrl.entity.autofill" class="form-control"> + <select id="{{:: $ctrl.entity.name + '_autofill' }}" ng-model="$ctrl.entity.autofill" class="form-control"> <option value="">{{:: ts('None') }}</option> <option value="user">{{:: ts('Current User') }}</option> </select> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Generic.html b/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Generic.html index 3ed33fb94a..a2577e9ce1 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Generic.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/entityConfig/Generic.html @@ -1,15 +1,15 @@ <div class="form-group"> - <label class="control-label"> + <label class="control-label" for="{{:: $ctrl.entity.name + '_security' }}"> {{:: ts('Security') }} </label> - <select ng-model="$ctrl.entity.security" class="form-control"> - <option value="RBAC">{{:: ts('Role-based')}}</option> - <option value="FBAC">{{:: ts('Form-based')}}</option> + <select id="{{:: $ctrl.entity.name + '_security' }}" ng-model="$ctrl.entity.security" class="form-control"> + <option value="RBAC">{{:: ts('Role-Based') }}</option> + <option value="FBAC">{{:: ts('Form-Based') }}</option> </select> </div> <div class="form-group"> <label> - {{:: ts('Actions:') }} + {{:: ts('Allowed Actions') }} </label> <div class="checkbox-inline"> <label><input type="checkbox" ng-model="$ctrl.entity.actions.create">{{:: ts('Create') }}</label> @@ -18,9 +18,21 @@ <label><input type="checkbox" ng-model="$ctrl.entity.actions.update">{{:: ts('Update') }}</label> </div> </div> -<div class="checkbox"> - <label> - <input type="checkbox" ng-model="$ctrl.entity['url-autofill']" ng-true-value="'1'" ng-false-value="'0'" /> - {{:: ts('Allow url autofill') }} - </label> +<div ng-if="$ctrl.entity.actions.update"> + <div class="checkbox"> + <label> + <input type="checkbox" ng-model="$ctrl.entity['url-autofill']" ng-true-value="'1'" ng-false-value="'0'" /> + {{:: ts('Accept ID from URL') }} + </label> + </div> + <div class="description bg-warning" ng-if="$ctrl.entity['url-autofill'] === '1' && $ctrl.entity.security === 'FBAC'"> + <i class="crm-i fa-warning"></i> + {{:: ts('Without Role-Based access, users of the form will be able to view and update any %1 by changing the id in the URL.', {1: getMeta().label}) }} + </div> + <div class="description" ng-if="$ctrl.entity['url-autofill'] === '1'"> + {{:: ts('Update %1 by including the id in the link to this form:', {1: getMeta().label}) }} + <code> + {{ ($ctrl.editor.getLink() || '') + '#?' + $ctrl.entity.name + '=123' }} + </code> + </div> </div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/EntityRef.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/EntityRef.html new file mode 100644 index 0000000000..738be8efce --- /dev/null +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/EntityRef.html @@ -0,0 +1,8 @@ +<div class="form-inline"> + <div class="input-group"> + <input autocomplete="off" type="text" class="form-control" placeholder="{{:: ts('Select %1', {1: $ctrl.getFkEntity().label}) }}" title="{{:: ts('Click to add placeholder text') }}" ng-model="getSet('input_attrs.placeholder')" ng-model-options="{getterSetter: true}"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default" disabled><i class="crm-i fa-search"></i></button> + </div> + </div> +</div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/saveBlock.html b/civicrm/ext/afform/admin/ang/afGuiEditor/saveBlock.html index ff119a3945..c88160d552 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/saveBlock.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/saveBlock.html @@ -15,7 +15,7 @@ <label> <input type="radio" name="save-as" ng-value="null" ng-model="model.name" /> - {{:: ts('Save new block') }} + {{:: ts('Save New Block') }} </label> </div> <div class="alert alert-warning" ng-show="model.name"> diff --git a/civicrm/ext/afform/admin/info.xml b/civicrm/ext/afform/admin/info.xml index 892731c363..f86c6a08b7 100644 --- a/civicrm/ext/afform/admin/info.xml +++ b/civicrm/ext/afform/admin/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>0.5</version> + <version>5.39.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.23</ver> @@ -28,6 +28,6 @@ <namespace>CRM/AfformAdmin</namespace> </civix> <classloader> - <psr4 prefix="Civi\" path="Civi" /> + <psr4 prefix="Civi\" path="Civi"/> </classloader> </extension> diff --git a/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php b/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php index f4e4bd8634..c7e30aa4d8 100644 --- a/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php +++ b/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php @@ -164,7 +164,7 @@ class CRM_Afform_AfformScanner { public function addComputedFields(&$record) { $name = $record['name']; // Ex: $allPaths['viewIndividual'][0] == '/var/www/foo/afform/view-individual']. - $allPaths = $this->findFilePaths()[$name]; + $allPaths = $this->findFilePaths()[$name] ?? []; // $activeLayoutPath = $this->findFilePath($name, self::LAYOUT_FILE); // $activeMetaPath = $this->findFilePath($name, self::METADATA_FILE); $localLayoutPath = $this->createSiteLocalPath($name, self::LAYOUT_FILE); diff --git a/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php b/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php index 3530e555db..5b8bb9e7dd 100644 --- a/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php +++ b/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php @@ -15,9 +15,8 @@ class CRM_Afform_Page_AfformBase extends CRM_Core_Page { $this->assign('directive', $afform['directive_name']); - (new \Civi\Angular\AngularLoader()) - ->setModules([$afform['module_name'], 'afformStandalone']) - ->load(); + Civi::service('angularjs.loader') + ->addModules([$afform['module_name'], 'afformStandalone']); // If the user has "access civicrm" append home breadcrumb if (CRM_Core_Permission::check('access CiviCRM')) { diff --git a/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php b/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php index 10b965484d..3033386fe7 100644 --- a/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php +++ b/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php @@ -91,7 +91,7 @@ class AfformMetadataInjector { $params = [ 'action' => $action, 'where' => [['name', '=', $fieldName]], - 'select' => ['label', 'input_type', 'input_attrs', 'help_pre', 'help_post', 'options'], + 'select' => ['label', 'input_type', 'input_attrs', 'help_pre', 'help_post', 'options', 'fk_entity'], 'loadOptions' => ['id', 'label'], // If the admin included this field on the form, then it's OK to get metadata about the field regardless of user permissions. 'checkPermissions' => FALSE, @@ -124,6 +124,15 @@ class AfformMetadataInjector { if ($inputType === 'Select') { $fieldInfo['input_attrs']['placeholder'] = E::ts('Select'); } + elseif ($inputType === 'EntityRef') { + $info = civicrm_api4('Entity', 'get', [ + 'where' => [['name', '=', $fieldInfo['fk_entity']]], + 'checkPermissions' => FALSE, + 'select' => ['title', 'title_plural'], + ], 0); + $label = empty($fieldInfo['input_attrs']['multiple']) ? $info['title'] : $info['title_plural']; + $fieldInfo['input_attrs']['placeholder'] = E::ts('Select %1', [1 => $label]); + } if ($fieldInfo['input_type'] === 'Date') { // This flag gets used by the afField controller diff --git a/civicrm/ext/afform/core/Civi/Afform/Event/AfformBaseEvent.php b/civicrm/ext/afform/core/Civi/Afform/Event/AfformBaseEvent.php index 805cb5b4dd..d25c8068e1 100644 --- a/civicrm/ext/afform/core/Civi/Afform/Event/AfformBaseEvent.php +++ b/civicrm/ext/afform/core/Civi/Afform/Event/AfformBaseEvent.php @@ -3,23 +3,23 @@ namespace Civi\Afform\Event; use Symfony\Component\EventDispatcher\Event; -class AfformBaseEvent extends Event { +abstract class AfformBaseEvent extends Event { /** * @var array * The main 'Afform' record/configuration. */ - public $afform; + private $afform; /** * @var \Civi\Afform\FormDataModel */ - public $formDataModel; + private $formDataModel; /** * @var \Civi\Api4\Generic\AbstractAction */ - public $apiRequest; + private $apiRequest; /** * AfformBaseEvent constructor. @@ -33,6 +33,17 @@ class AfformBaseEvent extends Event { $this->apiRequest = $apiRequest; } + public function getAfform(): array { + return $this->afform; + } + + /** + * @return \Civi\Afform\FormDataModel + */ + public function getFormDataModel(): \Civi\Afform\FormDataModel { + return $this->formDataModel; + } + /** * @return \Civi\Api4\Generic\AbstractAction */ diff --git a/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php b/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php index 88112fd873..afe7e1cb1a 100644 --- a/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php +++ b/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php @@ -5,32 +5,52 @@ use Civi\Afform\FormDataModel; use Civi\Api4\Action\Afform\Submit; /** - * Class AfformSubmitEvent - * @package Civi\Afform\Event + * Handle submission of an "<af-form>" entity (or set of entities in the case of `<af-repeat>`). + * + * @see Submit::processGenericEntity + * which is the default handler of this event, with priority 0. * - * Handle submission of an "<af-form>". - * Listeners ought to take any recognized items from `entityValues`, handle - * them, and remove them. + * If special processing for an entity type is desired, add a new listener with a higher priority + * than 0, and do one of two things: * - * NOTE: I'm on the fence about whether to expose the arrays or more targeted - * methods. For the moment, this is only expected to be used internally, - * so KISS. + * 1. Fully process the save, and cancel event propagation to bypass `processGenericEntity`. + * 2. Manipulate the $records and allow the default listener to perform the save. + * Setting $record['fields'] = NULL will cancel saving a record, e.g. if the record is not valid. + * + * @package Civi\Afform\Event */ class AfformSubmitEvent extends AfformBaseEvent { /** + * One or more records to be saved for this entity. + * (because of `<af-repeat>` all entities are treated as if they may be multi) * @var array - * List of definitions of the entities. - * $entityDefns['spouse'] = ['type' => 'Individual']; */ - public $entityDefns; + public $records; + + /** + * @var string + * entityType + */ + private $entityType; /** + * @var string + * entityName e.g. Individual1, Activity1, + */ + private $entityName; + + /** + * Ids of each saved entity. + * + * Each key in the array corresponds to the name of an entity, + * and the value is an array of ids + * (because of `<af-repeat>` all entities are treated as if they may be multi) + * E.g. $entityIds['Individual1'] = [1]; + * * @var array - * List of submitted entities to save. - * $entityValues['Contact']['spouse'] = ['first_name' => 'Optimus Prime']; */ - public $entityValues; + private $entityIds; /** * AfformSubmitEvent constructor. @@ -38,23 +58,51 @@ class AfformSubmitEvent extends AfformBaseEvent { * @param array $afform * @param \Civi\Afform\FormDataModel $formDataModel * @param \Civi\Api4\Action\Afform\Submit $apiRequest - * @param array $entityDefns - * @param array $entityValues + * @param array $records + * @param string $entityType + * @param string $entityName + * @param array $entityIds */ - public function __construct(array $afform, FormDataModel $formDataModel, Submit $apiRequest, $entityDefns, array $entityValues) { + public function __construct(array $afform, FormDataModel $formDataModel, Submit $apiRequest, &$records, string $entityType, string $entityName, array &$entityIds) { parent::__construct($afform, $formDataModel, $apiRequest); - $this->entityDefns = $entityDefns; - $this->entityValues = $entityValues; + $this->records =& $records; + $this->entityType = $entityType; + $this->entityName = $entityName; + $this->entityIds =& $entityIds; } /** - * List of entity types which need processing. - * - * @return array - * Ex: ['Contact', 'Activity'] + * Get the entity type associated with this event + * @return string + */ + public function getEntityType(): string { + return $this->entityType; + } + + /** + * Get the entity name associated with this event + * @return string + */ + public function getEntityName(): string { + return $this->entityName; + } + + /** + * @return callable + * API4-style + */ + public function getSecureApi4() { + return $this->getFormDataModel()->getSecureApi4($this->entityName); + } + + /** + * @param $index + * @param $entityId + * @return $this */ - public function getTypes() { - return array_keys($this->entityValues); + public function setEntityId($index, $entityId) { + $this->entityIds[$this->entityName][$index]['id'] = $entityId; + return $this; } } diff --git a/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php b/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php index c31c7de2be..82b78fb189 100644 --- a/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php +++ b/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php @@ -161,11 +161,18 @@ class FormDataModel { } /** - * @return array + * @return array[] * Ex: $entities['spouse']['type'] = 'Contact'; */ public function getEntities() { return $this->entities; } + /** + * @return array + */ + public function getEntity($entityName) { + return $this->entities[$entityName] ?? NULL; + } + } diff --git a/civicrm/ext/afform/core/Civi/Afform/Utils.php b/civicrm/ext/afform/core/Civi/Afform/Utils.php new file mode 100644 index 0000000000..c183ae6794 --- /dev/null +++ b/civicrm/ext/afform/core/Civi/Afform/Utils.php @@ -0,0 +1,52 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Afform; + +/** + * + * @package Civi\Afform + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ +class Utils { + + /** + * Sorts entities according to references to each other + * + * Returns a list of entity names in order of when they should be processed, + * so that an entity being referenced is saved before the entity referencing it. + * + * @param $formEntities + * @param $entityValues + * @return string[] + */ + public static function getEntityWeights($formEntities, $entityValues) { + $sorter = new \MJS\TopSort\Implementations\FixedArraySort(); + + foreach ($formEntities as $entityName => $entity) { + $references = []; + foreach ($entityValues[$entityName] as $record) { + foreach ($record['fields'] as $fieldName => $fieldValue) { + foreach ((array) $fieldValue as $value) { + if (array_key_exists($value, $formEntities) && $value !== $entityName) { + $references[$value] = $value; + } + } + } + } + $sorter->add($entityName, $references); + } + // Return the list of entities ordered by weight + return $sorter->sort(); + } + +} diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/AbstractProcessor.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/AbstractProcessor.php index 1682f9bf5b..f497f0aef8 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/AbstractProcessor.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/AbstractProcessor.php @@ -6,7 +6,7 @@ use Civi\Afform\FormDataModel; use Civi\Api4\Generic\Result; /** - * Shared functionality for form submission processing. + * Shared functionality for form submission pre & post processing. * @package Civi\Api4\Action\Afform */ abstract class AbstractProcessor extends \Civi\Api4\Generic\AbstractAction { @@ -22,8 +22,11 @@ abstract class AbstractProcessor extends \Civi\Api4\Generic\AbstractAction { * Arguments present when loading the form * @var array */ - protected $args; + protected $args = []; + /** + * @var array + */ protected $_afform; /** @@ -32,6 +35,20 @@ abstract class AbstractProcessor extends \Civi\Api4\Generic\AbstractAction { */ protected $_formDataModel; + /** + * Ids of each autoloaded entity. + * + * Each key in the array corresponds to the name of an entity, + * and the value is an array of arrays + * (because of `<af-repeat>` all entities are treated as if they may be multi) + * E.g. $entityIds['Individual1'] = [['id' => 1, 'joins' => ['Email' => [1,2,3]]]; + * + * @var array + */ + protected $_entityIds = []; + + protected $_entityValues = []; + /** * @param \Civi\Api4\Generic\Result $result * @throws \API_Exception @@ -40,22 +57,79 @@ abstract class AbstractProcessor extends \Civi\Api4\Generic\AbstractAction { // This will throw an exception if the form doesn't exist or user lacks permission $this->_afform = (array) civicrm_api4('Afform', 'get', ['where' => [['name', '=', $this->name]]], 0); $this->_formDataModel = new FormDataModel($this->_afform['layout']); - $this->validateArgs(); + $this->loadEntities(); $result->exchangeArray($this->processForm()); } /** - * Strip out arguments that are not allowed on this form + * Load all entities + */ + private function loadEntities() { + foreach ($this->_formDataModel->getEntities() as $entityName => $entity) { + $this->_entityIds[$entityName] = []; + if (!empty($entity['actions']['update'])) { + if (!empty($this->args[$entityName]) && !empty($entity['url-autofill'])) { + $ids = array_map('trim', explode(',', $this->args[$entityName])); + // Limit number of records to 1 unless using af-repeat + $ids = array_slice($ids, 0, !empty($entity['af-repeat']) ? $entity['max'] ?? NULL : 1); + $this->loadEntity($entity, $ids); + } + elseif (!empty($entity['autofill'])) { + $this->autofillEntity($entity, $entity['autofill']); + } + } + } + } + + /** + * Fetch all data needed to display a given entity on this form + * + * @param array $entity + * @param array $ids + */ + private function loadEntity(array $entity, array $ids) { + $api4 = $this->_formDataModel->getSecureApi4($entity['name']); + $result = $api4($entity['type'], 'get', [ + 'where' => [['id', 'IN', $ids]], + 'select' => array_keys($entity['fields']), + ])->indexBy('id'); + foreach ($ids as $index => $id) { + $this->_entityIds[$entity['name']][$index] = [ + 'id' => isset($result[$id]) ? $id : NULL, + 'joins' => [], + ]; + if (isset($result[$id])) { + $data = ['fields' => $result[$id]]; + foreach ($entity['joins'] ?? [] as $joinEntity => $join) { + $data['joins'][$joinEntity] = (array) $api4($joinEntity, 'get', [ + 'where' => self::getJoinWhereClause($entity['type'], $joinEntity, $id), + 'limit' => !empty($join['af-repeat']) ? $join['max'] ?? 0 : 1, + 'select' => array_keys($join['fields']), + 'orderBy' => self::getEntityField($joinEntity, 'is_primary') ? ['is_primary' => 'DESC'] : [], + ]); + $this->_entityIds[$entity['name']][$index]['joins'][$joinEntity] = array_column($data['joins'][$joinEntity], 'id'); + } + $this->_entityValues[$entity['name']][$index] = $data; + } + } + } + + /** + * Fetch an entity based on its autofill settings + * + * @param $entity + * @param $mode */ - protected function validateArgs() { - $rawArgs = $this->args; - $entities = $this->_formDataModel->getEntities(); - $this->args = []; - foreach ($rawArgs as $arg => $val) { - if (!empty($entities[$arg]['url-autofill'])) { - $this->args[$arg] = $val; + private function autoFillEntity($entity, $mode) { + $id = NULL; + if ($entity['type'] == 'Contact') { + if ($mode == 'user') { + $id = \CRM_Core_Session::getLoggedInContactID(); } } + if ($id) { + $this->loadEntity($entity, [$id]); + } } /** @@ -72,9 +146,9 @@ abstract class AbstractProcessor extends \Civi\Api4\Generic\AbstractAction { */ protected static function getJoinWhereClause($mainEntityName, $joinEntityName, $mainEntityId) { $params = []; - if (self::fieldExists($joinEntityName, 'entity_id')) { + if (self::getEntityField($joinEntityName, 'entity_id')) { $params[] = ['entity_id', '=', $mainEntityId]; - if (self::fieldExists($joinEntityName, 'entity_table')) { + if (self::getEntityField($joinEntityName, 'entity_table')) { $params[] = ['entity_table', '=', 'civicrm_' . \CRM_Core_DAO_AllCoreTables::convertEntityNameToLower($mainEntityName)]; } } @@ -86,24 +160,54 @@ abstract class AbstractProcessor extends \Civi\Api4\Generic\AbstractAction { } /** - * Check if a field exists for a given entity + * Get field definition for a given entity * * @param $entityName * @param $fieldName - * @return bool + * @return array|null * @throws \API_Exception */ - public static function fieldExists($entityName, $fieldName) { - if (empty(\Civi::$statics[__CLASS__][__FUNCTION__][$entityName])) { + public static function getEntityField($entityName, $fieldName) { + if (!isset(\Civi::$statics[__CLASS__][__FUNCTION__][$entityName])) { $fields = civicrm_api4($entityName, 'getFields', [ 'checkPermissions' => FALSE, 'action' => 'create', - 'select' => ['name'], - 'includeCustom' => FALSE, ]); - \Civi::$statics[__CLASS__][__FUNCTION__][$entityName] = $fields->column('name'); + \Civi::$statics[__CLASS__][__FUNCTION__][$entityName] = $fields->indexBy('name'); } - return in_array($fieldName, \Civi::$statics[__CLASS__][__FUNCTION__][$entityName]); + return \Civi::$statics[__CLASS__][__FUNCTION__][$entityName][$fieldName] ?? NULL; + } + + /** + * @return array + */ + public function getArgs():array { + return $this->args; + } + + /** + * @param array $args + * @return $this + */ + public function setArgs(array $args) { + $this->args = $args; + return $this; + } + + /** + * @return string + */ + public function getName():string { + return $this->name; + } + + /** + * @param string $name + * @return $this + */ + public function setName(string $name) { + $this->name = $name; + return $this; } } diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Prefill.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Prefill.php index 0b69d39576..a7d1257f6f 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Prefill.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Prefill.php @@ -8,70 +8,8 @@ namespace Civi\Api4\Action\Afform; */ class Prefill extends AbstractProcessor { - protected $_data = []; - protected function processForm() { - foreach ($this->_formDataModel->getEntities() as $entityName => $entity) { - // Load entities from args - if (!empty($this->args[$entityName])) { - $this->loadEntity($entity, $this->args[$entityName]); - } - // Load entities from autofill settings - elseif (!empty($entity['autofill'])) { - $this->autofillEntity($entity, $entity['autofill']); - } - } - $data = []; - foreach ($this->_data as $name => $values) { - $data[] = ['name' => $name, 'values' => $values]; - } - return $data; - } - - /** - * Fetch all data needed to display a given entity on this form - * - * @param $entity - * @param $id - * @throws \API_Exception - */ - private function loadEntity($entity, $id) { - $api4 = $this->_formDataModel->getSecureApi4($entity['name']); - $result = $api4($entity['type'], 'get', [ - 'where' => [['id', '=', $id]], - 'select' => array_keys($entity['fields']), - ]); - foreach ($result as $item) { - $data = ['fields' => $item]; - foreach ($entity['joins'] ?? [] as $joinEntity => $join) { - $data['joins'][$joinEntity] = (array) $api4($joinEntity, 'get', [ - 'where' => self::getJoinWhereClause($entity['type'], $joinEntity, $item['id']), - 'limit' => !empty($join['af-repeat']) ? $join['max'] ?? 0 : 1, - 'select' => array_keys($join['fields']), - 'orderBy' => self::fieldExists($joinEntity, 'is_primary') ? ['is_primary' => 'DESC'] : [], - ]); - } - $this->_data[$entity['name']][] = $data; - } - } - - /** - * Fetch an entity based on its autofill settings - * - * @param $entity - * @param $mode - * @throws \API_Exception - */ - private function autoFillEntity($entity, $mode) { - $id = NULL; - if ($entity['type'] == 'Contact') { - if ($mode == 'user') { - $id = \CRM_Core_Session::getLoggedInContactID(); - } - } - if ($id) { - $this->loadEntity($entity, $id); - } + return \CRM_Utils_Array::makeNonAssociative($this->_entityValues, 'name', 'values'); } } diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Submit.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Submit.php index ec505c10c4..c33cb29bb4 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Submit.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Submit.php @@ -10,6 +10,9 @@ use Civi\Afform\Event\AfformSubmitEvent; */ class Submit extends AbstractProcessor { + /** + * @deprecated - You may simply use the event name directly. dev/core#1744 + */ const EVENT_NAME = 'civi.afform.submit'; /** @@ -22,42 +25,101 @@ class Submit extends AbstractProcessor { protected function processForm() { $entityValues = []; foreach ($this->_formDataModel->getEntities() as $entityName => $entity) { + $entityValues[$entityName] = []; + + // Gather submitted field values from $values['fields'] and sub-entities from $values['joins'] foreach ($this->values[$entityName] ?? [] as $values) { - $entityValues[$entity['type']][$entityName][] = $values + ['fields' => []]; - // Predetermined values override submitted values - if (!empty($entity['data'])) { - foreach ($entityValues[$entity['type']][$entityName] as $index => $vals) { - $entityValues[$entity['type']][$entityName][$index]['fields'] = $entity['data'] + $vals['fields']; + // Only accept values from fields on the form + $values['fields'] = array_intersect_key($values['fields'] ?? [], $entity['fields']); + // Only accept joins set on the form + $values['joins'] = array_intersect_key($values['joins'] ?? [], $entity['joins']); + foreach ($values['joins'] as $joinEntity => &$joinValues) { + // Enforce the limit set by join[max] + $joinValues = array_slice($joinValues, 0, $entity['joins'][$joinEntity]['max'] ?? NULL); + // Only accept values from join fields on the form + foreach ($joinValues as $index => $vals) { + $joinValues[$index] = array_intersect_key($vals, $entity['joins'][$joinEntity]['fields']); } } + $entityValues[$entityName][] = $values; } - } - $event = new AfformSubmitEvent($this->_afform, $this->_formDataModel, $this, $this->_formDataModel->getEntities(), $entityValues); - \Civi::dispatcher()->dispatch(self::EVENT_NAME, $event); - foreach ($event->entityValues as $entityType => $entities) { - if (!empty($entities)) { - throw new \API_Exception(sprintf("Failed to process entities (type=%s; name=%s)", $entityType, implode(',', array_keys($entities)))); + // Predetermined values override submitted values + if (!empty($entity['data'])) { + foreach ($entityValues[$entityName] as $index => $vals) { + $entityValues[$entityName][$index]['fields'] = $entity['data'] + $vals['fields']; + } } } + $entityWeights = \Civi\Afform\Utils::getEntityWeights($this->_formDataModel->getEntities(), $entityValues); + foreach ($entityWeights as $entityName) { + $entityType = $this->_formDataModel->getEntity($entityName)['type']; + $records = $this->replaceReferences($entityName, $entityValues[$entityName]); + $this->fillIdFields($records, $entityName); + $event = new AfformSubmitEvent($this->_afform, $this->_formDataModel, $this, $records, $entityType, $entityName, $this->_entityIds); + \Civi::dispatcher()->dispatch('civi.afform.submit', $event); + } // What should I return? return []; } /** + * Replace Entity reference fields with the id of the referenced entity. + * @param string $entityName + * @param $records + */ + private function replaceReferences($entityName, $records) { + $entityNames = array_diff(array_keys($this->_entityIds), [$entityName]); + $entityType = $this->_formDataModel->getEntity($entityName)['type']; + foreach ($records as $key => $record) { + foreach ($record['fields'] as $field => $value) { + if (array_intersect($entityNames, (array) $value) && $this->getEntityField($entityType, $field)['input_type'] === 'EntityRef') { + if (is_array($value)) { + foreach ($value as $i => $val) { + if (in_array($val, $entityNames, TRUE)) { + $records[$key]['fields'][$field][$i] = $this->_entityIds[$val][0]['id'] ?? NULL; + } + } + } + else { + $records[$key]['fields'][$field] = $this->_entityIds[$value][0]['id'] ?? NULL; + } + } + } + } + return $records; + } + + /** + * Validate contact(s) meet the minimum requirements to be created (name and/or email). + * + * This requires a function because simple required fields validation won't work + * across multiple entities (contact + n email addresses). + * * @param \Civi\Afform\Event\AfformSubmitEvent $event * @throws \API_Exception * @see afform_civicrm_config */ - public static function processContacts(AfformSubmitEvent $event) { - foreach ($event->entityValues['Contact'] ?? [] as $entityName => $contacts) { - $api4 = $event->formDataModel->getSecureApi4($entityName); - foreach ($contacts as $contact) { - $saved = $api4('Contact', 'save', ['records' => [$contact['fields']]])->first(); - self::saveJoins('Contact', $saved['id'], $contact['joins'] ?? []); + public static function preprocessContact(AfformSubmitEvent $event): void { + if ($event->getEntityType() !== 'Contact') { + return; + } + // When creating a contact, verify they have a name or email address + foreach ($event->records as $index => $contact) { + if (!empty($contact['fields']['id'])) { + continue; + } + if (empty($contact['fields']) || \CRM_Contact_BAO_Contact::hasName($contact['fields'])) { + continue; } + foreach ($contact['joins']['Email'] ?? [] as $email) { + if (!empty($email['email'])) { + continue 2; + } + } + // Contact has no id, name, or email. Stop creation. + $event->records[$index]['fields'] = NULL; } - unset($event->entityValues['Contact']); } /** @@ -66,19 +128,32 @@ class Submit extends AbstractProcessor { * @see afform_civicrm_config */ public static function processGenericEntity(AfformSubmitEvent $event) { - foreach ($event->entityValues as $entityType => $entities) { - // Each record is an array of one or more items (can be > 1 if af-repeat is used) - foreach ($entities as $entityName => $records) { - $api4 = $event->formDataModel->getSecureApi4($entityName); - foreach ($records as $record) { - $saved = $api4($entityType, 'save', ['records' => [$record['fields']]])->first(); - self::saveJoins($entityType, $saved['id'], $record['joins'] ?? []); - } + $api4 = $event->getSecureApi4(); + foreach ($event->records as $index => $record) { + if (empty($record['fields'])) { + continue; + } + try { + $saved = $api4($event->getEntityType(), 'save', ['records' => [$record['fields']]])->first(); + $event->setEntityId($index, $saved['id']); + self::saveJoins($event->getEntityType(), $saved['id'], $record['joins'] ?? []); + } + catch (\API_Exception $e) { + // What to do here? Sometimes we should silently ignore errors, e.g. an optional entity + // intentionally left blank. Other times it's a real error the user should know about. } - unset($event->entityValues[$entityType]); } } + /** + * This saves joins (sub-entities) such as Email, Address, Phone, etc. + * + * @param $mainEntityName + * @param $entityId + * @param $joins + * @throws \API_Exception + * @throws \Civi\API\Exception\NotImplementedException + */ protected static function saveJoins($mainEntityName, $entityId, $joins) { foreach ($joins as $joinEntityName => $join) { $values = self::filterEmptyJoins($joinEntityName, $join); @@ -138,4 +213,32 @@ class Submit extends AbstractProcessor { }); } + /** + * @return array + */ + public function getValues():array { + return $this->values; + } + + /** + * @param array $values + * @return $this + */ + public function setValues(array $values) { + $this->values = $values; + return $this; + } + + /** + * @param array $records + * @param string $entityName + */ + private function fillIdFields(array &$records, string $entityName): void { + foreach ($records as $index => &$record) { + if (empty($record['fields']['id']) && !empty($this->_entityIds[$entityName][$index]['id'])) { + $record['fields']['id'] = $this->_entityIds[$entityName][$index]['id']; + } + } + } + } diff --git a/civicrm/ext/afform/core/Civi/Api4/Afform.php b/civicrm/ext/afform/core/Civi/Api4/Afform.php index 7c63c31e51..a9b38c5005 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Afform.php +++ b/civicrm/ext/afform/core/Civi/Api4/Afform.php @@ -16,7 +16,7 @@ use Civi\Api4\Generic\BasicBatchAction; * The `prefill` and `submit` actions are used for preparing forms and processing submissions. * * @see https://lab.civicrm.org/extensions/afform - * @searchable false + * @searchable none * @package Civi\Api4 */ class Afform extends Generic\AbstractEntity { @@ -161,6 +161,10 @@ class Afform extends Generic\AbstractEntity { [ 'name' => 'contact_summary', 'data_type' => 'String', + 'options' => [ + 'block' => ts('Contact Summary Block'), + 'tab' => ts('Contact Summary Tab'), + ], ], [ 'name' => 'repeat', @@ -220,4 +224,13 @@ class Afform extends Generic\AbstractEntity { ]; } + /** + * @inheritDoc + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['id_field'] = 'name'; + return $info; + } + } diff --git a/civicrm/ext/afform/core/afform.php b/civicrm/ext/afform/core/afform.php index 5529e0bdbe..a4e3bd27a5 100644 --- a/civicrm/ext/afform/core/afform.php +++ b/civicrm/ext/afform/core/afform.php @@ -2,7 +2,6 @@ require_once 'afform.civix.php'; use CRM_Afform_ExtensionUtil as E; -use Civi\Api4\Action\Afform\Submit; /** * Filter the content of $params to only have supported afform fields. @@ -50,8 +49,8 @@ function afform_civicrm_config(&$config) { Civi::$statics[__FUNCTION__] = 1; $dispatcher = Civi::dispatcher(); - $dispatcher->addListener(Submit::EVENT_NAME, [Submit::class, 'processContacts'], 500); - $dispatcher->addListener(Submit::EVENT_NAME, [Submit::class, 'processGenericEntity'], -1000); + $dispatcher->addListener('civi.afform.submit', ['\Civi\Api4\Action\Afform\Submit', 'processGenericEntity'], 0); + $dispatcher->addListener('civi.afform.submit', ['\Civi\Api4\Action\Afform\Submit', 'preprocessContact'], 10); $dispatcher->addListener('hook_civicrm_angularModules', ['\Civi\Afform\AngularDependencyMapper', 'autoReq'], -1000); $dispatcher->addListener('hook_civicrm_alterAngular', ['\Civi\Afform\AfformMetadataInjector', 'preprocess']); $dispatcher->addListener('hook_civicrm_check', ['\Civi\Afform\StatusChecks', 'hook_civicrm_check']); diff --git a/civicrm/ext/afform/core/ang/af/afField.component.js b/civicrm/ext/afform/core/ang/af/afField.component.js index 8a18811f21..3453ac7682 100644 --- a/civicrm/ext/afform/core/ang/af/afField.component.js +++ b/civicrm/ext/afform/core/ang/af/afField.component.js @@ -100,7 +100,7 @@ }; }; - // Getter/Setter function for fields of type select. + // Getter/Setter function for fields of type select or entityRef. $scope.getSetSelect = function(val) { var currentVal = $scope.dataProvider.getFieldData()[ctrl.fieldName]; // Setter diff --git a/civicrm/ext/afform/core/ang/af/fields/EntityRef.html b/civicrm/ext/afform/core/ang/af/fields/EntityRef.html new file mode 100644 index 0000000000..2874725fbf --- /dev/null +++ b/civicrm/ext/afform/core/ang/af/fields/EntityRef.html @@ -0,0 +1 @@ +<input class="form-control" id="{{:: fieldId }}" ng-model="getSetSelect" ng-model-options="{getterSetter: true}" crm-entityref="{entity: $ctrl.defn.fk_entity, select: {multiple: !!$ctrl.defn.input_attrs.multiple, placeholder: $ctrl.defn.input_attrs.placeholder}}" > diff --git a/civicrm/ext/afform/core/info.xml b/civicrm/ext/afform/core/info.xml index a0c34129e1..6e283533b8 100644 --- a/civicrm/ext/afform/core/info.xml +++ b/civicrm/ext/afform/core/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>0.5</version> + <version>5.39.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.23</ver> @@ -28,6 +28,6 @@ <namespace>CRM/Afform</namespace> </civix> <classloader> - <psr4 prefix="Civi\" path="Civi" /> + <psr4 prefix="Civi\" path="Civi"/> </classloader> </extension> diff --git a/civicrm/ext/afform/core/phpunit.xml.dist b/civicrm/ext/afform/core/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/afform/core/phpunit.xml.dist +++ b/civicrm/ext/afform/core/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/afform/core/templates/CRM/Afform/Page/AfformBase.tpl b/civicrm/ext/afform/core/templates/CRM/Afform/Page/AfformBase.tpl index 9fd1c1b629..ead23c7a08 100644 --- a/civicrm/ext/afform/core/templates/CRM/Afform/Page/AfformBase.tpl +++ b/civicrm/ext/afform/core/templates/CRM/Afform/Page/AfformBase.tpl @@ -1,5 +1,5 @@ -<div ng-app="afformStandalone"> +<crm-angular-js modules="afformStandalone"> <form id="bootstrap-theme"> <{$directive}></{$directive}> </form> -</div> +</crm-angular-js> diff --git a/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php b/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php index c759c16ee6..655f01f32b 100644 --- a/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php +++ b/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php @@ -18,7 +18,6 @@ class CRM_Afform_UtilTest extends \PHPUnit\Framework\TestCase implements Headles public function setUpHeadless() { return \Civi\Test::headless() ->installMe(__DIR__) - ->install(version_compare(CRM_Utils_System::version(), '5.19.alpha1', '<') ? ['org.civicrm.api4'] : []) ->apply(); } @@ -61,4 +60,87 @@ class CRM_Afform_UtilTest extends \PHPUnit\Framework\TestCase implements Headles $this->assertEquals($expected, $actual); } + public function formEntityWeightExampls() { + $exs = []; + $exs[] = [ + [ + 'Individual1' => ['type' => 'Contact', ['fields' => ['first_name', 'last_name']]], + 'Activity1' => ['type' => 'Activity', ['fields' => ['source_contact_id']]], + ], + [ + 'Individual1' => [['fields' => ['first_name' => 'Test', 'last_name' => 'Contact']]], + 'Activity1' => [['fields' => ['source_contact_id' => 'Individual1']]], + ], + [ + 'Individual1', + 'Activity1', + ], + ]; + $exs[] = [ + [ + 'Individual1' => ['type' => 'Contact', ['fields' => ['first_name', 'last_name']]], + 'Event1' => ['type' => 'Event', ['fields' => ['created_id']]], + 'LocBlock1' => ['type' => 'LocBlock', ['fields' => ['event_id']]], + ], + [ + 'Individual1' => [['fields' => ['first_name' => 'Test', 'last_name' => 'Contact']]], + 'Event1' => [['fields' => ['created_id' => 'Individual1']]], + 'LocBlock1' => [['fields' => ['event_id' => 'Event1']]], + ], + [ + 'Individual1', + 'Event1', + 'LocBlock1', + ], + ]; + $exs[] = [ + [ + 'Individual1' => ['type' => 'Contact', ['fields' => ['first_name', 'last_name']]], + 'LocBlock1' => ['type' => 'LocBlock', ['fields' => ['event_id']]], + 'Event1' => ['type' => 'Event', ['fields' => ['created_id']]], + ], + [ + 'Individual1' => [['fields' => ['first_name' => 'Test', 'last_name' => 'Contact']]], + 'LocBlock1' => [['fields' => ['event_id' => 'Event1']]], + 'Event1' => [['fields' => ['created_id' => 'Individual1']]], + ], + [ + 'Individual1', + 'Event1', + 'LocBlock1', + ], + ]; + $exs[] = [ + [ + 'Activity1' => ['type' => 'Activity', ['fields' => ['source_contact_id']]], + 'Individual1' => ['type' => 'Contact', ['fields' => ['first_name', 'last_name', 'employer_id']]], + 'Individual2' => ['type' => 'Contact', ['fields' => ['first_name', 'last_name', 'employer_id']]], + 'Organization1' => ['type' => 'Contact', ['fields' => ['organization_name']]], + ], + [ + 'Activity1' => [['fields' => ['source_contact_id' => 'Individual1', 'target_contact_id' => ['Individual2']]]], + 'Individual1' => [['fields' => ['first_name' => 'Test', 'last_name' => 'Contact', 'employer_id' => 'Organization1']]], + 'Individual2' => [ + ['fields' => ['first_name' => 'Test2', 'last_name' => 'Contact']], + ['fields' => ['first_name' => 'Test3', 'last_name' => 'Contact', 'employer_id' => 'Organization1']], + ], + 'Organization1' => [['fields' => ['first_name' => 'Test', 'last_name' => 'Contact']]], + ], + [ + 'Organization1', + 'Individual1', + 'Individual2', + 'Activity1', + ], + ]; + return $exs; + } + + /** + * @dataProvider formEntityWeightExampls + */ + public function testEntityWeights($formEntities, $entityValues, $expectedWeights) { + $this->assertEquals($expectedWeights, \Civi\Afform\Utils::getEntityWeights($formEntities, $entityValues)); + } + } diff --git a/civicrm/ext/afform/html/info.xml b/civicrm/ext/afform/html/info.xml index fca64082a3..e4d975ddf9 100644 --- a/civicrm/ext/afform/html/info.xml +++ b/civicrm/ext/afform/html/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>0.5</version> + <version>5.39.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.23</ver> diff --git a/civicrm/ext/afform/mock/ang/mockPublicForm.test.php b/civicrm/ext/afform/mock/ang/mockPublicForm.test.php index 70feb1f6a2..0eff06c829 100644 --- a/civicrm/ext/afform/mock/ang/mockPublicForm.test.php +++ b/civicrm/ext/afform/mock/ang/mockPublicForm.test.php @@ -13,7 +13,7 @@ class MockPublicFormTest extends \Civi\AfformMock\FormTestCase { $this->assertContentType('text/html', $r); $this->assertStatusCode(200, $r); $body = (string) $r->getBody(); - $this->assertContains('mockPublicForm', $body); + $this->assertStringContainsString('mockPublicForm', $body); } public function testPublicCreateAllowed() { @@ -51,16 +51,15 @@ class MockPublicFormTest extends \Civi\AfformMock\FormTestCase { $me[0]['fields']['first_name'] = 'Firsty' . $r; $me[0]['fields']['last_name'] = 'Lasty' . $r; - $this->submitError(['args' => [], 'values' => ['me' => $me]]); - $this->assertContentType('application/json')->assertStatusCode(403); + $this->submit(['args' => [], 'values' => ['me' => $me]]); - // Contact hasn't changed + // Original contact hasn't changed $get = Civi\Api4\Contact::get(FALSE)->addWhere('id', '=', $contact['id'])->execute()->single(); $this->assertEquals('FirstBegin', $get['first_name']); $this->assertEquals('LastBegin', $get['last_name']); - // No other contacts were created or edited with the requested value. - $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_contact WHERE first_name=%1', [1 => ["Firsty{$r}", 'String']])); + // Instead of updating original, a new contact was created. + $this->assertEquals(1, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_contact WHERE first_name=%1', [1 => ["Firsty{$r}", 'String']])); } /** diff --git a/civicrm/ext/afform/mock/info.xml b/civicrm/ext/afform/mock/info.xml index 240884394b..ffeb562900 100644 --- a/civicrm/ext/afform/mock/info.xml +++ b/civicrm/ext/afform/mock/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>0.5</version> + <version>5.39.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/afform/mock/phpunit.xml.dist b/civicrm/ext/afform/mock/phpunit.xml.dist index 973ea8bec8..3261cecb3c 100644 --- a/civicrm/ext/afform/mock/phpunit.xml.dist +++ b/civicrm/ext/afform/mock/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/afform/mock/tests/phpunit/Civi/AfformMock/FormTestCase.php b/civicrm/ext/afform/mock/tests/phpunit/Civi/AfformMock/FormTestCase.php index 113529ff8e..f794a073ff 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/Civi/AfformMock/FormTestCase.php +++ b/civicrm/ext/afform/mock/tests/phpunit/Civi/AfformMock/FormTestCase.php @@ -29,7 +29,7 @@ abstract class FormTestCase extends \PHPUnit\Framework\TestCase implements \Civi protected $formName = NULL; - protected function setUp() { + protected function setUp(): void { parent::setUp(); if ($this->formName === NULL && preg_match(';^(.*)\.test\.php$;', basename(static::FILE), $m)) { @@ -45,7 +45,7 @@ abstract class FormTestCase extends \PHPUnit\Framework\TestCase implements \Civi } } - protected function tearDown() { + protected function tearDown(): void { parent::tearDown(); } diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php new file mode 100644 index 0000000000..45222a343d --- /dev/null +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php @@ -0,0 +1,294 @@ +<?php + +/** + * Test case for Afform.prefill and Afform.submit. + * + * @group headless + */ +class api_v4_AfformContactUsageTest extends api_v4_AfformUsageTestCase { + + public static function setUpBeforeClass(): void { + parent::setUpBeforeClass(); + self::$layouts['aboutMe'] = <<<EOHTML +<af-form ctrl="modelListCtrl"> + <af-entity type="Contact" data="{contact_type: 'Individual'}" name="me" label="Myself" url-autofill="1" autofill="user" /> + <fieldset af-fieldset="me"> + <af-field name="first_name" /> + <af-field name="last_name" /> + </fieldset> +</af-form> +EOHTML; + self::$layouts['registerSite'] = <<<EOHTML +<af-form ctrl="afform"> + <af-entity data="{contact_type: 'Individual', source: 'Register A site'}" url-autofill="1" type="Contact" name="Individual1" label="Individual 1" actions="{create: true, update: true}" security="FBAC" /> + <af-entity url-autofill="1" type="Activity" name="Activity1" label="Activity 1" data="{activity_type_id: '1', source_contact_id: 'Individual1'}" actions="{create: true, update: true}" security="FBAC" /> + <fieldset af-fieldset="Individual1"> + <afblock-name-individual></afblock-name-individual> + </fieldset> + <fieldset af-fieldset="Activity1"> + <legend class="af-text">Activity 1</legend> + <af-field name="subject" /> + </fieldset> +</af-form> +EOHTML; + self::$layouts['employer'] = <<<EOHTML +<af-form ctrl="afform"> + <af-entity data="{contact_type: 'Individual'}" url-autofill="1" type="Contact" name="Individual1" label="Individual 1" actions="{create: true, update: true}" security="RBAC" autofill="user" /> + <af-entity data="{contact_type: 'Organization'}" type="Contact" name="Organization1" label="Organization 1" actions="{create: true, update: true}" security="RBAC" /> + <fieldset af-fieldset="Individual1"> + <legend class="af-text">Individual 1</legend> + <afblock-name-individual></afblock-name-individual> + <div af-join="Email" min="1" af-repeat="Add"> + <afjoin-email-default></afjoin-email-default> + </div> + <af-field name="employer_id" defn="{input_type: 'Select', input_attrs: {}}" /> + </fieldset> + <fieldset af-fieldset="Organization1"> + <legend class="af-text">Organization 1</legend> + <div class="af-container"> + <af-field name="organization_name" /> + </div> + <div af-join="Email"> + <afjoin-email-default></afjoin-email-default> + </div> + </fieldset> + <button class="af-button btn-primary" crm-icon="fa-check" ng-click="afform.submit()">Submit</button> +</af-form> +EOHTML; + } + + public function testAboutMeAllowed(): void { + $this->useValues([ + 'layout' => self::$layouts['aboutMe'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + + $cid = $this->createLoggedInUser(); + CRM_Core_Config::singleton()->userPermissionTemp = new CRM_Core_Permission_Temp(); + + $prefill = Civi\Api4\Afform::prefill() + ->setName($this->formName) + ->execute() + ->indexBy('name'); + $this->assertEquals('Logged In', $prefill['me']['values'][0]['fields']['first_name']); + $this->assertRegExp('/^User/', $prefill['me']['values'][0]['fields']['last_name']); + + $submission = [ + ['fields' => ['first_name' => 'Firsty', 'last_name' => 'Lasty']], + ]; + + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setValues(['me' => $submission]) + ->execute(); + + $contact = Civi\Api4\Contact::get(FALSE)->addWhere('id', '=', $cid)->execute()->first(); + $this->assertEquals('Firsty', $contact['first_name']); + $this->assertEquals('Lasty', $contact['last_name']); + } + + public function testCheckEntityReferenceFieldsReplacement(): void { + $this->useValues([ + 'layout' => self::$layouts['registerSite'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + + $firstName = uniqid(__FUNCTION__); + + $values = [ + 'Individual1' => [ + [ + 'fields' => [ + 'first_name' => $firstName, + 'last_name' => 'site', + // Not allowed to be updated because it's set in 'data' + 'source' => 'This field is set in the data array', + // Not allowed to be updated because it's not a field on the form + 'formal_title' => 'Danger this field is not on the form', + ], + ], + ], + 'Activity1' => [ + [ + 'fields' => [ + 'subject' => 'Individual1', + ], + ], + ], + ]; + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setValues($values) + ->execute(); + // Check that Activity was submitted correctly. + $activity = \Civi\Api4\Activity::get(FALSE)->execute()->first(); + $this->assertEquals('Individual1', $activity['subject']); + $contact = \Civi\Api4\Contact::get()->addWhere('first_name', '=', $firstName)->execute()->first(); + $this->assertEquals('site', $contact['last_name']); + // Check that the data overrides form submsision + $this->assertEquals('Register A site', $contact['source']); + // Check that the contact and the activity were correctly linked up as per the form. + $this->callAPISuccessGetSingle('ActivityContact', ['contact_id' => $contact['id'], 'activity_id' => $activity['id']]); + } + + public function testAboutMeForbidden(): void { + $this->useValues([ + 'layout' => self::$layouts['aboutMe'], + 'permission' => CRM_Core_Permission::ALWAYS_DENY_PERMISSION, + ]); + + $this->createLoggedInUser(); + CRM_Core_Config::singleton()->userPermissionTemp = new CRM_Core_Permission_Temp(); + + try { + Civi\Api4\Afform::prefill() + ->setName($this->formName) + ->setArgs([]) + ->execute() + ->indexBy('name'); + $this->fail('Expected authorization exception from Afform.prefill'); + } + catch (\API_Exception $e) { + // Should fail permission check + } + + try { + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setArgs([]) + ->setValues([ + 'does.n' => 'tmatter', + ]) + ->execute(); + $this->fail('Expected authorization exception from Afform.submit'); + } + catch (\API_Exception $e) { + // Should fail permission check + } + } + + public function testEmployerReference(): void { + $this->useValues([ + 'layout' => self::$layouts['employer'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + + $firstName = uniqid(__FUNCTION__); + $orgName = uniqid(__FUNCTION__); + + $values = [ + 'Individual1' => [ + [ + 'fields' => [ + 'first_name' => $firstName, + 'last_name' => 'employee', + // Selecting the Org entity as employer of the Individual + 'employer_id' => 'Organization1', + ], + ], + ], + 'Organization1' => [ + [ + 'fields' => [ + 'organization_name' => $orgName, + ], + ], + ], + ]; + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setValues($values) + ->execute(); + $contact = \Civi\Api4\Contact::get() + ->addWhere('first_name', '=', $firstName) + ->addWhere('last_name', '=', 'employee') + ->addJoin('Contact AS org', 'LEFT', ['employer_id', '=', 'org.id']) + ->addSelect('org.organization_name') + ->execute()->first(); + $this->assertEquals($orgName, $contact['org.organization_name']); + } + + public function testEmptyEmployerReference(): void { + $this->useValues([ + 'layout' => self::$layouts['employer'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + + $firstName = uniqid(__FUNCTION__); + $values = [ + 'Individual1' => [ + [ + 'fields' => [ + 'first_name' => $firstName, + 'last_name' => 'non-employee', + // This should result in a NULL value because organization_name is left blank + 'employer_id' => 'Organization1', + ], + ], + ], + 'Organization1' => [ + [ + 'fields' => [ + 'organization_name' => '', + ], + ], + ], + ]; + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setValues($values) + ->execute(); + $contact = \Civi\Api4\Contact::get() + ->addWhere('first_name', '=', $firstName) + ->addWhere('last_name', '=', 'non-employee') + ->addSelect('employer_id') + ->execute()->first(); + $this->assertNull($contact['employer_id']); + } + + public function testCreatingContactsWithOnlyEmail(): void { + $this->useValues([ + 'layout' => self::$layouts['employer'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + + $individualEmail = uniqid('individual@') . '.test'; + $orgEmail = uniqid('org@') . '.test'; + $locationType = CRM_Core_BAO_LocationType::getDefault()->id; + $values = [ + 'Individual1' => [ + [ + 'fields' => [ + 'employer_id' => 'Organization1', + ], + 'joins' => [ + 'Email' => [ + ['email' => $individualEmail, 'location_type_id' => $locationType], + ], + ], + ], + ], + 'Organization1' => [ + [ + 'fields' => [], + 'joins' => [ + 'Email' => [ + ['email' => $orgEmail, 'location_type_id' => $locationType], + ], + ], + ], + ], + ]; + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setValues($values) + ->execute(); + $contact = \Civi\Api4\Contact::get() + ->addWhere('display_name', '=', $individualEmail) + ->addJoin('Contact AS org', 'LEFT', ['employer_id', '=', 'org.id']) + ->addSelect('display_name', 'org.display_name') + ->execute()->first(); + $this->assertEquals($orgEmail, $contact['org.display_name']); + } + +} diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php new file mode 100644 index 0000000000..4249d393b0 --- /dev/null +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php @@ -0,0 +1,102 @@ +<?php + +/** + * Test case for Afform.prefill and Afform.submit. + * + * @group headless + */ +class api_v4_AfformCustomFieldUsageTest extends api_v4_AfformUsageTestCase { + + public static function setUpBeforeClass(): void { + parent::setUpBeforeClass(); + + self::$layouts['customMulti'] = <<<EOHTML +<af-form ctrl="afform"> + <af-entity data="{contact_type: 'Individual'}" type="Contact" name="Individual1" label="Individual 1" actions="{create: true, update: true}" security="FBAC" /> + <fieldset af-fieldset="Individual1"> + <legend class="af-text">Individual 1</legend> + <afblock-name-individual></afblock-name-individual> + <div af-join="Custom_MyThings" af-repeat="Add" max="2"> + <afjoin-custom-my-things></afjoin-custom-my-things> + </div> + </fieldset> + <button class="af-button btn-primary" crm-icon="fa-check" ng-click="afform.submit()">Submit</button> +</af-form> +EOHTML; + } + + /** + * Checks that by creating a multi-record field group, + * Afform has automatically generated a block to go with it, + * which can be submitted multiple times + */ + public function testMultiRecordCustomBlock(): void { + $customGroup = \Civi\Api4\CustomGroup::create(FALSE) + ->addValue('name', 'MyThings') + ->addValue('title', 'My Things') + ->addValue('style', 'Tab with table') + ->addValue('extends', 'Contact') + ->addValue('is_multiple', TRUE) + ->addValue('max_multiple', 2) + ->addChain('fields', \Civi\Api4\CustomField::save() + ->addDefault('custom_group_id', '$id') + ->setRecords([ + ['name' => 'my_text', 'label' => 'My Text', 'data_type' => 'String', 'html_type' => 'Text'], + ['name' => 'my_friend', 'label' => 'My Friend', 'data_type' => 'ContactReference', 'html_type' => 'Autocomplete-Select'], + ]) + ) + ->execute(); + + // Creating a custom group should automatically create an afform block + $block = \Civi\Api4\Afform::get() + ->addWhere('name', '=', 'afjoinCustom_MyThings') + ->setLayoutFormat('shallow') + ->setFormatWhitespace(TRUE) + ->execute()->first(); + $this->assertEquals(2, $block['repeat']); + $this->assertEquals('my_text', $block['layout'][0]['name']); + $this->assertEquals('my_friend', $block['layout'][1]['name']); + + $cid1 = $this->individualCreate([], 1); + $cid2 = $this->individualCreate([], 2); + + $this->useValues([ + 'layout' => self::$layouts['customMulti'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + $firstName = uniqid(__FUNCTION__); + $values = [ + 'Individual1' => [ + [ + 'fields' => [ + 'first_name' => $firstName, + 'last_name' => 'tester', + ], + 'joins' => [ + 'Custom_MyThings' => [ + ['my_text' => 'One', 'my_friend' => $cid1], + ['my_text' => 'Two', 'my_friend' => $cid2], + ['my_text' => 'Not allowed', 'my_friend' => $cid2], + ], + ], + ], + ], + ]; + Civi\Api4\Afform::submit() + ->setName($this->formName) + ->setValues($values) + ->execute(); + $contact = \Civi\Api4\Contact::get(FALSE) + ->addWhere('first_name', '=', $firstName) + ->addJoin('Custom_MyThings AS Custom_MyThings', 'LEFT', ['id', '=', 'Custom_MyThings.entity_id']) + ->addSelect('Custom_MyThings.my_text', 'Custom_MyThings.my_friend') + ->addOrderBy('Custom_MyThings.id') + ->execute(); + $this->assertEquals('One', $contact[0]['Custom_MyThings.my_text']); + $this->assertEquals($cid1, $contact[0]['Custom_MyThings.my_friend']); + $this->assertEquals('Two', $contact[1]['Custom_MyThings.my_text']); + $this->assertEquals($cid2, $contact[1]['Custom_MyThings.my_friend']); + $this->assertTrue(empty($contact[2])); + } + +} diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php index 5d310b7c2f..00eb9ef401 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php @@ -8,7 +8,7 @@ class api_v4_AfformRoutingTest extends \PHPUnit\Framework\TestCase implements \C protected $formName = 'mockPage'; - public static function setUpBeforeClass() { + public static function setUpBeforeClass(): void { \Civi\Test::e2e() ->install(['org.civicrm.afform', 'org.civicrm.afform-mock']) ->apply(); diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php deleted file mode 100644 index f13d6fa55d..0000000000 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php - -/** - * Test case for Afform.prefill and Afform.submit. - * - * @group headless - */ -class api_v4_AfformUsageTest extends api_v4_AfformTestCase { - use \Civi\Test\Api3TestTrait; - use \Civi\Test\ContactTestTrait; - - protected static $layouts = []; - - protected $formName; - - public static function setUpBeforeClass(): void { - parent::setUpBeforeClass(); - self::$layouts['aboutMe'] = <<<EOHTML -<af-form ctrl="modelListCtrl"> - <af-entity type="Contact" data="{contact_type: 'Individual'}" name="me" label="Myself" url-autofill="1" autofill="user" /> - <fieldset af-fieldset="me"> - <af-field name="first_name" /> - <af-field name="last_name" /> - </fieldset> -</af-form> -EOHTML; - } - - public function setUp(): void { - parent::setUp(); - $this->formName = 'mock' . rand(0, 100000); - } - - public function tearDown(): void { - Civi\Api4\Afform::revert() - ->setCheckPermissions(FALSE) - ->addWhere('name', '=', $this->formName) - ->execute(); - parent::tearDown(); - } - - public function testAboutMeAllowed(): void { - $this->useValues([ - 'layout' => self::$layouts['aboutMe'], - 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, - ]); - - $cid = $this->createLoggedInUser(); - CRM_Core_Config::singleton()->userPermissionTemp = new CRM_Core_Permission_Temp(); - - $prefill = Civi\Api4\Afform::prefill() - ->setName($this->formName) - ->setArgs([]) - ->execute() - ->indexBy('name'); - $this->assertEquals('Logged In', $prefill['me']['values'][0]['fields']['first_name']); - $this->assertRegExp('/^User/', $prefill['me']['values'][0]['fields']['last_name']); - - $me = $prefill['me']['values']; - $me[0]['fields']['first_name'] = 'Firsty'; - $me[0]['fields']['last_name'] = 'Lasty'; - - Civi\Api4\Afform::submit() - ->setName($this->formName) - ->setArgs([]) - ->setValues(['me' => $me]) - ->execute(); - - $contact = Civi\Api4\Contact::get()->setCheckPermissions(FALSE)->addWhere('id', '=', $cid)->execute()->first(); - $this->assertEquals('Firsty', $contact['first_name']); - $this->assertEquals('Lasty', $contact['last_name']); - } - - public function testAboutMeForbidden(): void { - $this->useValues([ - 'layout' => self::$layouts['aboutMe'], - 'permission' => CRM_Core_Permission::ALWAYS_DENY_PERMISSION, - ]); - - $this->createLoggedInUser(); - CRM_Core_Config::singleton()->userPermissionTemp = new CRM_Core_Permission_Temp(); - - try { - Civi\Api4\Afform::prefill() - ->setName($this->formName) - ->setArgs([]) - ->execute() - ->indexBy('name'); - $this->fail('Expected authorization exception from Afform.prefill'); - } - catch (\API_Exception $e) { - // Should fail permission check - } - - try { - Civi\Api4\Afform::submit() - ->setName($this->formName) - ->setArgs([]) - ->setValues([ - 'does.n' => 'tmatter', - ]) - ->execute(); - $this->fail('Expected authorization exception from Afform.submit'); - } - catch (\API_Exception $e) { - // Should fail permission check - } - } - - protected function useValues($values) { - $defaults = [ - 'title' => 'My form', - 'name' => $this->formName, - ]; - $full = array_merge($defaults, $values); - Civi\Api4\Afform::create() - ->setCheckPermissions(FALSE) - ->setLayoutFormat('html') - ->setValues($full) - ->execute(); - } - -} diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTestCase.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTestCase.php new file mode 100644 index 0000000000..9e121c5e72 --- /dev/null +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTestCase.php @@ -0,0 +1,43 @@ +<?php + +/** + * Test case for Afform.prefill and Afform.submit. + * + * @group headless + */ +abstract class api_v4_AfformUsageTestCase extends api_v4_AfformTestCase { + use \Civi\Test\Api3TestTrait; + use \Civi\Test\ContactTestTrait; + + protected static $layouts = []; + + protected $formName; + + public function setUp(): void { + parent::setUp(); + Civi\Api4\Afform::revert(FALSE) + ->addWhere('type', '=', 'block') + ->execute(); + $this->formName = 'mock' . rand(0, 100000); + } + + public function tearDown(): void { + Civi\Api4\Afform::revert(FALSE) + ->addWhere('name', '=', $this->formName) + ->execute(); + parent::tearDown(); + } + + protected function useValues($values) { + $defaults = [ + 'title' => 'My form', + 'name' => $this->formName, + ]; + $full = array_merge($defaults, $values); + Civi\Api4\Afform::create(FALSE) + ->setLayoutFormat('html') + ->setValues($full) + ->execute(); + } + +} diff --git a/civicrm/ext/authx/Civi/Authx/Authenticator.php b/civicrm/ext/authx/Civi/Authx/Authenticator.php index 49f103e8a1..6fa9dd702b 100644 --- a/civicrm/ext/authx/Civi/Authx/Authenticator.php +++ b/civicrm/ext/authx/Civi/Authx/Authenticator.php @@ -158,7 +158,7 @@ class Authenticator { // If any one of these passes, then we allow the authentication. $passGuard = []; - $passGuard[] = in_array('site_key', $useGuards) && defined('CIVICRM_SITE_KEY') && hash_equals(CIVICRM_SITE_KEY, $tgt->siteKey); + $passGuard[] = in_array('site_key', $useGuards) && defined('CIVICRM_SITE_KEY') && hash_equals(CIVICRM_SITE_KEY, (string) $tgt->siteKey); $passGuard[] = in_array('perm', $useGuards) && isset($perms[$tgt->credType]) && \CRM_Core_Permission::check($perms[$tgt->credType], $tgt->contactId); // JWTs are signed by us. We don't need user to prove that they're allowed to use them. $passGuard[] = ($tgt->credType === 'jwt'); diff --git a/civicrm/ext/authx/Civi/Authx/Drupal8.php b/civicrm/ext/authx/Civi/Authx/Drupal8.php index 34debea936..54f8c122a6 100644 --- a/civicrm/ext/authx/Civi/Authx/Drupal8.php +++ b/civicrm/ext/authx/Civi/Authx/Drupal8.php @@ -26,7 +26,7 @@ class Drupal8 implements AuthxInterface { * @inheritDoc */ public function loginSession($userId) { - $user = user_load($userId); + $user = \Drupal\user\Entity\User::load($userId); user_login_finalize($user); } @@ -41,7 +41,7 @@ class Drupal8 implements AuthxInterface { * @inheritDoc */ public function loginStateless($userId) { - $user = user_load($userId); + $user = \Drupal\user\Entity\User::load($userId); // In theory, we could use either account_switcher->switchTo() or current_user->setAccount(). // switchTo() sounds more conscientious, but setAccount() might be a more accurate rendition // of "stateless login". At time of writing, there doesn't seem to be a compelling difference. @@ -54,7 +54,7 @@ class Drupal8 implements AuthxInterface { */ public function getCurrentUserId() { $user = \Drupal::currentUser(); - return $user ? $user->getAccount()->id() : NULL; + return $user && $user->getAccount()->id() ? $user->getAccount()->id() : NULL; } } diff --git a/civicrm/ext/authx/info.xml b/civicrm/ext/authx/info.xml index cfd4bdfce2..9337aed9a4 100644 --- a/civicrm/ext/authx/info.xml +++ b/civicrm/ext/authx/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-02-11</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.0</ver> diff --git a/civicrm/ext/authx/phpunit.xml.dist b/civicrm/ext/authx/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/authx/phpunit.xml.dist +++ b/civicrm/ext/authx/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/authx/settings/authx.setting.php b/civicrm/ext/authx/settings/authx.setting.php index 8df39f62ff..8d679529cc 100644 --- a/civicrm/ext/authx/settings/authx.setting.php +++ b/civicrm/ext/authx/settings/authx.setting.php @@ -76,6 +76,11 @@ $_authx_settings = function() { ], ]; } + + $s['authx_param_cred']['default'] = ['jwt', 'api_key']; + $s['authx_header_cred']['default'] = ['jwt', 'api_key']; + $s['authx_xheader_cred']['default'] = ['jwt', 'api_key']; + return $s; }; diff --git a/civicrm/ext/contributioncancelactions/info.xml b/civicrm/ext/contributioncancelactions/info.xml index c11db915c2..44b6e9fddd 100644 --- a/civicrm/ext/contributioncancelactions/info.xml +++ b/civicrm/ext/contributioncancelactions/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-12</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <develStage>stable</develStage> <compatibility> <ver>5.32</ver> diff --git a/civicrm/ext/contributioncancelactions/phpunit.xml.dist b/civicrm/ext/contributioncancelactions/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/contributioncancelactions/phpunit.xml.dist +++ b/civicrm/ext/contributioncancelactions/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/eventcart/info.xml b/civicrm/ext/eventcart/info.xml index 6c1bf45ba5..e459f2d70d 100644 --- a/civicrm/ext/eventcart/info.xml +++ b/civicrm/ext/eventcart/info.xml @@ -13,7 +13,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-03</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php b/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php index a50389ffd3..7dc7d233b5 100644 --- a/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php +++ b/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php @@ -128,12 +128,29 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { /** * Sends request and receive response from eWAY payment process. * - * @param array $params + * @param array|\Civi\Payment\PropertyBag $params * - * @return array|object - * @throws \Exception + * @param string $component + * + * @return array + * Result array (containing at least the key payment_status_id) + * + * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } + if (CRM_Utils_Array::value('is_recur', $params) == TRUE) { throw new CRM_Core_Exception(ts('eWAY - recurring payments not implemented')); } @@ -319,6 +336,8 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { } $params['trxn_result_code'] = $eWAYResponse->Status() . $beaglestatus; $params['trxn_id'] = $eWAYResponse->TransactionNumber(); + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; return $params; } diff --git a/civicrm/ext/ewaysingle/info.xml b/civicrm/ext/ewaysingle/info.xml index 7e9daa1dd5..e5facac41a 100644 --- a/civicrm/ext/ewaysingle/info.xml +++ b/civicrm/ext/ewaysingle/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-07</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/ewaysingle/phpunit.xml.dist b/civicrm/ext/ewaysingle/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/ewaysingle/phpunit.xml.dist +++ b/civicrm/ext/ewaysingle/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/financialacls/financialacls.php b/civicrm/ext/financialacls/financialacls.php index ddd51b22a2..abad6279ec 100644 --- a/civicrm/ext/financialacls/financialacls.php +++ b/civicrm/ext/financialacls/financialacls.php @@ -14,6 +14,15 @@ function financialacls_civicrm_config(&$config) { _financialacls_civix_civicrm_config($config); } +/** + * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container + */ +function financialacls_civicrm_container($container) { + $dispatcherDefn = $container->getDefinition('dispatcher'); + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + $dispatcherDefn->addMethodCall('addListener', ['civi.api4.authorizeRecord::Contribution', '_financialacls_civi_api4_authorizeContribution']); +} + /** * Implements hook_civicrm_xmlMenu(). * @@ -164,7 +173,7 @@ function financialacls_civicrm_pre($op, $objectName, $id, &$params) { if (empty($params['financial_type_id'])) { $params['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_LineItem', $params['id'], 'financial_type_id'); } - if (!in_array($params['financial_type_id'], array_keys($types))) { + if (!array_key_exists($params['financial_type_id'], $types)) { throw new API_Exception('You do not have permission to ' . $op . ' this line item'); } } @@ -286,6 +295,29 @@ function financialacls_civicrm_permission(&$permissions) { ]; } +/** + * Listener for 'civi.api4.authorizeRecord::Contribution' + * + * @param \Civi\Api4\Event\AuthorizeRecordEvent $e + * @throws \CRM_Core_Exception + */ +function _financialacls_civi_api4_authorizeContribution(\Civi\Api4\Event\AuthorizeRecordEvent $e) { + if (!financialacls_is_acl_limiting_enabled()) { + return; + } + if ($e->getActionName() === 'delete' && $e->getEntityName() === 'Contribution') { + $contributionID = $e->getRecord()['id']; + // First check contribution financial type + $financialType = CRM_Core_PseudoConstant::getName('CRM_Contribute_DAO_Contribution', 'financial_type_id', CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $contributionID, 'financial_type_id')); + // Now check permissioned line items & permissioned contribution + if (!CRM_Core_Permission::check('delete contributions of type ' . $financialType, $e->getUserID()) || + !CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($contributionID, 'delete', FALSE, $e->getUserID()) + ) { + $e->setAuthorized(FALSE); + } + } +} + /** * Remove unpermitted financial types from field Options in search context. * diff --git a/civicrm/ext/financialacls/info.xml b/civicrm/ext/financialacls/info.xml index 8539355b32..27423c8c5e 100644 --- a/civicrm/ext/financialacls/info.xml +++ b/civicrm/ext/financialacls/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-27</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <develStage>stable</develStage> <compatibility> <ver>5.30</ver> diff --git a/civicrm/ext/financialacls/phpunit.xml.dist b/civicrm/ext/financialacls/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/financialacls/phpunit.xml.dist +++ b/civicrm/ext/financialacls/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php index 3f15b7ec0d..ac7dd5becd 100644 --- a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php +++ b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php @@ -61,7 +61,7 @@ class LineItemTest extends BaseTestClass { $this->assertCount(2, $lineItems); $this->callAPISuccessGetCount('LineItem', ['check_permissions' => TRUE], 1); - $this->callAPISuccess('LineItem', 'Delete', ['check_permissions' => TRUE, 'id' => $lineItems[0]['id']]); + $this->callAPISuccess('LineItem', 'Delete', ['check_permissions' => ($version == 3), 'id' => $lineItems[0]['id']]); $this->callAPIFailure('LineItem', 'Delete', ['check_permissions' => TRUE, 'id' => $lineItems[1]['id']]); $lineParams = [ 'entity_id' => $order['id'], @@ -71,14 +71,15 @@ class LineItemTest extends BaseTestClass { 'price_field_id' => $defaultPriceFieldID, 'qty' => 1, 'financial_type_id' => 'Donation', - 'check_permissions' => TRUE, + 'check_permissions' => ($version == 3), ]; $line = $this->callAPISuccess('LineItem', 'Create', $lineParams); $lineParams['financial_type_id'] = 'Event Fee'; + $lineParams['check_permissions'] = TRUE; $this->callAPIFailure('LineItem', 'Create', $lineParams); $this->callAPIFailure('LineItem', 'Create', ['id' => $line['id'], 'check_permissions' => TRUE, 'financial_type_id' => 'Event Fee']); - $this->callAPISuccess('LineItem', 'Create', ['id' => $line['id'], 'check_permissions' => TRUE, 'financial_type_id' => 'Donation']); + $this->callAPISuccess('LineItem', 'Create', ['id' => $line['id'], 'check_permissions' => ($version == 3), 'financial_type_id' => 'Donation']); } /** diff --git a/civicrm/ext/flexmailer/info.xml b/civicrm/ext/flexmailer/info.xml index 7317ae5027..f26a4a5ac8 100644 --- a/civicrm/ext/flexmailer/info.xml +++ b/civicrm/ext/flexmailer/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-05</releaseDate> - <version>1.1.2</version> + <version>5.39.0</version> <develStage>stable</develStage> <comments> FlexMailer is an email delivery engine which replaces the internal guts diff --git a/civicrm/ext/flexmailer/phpunit.xml.dist b/civicrm/ext/flexmailer/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/flexmailer/phpunit.xml.dist +++ b/civicrm/ext/flexmailer/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php b/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php index 5e8955d516..adca06ed7e 100644 --- a/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php +++ b/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php @@ -51,9 +51,9 @@ class HtmlClickTracker implements ClickTrackerInterface { // Find anything like href="..." or href='...' inside a tag. $tmp = preg_replace_callback( - ';(\<[^>]*href *= *")([^">]+)(");', $callback, $html); + ';(\<a[^>]*href *= *")([^">]+)(");i', $callback, $html); return preg_replace_callback( - ';(\<[^>]*href *= *\')([^\'>]+)(\');', $callback, $tmp); + ';(\<a[^>]*href *= *\')([^\'>]+)(\');i', $callback, $tmp); } // /** diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php index a6fadbdc8c..aad8443ce4 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php @@ -86,15 +86,15 @@ class MailingPreviewTest extends \CiviUnitTestCase { $this->assertEquals("[CiviMail Draft] Hello $displayName", $previewResult['values']['subject']); - $this->assertContains("This is $displayName", $previewResult['values']['body_text']); - $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_text']); - $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_text']); - $this->assertContains("subj=(Hello ", $previewResult['values']['body_text']); + $this->assertStringContainsString("This is $displayName", $previewResult['values']['body_text']); + $this->assertStringContainsString("civicrm/mailing/optout", $previewResult['values']['body_text']); + $this->assertStringContainsString("&jid=&qid=&h=fakehash", $previewResult['values']['body_text']); + $this->assertStringContainsString("subj=(Hello ", $previewResult['values']['body_text']); - $this->assertContains("<p>This is $displayName.</p>", $previewResult['values']['body_html']); - $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_html']); - $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_html']); - $this->assertContains("subj=(Hello ", $previewResult['values']['body_html']); + $this->assertStringContainsString("<p>This is $displayName.</p>", $previewResult['values']['body_html']); + $this->assertStringContainsString("civicrm/mailing/optout", $previewResult['values']['body_html']); + $this->assertStringContainsString("&jid=&qid=&h=fakehash", $previewResult['values']['body_html']); + $this->assertStringContainsString("subj=(Hello ", $previewResult['values']['body_html']); $this->assertEquals('flexmailer', $previewResult['values']['_rendered_by_']); } @@ -115,15 +115,15 @@ class MailingPreviewTest extends \CiviUnitTestCase { $this->assertEquals("[CiviMail Draft] Hello $displayName", $previewResult['values']['subject']); - $this->assertContains("This is $displayName", $previewResult['values']['body_text']); - $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_text']); - $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_text']); - $this->assertContains("subj=(Hello ", $previewResult['values']['body_text']); + $this->assertStringContainsString("This is $displayName", $previewResult['values']['body_text']); + $this->assertStringContainsString("civicrm/mailing/optout", $previewResult['values']['body_text']); + $this->assertStringContainsString("&jid=&qid=&h=fakehash", $previewResult['values']['body_text']); + $this->assertStringContainsString("subj=(Hello ", $previewResult['values']['body_text']); - $this->assertContains("<p>This is $displayName.</p>", $previewResult['values']['body_html']); - $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_html']); - $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_html']); - $this->assertContains("subj=(Hello ", $previewResult['values']['body_html']); + $this->assertStringContainsString("<p>This is $displayName.</p>", $previewResult['values']['body_html']); + $this->assertStringContainsString("civicrm/mailing/optout", $previewResult['values']['body_html']); + $this->assertStringContainsString("&jid=&qid=&h=fakehash", $previewResult['values']['body_html']); + $this->assertStringContainsString("subj=(Hello ", $previewResult['values']['body_html']); $this->assertEquals('flexmailer', $previewResult['values']['_rendered_by_']); } diff --git a/civicrm/ext/greenwich/dist/bootstrap3.css b/civicrm/ext/greenwich/dist/bootstrap3.css index 090f121787..dc38b812ea 100644 --- a/civicrm/ext/greenwich/dist/bootstrap3.css +++ b/civicrm/ext/greenwich/dist/bootstrap3.css @@ -1357,12 +1357,12 @@ } #bootstrap-theme a { - color: black; + color: #2786c2; text-decoration: none; } #bootstrap-theme a:hover, #bootstrap-theme a:focus { - color: black; + color: #1a5a82; text-decoration: underline; } @@ -3722,7 +3722,7 @@ #bootstrap-theme .btn-link { font-weight: 400; - color: black; + color: #2786c2; border-radius: 0; } @@ -3737,7 +3737,7 @@ } #bootstrap-theme .btn-link:hover, #bootstrap-theme .btn-link:focus { - color: black; + color: #1a5a82; text-decoration: underline; background-color: transparent; } @@ -4329,7 +4329,7 @@ #bootstrap-theme .nav .open > a, #bootstrap-theme .nav .open > a:hover, #bootstrap-theme .nav .open > a:focus { background-color: #eee; - border-color: black; + border-color: #2786c2; } #bootstrap-theme .nav .nav-divider { @@ -5103,7 +5103,7 @@ padding: 4px 8px; margin-left: -1px; line-height: 1.428571429; - color: black; + color: #2786c2; text-decoration: none; background-color: white; border: 1px solid #ddd; @@ -5111,7 +5111,7 @@ #bootstrap-theme .pagination > li > a:hover, #bootstrap-theme .pagination > li > a:focus, #bootstrap-theme .pagination > li > span:hover, #bootstrap-theme .pagination > li > span:focus { z-index: 2; - color: black; + color: #1a5a82; background-color: #eee; border-color: #ddd; } @@ -5327,7 +5327,7 @@ } .list-group-item.active > #bootstrap-theme .badge, .nav-pills > .active > a > #bootstrap-theme .badge { - color: black; + color: #2786c2; background-color: white; } @@ -5424,7 +5424,7 @@ } #bootstrap-theme a.thumbnail:hover, #bootstrap-theme a.thumbnail:focus, #bootstrap-theme a.thumbnail.active { - border-color: black; + border-color: #2786c2; } #bootstrap-theme .alert { diff --git a/civicrm/ext/greenwich/dist/bootstrap3.min.css b/civicrm/ext/greenwich/dist/bootstrap3.min.css index aee389b213..0619041618 100644 --- a/civicrm/ext/greenwich/dist/bootstrap3.min.css +++ b/civicrm/ext/greenwich/dist/bootstrap3.min.css @@ -1 +1 @@ -#bootstrap-theme html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}#bootstrap-theme body{margin:0}#bootstrap-theme article,#bootstrap-theme aside,#bootstrap-theme details,#bootstrap-theme figcaption,#bootstrap-theme figure,#bootstrap-theme footer,#bootstrap-theme header,#bootstrap-theme hgroup,#bootstrap-theme main,#bootstrap-theme menu,#bootstrap-theme nav,#bootstrap-theme section,#bootstrap-theme summary{display:block}#bootstrap-theme audio,#bootstrap-theme canvas,#bootstrap-theme progress,#bootstrap-theme video{display:inline-block;vertical-align:baseline}#bootstrap-theme audio:not([controls]){display:none;height:0}#bootstrap-theme [hidden],#bootstrap-theme template{display:none}#bootstrap-theme a{background-color:transparent}#bootstrap-theme a:active,#bootstrap-theme a:hover{outline:0}#bootstrap-theme abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}#bootstrap-theme b,#bootstrap-theme strong{font-weight:700}#bootstrap-theme dfn{font-style:italic}#bootstrap-theme h1{font-size:2em;margin:.67em 0}#bootstrap-theme mark{background:#ff0;color:#000}#bootstrap-theme small{font-size:80%}#bootstrap-theme sub,#bootstrap-theme sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}#bootstrap-theme sup{top:-.5em}#bootstrap-theme sub{bottom:-.25em}#bootstrap-theme img{border:0}#bootstrap-theme svg:not(:root){overflow:hidden}#bootstrap-theme figure{margin:1em 40px}#bootstrap-theme hr{box-sizing:content-box;height:0}#bootstrap-theme pre{overflow:auto}#bootstrap-theme code,#bootstrap-theme kbd,#bootstrap-theme pre,#bootstrap-theme samp{font-family:monospace,monospace;font-size:1em}#bootstrap-theme button,#bootstrap-theme input,#bootstrap-theme optgroup,#bootstrap-theme select,#bootstrap-theme textarea{color:inherit;font:inherit;margin:0}#bootstrap-theme button{overflow:visible}#bootstrap-theme button,#bootstrap-theme select{text-transform:none}#bootstrap-theme button,#bootstrap-theme html input[type=button],#bootstrap-theme input[type=reset],#bootstrap-theme input[type=submit]{-webkit-appearance:button;cursor:pointer}#bootstrap-theme button[disabled],#bootstrap-theme html input[disabled]{cursor:default}#bootstrap-theme button::-moz-focus-inner,#bootstrap-theme input::-moz-focus-inner{border:0;padding:0}#bootstrap-theme input{line-height:normal}#bootstrap-theme input[type=checkbox],#bootstrap-theme input[type=radio]{box-sizing:border-box;padding:0}#bootstrap-theme input[type=number]::-webkit-inner-spin-button,#bootstrap-theme input[type=number]::-webkit-outer-spin-button{height:auto}#bootstrap-theme input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}#bootstrap-theme input[type=search]::-webkit-search-cancel-button,#bootstrap-theme input[type=search]::-webkit-search-decoration{-webkit-appearance:none}#bootstrap-theme fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}#bootstrap-theme legend{border:0;padding:0}#bootstrap-theme textarea{overflow:auto}#bootstrap-theme optgroup{font-weight:700}#bootstrap-theme table{border-collapse:collapse;border-spacing:0}#bootstrap-theme td,#bootstrap-theme th{padding:0}@media print{#bootstrap-theme *,#bootstrap-theme *:before,#bootstrap-theme *:after{color:#000 !important;text-shadow:none !important;background:0 0 !important;box-shadow:none !important}#bootstrap-theme a,#bootstrap-theme a:visited{text-decoration:underline}#bootstrap-theme a[href]:after{content:" (" attr(href) ")"}#bootstrap-theme abbr[title]:after{content:" (" attr(title) ")"}#bootstrap-theme a[href^="#"]:after,#bootstrap-theme a[href^="javascript:"]:after{content:""}#bootstrap-theme pre,#bootstrap-theme blockquote{border:1px solid #999;page-break-inside:avoid}#bootstrap-theme thead{display:table-header-group}#bootstrap-theme tr,#bootstrap-theme img{page-break-inside:avoid}#bootstrap-theme img{max-width:100% !important}#bootstrap-theme p,#bootstrap-theme h2,#bootstrap-theme h3{orphans:3;widows:3}#bootstrap-theme h2,#bootstrap-theme h3{page-break-after:avoid}#bootstrap-theme .navbar{display:none}#bootstrap-theme .btn>.caret,#bootstrap-theme .dropup>.btn>.caret{border-top-color:#000 !important}#bootstrap-theme .label{border:1px solid #000}#bootstrap-theme .table{border-collapse:collapse !important}#bootstrap-theme .table td,#bootstrap-theme .table th{background-color:#fff !important}#bootstrap-theme .table-bordered th,#bootstrap-theme .table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:"Glyphicons Halflings";src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}#bootstrap-theme .glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bootstrap-theme .glyphicon-asterisk:before{content:"*"}#bootstrap-theme .glyphicon-plus:before{content:"+"}#bootstrap-theme .glyphicon-euro:before,#bootstrap-theme .glyphicon-eur:before{content:"€"}#bootstrap-theme .glyphicon-minus:before{content:"−"}#bootstrap-theme .glyphicon-cloud:before{content:"â˜"}#bootstrap-theme .glyphicon-envelope:before{content:"✉"}#bootstrap-theme .glyphicon-pencil:before{content:"âœ"}#bootstrap-theme .glyphicon-glass:before{content:"î€"}#bootstrap-theme .glyphicon-music:before{content:""}#bootstrap-theme .glyphicon-search:before{content:""}#bootstrap-theme .glyphicon-heart:before{content:""}#bootstrap-theme .glyphicon-star:before{content:""}#bootstrap-theme .glyphicon-star-empty:before{content:""}#bootstrap-theme .glyphicon-user:before{content:""}#bootstrap-theme .glyphicon-film:before{content:""}#bootstrap-theme .glyphicon-th-large:before{content:"î€"}#bootstrap-theme .glyphicon-th:before{content:""}#bootstrap-theme .glyphicon-th-list:before{content:""}#bootstrap-theme .glyphicon-ok:before{content:""}#bootstrap-theme .glyphicon-remove:before{content:""}#bootstrap-theme .glyphicon-zoom-in:before{content:""}#bootstrap-theme .glyphicon-zoom-out:before{content:""}#bootstrap-theme .glyphicon-off:before{content:""}#bootstrap-theme .glyphicon-signal:before{content:""}#bootstrap-theme .glyphicon-cog:before{content:""}#bootstrap-theme .glyphicon-trash:before{content:"î€ "}#bootstrap-theme .glyphicon-home:before{content:""}#bootstrap-theme .glyphicon-file:before{content:""}#bootstrap-theme .glyphicon-time:before{content:""}#bootstrap-theme .glyphicon-road:before{content:""}#bootstrap-theme .glyphicon-download-alt:before{content:""}#bootstrap-theme .glyphicon-download:before{content:""}#bootstrap-theme .glyphicon-upload:before{content:""}#bootstrap-theme .glyphicon-inbox:before{content:""}#bootstrap-theme .glyphicon-play-circle:before{content:""}#bootstrap-theme .glyphicon-repeat:before{content:""}#bootstrap-theme .glyphicon-refresh:before{content:""}#bootstrap-theme .glyphicon-list-alt:before{content:""}#bootstrap-theme .glyphicon-lock:before{content:""}#bootstrap-theme .glyphicon-flag:before{content:""}#bootstrap-theme .glyphicon-headphones:before{content:""}#bootstrap-theme .glyphicon-volume-off:before{content:""}#bootstrap-theme .glyphicon-volume-down:before{content:""}#bootstrap-theme .glyphicon-volume-up:before{content:""}#bootstrap-theme .glyphicon-qrcode:before{content:""}#bootstrap-theme .glyphicon-barcode:before{content:"î€"}#bootstrap-theme .glyphicon-tag:before{content:"î"}#bootstrap-theme .glyphicon-tags:before{content:"î‚"}#bootstrap-theme .glyphicon-book:before{content:"îƒ"}#bootstrap-theme .glyphicon-bookmark:before{content:"î„"}#bootstrap-theme .glyphicon-print:before{content:"î…"}#bootstrap-theme .glyphicon-camera:before{content:"î†"}#bootstrap-theme .glyphicon-font:before{content:"î‡"}#bootstrap-theme .glyphicon-bold:before{content:"îˆ"}#bootstrap-theme .glyphicon-italic:before{content:"î‰"}#bootstrap-theme .glyphicon-text-height:before{content:"î"}#bootstrap-theme .glyphicon-text-width:before{content:"î‘"}#bootstrap-theme .glyphicon-align-left:before{content:"î’"}#bootstrap-theme .glyphicon-align-center:before{content:"î“"}#bootstrap-theme .glyphicon-align-right:before{content:"î”"}#bootstrap-theme .glyphicon-align-justify:before{content:"î•"}#bootstrap-theme .glyphicon-list:before{content:"î–"}#bootstrap-theme .glyphicon-indent-left:before{content:"î—"}#bootstrap-theme .glyphicon-indent-right:before{content:"î˜"}#bootstrap-theme .glyphicon-facetime-video:before{content:"î™"}#bootstrap-theme .glyphicon-picture:before{content:"î "}#bootstrap-theme .glyphicon-map-marker:before{content:"î¢"}#bootstrap-theme .glyphicon-adjust:before{content:"î£"}#bootstrap-theme .glyphicon-tint:before{content:"î¤"}#bootstrap-theme .glyphicon-edit:before{content:"î¥"}#bootstrap-theme .glyphicon-share:before{content:"î¦"}#bootstrap-theme .glyphicon-check:before{content:"î§"}#bootstrap-theme .glyphicon-move:before{content:"î¨"}#bootstrap-theme .glyphicon-step-backward:before{content:"î©"}#bootstrap-theme .glyphicon-fast-backward:before{content:"î°"}#bootstrap-theme .glyphicon-backward:before{content:"î±"}#bootstrap-theme .glyphicon-play:before{content:"î²"}#bootstrap-theme .glyphicon-pause:before{content:"î³"}#bootstrap-theme .glyphicon-stop:before{content:"î´"}#bootstrap-theme .glyphicon-forward:before{content:"îµ"}#bootstrap-theme .glyphicon-fast-forward:before{content:"î¶"}#bootstrap-theme .glyphicon-step-forward:before{content:"î·"}#bootstrap-theme .glyphicon-eject:before{content:"î¸"}#bootstrap-theme .glyphicon-chevron-left:before{content:"î¹"}#bootstrap-theme .glyphicon-chevron-right:before{content:"î‚€"}#bootstrap-theme .glyphicon-plus-sign:before{content:"î‚"}#bootstrap-theme .glyphicon-minus-sign:before{content:"î‚‚"}#bootstrap-theme .glyphicon-remove-sign:before{content:""}#bootstrap-theme .glyphicon-ok-sign:before{content:"î‚„"}#bootstrap-theme .glyphicon-question-sign:before{content:"î‚…"}#bootstrap-theme .glyphicon-info-sign:before{content:""}#bootstrap-theme .glyphicon-screenshot:before{content:""}#bootstrap-theme .glyphicon-remove-circle:before{content:""}#bootstrap-theme .glyphicon-ok-circle:before{content:""}#bootstrap-theme .glyphicon-ban-circle:before{content:"î‚"}#bootstrap-theme .glyphicon-arrow-left:before{content:"î‚‘"}#bootstrap-theme .glyphicon-arrow-right:before{content:"î‚’"}#bootstrap-theme .glyphicon-arrow-up:before{content:"î‚“"}#bootstrap-theme .glyphicon-arrow-down:before{content:"î‚”"}#bootstrap-theme .glyphicon-share-alt:before{content:"î‚•"}#bootstrap-theme .glyphicon-resize-full:before{content:"î‚–"}#bootstrap-theme .glyphicon-resize-small:before{content:"î‚—"}#bootstrap-theme .glyphicon-exclamation-sign:before{content:"î„"}#bootstrap-theme .glyphicon-gift:before{content:"î„‚"}#bootstrap-theme .glyphicon-leaf:before{content:""}#bootstrap-theme .glyphicon-fire:before{content:"î„„"}#bootstrap-theme .glyphicon-eye-open:before{content:"î„…"}#bootstrap-theme .glyphicon-eye-close:before{content:""}#bootstrap-theme .glyphicon-warning-sign:before{content:""}#bootstrap-theme .glyphicon-plane:before{content:""}#bootstrap-theme .glyphicon-calendar:before{content:""}#bootstrap-theme .glyphicon-random:before{content:"î„"}#bootstrap-theme .glyphicon-comment:before{content:"î„‘"}#bootstrap-theme .glyphicon-magnet:before{content:"î„’"}#bootstrap-theme .glyphicon-chevron-up:before{content:"î„“"}#bootstrap-theme .glyphicon-chevron-down:before{content:"î„”"}#bootstrap-theme .glyphicon-retweet:before{content:"î„•"}#bootstrap-theme .glyphicon-shopping-cart:before{content:"î„–"}#bootstrap-theme .glyphicon-folder-close:before{content:"î„—"}#bootstrap-theme .glyphicon-folder-open:before{content:""}#bootstrap-theme .glyphicon-resize-vertical:before{content:"î„™"}#bootstrap-theme .glyphicon-resize-horizontal:before{content:"î„ "}#bootstrap-theme .glyphicon-hdd:before{content:"î„¡"}#bootstrap-theme .glyphicon-bullhorn:before{content:"î„¢"}#bootstrap-theme .glyphicon-bell:before{content:"î„£"}#bootstrap-theme .glyphicon-certificate:before{content:""}#bootstrap-theme .glyphicon-thumbs-up:before{content:"î„¥"}#bootstrap-theme .glyphicon-thumbs-down:before{content:""}#bootstrap-theme .glyphicon-hand-right:before{content:""}#bootstrap-theme .glyphicon-hand-left:before{content:""}#bootstrap-theme .glyphicon-hand-up:before{content:"î„©"}#bootstrap-theme .glyphicon-hand-down:before{content:"î„°"}#bootstrap-theme .glyphicon-circle-arrow-right:before{content:""}#bootstrap-theme .glyphicon-circle-arrow-left:before{content:""}#bootstrap-theme .glyphicon-circle-arrow-up:before{content:""}#bootstrap-theme .glyphicon-circle-arrow-down:before{content:"î„´"}#bootstrap-theme .glyphicon-globe:before{content:""}#bootstrap-theme .glyphicon-wrench:before{content:""}#bootstrap-theme .glyphicon-tasks:before{content:"î„·"}#bootstrap-theme .glyphicon-filter:before{content:""}#bootstrap-theme .glyphicon-briefcase:before{content:""}#bootstrap-theme .glyphicon-fullscreen:before{content:"î…€"}#bootstrap-theme .glyphicon-dashboard:before{content:"î…"}#bootstrap-theme .glyphicon-paperclip:before{content:"î…‚"}#bootstrap-theme .glyphicon-heart-empty:before{content:"î…ƒ"}#bootstrap-theme .glyphicon-link:before{content:"î…„"}#bootstrap-theme .glyphicon-phone:before{content:"î……"}#bootstrap-theme .glyphicon-pushpin:before{content:"î…†"}#bootstrap-theme .glyphicon-usd:before{content:"î…ˆ"}#bootstrap-theme .glyphicon-gbp:before{content:"î…‰"}#bootstrap-theme .glyphicon-sort:before{content:"î…"}#bootstrap-theme .glyphicon-sort-by-alphabet:before{content:"î…‘"}#bootstrap-theme .glyphicon-sort-by-alphabet-alt:before{content:"î…’"}#bootstrap-theme .glyphicon-sort-by-order:before{content:"î…“"}#bootstrap-theme .glyphicon-sort-by-order-alt:before{content:"î…”"}#bootstrap-theme .glyphicon-sort-by-attributes:before{content:"î…•"}#bootstrap-theme .glyphicon-sort-by-attributes-alt:before{content:"î…–"}#bootstrap-theme .glyphicon-unchecked:before{content:"î…—"}#bootstrap-theme .glyphicon-expand:before{content:"î…˜"}#bootstrap-theme .glyphicon-collapse-down:before{content:"î…™"}#bootstrap-theme .glyphicon-collapse-up:before{content:"î… "}#bootstrap-theme .glyphicon-log-in:before{content:"î…¡"}#bootstrap-theme .glyphicon-flash:before{content:"î…¢"}#bootstrap-theme .glyphicon-log-out:before{content:"î…£"}#bootstrap-theme .glyphicon-new-window:before{content:"î…¤"}#bootstrap-theme .glyphicon-record:before{content:"î…¥"}#bootstrap-theme .glyphicon-save:before{content:"î…¦"}#bootstrap-theme .glyphicon-open:before{content:"î…§"}#bootstrap-theme .glyphicon-saved:before{content:"î…¨"}#bootstrap-theme .glyphicon-import:before{content:"î…©"}#bootstrap-theme .glyphicon-export:before{content:"î…°"}#bootstrap-theme .glyphicon-send:before{content:"î…±"}#bootstrap-theme .glyphicon-floppy-disk:before{content:"î…²"}#bootstrap-theme .glyphicon-floppy-saved:before{content:"î…³"}#bootstrap-theme .glyphicon-floppy-remove:before{content:"î…´"}#bootstrap-theme .glyphicon-floppy-save:before{content:"î…µ"}#bootstrap-theme .glyphicon-floppy-open:before{content:"î…¶"}#bootstrap-theme .glyphicon-credit-card:before{content:"î…·"}#bootstrap-theme .glyphicon-transfer:before{content:"î…¸"}#bootstrap-theme .glyphicon-cutlery:before{content:"î…¹"}#bootstrap-theme .glyphicon-header:before{content:""}#bootstrap-theme .glyphicon-compressed:before{content:"î†"}#bootstrap-theme .glyphicon-earphone:before{content:""}#bootstrap-theme .glyphicon-phone-alt:before{content:""}#bootstrap-theme .glyphicon-tower:before{content:""}#bootstrap-theme .glyphicon-stats:before{content:""}#bootstrap-theme .glyphicon-sd-video:before{content:""}#bootstrap-theme .glyphicon-hd-video:before{content:""}#bootstrap-theme .glyphicon-subtitles:before{content:""}#bootstrap-theme .glyphicon-sound-stereo:before{content:""}#bootstrap-theme .glyphicon-sound-dolby:before{content:"î†"}#bootstrap-theme .glyphicon-sound-5-1:before{content:""}#bootstrap-theme .glyphicon-sound-6-1:before{content:""}#bootstrap-theme .glyphicon-sound-7-1:before{content:""}#bootstrap-theme .glyphicon-copyright-mark:before{content:""}#bootstrap-theme .glyphicon-registration-mark:before{content:""}#bootstrap-theme .glyphicon-cloud-download:before{content:""}#bootstrap-theme .glyphicon-cloud-upload:before{content:""}#bootstrap-theme .glyphicon-tree-conifer:before{content:""}#bootstrap-theme .glyphicon-tree-deciduous:before{content:""}#bootstrap-theme .glyphicon-cd:before{content:"îˆ"}#bootstrap-theme .glyphicon-save-file:before{content:""}#bootstrap-theme .glyphicon-open-file:before{content:""}#bootstrap-theme .glyphicon-level-up:before{content:""}#bootstrap-theme .glyphicon-copy:before{content:""}#bootstrap-theme .glyphicon-paste:before{content:""}#bootstrap-theme .glyphicon-alert:before{content:""}#bootstrap-theme .glyphicon-equalizer:before{content:"îˆ"}#bootstrap-theme .glyphicon-king:before{content:""}#bootstrap-theme .glyphicon-queen:before{content:""}#bootstrap-theme .glyphicon-pawn:before{content:""}#bootstrap-theme .glyphicon-bishop:before{content:""}#bootstrap-theme .glyphicon-knight:before{content:""}#bootstrap-theme .glyphicon-baby-formula:before{content:""}#bootstrap-theme .glyphicon-tent:before{content:"⛺"}#bootstrap-theme .glyphicon-blackboard:before{content:""}#bootstrap-theme .glyphicon-bed:before{content:""}#bootstrap-theme .glyphicon-apple:before{content:""}#bootstrap-theme .glyphicon-erase:before{content:""}#bootstrap-theme .glyphicon-hourglass:before{content:"⌛"}#bootstrap-theme .glyphicon-lamp:before{content:""}#bootstrap-theme .glyphicon-duplicate:before{content:""}#bootstrap-theme .glyphicon-piggy-bank:before{content:""}#bootstrap-theme .glyphicon-scissors:before{content:""}#bootstrap-theme .glyphicon-bitcoin:before{content:""}#bootstrap-theme .glyphicon-btc:before{content:""}#bootstrap-theme .glyphicon-xbt:before{content:""}#bootstrap-theme .glyphicon-yen:before{content:"Â¥"}#bootstrap-theme .glyphicon-jpy:before{content:"Â¥"}#bootstrap-theme .glyphicon-ruble:before{content:"₽"}#bootstrap-theme .glyphicon-rub:before{content:"₽"}#bootstrap-theme .glyphicon-scale:before{content:""}#bootstrap-theme .glyphicon-ice-lolly:before{content:""}#bootstrap-theme .glyphicon-ice-lolly-tasted:before{content:""}#bootstrap-theme .glyphicon-education:before{content:""}#bootstrap-theme .glyphicon-option-horizontal:before{content:""}#bootstrap-theme .glyphicon-option-vertical:before{content:""}#bootstrap-theme .glyphicon-menu-hamburger:before{content:""}#bootstrap-theme .glyphicon-modal-window:before{content:""}#bootstrap-theme .glyphicon-oil:before{content:""}#bootstrap-theme .glyphicon-grain:before{content:""}#bootstrap-theme .glyphicon-sunglasses:before{content:""}#bootstrap-theme .glyphicon-text-size:before{content:"î‰"}#bootstrap-theme .glyphicon-text-color:before{content:""}#bootstrap-theme .glyphicon-text-background:before{content:""}#bootstrap-theme .glyphicon-object-align-top:before{content:""}#bootstrap-theme .glyphicon-object-align-bottom:before{content:""}#bootstrap-theme .glyphicon-object-align-horizontal:before{content:""}#bootstrap-theme .glyphicon-object-align-left:before{content:""}#bootstrap-theme .glyphicon-object-align-vertical:before{content:""}#bootstrap-theme .glyphicon-object-align-right:before{content:""}#bootstrap-theme .glyphicon-triangle-right:before{content:"î‰"}#bootstrap-theme .glyphicon-triangle-left:before{content:""}#bootstrap-theme .glyphicon-triangle-bottom:before{content:""}#bootstrap-theme .glyphicon-triangle-top:before{content:""}#bootstrap-theme .glyphicon-console:before{content:""}#bootstrap-theme .glyphicon-superscript:before{content:""}#bootstrap-theme .glyphicon-subscript:before{content:""}#bootstrap-theme .glyphicon-menu-left:before{content:""}#bootstrap-theme .glyphicon-menu-right:before{content:""}#bootstrap-theme .glyphicon-menu-down:before{content:""}#bootstrap-theme .glyphicon-menu-up:before{content:"î‰ "}#bootstrap-theme *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#bootstrap-theme *:before,#bootstrap-theme *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#bootstrap-theme html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}#bootstrap-theme body{font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff}#bootstrap-theme input,#bootstrap-theme button,#bootstrap-theme select,#bootstrap-theme textarea{font-family:inherit;font-size:inherit;line-height:inherit}#bootstrap-theme a{color:#000;text-decoration:none}#bootstrap-theme a:hover,#bootstrap-theme a:focus{color:#000;text-decoration:underline}#bootstrap-theme a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#bootstrap-theme figure{margin:0}#bootstrap-theme img{vertical-align:middle}#bootstrap-theme .img-responsive{display:block;max-width:100%;height:auto}#bootstrap-theme .img-rounded{border-radius:6px}#bootstrap-theme .img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}#bootstrap-theme .img-circle{border-radius:50%}#bootstrap-theme hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}#bootstrap-theme .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}#bootstrap-theme .sr-only-focusable:active,#bootstrap-theme .sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}#bootstrap-theme [role=button]{cursor:pointer}#bootstrap-theme h1,#bootstrap-theme h2,#bootstrap-theme h3,#bootstrap-theme h4,#bootstrap-theme h5,#bootstrap-theme h6,#bootstrap-theme .h1,#bootstrap-theme .h2,#bootstrap-theme .h3,#bootstrap-theme .h4,#bootstrap-theme .h5,#bootstrap-theme .h6{font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.2;color:#000}#bootstrap-theme h1 small,#bootstrap-theme h1 .small,#bootstrap-theme h2 small,#bootstrap-theme h2 .small,#bootstrap-theme h3 small,#bootstrap-theme h3 .small,#bootstrap-theme h4 small,#bootstrap-theme h4 .small,#bootstrap-theme h5 small,#bootstrap-theme h5 .small,#bootstrap-theme h6 small,#bootstrap-theme h6 .small,#bootstrap-theme .h1 small,#bootstrap-theme .h1 .small,#bootstrap-theme .h2 small,#bootstrap-theme .h2 .small,#bootstrap-theme .h3 small,#bootstrap-theme .h3 .small,#bootstrap-theme .h4 small,#bootstrap-theme .h4 .small,#bootstrap-theme .h5 small,#bootstrap-theme .h5 .small,#bootstrap-theme .h6 small,#bootstrap-theme .h6 .small{font-weight:400;line-height:1;color:#999}#bootstrap-theme h1,#bootstrap-theme .h1,#bootstrap-theme h2,#bootstrap-theme .h2,#bootstrap-theme h3,#bootstrap-theme .h3{margin-top:20px;margin-bottom:10px}#bootstrap-theme h1 small,#bootstrap-theme h1 .small,#bootstrap-theme .h1 small,#bootstrap-theme .h1 .small,#bootstrap-theme h2 small,#bootstrap-theme h2 .small,#bootstrap-theme .h2 small,#bootstrap-theme .h2 .small,#bootstrap-theme h3 small,#bootstrap-theme h3 .small,#bootstrap-theme .h3 small,#bootstrap-theme .h3 .small{font-size:65%}#bootstrap-theme h4,#bootstrap-theme .h4,#bootstrap-theme h5,#bootstrap-theme .h5,#bootstrap-theme h6,#bootstrap-theme .h6{margin-top:10px;margin-bottom:10px}#bootstrap-theme h4 small,#bootstrap-theme h4 .small,#bootstrap-theme .h4 small,#bootstrap-theme .h4 .small,#bootstrap-theme h5 small,#bootstrap-theme h5 .small,#bootstrap-theme .h5 small,#bootstrap-theme .h5 .small,#bootstrap-theme h6 small,#bootstrap-theme h6 .small,#bootstrap-theme .h6 small,#bootstrap-theme .h6 .small{font-size:75%}#bootstrap-theme h1,#bootstrap-theme .h1{font-size:36px}#bootstrap-theme h2,#bootstrap-theme .h2{font-size:30px}#bootstrap-theme h3,#bootstrap-theme .h3{font-size:24px}#bootstrap-theme h4,#bootstrap-theme .h4{font-size:18px}#bootstrap-theme h5,#bootstrap-theme .h5{font-size:14px}#bootstrap-theme h6,#bootstrap-theme .h6{font-size:12px}#bootstrap-theme p{margin:0 0 10px}#bootstrap-theme .lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){#bootstrap-theme .lead{font-size:21px}}#bootstrap-theme small,#bootstrap-theme .small{font-size:85%}#bootstrap-theme mark,#bootstrap-theme .mark{padding:.2em;background-color:#fcf8e3}#bootstrap-theme .text-left{text-align:left}#bootstrap-theme .text-right{text-align:right}#bootstrap-theme .text-center{text-align:center}#bootstrap-theme .text-justify{text-align:justify}#bootstrap-theme .text-nowrap{white-space:nowrap}#bootstrap-theme .text-lowercase{text-transform:lowercase}#bootstrap-theme .text-uppercase,#bootstrap-theme .initialism{text-transform:uppercase}#bootstrap-theme .text-capitalize{text-transform:capitalize}#bootstrap-theme .text-muted{color:#999}#bootstrap-theme .text-primary{color:#000}#bootstrap-theme a.text-primary:hover,#bootstrap-theme a.text-primary:focus{color:#000}#bootstrap-theme .text-success{color:#468847}#bootstrap-theme a.text-success:hover,#bootstrap-theme a.text-success:focus{color:#356635}#bootstrap-theme .text-info{color:#3a87ad}#bootstrap-theme a.text-info:hover,#bootstrap-theme a.text-info:focus{color:#2d6987}#bootstrap-theme .text-warning{color:#c09853}#bootstrap-theme a.text-warning:hover,#bootstrap-theme a.text-warning:focus{color:#a47e3c}#bootstrap-theme .text-danger{color:#b94a48}#bootstrap-theme a.text-danger:hover,#bootstrap-theme a.text-danger:focus{color:#953b39}#bootstrap-theme .bg-primary{color:#fff}#bootstrap-theme .bg-primary{background-color:#000}#bootstrap-theme a.bg-primary:hover,#bootstrap-theme a.bg-primary:focus{background-color:#000}#bootstrap-theme .bg-success{background-color:#dff0d8}#bootstrap-theme a.bg-success:hover,#bootstrap-theme a.bg-success:focus{background-color:#c1e2b3}#bootstrap-theme .bg-info{background-color:#d9edf7}#bootstrap-theme a.bg-info:hover,#bootstrap-theme a.bg-info:focus{background-color:#afd9ee}#bootstrap-theme .bg-warning{background-color:#fcf8e3}#bootstrap-theme a.bg-warning:hover,#bootstrap-theme a.bg-warning:focus{background-color:#f7ecb5}#bootstrap-theme .bg-danger{background-color:#f2dede}#bootstrap-theme a.bg-danger:hover,#bootstrap-theme a.bg-danger:focus{background-color:#e4b9b9}#bootstrap-theme .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}#bootstrap-theme ul,#bootstrap-theme ol{margin-top:0;margin-bottom:10px}#bootstrap-theme ul ul,#bootstrap-theme ul ol,#bootstrap-theme ol ul,#bootstrap-theme ol ol{margin-bottom:0}#bootstrap-theme .list-unstyled{padding-left:0;list-style:none}#bootstrap-theme .list-inline{padding-left:0;list-style:none;margin-left:-5px}#bootstrap-theme .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}#bootstrap-theme dl{margin-top:0;margin-bottom:20px}#bootstrap-theme dt,#bootstrap-theme dd{line-height:1.428571429}#bootstrap-theme dt{font-weight:700}#bootstrap-theme dd{margin-left:0}#bootstrap-theme .dl-horizontal dd:before,#bootstrap-theme .dl-horizontal dd:after{display:table;content:" "}#bootstrap-theme .dl-horizontal dd:after{clear:both}@media (min-width:768px){#bootstrap-theme .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#bootstrap-theme .dl-horizontal dd{margin-left:180px}}#bootstrap-theme abbr[title],#bootstrap-theme abbr[data-original-title]{cursor:help}#bootstrap-theme .initialism{font-size:90%}#bootstrap-theme blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}#bootstrap-theme blockquote p:last-child,#bootstrap-theme blockquote ul:last-child,#bootstrap-theme blockquote ol:last-child{margin-bottom:0}#bootstrap-theme blockquote footer,#bootstrap-theme blockquote small,#bootstrap-theme blockquote .small{display:block;font-size:80%;line-height:1.428571429;color:#999}#bootstrap-theme blockquote footer:before,#bootstrap-theme blockquote small:before,#bootstrap-theme blockquote .small:before{content:"—  "}#bootstrap-theme .blockquote-reverse,#bootstrap-theme blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}#bootstrap-theme .blockquote-reverse footer:before,#bootstrap-theme .blockquote-reverse small:before,#bootstrap-theme .blockquote-reverse .small:before,#bootstrap-theme blockquote.pull-right footer:before,#bootstrap-theme blockquote.pull-right small:before,#bootstrap-theme blockquote.pull-right .small:before{content:""}#bootstrap-theme .blockquote-reverse footer:after,#bootstrap-theme .blockquote-reverse small:after,#bootstrap-theme .blockquote-reverse .small:after,#bootstrap-theme blockquote.pull-right footer:after,#bootstrap-theme blockquote.pull-right small:after,#bootstrap-theme blockquote.pull-right .small:after{content:" —"}#bootstrap-theme address{margin-bottom:20px;font-style:normal;line-height:1.428571429}#bootstrap-theme code,#bootstrap-theme kbd,#bootstrap-theme pre,#bootstrap-theme samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}#bootstrap-theme code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}#bootstrap-theme kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}#bootstrap-theme kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}#bootstrap-theme pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;-ms-word-break:break-all;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}#bootstrap-theme pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}#bootstrap-theme .pre-scrollable{max-height:340px;overflow-y:scroll}#bootstrap-theme .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}#bootstrap-theme .container:before,#bootstrap-theme .container:after{display:table;content:" "}#bootstrap-theme .container:after{clear:both}@media (min-width:768px){#bootstrap-theme .container{width:750px}}@media (min-width:992px){#bootstrap-theme .container{width:970px}}@media (min-width:1200px){#bootstrap-theme .container{width:1170px}}#bootstrap-theme .container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}#bootstrap-theme .container-fluid:before,#bootstrap-theme .container-fluid:after{display:table;content:" "}#bootstrap-theme .container-fluid:after{clear:both}#bootstrap-theme .row{margin-right:-15px;margin-left:-15px}#bootstrap-theme .row:before,#bootstrap-theme .row:after{display:table;content:" "}#bootstrap-theme .row:after{clear:both}#bootstrap-theme .row-no-gutters{margin-right:0;margin-left:0}#bootstrap-theme .row-no-gutters [class*=col-]{padding-right:0;padding-left:0}#bootstrap-theme .col-xs-1,#bootstrap-theme .col-sm-1,#bootstrap-theme .col-md-1,#bootstrap-theme .col-lg-1,#bootstrap-theme .col-xs-2,#bootstrap-theme .col-sm-2,#bootstrap-theme .col-md-2,#bootstrap-theme .col-lg-2,#bootstrap-theme .col-xs-3,#bootstrap-theme .col-sm-3,#bootstrap-theme .col-md-3,#bootstrap-theme .col-lg-3,#bootstrap-theme .col-xs-4,#bootstrap-theme .col-sm-4,#bootstrap-theme .col-md-4,#bootstrap-theme .col-lg-4,#bootstrap-theme .col-xs-5,#bootstrap-theme .col-sm-5,#bootstrap-theme .col-md-5,#bootstrap-theme .col-lg-5,#bootstrap-theme .col-xs-6,#bootstrap-theme .col-sm-6,#bootstrap-theme .col-md-6,#bootstrap-theme .col-lg-6,#bootstrap-theme .col-xs-7,#bootstrap-theme .col-sm-7,#bootstrap-theme .col-md-7,#bootstrap-theme .col-lg-7,#bootstrap-theme .col-xs-8,#bootstrap-theme .col-sm-8,#bootstrap-theme .col-md-8,#bootstrap-theme .col-lg-8,#bootstrap-theme .col-xs-9,#bootstrap-theme .col-sm-9,#bootstrap-theme .col-md-9,#bootstrap-theme .col-lg-9,#bootstrap-theme .col-xs-10,#bootstrap-theme .col-sm-10,#bootstrap-theme .col-md-10,#bootstrap-theme .col-lg-10,#bootstrap-theme .col-xs-11,#bootstrap-theme .col-sm-11,#bootstrap-theme .col-md-11,#bootstrap-theme .col-lg-11,#bootstrap-theme .col-xs-12,#bootstrap-theme .col-sm-12,#bootstrap-theme .col-md-12,#bootstrap-theme .col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}#bootstrap-theme .col-xs-1,#bootstrap-theme .col-xs-2,#bootstrap-theme .col-xs-3,#bootstrap-theme .col-xs-4,#bootstrap-theme .col-xs-5,#bootstrap-theme .col-xs-6,#bootstrap-theme .col-xs-7,#bootstrap-theme .col-xs-8,#bootstrap-theme .col-xs-9,#bootstrap-theme .col-xs-10,#bootstrap-theme .col-xs-11,#bootstrap-theme .col-xs-12{float:left}#bootstrap-theme .col-xs-1{width:8.3333333333%}#bootstrap-theme .col-xs-2{width:16.6666666667%}#bootstrap-theme .col-xs-3{width:25%}#bootstrap-theme .col-xs-4{width:33.3333333333%}#bootstrap-theme .col-xs-5{width:41.6666666667%}#bootstrap-theme .col-xs-6{width:50%}#bootstrap-theme .col-xs-7{width:58.3333333333%}#bootstrap-theme .col-xs-8{width:66.6666666667%}#bootstrap-theme .col-xs-9{width:75%}#bootstrap-theme .col-xs-10{width:83.3333333333%}#bootstrap-theme .col-xs-11{width:91.6666666667%}#bootstrap-theme .col-xs-12{width:100%}#bootstrap-theme .col-xs-pull-0{right:auto}#bootstrap-theme .col-xs-pull-1{right:8.3333333333%}#bootstrap-theme .col-xs-pull-2{right:16.6666666667%}#bootstrap-theme .col-xs-pull-3{right:25%}#bootstrap-theme .col-xs-pull-4{right:33.3333333333%}#bootstrap-theme .col-xs-pull-5{right:41.6666666667%}#bootstrap-theme .col-xs-pull-6{right:50%}#bootstrap-theme .col-xs-pull-7{right:58.3333333333%}#bootstrap-theme .col-xs-pull-8{right:66.6666666667%}#bootstrap-theme .col-xs-pull-9{right:75%}#bootstrap-theme .col-xs-pull-10{right:83.3333333333%}#bootstrap-theme .col-xs-pull-11{right:91.6666666667%}#bootstrap-theme .col-xs-pull-12{right:100%}#bootstrap-theme .col-xs-push-0{left:auto}#bootstrap-theme .col-xs-push-1{left:8.3333333333%}#bootstrap-theme .col-xs-push-2{left:16.6666666667%}#bootstrap-theme .col-xs-push-3{left:25%}#bootstrap-theme .col-xs-push-4{left:33.3333333333%}#bootstrap-theme .col-xs-push-5{left:41.6666666667%}#bootstrap-theme .col-xs-push-6{left:50%}#bootstrap-theme .col-xs-push-7{left:58.3333333333%}#bootstrap-theme .col-xs-push-8{left:66.6666666667%}#bootstrap-theme .col-xs-push-9{left:75%}#bootstrap-theme .col-xs-push-10{left:83.3333333333%}#bootstrap-theme .col-xs-push-11{left:91.6666666667%}#bootstrap-theme .col-xs-push-12{left:100%}#bootstrap-theme .col-xs-offset-0{margin-left:0}#bootstrap-theme .col-xs-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-xs-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-xs-offset-3{margin-left:25%}#bootstrap-theme .col-xs-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-xs-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-xs-offset-6{margin-left:50%}#bootstrap-theme .col-xs-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-xs-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-xs-offset-9{margin-left:75%}#bootstrap-theme .col-xs-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-xs-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-xs-offset-12{margin-left:100%}@media (min-width:768px){#bootstrap-theme .col-sm-1,#bootstrap-theme .col-sm-2,#bootstrap-theme .col-sm-3,#bootstrap-theme .col-sm-4,#bootstrap-theme .col-sm-5,#bootstrap-theme .col-sm-6,#bootstrap-theme .col-sm-7,#bootstrap-theme .col-sm-8,#bootstrap-theme .col-sm-9,#bootstrap-theme .col-sm-10,#bootstrap-theme .col-sm-11,#bootstrap-theme .col-sm-12{float:left}#bootstrap-theme .col-sm-1{width:8.3333333333%}#bootstrap-theme .col-sm-2{width:16.6666666667%}#bootstrap-theme .col-sm-3{width:25%}#bootstrap-theme .col-sm-4{width:33.3333333333%}#bootstrap-theme .col-sm-5{width:41.6666666667%}#bootstrap-theme .col-sm-6{width:50%}#bootstrap-theme .col-sm-7{width:58.3333333333%}#bootstrap-theme .col-sm-8{width:66.6666666667%}#bootstrap-theme .col-sm-9{width:75%}#bootstrap-theme .col-sm-10{width:83.3333333333%}#bootstrap-theme .col-sm-11{width:91.6666666667%}#bootstrap-theme .col-sm-12{width:100%}#bootstrap-theme .col-sm-pull-0{right:auto}#bootstrap-theme .col-sm-pull-1{right:8.3333333333%}#bootstrap-theme .col-sm-pull-2{right:16.6666666667%}#bootstrap-theme .col-sm-pull-3{right:25%}#bootstrap-theme .col-sm-pull-4{right:33.3333333333%}#bootstrap-theme .col-sm-pull-5{right:41.6666666667%}#bootstrap-theme .col-sm-pull-6{right:50%}#bootstrap-theme .col-sm-pull-7{right:58.3333333333%}#bootstrap-theme .col-sm-pull-8{right:66.6666666667%}#bootstrap-theme .col-sm-pull-9{right:75%}#bootstrap-theme .col-sm-pull-10{right:83.3333333333%}#bootstrap-theme .col-sm-pull-11{right:91.6666666667%}#bootstrap-theme .col-sm-pull-12{right:100%}#bootstrap-theme .col-sm-push-0{left:auto}#bootstrap-theme .col-sm-push-1{left:8.3333333333%}#bootstrap-theme .col-sm-push-2{left:16.6666666667%}#bootstrap-theme .col-sm-push-3{left:25%}#bootstrap-theme .col-sm-push-4{left:33.3333333333%}#bootstrap-theme .col-sm-push-5{left:41.6666666667%}#bootstrap-theme .col-sm-push-6{left:50%}#bootstrap-theme .col-sm-push-7{left:58.3333333333%}#bootstrap-theme .col-sm-push-8{left:66.6666666667%}#bootstrap-theme .col-sm-push-9{left:75%}#bootstrap-theme .col-sm-push-10{left:83.3333333333%}#bootstrap-theme .col-sm-push-11{left:91.6666666667%}#bootstrap-theme .col-sm-push-12{left:100%}#bootstrap-theme .col-sm-offset-0{margin-left:0}#bootstrap-theme .col-sm-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-sm-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-sm-offset-3{margin-left:25%}#bootstrap-theme .col-sm-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-sm-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-sm-offset-6{margin-left:50%}#bootstrap-theme .col-sm-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-sm-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-sm-offset-9{margin-left:75%}#bootstrap-theme .col-sm-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-sm-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-sm-offset-12{margin-left:100%}}@media (min-width:992px){#bootstrap-theme .col-md-1,#bootstrap-theme .col-md-2,#bootstrap-theme .col-md-3,#bootstrap-theme .col-md-4,#bootstrap-theme .col-md-5,#bootstrap-theme .col-md-6,#bootstrap-theme .col-md-7,#bootstrap-theme .col-md-8,#bootstrap-theme .col-md-9,#bootstrap-theme .col-md-10,#bootstrap-theme .col-md-11,#bootstrap-theme .col-md-12{float:left}#bootstrap-theme .col-md-1{width:8.3333333333%}#bootstrap-theme .col-md-2{width:16.6666666667%}#bootstrap-theme .col-md-3{width:25%}#bootstrap-theme .col-md-4{width:33.3333333333%}#bootstrap-theme .col-md-5{width:41.6666666667%}#bootstrap-theme .col-md-6{width:50%}#bootstrap-theme .col-md-7{width:58.3333333333%}#bootstrap-theme .col-md-8{width:66.6666666667%}#bootstrap-theme .col-md-9{width:75%}#bootstrap-theme .col-md-10{width:83.3333333333%}#bootstrap-theme .col-md-11{width:91.6666666667%}#bootstrap-theme .col-md-12{width:100%}#bootstrap-theme .col-md-pull-0{right:auto}#bootstrap-theme .col-md-pull-1{right:8.3333333333%}#bootstrap-theme .col-md-pull-2{right:16.6666666667%}#bootstrap-theme .col-md-pull-3{right:25%}#bootstrap-theme .col-md-pull-4{right:33.3333333333%}#bootstrap-theme .col-md-pull-5{right:41.6666666667%}#bootstrap-theme .col-md-pull-6{right:50%}#bootstrap-theme .col-md-pull-7{right:58.3333333333%}#bootstrap-theme .col-md-pull-8{right:66.6666666667%}#bootstrap-theme .col-md-pull-9{right:75%}#bootstrap-theme .col-md-pull-10{right:83.3333333333%}#bootstrap-theme .col-md-pull-11{right:91.6666666667%}#bootstrap-theme .col-md-pull-12{right:100%}#bootstrap-theme .col-md-push-0{left:auto}#bootstrap-theme .col-md-push-1{left:8.3333333333%}#bootstrap-theme .col-md-push-2{left:16.6666666667%}#bootstrap-theme .col-md-push-3{left:25%}#bootstrap-theme .col-md-push-4{left:33.3333333333%}#bootstrap-theme .col-md-push-5{left:41.6666666667%}#bootstrap-theme .col-md-push-6{left:50%}#bootstrap-theme .col-md-push-7{left:58.3333333333%}#bootstrap-theme .col-md-push-8{left:66.6666666667%}#bootstrap-theme .col-md-push-9{left:75%}#bootstrap-theme .col-md-push-10{left:83.3333333333%}#bootstrap-theme .col-md-push-11{left:91.6666666667%}#bootstrap-theme .col-md-push-12{left:100%}#bootstrap-theme .col-md-offset-0{margin-left:0}#bootstrap-theme .col-md-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-md-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-md-offset-3{margin-left:25%}#bootstrap-theme .col-md-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-md-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-md-offset-6{margin-left:50%}#bootstrap-theme .col-md-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-md-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-md-offset-9{margin-left:75%}#bootstrap-theme .col-md-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-md-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-md-offset-12{margin-left:100%}}@media (min-width:1200px){#bootstrap-theme .col-lg-1,#bootstrap-theme .col-lg-2,#bootstrap-theme .col-lg-3,#bootstrap-theme .col-lg-4,#bootstrap-theme .col-lg-5,#bootstrap-theme .col-lg-6,#bootstrap-theme .col-lg-7,#bootstrap-theme .col-lg-8,#bootstrap-theme .col-lg-9,#bootstrap-theme .col-lg-10,#bootstrap-theme .col-lg-11,#bootstrap-theme .col-lg-12{float:left}#bootstrap-theme .col-lg-1{width:8.3333333333%}#bootstrap-theme .col-lg-2{width:16.6666666667%}#bootstrap-theme .col-lg-3{width:25%}#bootstrap-theme .col-lg-4{width:33.3333333333%}#bootstrap-theme .col-lg-5{width:41.6666666667%}#bootstrap-theme .col-lg-6{width:50%}#bootstrap-theme .col-lg-7{width:58.3333333333%}#bootstrap-theme .col-lg-8{width:66.6666666667%}#bootstrap-theme .col-lg-9{width:75%}#bootstrap-theme .col-lg-10{width:83.3333333333%}#bootstrap-theme .col-lg-11{width:91.6666666667%}#bootstrap-theme .col-lg-12{width:100%}#bootstrap-theme .col-lg-pull-0{right:auto}#bootstrap-theme .col-lg-pull-1{right:8.3333333333%}#bootstrap-theme .col-lg-pull-2{right:16.6666666667%}#bootstrap-theme .col-lg-pull-3{right:25%}#bootstrap-theme .col-lg-pull-4{right:33.3333333333%}#bootstrap-theme .col-lg-pull-5{right:41.6666666667%}#bootstrap-theme .col-lg-pull-6{right:50%}#bootstrap-theme .col-lg-pull-7{right:58.3333333333%}#bootstrap-theme .col-lg-pull-8{right:66.6666666667%}#bootstrap-theme .col-lg-pull-9{right:75%}#bootstrap-theme .col-lg-pull-10{right:83.3333333333%}#bootstrap-theme .col-lg-pull-11{right:91.6666666667%}#bootstrap-theme .col-lg-pull-12{right:100%}#bootstrap-theme .col-lg-push-0{left:auto}#bootstrap-theme .col-lg-push-1{left:8.3333333333%}#bootstrap-theme .col-lg-push-2{left:16.6666666667%}#bootstrap-theme .col-lg-push-3{left:25%}#bootstrap-theme .col-lg-push-4{left:33.3333333333%}#bootstrap-theme .col-lg-push-5{left:41.6666666667%}#bootstrap-theme .col-lg-push-6{left:50%}#bootstrap-theme .col-lg-push-7{left:58.3333333333%}#bootstrap-theme .col-lg-push-8{left:66.6666666667%}#bootstrap-theme .col-lg-push-9{left:75%}#bootstrap-theme .col-lg-push-10{left:83.3333333333%}#bootstrap-theme .col-lg-push-11{left:91.6666666667%}#bootstrap-theme .col-lg-push-12{left:100%}#bootstrap-theme .col-lg-offset-0{margin-left:0}#bootstrap-theme .col-lg-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-lg-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-lg-offset-3{margin-left:25%}#bootstrap-theme .col-lg-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-lg-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-lg-offset-6{margin-left:50%}#bootstrap-theme .col-lg-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-lg-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-lg-offset-9{margin-left:75%}#bootstrap-theme .col-lg-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-lg-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-lg-offset-12{margin-left:100%}}#bootstrap-theme table{background-color:transparent}#bootstrap-theme table col[class*=col-]{position:static;display:table-column;float:none}#bootstrap-theme table td[class*=col-],#bootstrap-theme table th[class*=col-]{position:static;display:table-cell;float:none}#bootstrap-theme caption{padding-top:8px;padding-bottom:8px;color:#999;text-align:left}#bootstrap-theme th{text-align:left}#bootstrap-theme .table{width:100%;max-width:100%;margin-bottom:20px}#bootstrap-theme .table>thead>tr>th,#bootstrap-theme .table>thead>tr>td,#bootstrap-theme .table>tbody>tr>th,#bootstrap-theme .table>tbody>tr>td,#bootstrap-theme .table>tfoot>tr>th,#bootstrap-theme .table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}#bootstrap-theme .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}#bootstrap-theme .table>caption+thead>tr:first-child>th,#bootstrap-theme .table>caption+thead>tr:first-child>td,#bootstrap-theme .table>colgroup+thead>tr:first-child>th,#bootstrap-theme .table>colgroup+thead>tr:first-child>td,#bootstrap-theme .table>thead:first-child>tr:first-child>th,#bootstrap-theme .table>thead:first-child>tr:first-child>td{border-top:0}#bootstrap-theme .table>tbody+tbody{border-top:2px solid #ddd}#bootstrap-theme .table .table{background-color:#fff}#bootstrap-theme .table-condensed>thead>tr>th,#bootstrap-theme .table-condensed>thead>tr>td,#bootstrap-theme .table-condensed>tbody>tr>th,#bootstrap-theme .table-condensed>tbody>tr>td,#bootstrap-theme .table-condensed>tfoot>tr>th,#bootstrap-theme .table-condensed>tfoot>tr>td{padding:5px}#bootstrap-theme .table-bordered{border:1px solid #ddd}#bootstrap-theme .table-bordered>thead>tr>th,#bootstrap-theme .table-bordered>thead>tr>td,#bootstrap-theme .table-bordered>tbody>tr>th,#bootstrap-theme .table-bordered>tbody>tr>td,#bootstrap-theme .table-bordered>tfoot>tr>th,#bootstrap-theme .table-bordered>tfoot>tr>td{border:1px solid #ddd}#bootstrap-theme .table-bordered>thead>tr>th,#bootstrap-theme .table-bordered>thead>tr>td{border-bottom-width:2px}#bootstrap-theme .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}#bootstrap-theme .table-hover>tbody>tr:hover{background-color:#f5f5f5}#bootstrap-theme .table>thead>tr>td.active,#bootstrap-theme .table>thead>tr>th.active,#bootstrap-theme .table>thead>tr.active>td,#bootstrap-theme .table>thead>tr.active>th,#bootstrap-theme .table>tbody>tr>td.active,#bootstrap-theme .table>tbody>tr>th.active,#bootstrap-theme .table>tbody>tr.active>td,#bootstrap-theme .table>tbody>tr.active>th,#bootstrap-theme .table>tfoot>tr>td.active,#bootstrap-theme .table>tfoot>tr>th.active,#bootstrap-theme .table>tfoot>tr.active>td,#bootstrap-theme .table>tfoot>tr.active>th{background-color:#f5f5f5}#bootstrap-theme .table-hover>tbody>tr>td.active:hover,#bootstrap-theme .table-hover>tbody>tr>th.active:hover,#bootstrap-theme .table-hover>tbody>tr.active:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.active,#bootstrap-theme .table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}#bootstrap-theme .table>thead>tr>td.success,#bootstrap-theme .table>thead>tr>th.success,#bootstrap-theme .table>thead>tr.success>td,#bootstrap-theme .table>thead>tr.success>th,#bootstrap-theme .table>tbody>tr>td.success,#bootstrap-theme .table>tbody>tr>th.success,#bootstrap-theme .table>tbody>tr.success>td,#bootstrap-theme .table>tbody>tr.success>th,#bootstrap-theme .table>tfoot>tr>td.success,#bootstrap-theme .table>tfoot>tr>th.success,#bootstrap-theme .table>tfoot>tr.success>td,#bootstrap-theme .table>tfoot>tr.success>th{background-color:#dff0d8}#bootstrap-theme .table-hover>tbody>tr>td.success:hover,#bootstrap-theme .table-hover>tbody>tr>th.success:hover,#bootstrap-theme .table-hover>tbody>tr.success:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.success,#bootstrap-theme .table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}#bootstrap-theme .table>thead>tr>td.info,#bootstrap-theme .table>thead>tr>th.info,#bootstrap-theme .table>thead>tr.info>td,#bootstrap-theme .table>thead>tr.info>th,#bootstrap-theme .table>tbody>tr>td.info,#bootstrap-theme .table>tbody>tr>th.info,#bootstrap-theme .table>tbody>tr.info>td,#bootstrap-theme .table>tbody>tr.info>th,#bootstrap-theme .table>tfoot>tr>td.info,#bootstrap-theme .table>tfoot>tr>th.info,#bootstrap-theme .table>tfoot>tr.info>td,#bootstrap-theme .table>tfoot>tr.info>th{background-color:#d9edf7}#bootstrap-theme .table-hover>tbody>tr>td.info:hover,#bootstrap-theme .table-hover>tbody>tr>th.info:hover,#bootstrap-theme .table-hover>tbody>tr.info:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.info,#bootstrap-theme .table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}#bootstrap-theme .table>thead>tr>td.warning,#bootstrap-theme .table>thead>tr>th.warning,#bootstrap-theme .table>thead>tr.warning>td,#bootstrap-theme .table>thead>tr.warning>th,#bootstrap-theme .table>tbody>tr>td.warning,#bootstrap-theme .table>tbody>tr>th.warning,#bootstrap-theme .table>tbody>tr.warning>td,#bootstrap-theme .table>tbody>tr.warning>th,#bootstrap-theme .table>tfoot>tr>td.warning,#bootstrap-theme .table>tfoot>tr>th.warning,#bootstrap-theme .table>tfoot>tr.warning>td,#bootstrap-theme .table>tfoot>tr.warning>th{background-color:#fcf8e3}#bootstrap-theme .table-hover>tbody>tr>td.warning:hover,#bootstrap-theme .table-hover>tbody>tr>th.warning:hover,#bootstrap-theme .table-hover>tbody>tr.warning:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.warning,#bootstrap-theme .table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}#bootstrap-theme .table>thead>tr>td.danger,#bootstrap-theme .table>thead>tr>th.danger,#bootstrap-theme .table>thead>tr.danger>td,#bootstrap-theme .table>thead>tr.danger>th,#bootstrap-theme .table>tbody>tr>td.danger,#bootstrap-theme .table>tbody>tr>th.danger,#bootstrap-theme .table>tbody>tr.danger>td,#bootstrap-theme .table>tbody>tr.danger>th,#bootstrap-theme .table>tfoot>tr>td.danger,#bootstrap-theme .table>tfoot>tr>th.danger,#bootstrap-theme .table>tfoot>tr.danger>td,#bootstrap-theme .table>tfoot>tr.danger>th{background-color:#f2dede}#bootstrap-theme .table-hover>tbody>tr>td.danger:hover,#bootstrap-theme .table-hover>tbody>tr>th.danger:hover,#bootstrap-theme .table-hover>tbody>tr.danger:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.danger,#bootstrap-theme .table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}#bootstrap-theme .table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){#bootstrap-theme .table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}#bootstrap-theme .table-responsive>.table{margin-bottom:0}#bootstrap-theme .table-responsive>.table>thead>tr>th,#bootstrap-theme .table-responsive>.table>thead>tr>td,#bootstrap-theme .table-responsive>.table>tbody>tr>th,#bootstrap-theme .table-responsive>.table>tbody>tr>td,#bootstrap-theme .table-responsive>.table>tfoot>tr>th,#bootstrap-theme .table-responsive>.table>tfoot>tr>td{white-space:nowrap}#bootstrap-theme .table-responsive>.table-bordered{border:0}#bootstrap-theme .table-responsive>.table-bordered>thead>tr>th:first-child,#bootstrap-theme .table-responsive>.table-bordered>thead>tr>td:first-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>th:first-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>td:first-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>th:first-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}#bootstrap-theme .table-responsive>.table-bordered>thead>tr>th:last-child,#bootstrap-theme .table-responsive>.table-bordered>thead>tr>td:last-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>th:last-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>td:last-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>th:last-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}#bootstrap-theme .table-responsive>.table-bordered>tbody>tr:last-child>th,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr:last-child>td,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr:last-child>th,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}#bootstrap-theme fieldset{min-width:0;padding:0;margin:0;border:0}#bootstrap-theme legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#555;border:0;border-bottom:1px solid #e5e5e5}#bootstrap-theme label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}#bootstrap-theme input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}#bootstrap-theme input[type=radio],#bootstrap-theme input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}#bootstrap-theme input[type=radio][disabled],#bootstrap-theme input[type=radio].disabled,fieldset[disabled] #bootstrap-theme input[type=radio],#bootstrap-theme input[type=checkbox][disabled],#bootstrap-theme input[type=checkbox].disabled,fieldset[disabled] #bootstrap-theme input[type=checkbox]{cursor:not-allowed}#bootstrap-theme input[type=file]{display:block}#bootstrap-theme input[type=range]{display:block;width:100%}#bootstrap-theme select[multiple],#bootstrap-theme select[size]{height:auto}#bootstrap-theme input[type=file]:focus,#bootstrap-theme input[type=radio]:focus,#bootstrap-theme input[type=checkbox]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#bootstrap-theme output{display:block;padding-top:5px;font-size:14px;line-height:1.428571429;color:#555}#bootstrap-theme .form-control{display:block;width:100%;height:30px;padding:4px 8px;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}#bootstrap-theme .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}#bootstrap-theme .form-control::-moz-placeholder{color:#999;opacity:1}#bootstrap-theme .form-control:-ms-input-placeholder{color:#999}#bootstrap-theme .form-control::-webkit-input-placeholder{color:#999}#bootstrap-theme .form-control::-ms-expand{background-color:transparent;border:0}#bootstrap-theme .form-control[disabled],#bootstrap-theme .form-control[readonly],fieldset[disabled] #bootstrap-theme .form-control{background-color:#eee;opacity:1}#bootstrap-theme .form-control[disabled],fieldset[disabled] #bootstrap-theme .form-control{cursor:not-allowed}#bootstrap-theme textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){#bootstrap-theme input[type=date].form-control,#bootstrap-theme input[type=time].form-control,#bootstrap-theme input[type=datetime-local].form-control,#bootstrap-theme input[type=month].form-control{line-height:30px}#bootstrap-theme input[type=date].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=date],#bootstrap-theme .input-group-sm>input.input-group-addon[type=date],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=date],.input-group-sm #bootstrap-theme input[type=date],#bootstrap-theme input[type=time].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=time],#bootstrap-theme .input-group-sm>input.input-group-addon[type=time],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=time],.input-group-sm #bootstrap-theme input[type=time],#bootstrap-theme input[type=datetime-local].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=datetime-local],#bootstrap-theme .input-group-sm>input.input-group-addon[type=datetime-local],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=datetime-local],.input-group-sm #bootstrap-theme input[type=datetime-local],#bootstrap-theme input[type=month].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=month],#bootstrap-theme .input-group-sm>input.input-group-addon[type=month],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=month],.input-group-sm #bootstrap-theme input[type=month]{line-height:30px}#bootstrap-theme input[type=date].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=date],#bootstrap-theme .input-group-lg>input.input-group-addon[type=date],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=date],.input-group-lg #bootstrap-theme input[type=date],#bootstrap-theme input[type=time].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=time],#bootstrap-theme .input-group-lg>input.input-group-addon[type=time],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=time],.input-group-lg #bootstrap-theme input[type=time],#bootstrap-theme input[type=datetime-local].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=datetime-local],#bootstrap-theme .input-group-lg>input.input-group-addon[type=datetime-local],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=datetime-local],.input-group-lg #bootstrap-theme input[type=datetime-local],#bootstrap-theme input[type=month].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=month],#bootstrap-theme .input-group-lg>input.input-group-addon[type=month],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=month],.input-group-lg #bootstrap-theme input[type=month]{line-height:54px}}#bootstrap-theme .form-group{margin-bottom:15px}#bootstrap-theme .radio,#bootstrap-theme .checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}#bootstrap-theme .radio.disabled label,fieldset[disabled] #bootstrap-theme .radio label,#bootstrap-theme .checkbox.disabled label,fieldset[disabled] #bootstrap-theme .checkbox label{cursor:not-allowed}#bootstrap-theme .radio label,#bootstrap-theme .checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}#bootstrap-theme .radio input[type=radio],#bootstrap-theme .radio-inline input[type=radio],#bootstrap-theme .checkbox input[type=checkbox],#bootstrap-theme .checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}#bootstrap-theme .radio+.radio,#bootstrap-theme .checkbox+.checkbox{margin-top:-5px}#bootstrap-theme .radio-inline,#bootstrap-theme .checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}#bootstrap-theme .radio-inline.disabled,fieldset[disabled] #bootstrap-theme .radio-inline,#bootstrap-theme .checkbox-inline.disabled,fieldset[disabled] #bootstrap-theme .checkbox-inline{cursor:not-allowed}#bootstrap-theme .radio-inline+.radio-inline,#bootstrap-theme .checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}#bootstrap-theme .form-control-static{min-height:34px;padding-top:5px;padding-bottom:5px;margin-bottom:0}#bootstrap-theme .form-control-static.input-lg,#bootstrap-theme .input-group-lg>.form-control-static.form-control,#bootstrap-theme .input-group-lg>.form-control-static.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>.form-control-static.btn,#bootstrap-theme .form-control-static.input-sm,#bootstrap-theme .input-group-sm>.form-control-static.form-control,#bootstrap-theme .input-group-sm>.form-control-static.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}#bootstrap-theme .input-sm,#bootstrap-theme .input-group-sm>.form-control,#bootstrap-theme .input-group-sm>.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme select.input-sm,#bootstrap-theme .input-group-sm>select.form-control,#bootstrap-theme .input-group-sm>select.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}#bootstrap-theme textarea.input-sm,#bootstrap-theme .input-group-sm>textarea.form-control,#bootstrap-theme .input-group-sm>textarea.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>textarea.btn,#bootstrap-theme select[multiple].input-sm,#bootstrap-theme .input-group-sm>select.form-control[multiple],#bootstrap-theme .input-group-sm>select.input-group-addon[multiple],#bootstrap-theme .input-group-sm>.input-group-btn>select.btn[multiple]{height:auto}#bootstrap-theme .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme .form-group-sm select.form-control{height:30px;line-height:30px}#bootstrap-theme .form-group-sm textarea.form-control,#bootstrap-theme .form-group-sm select[multiple].form-control{height:auto}#bootstrap-theme .form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}#bootstrap-theme .input-lg,#bootstrap-theme .input-group-lg>.form-control,#bootstrap-theme .input-group-lg>.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}#bootstrap-theme select.input-lg,#bootstrap-theme .input-group-lg>select.form-control,#bootstrap-theme .input-group-lg>select.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>select.btn{height:54px;line-height:54px}#bootstrap-theme textarea.input-lg,#bootstrap-theme .input-group-lg>textarea.form-control,#bootstrap-theme .input-group-lg>textarea.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>textarea.btn,#bootstrap-theme select[multiple].input-lg,#bootstrap-theme .input-group-lg>select.form-control[multiple],#bootstrap-theme .input-group-lg>select.input-group-addon[multiple],#bootstrap-theme .input-group-lg>.input-group-btn>select.btn[multiple]{height:auto}#bootstrap-theme .form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}#bootstrap-theme .form-group-lg select.form-control{height:54px;line-height:54px}#bootstrap-theme .form-group-lg textarea.form-control,#bootstrap-theme .form-group-lg select[multiple].form-control{height:auto}#bootstrap-theme .form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}#bootstrap-theme .has-feedback{position:relative}#bootstrap-theme .has-feedback .form-control{padding-right:37.5px}#bootstrap-theme .form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:30px;height:30px;line-height:30px;text-align:center;pointer-events:none}#bootstrap-theme .input-lg+.form-control-feedback,#bootstrap-theme .input-group-lg>.form-control+.form-control-feedback,#bootstrap-theme .input-group-lg>.input-group-addon+.form-control-feedback,#bootstrap-theme .input-group-lg>.input-group-btn>.btn+.form-control-feedback,#bootstrap-theme .input-group-lg+.form-control-feedback,#bootstrap-theme .form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}#bootstrap-theme .input-sm+.form-control-feedback,#bootstrap-theme .input-group-sm>.form-control+.form-control-feedback,#bootstrap-theme .input-group-sm>.input-group-addon+.form-control-feedback,#bootstrap-theme .input-group-sm>.input-group-btn>.btn+.form-control-feedback,#bootstrap-theme .input-group-sm+.form-control-feedback,#bootstrap-theme .form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}#bootstrap-theme .has-success .help-block,#bootstrap-theme .has-success .control-label,#bootstrap-theme .has-success .radio,#bootstrap-theme .has-success .checkbox,#bootstrap-theme .has-success .radio-inline,#bootstrap-theme .has-success .checkbox-inline,#bootstrap-theme .has-success.radio label,#bootstrap-theme .has-success.checkbox label,#bootstrap-theme .has-success.radio-inline label,#bootstrap-theme .has-success.checkbox-inline label{color:#468847}#bootstrap-theme .has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}#bootstrap-theme .has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}#bootstrap-theme .has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}#bootstrap-theme .has-success .form-control-feedback{color:#468847}#bootstrap-theme .has-warning .help-block,#bootstrap-theme .has-warning .control-label,#bootstrap-theme .has-warning .radio,#bootstrap-theme .has-warning .checkbox,#bootstrap-theme .has-warning .radio-inline,#bootstrap-theme .has-warning .checkbox-inline,#bootstrap-theme .has-warning.radio label,#bootstrap-theme .has-warning.checkbox label,#bootstrap-theme .has-warning.radio-inline label,#bootstrap-theme .has-warning.checkbox-inline label{color:#c09853}#bootstrap-theme .has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}#bootstrap-theme .has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}#bootstrap-theme .has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}#bootstrap-theme .has-warning .form-control-feedback{color:#c09853}#bootstrap-theme .has-error .help-block,#bootstrap-theme .has-error .control-label,#bootstrap-theme .has-error .radio,#bootstrap-theme .has-error .checkbox,#bootstrap-theme .has-error .radio-inline,#bootstrap-theme .has-error .checkbox-inline,#bootstrap-theme .has-error.radio label,#bootstrap-theme .has-error.checkbox label,#bootstrap-theme .has-error.radio-inline label,#bootstrap-theme .has-error.checkbox-inline label{color:#b94a48}#bootstrap-theme .has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}#bootstrap-theme .has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}#bootstrap-theme .has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}#bootstrap-theme .has-error .form-control-feedback{color:#b94a48}#bootstrap-theme .has-feedback label~.form-control-feedback{top:25px}#bootstrap-theme .has-feedback label.sr-only~.form-control-feedback{top:0}#bootstrap-theme .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#959595}@media (min-width:768px){#bootstrap-theme .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}#bootstrap-theme .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}#bootstrap-theme .form-inline .form-control-static{display:inline-block}#bootstrap-theme .form-inline .input-group{display:inline-table;vertical-align:middle}#bootstrap-theme .form-inline .input-group .input-group-addon,#bootstrap-theme .form-inline .input-group .input-group-btn,#bootstrap-theme .form-inline .input-group .form-control{width:auto}#bootstrap-theme .form-inline .input-group>.form-control{width:100%}#bootstrap-theme .form-inline .control-label{margin-bottom:0;vertical-align:middle}#bootstrap-theme .form-inline .radio,#bootstrap-theme .form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}#bootstrap-theme .form-inline .radio label,#bootstrap-theme .form-inline .checkbox label{padding-left:0}#bootstrap-theme .form-inline .radio input[type=radio],#bootstrap-theme .form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}#bootstrap-theme .form-inline .has-feedback .form-control-feedback{top:0}}#bootstrap-theme .form-horizontal .radio,#bootstrap-theme .form-horizontal .checkbox,#bootstrap-theme .form-horizontal .radio-inline,#bootstrap-theme .form-horizontal .checkbox-inline{padding-top:5px;margin-top:0;margin-bottom:0}#bootstrap-theme .form-horizontal .radio,#bootstrap-theme .form-horizontal .checkbox{min-height:25px}#bootstrap-theme .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}#bootstrap-theme .form-horizontal .form-group:before,#bootstrap-theme .form-horizontal .form-group:after{display:table;content:" "}#bootstrap-theme .form-horizontal .form-group:after{clear:both}@media (min-width:768px){#bootstrap-theme .form-horizontal .control-label{padding-top:5px;margin-bottom:0;text-align:right}}#bootstrap-theme .form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){#bootstrap-theme .form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){#bootstrap-theme .form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}#bootstrap-theme .btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:4px 8px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#bootstrap-theme .btn:focus,#bootstrap-theme .btn.focus,#bootstrap-theme .btn:active:focus,#bootstrap-theme .btn:active.focus,#bootstrap-theme .btn.active:focus,#bootstrap-theme .btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#bootstrap-theme .btn:hover,#bootstrap-theme .btn:focus,#bootstrap-theme .btn.focus{color:#fff;text-decoration:none}#bootstrap-theme .btn:active,#bootstrap-theme .btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}#bootstrap-theme .btn.disabled,#bootstrap-theme .btn[disabled],fieldset[disabled] #bootstrap-theme .btn{cursor:not-allowed;-webkit-filter:alpha(opacity=65);filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}#bootstrap-theme a.btn.disabled,fieldset[disabled] #bootstrap-theme a.btn{pointer-events:none}#bootstrap-theme .btn-default{color:#fff;background-color:#70716b;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:focus,#bootstrap-theme .btn-default.focus{color:#fff;background-color:#565752;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:hover{color:#fff;background-color:#565752;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:active,#bootstrap-theme .btn-default.active,.open>#bootstrap-theme .btn-default.dropdown-toggle{color:#fff;background-color:#565752;background-image:none;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:active:hover,#bootstrap-theme .btn-default:active:focus,#bootstrap-theme .btn-default:active.focus,#bootstrap-theme .btn-default.active:hover,#bootstrap-theme .btn-default.active:focus,#bootstrap-theme .btn-default.active.focus,.open>#bootstrap-theme .btn-default.dropdown-toggle:hover,.open>#bootstrap-theme .btn-default.dropdown-toggle:focus,.open>#bootstrap-theme .btn-default.dropdown-toggle.focus{color:#fff;background-color:#444441;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default.disabled:hover,#bootstrap-theme .btn-default.disabled:focus,#bootstrap-theme .btn-default.disabled.focus,#bootstrap-theme .btn-default[disabled]:hover,#bootstrap-theme .btn-default[disabled]:focus,#bootstrap-theme .btn-default[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-default:hover,fieldset[disabled] #bootstrap-theme .btn-default:focus,fieldset[disabled] #bootstrap-theme .btn-default.focus{background-color:#70716b;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default .badge{color:#70716b;background-color:#fff}#bootstrap-theme .btn-primary{color:#fff;background-color:#70716b;border-color:#70716b}#bootstrap-theme .btn-primary:focus,#bootstrap-theme .btn-primary.focus{color:#fff;background-color:#565752;border-color:#2f302d}#bootstrap-theme .btn-primary:hover{color:#fff;background-color:#565752;border-color:#51524d}#bootstrap-theme .btn-primary:active,#bootstrap-theme .btn-primary.active,.open>#bootstrap-theme .btn-primary.dropdown-toggle{color:#fff;background-color:#565752;background-image:none;border-color:#51524d}#bootstrap-theme .btn-primary:active:hover,#bootstrap-theme .btn-primary:active:focus,#bootstrap-theme .btn-primary:active.focus,#bootstrap-theme .btn-primary.active:hover,#bootstrap-theme .btn-primary.active:focus,#bootstrap-theme .btn-primary.active.focus,.open>#bootstrap-theme .btn-primary.dropdown-toggle:hover,.open>#bootstrap-theme .btn-primary.dropdown-toggle:focus,.open>#bootstrap-theme .btn-primary.dropdown-toggle.focus{color:#fff;background-color:#444441;border-color:#2f302d}#bootstrap-theme .btn-primary.disabled:hover,#bootstrap-theme .btn-primary.disabled:focus,#bootstrap-theme .btn-primary.disabled.focus,#bootstrap-theme .btn-primary[disabled]:hover,#bootstrap-theme .btn-primary[disabled]:focus,#bootstrap-theme .btn-primary[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-primary:hover,fieldset[disabled] #bootstrap-theme .btn-primary:focus,fieldset[disabled] #bootstrap-theme .btn-primary.focus{background-color:#70716b;border-color:#70716b}#bootstrap-theme .btn-primary .badge{color:#70716b;background-color:#fff}#bootstrap-theme .btn-success{color:#fff;background-color:#73a839;border-color:#73a839}#bootstrap-theme .btn-success:focus,#bootstrap-theme .btn-success.focus{color:#fff;background-color:#59822c;border-color:#324919}#bootstrap-theme .btn-success:hover{color:#fff;background-color:#59822c;border-color:#547a29}#bootstrap-theme .btn-success:active,#bootstrap-theme .btn-success.active,.open>#bootstrap-theme .btn-success.dropdown-toggle{color:#fff;background-color:#59822c;background-image:none;border-color:#547a29}#bootstrap-theme .btn-success:active:hover,#bootstrap-theme .btn-success:active:focus,#bootstrap-theme .btn-success:active.focus,#bootstrap-theme .btn-success.active:hover,#bootstrap-theme .btn-success.active:focus,#bootstrap-theme .btn-success.active.focus,.open>#bootstrap-theme .btn-success.dropdown-toggle:hover,.open>#bootstrap-theme .btn-success.dropdown-toggle:focus,.open>#bootstrap-theme .btn-success.dropdown-toggle.focus{color:#fff;background-color:#476723;border-color:#324919}#bootstrap-theme .btn-success.disabled:hover,#bootstrap-theme .btn-success.disabled:focus,#bootstrap-theme .btn-success.disabled.focus,#bootstrap-theme .btn-success[disabled]:hover,#bootstrap-theme .btn-success[disabled]:focus,#bootstrap-theme .btn-success[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-success:hover,fieldset[disabled] #bootstrap-theme .btn-success:focus,fieldset[disabled] #bootstrap-theme .btn-success.focus{background-color:#73a839;border-color:#73a839}#bootstrap-theme .btn-success .badge{color:#73a839;background-color:#fff}#bootstrap-theme .btn-info{color:#fff;background-color:#cde8fe;border-color:#cde8fe}#bootstrap-theme .btn-info:focus,#bootstrap-theme .btn-info.focus{color:#fff;background-color:#9bd1fd;border-color:#50affc}#bootstrap-theme .btn-info:hover{color:#fff;background-color:#9bd1fd;border-color:#91ccfd}#bootstrap-theme .btn-info:active,#bootstrap-theme .btn-info.active,.open>#bootstrap-theme .btn-info.dropdown-toggle{color:#fff;background-color:#9bd1fd;background-image:none;border-color:#91ccfd}#bootstrap-theme .btn-info:active:hover,#bootstrap-theme .btn-info:active:focus,#bootstrap-theme .btn-info:active.focus,#bootstrap-theme .btn-info.active:hover,#bootstrap-theme .btn-info.active:focus,#bootstrap-theme .btn-info.active.focus,.open>#bootstrap-theme .btn-info.dropdown-toggle:hover,.open>#bootstrap-theme .btn-info.dropdown-toggle:focus,.open>#bootstrap-theme .btn-info.dropdown-toggle.focus{color:#fff;background-color:#78c1fc;border-color:#50affc}#bootstrap-theme .btn-info.disabled:hover,#bootstrap-theme .btn-info.disabled:focus,#bootstrap-theme .btn-info.disabled.focus,#bootstrap-theme .btn-info[disabled]:hover,#bootstrap-theme .btn-info[disabled]:focus,#bootstrap-theme .btn-info[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-info:hover,fieldset[disabled] #bootstrap-theme .btn-info:focus,fieldset[disabled] #bootstrap-theme .btn-info.focus{background-color:#cde8fe;border-color:#cde8fe}#bootstrap-theme .btn-info .badge{color:#cde8fe;background-color:#fff}#bootstrap-theme .btn-warning{color:#fff;background-color:#dd5600;border-color:#dd5600}#bootstrap-theme .btn-warning:focus,#bootstrap-theme .btn-warning.focus{color:#fff;background-color:#aa4200;border-color:#5e2400}#bootstrap-theme .btn-warning:hover{color:#fff;background-color:#aa4200;border-color:#a03e00}#bootstrap-theme .btn-warning:active,#bootstrap-theme .btn-warning.active,.open>#bootstrap-theme .btn-warning.dropdown-toggle{color:#fff;background-color:#aa4200;background-image:none;border-color:#a03e00}#bootstrap-theme .btn-warning:active:hover,#bootstrap-theme .btn-warning:active:focus,#bootstrap-theme .btn-warning:active.focus,#bootstrap-theme .btn-warning.active:hover,#bootstrap-theme .btn-warning.active:focus,#bootstrap-theme .btn-warning.active.focus,.open>#bootstrap-theme .btn-warning.dropdown-toggle:hover,.open>#bootstrap-theme .btn-warning.dropdown-toggle:focus,.open>#bootstrap-theme .btn-warning.dropdown-toggle.focus{color:#fff;background-color:#863400;border-color:#5e2400}#bootstrap-theme .btn-warning.disabled:hover,#bootstrap-theme .btn-warning.disabled:focus,#bootstrap-theme .btn-warning.disabled.focus,#bootstrap-theme .btn-warning[disabled]:hover,#bootstrap-theme .btn-warning[disabled]:focus,#bootstrap-theme .btn-warning[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-warning:hover,fieldset[disabled] #bootstrap-theme .btn-warning:focus,fieldset[disabled] #bootstrap-theme .btn-warning.focus{background-color:#dd5600;border-color:#dd5600}#bootstrap-theme .btn-warning .badge{color:#dd5600;background-color:#fff}#bootstrap-theme .btn-danger{color:#fff;background-color:#c71c22;border-color:#c71c22}#bootstrap-theme .btn-danger:focus,#bootstrap-theme .btn-danger.focus{color:#fff;background-color:#9a161a;border-color:#570c0f}#bootstrap-theme .btn-danger:hover{color:#fff;background-color:#9a161a;border-color:#911419}#bootstrap-theme .btn-danger:active,#bootstrap-theme .btn-danger.active,.open>#bootstrap-theme .btn-danger.dropdown-toggle{color:#fff;background-color:#9a161a;background-image:none;border-color:#911419}#bootstrap-theme .btn-danger:active:hover,#bootstrap-theme .btn-danger:active:focus,#bootstrap-theme .btn-danger:active.focus,#bootstrap-theme .btn-danger.active:hover,#bootstrap-theme .btn-danger.active:focus,#bootstrap-theme .btn-danger.active.focus,.open>#bootstrap-theme .btn-danger.dropdown-toggle:hover,.open>#bootstrap-theme .btn-danger.dropdown-toggle:focus,.open>#bootstrap-theme .btn-danger.dropdown-toggle.focus{color:#fff;background-color:#7b1115;border-color:#570c0f}#bootstrap-theme .btn-danger.disabled:hover,#bootstrap-theme .btn-danger.disabled:focus,#bootstrap-theme .btn-danger.disabled.focus,#bootstrap-theme .btn-danger[disabled]:hover,#bootstrap-theme .btn-danger[disabled]:focus,#bootstrap-theme .btn-danger[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-danger:hover,fieldset[disabled] #bootstrap-theme .btn-danger:focus,fieldset[disabled] #bootstrap-theme .btn-danger.focus{background-color:#c71c22;border-color:#c71c22}#bootstrap-theme .btn-danger .badge{color:#c71c22;background-color:#fff}#bootstrap-theme .btn-link{font-weight:400;color:#000;border-radius:0}#bootstrap-theme .btn-link,#bootstrap-theme .btn-link:active,#bootstrap-theme .btn-link.active,#bootstrap-theme .btn-link[disabled],fieldset[disabled] #bootstrap-theme .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}#bootstrap-theme .btn-link,#bootstrap-theme .btn-link:hover,#bootstrap-theme .btn-link:focus,#bootstrap-theme .btn-link:active{border-color:transparent}#bootstrap-theme .btn-link:hover,#bootstrap-theme .btn-link:focus{color:#000;text-decoration:underline;background-color:transparent}#bootstrap-theme .btn-link[disabled]:hover,#bootstrap-theme .btn-link[disabled]:focus,fieldset[disabled] #bootstrap-theme .btn-link:hover,fieldset[disabled] #bootstrap-theme .btn-link:focus{color:#999;text-decoration:none}#bootstrap-theme .btn-lg,#bootstrap-theme .btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}#bootstrap-theme .btn-sm,#bootstrap-theme .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme .btn-xs,#bootstrap-theme .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme .btn-block{display:block;width:100%}#bootstrap-theme .btn-block+.btn-block{margin-top:5px}#bootstrap-theme input[type=submit].btn-block,#bootstrap-theme input[type=reset].btn-block,#bootstrap-theme input[type=button].btn-block{width:100%}#bootstrap-theme .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}#bootstrap-theme .fade.in{opacity:1}#bootstrap-theme .collapse{display:none}#bootstrap-theme .collapse.in{display:block}#bootstrap-theme tr.collapse.in{display:table-row}#bootstrap-theme tbody.collapse.in{display:table-row-group}#bootstrap-theme .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}#bootstrap-theme .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}#bootstrap-theme .dropup,#bootstrap-theme .dropdown{position:relative}#bootstrap-theme .dropdown-toggle:focus{outline:0}#bootstrap-theme .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}#bootstrap-theme .dropdown-menu.pull-right{right:0;left:auto}#bootstrap-theme .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}#bootstrap-theme .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}#bootstrap-theme .dropdown-menu>li>a:hover,#bootstrap-theme .dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#000}#bootstrap-theme .dropdown-menu>.active>a,#bootstrap-theme .dropdown-menu>.active>a:hover,#bootstrap-theme .dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#000;outline:0}#bootstrap-theme .dropdown-menu>.disabled>a,#bootstrap-theme .dropdown-menu>.disabled>a:hover,#bootstrap-theme .dropdown-menu>.disabled>a:focus{color:#999}#bootstrap-theme .dropdown-menu>.disabled>a:hover,#bootstrap-theme .dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;-webkit-filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}#bootstrap-theme .open>.dropdown-menu{display:block}#bootstrap-theme .open>a{outline:0}#bootstrap-theme .dropdown-menu-right{right:0;left:auto}#bootstrap-theme .dropdown-menu-left{right:auto;left:0}#bootstrap-theme .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999;white-space:nowrap}#bootstrap-theme .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}#bootstrap-theme .pull-right>.dropdown-menu{right:0;left:auto}#bootstrap-theme .dropup .caret,#bootstrap-theme .navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9}#bootstrap-theme .dropup .dropdown-menu,#bootstrap-theme .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){#bootstrap-theme .navbar-right .dropdown-menu{right:0;left:auto}#bootstrap-theme .navbar-right .dropdown-menu-left{left:0;right:auto}}#bootstrap-theme .btn-group,#bootstrap-theme .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}#bootstrap-theme .btn-group>.btn,#bootstrap-theme .btn-group-vertical>.btn{position:relative;float:left}#bootstrap-theme .btn-group>.btn:hover,#bootstrap-theme .btn-group>.btn:focus,#bootstrap-theme .btn-group>.btn:active,#bootstrap-theme .btn-group>.btn.active,#bootstrap-theme .btn-group-vertical>.btn:hover,#bootstrap-theme .btn-group-vertical>.btn:focus,#bootstrap-theme .btn-group-vertical>.btn:active,#bootstrap-theme .btn-group-vertical>.btn.active{z-index:2}#bootstrap-theme .btn-group .btn+.btn,#bootstrap-theme .btn-group .btn+.btn-group,#bootstrap-theme .btn-group .btn-group+.btn,#bootstrap-theme .btn-group .btn-group+.btn-group{margin-left:-1px}#bootstrap-theme .btn-toolbar{margin-left:-5px}#bootstrap-theme .btn-toolbar:before,#bootstrap-theme .btn-toolbar:after{display:table;content:" "}#bootstrap-theme .btn-toolbar:after{clear:both}#bootstrap-theme .btn-toolbar .btn,#bootstrap-theme .btn-toolbar .btn-group,#bootstrap-theme .btn-toolbar .input-group{float:left}#bootstrap-theme .btn-toolbar>.btn,#bootstrap-theme .btn-toolbar>.btn-group,#bootstrap-theme .btn-toolbar>.input-group{margin-left:5px}#bootstrap-theme .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}#bootstrap-theme .btn-group>.btn:first-child{margin-left:0}#bootstrap-theme .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}#bootstrap-theme .btn-group>.btn:last-child:not(:first-child),#bootstrap-theme .btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group>.btn-group{float:left}#bootstrap-theme .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}#bootstrap-theme .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,#bootstrap-theme .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}#bootstrap-theme .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group .dropdown-toggle:active,#bootstrap-theme .btn-group.open .dropdown-toggle{outline:0}#bootstrap-theme .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}#bootstrap-theme .btn-group>.btn-lg+.dropdown-toggle,#bootstrap-theme .btn-group-lg.btn-group>.btn+.dropdown-toggle,#bootstrap-theme .btn-group-lg>.btn-group>.btn+.dropdown-toggle{padding-right:12px;padding-left:12px}#bootstrap-theme .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}#bootstrap-theme .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}#bootstrap-theme .btn .caret{margin-left:0}#bootstrap-theme .btn-lg .caret,#bootstrap-theme .btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}#bootstrap-theme .dropup .btn-lg .caret,#bootstrap-theme .dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}#bootstrap-theme .btn-group-vertical>.btn,#bootstrap-theme .btn-group-vertical>.btn-group,#bootstrap-theme .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}#bootstrap-theme .btn-group-vertical>.btn-group:before,#bootstrap-theme .btn-group-vertical>.btn-group:after{display:table;content:" "}#bootstrap-theme .btn-group-vertical>.btn-group:after{clear:both}#bootstrap-theme .btn-group-vertical>.btn-group>.btn{float:none}#bootstrap-theme .btn-group-vertical>.btn+.btn,#bootstrap-theme .btn-group-vertical>.btn+.btn-group,#bootstrap-theme .btn-group-vertical>.btn-group+.btn,#bootstrap-theme .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}#bootstrap-theme .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}#bootstrap-theme .btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}#bootstrap-theme .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}#bootstrap-theme .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,#bootstrap-theme .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}#bootstrap-theme .btn-group-justified>.btn,#bootstrap-theme .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}#bootstrap-theme .btn-group-justified>.btn-group .btn{width:100%}#bootstrap-theme .btn-group-justified>.btn-group .dropdown-menu{left:auto}#bootstrap-theme [data-toggle=buttons]>.btn input[type=radio],#bootstrap-theme [data-toggle=buttons]>.btn input[type=checkbox],#bootstrap-theme [data-toggle=buttons]>.btn-group>.btn input[type=radio],#bootstrap-theme [data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}#bootstrap-theme .input-group{position:relative;display:table;border-collapse:separate}#bootstrap-theme .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}#bootstrap-theme .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}#bootstrap-theme .input-group .form-control:focus{z-index:3}#bootstrap-theme .input-group-addon,#bootstrap-theme .input-group-btn,#bootstrap-theme .input-group .form-control{display:table-cell}#bootstrap-theme .input-group-addon:not(:first-child):not(:last-child),#bootstrap-theme .input-group-btn:not(:first-child):not(:last-child),#bootstrap-theme .input-group .form-control:not(:first-child):not(:last-child){border-radius:0}#bootstrap-theme .input-group-addon,#bootstrap-theme .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}#bootstrap-theme .input-group-addon{padding:4px 8px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}#bootstrap-theme .input-group-addon.input-sm,#bootstrap-theme .input-group-sm>.input-group-addon.form-control,#bootstrap-theme .input-group-sm>.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}#bootstrap-theme .input-group-addon.input-lg,#bootstrap-theme .input-group-lg>.input-group-addon.form-control,#bootstrap-theme .input-group-lg>.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>.input-group-addon.btn{padding:14px 16px;font-size:18px;border-radius:6px}#bootstrap-theme .input-group-addon input[type=radio],#bootstrap-theme .input-group-addon input[type=checkbox]{margin-top:0}#bootstrap-theme .input-group .form-control:first-child,#bootstrap-theme .input-group-addon:first-child,#bootstrap-theme .input-group-btn:first-child>.btn,#bootstrap-theme .input-group-btn:first-child>.btn-group>.btn,#bootstrap-theme .input-group-btn:first-child>.dropdown-toggle,#bootstrap-theme .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),#bootstrap-theme .input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}#bootstrap-theme .input-group-addon:first-child{border-right:0}#bootstrap-theme .input-group .form-control:last-child,#bootstrap-theme .input-group-addon:last-child,#bootstrap-theme .input-group-btn:last-child>.btn,#bootstrap-theme .input-group-btn:last-child>.btn-group>.btn,#bootstrap-theme .input-group-btn:last-child>.dropdown-toggle,#bootstrap-theme .input-group-btn:first-child>.btn:not(:first-child),#bootstrap-theme .input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}#bootstrap-theme .input-group-addon:last-child{border-left:0}#bootstrap-theme .input-group-btn{position:relative;font-size:0;white-space:nowrap}#bootstrap-theme .input-group-btn>.btn{position:relative}#bootstrap-theme .input-group-btn>.btn+.btn{margin-left:-1px}#bootstrap-theme .input-group-btn>.btn:hover,#bootstrap-theme .input-group-btn>.btn:focus,#bootstrap-theme .input-group-btn>.btn:active{z-index:2}#bootstrap-theme .input-group-btn:first-child>.btn,#bootstrap-theme .input-group-btn:first-child>.btn-group{margin-right:-1px}#bootstrap-theme .input-group-btn:last-child>.btn,#bootstrap-theme .input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}#bootstrap-theme .nav{padding-left:0;margin-bottom:0;list-style:none}#bootstrap-theme .nav:before,#bootstrap-theme .nav:after{display:table;content:" "}#bootstrap-theme .nav:after{clear:both}#bootstrap-theme .nav>li{position:relative;display:block}#bootstrap-theme .nav>li>a{position:relative;display:block;padding:10px 15px}#bootstrap-theme .nav>li>a:hover,#bootstrap-theme .nav>li>a:focus{text-decoration:none;background-color:#eee}#bootstrap-theme .nav>li.disabled>a{color:#999}#bootstrap-theme .nav>li.disabled>a:hover,#bootstrap-theme .nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}#bootstrap-theme .nav .open>a,#bootstrap-theme .nav .open>a:hover,#bootstrap-theme .nav .open>a:focus{background-color:#eee;border-color:#000}#bootstrap-theme .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}#bootstrap-theme .nav>li>a>img{max-width:none}#bootstrap-theme .nav-tabs{border-bottom:1px solid #ddd}#bootstrap-theme .nav-tabs>li{float:left;margin-bottom:-1px}#bootstrap-theme .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}#bootstrap-theme .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}#bootstrap-theme .nav-tabs>li.active>a,#bootstrap-theme .nav-tabs>li.active>a:hover,#bootstrap-theme .nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}#bootstrap-theme .nav-pills>li{float:left}#bootstrap-theme .nav-pills>li>a{border-radius:4px}#bootstrap-theme .nav-pills>li+li{margin-left:2px}#bootstrap-theme .nav-pills>li.active>a,#bootstrap-theme .nav-pills>li.active>a:hover,#bootstrap-theme .nav-pills>li.active>a:focus{color:#fff;background-color:#000}#bootstrap-theme .nav-stacked>li{float:none}#bootstrap-theme .nav-stacked>li+li{margin-top:2px;margin-left:0}#bootstrap-theme .nav-justified,#bootstrap-theme .nav-tabs.nav-justified{width:100%}#bootstrap-theme .nav-justified>li,#bootstrap-theme .nav-tabs.nav-justified>li{float:none}#bootstrap-theme .nav-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}#bootstrap-theme .nav-justified>.dropdown .dropdown-menu,#bootstrap-theme .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){#bootstrap-theme .nav-justified>li,#bootstrap-theme .nav-tabs.nav-justified>li{display:table-cell;width:1%}#bootstrap-theme .nav-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{margin-bottom:0}}#bootstrap-theme .nav-tabs-justified,#bootstrap-theme .nav-tabs.nav-justified{border-bottom:0}#bootstrap-theme .nav-tabs-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}#bootstrap-theme .nav-tabs-justified>.active>a,#bootstrap-theme .nav-tabs.nav-justified>.active>a,#bootstrap-theme .nav-tabs-justified>.active>a:hover,#bootstrap-theme .nav-tabs.nav-justified>.active>a:hover,#bootstrap-theme .nav-tabs-justified>.active>a:focus,#bootstrap-theme .nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){#bootstrap-theme .nav-tabs-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}#bootstrap-theme .nav-tabs-justified>.active>a,#bootstrap-theme .nav-tabs.nav-justified>.active>a,#bootstrap-theme .nav-tabs-justified>.active>a:hover,#bootstrap-theme .nav-tabs.nav-justified>.active>a:hover,#bootstrap-theme .nav-tabs-justified>.active>a:focus,#bootstrap-theme .nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}#bootstrap-theme .tab-content>.tab-pane{display:none}#bootstrap-theme .tab-content>.active{display:block}#bootstrap-theme .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}#bootstrap-theme .navbar:before,#bootstrap-theme .navbar:after{display:table;content:" "}#bootstrap-theme .navbar:after{clear:both}@media (min-width:768px){#bootstrap-theme .navbar{border-radius:4px}}#bootstrap-theme .navbar-header:before,#bootstrap-theme .navbar-header:after{display:table;content:" "}#bootstrap-theme .navbar-header:after{clear:both}@media (min-width:768px){#bootstrap-theme .navbar-header{float:left}}#bootstrap-theme .navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}#bootstrap-theme .navbar-collapse:before,#bootstrap-theme .navbar-collapse:after{display:table;content:" "}#bootstrap-theme .navbar-collapse:after{clear:both}#bootstrap-theme .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){#bootstrap-theme .navbar-collapse{width:auto;border-top:0;box-shadow:none}#bootstrap-theme .navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}#bootstrap-theme .navbar-collapse.in{overflow-y:visible}.navbar-fixed-top #bootstrap-theme .navbar-collapse,.navbar-static-top #bootstrap-theme .navbar-collapse,.navbar-fixed-bottom #bootstrap-theme .navbar-collapse{padding-right:0;padding-left:0}}#bootstrap-theme .navbar-fixed-top,#bootstrap-theme .navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}#bootstrap-theme .navbar-fixed-top .navbar-collapse,#bootstrap-theme .navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){#bootstrap-theme .navbar-fixed-top .navbar-collapse,#bootstrap-theme .navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width:768px){#bootstrap-theme .navbar-fixed-top,#bootstrap-theme .navbar-fixed-bottom{border-radius:0}}#bootstrap-theme .navbar-fixed-top{top:0;border-width:0 0 1px}#bootstrap-theme .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}#bootstrap-theme .container>.navbar-header,#bootstrap-theme .container>.navbar-collapse,#bootstrap-theme .container-fluid>.navbar-header,#bootstrap-theme .container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){#bootstrap-theme .container>.navbar-header,#bootstrap-theme .container>.navbar-collapse,#bootstrap-theme .container-fluid>.navbar-header,#bootstrap-theme .container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}#bootstrap-theme .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){#bootstrap-theme .navbar-static-top{border-radius:0}}#bootstrap-theme .navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}#bootstrap-theme .navbar-brand:hover,#bootstrap-theme .navbar-brand:focus{text-decoration:none}#bootstrap-theme .navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container #bootstrap-theme .navbar-brand,.navbar>.container-fluid #bootstrap-theme .navbar-brand{margin-left:-15px}}#bootstrap-theme .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}#bootstrap-theme .navbar-toggle:focus{outline:0}#bootstrap-theme .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}#bootstrap-theme .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){#bootstrap-theme .navbar-toggle{display:none}}#bootstrap-theme .navbar-nav{margin:7.5px -15px}#bootstrap-theme .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){#bootstrap-theme .navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a,#bootstrap-theme .navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a{line-height:20px}#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a:hover,#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){#bootstrap-theme .navbar-nav{float:left;margin:0}#bootstrap-theme .navbar-nav>li{float:left}#bootstrap-theme .navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}#bootstrap-theme .navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:10px;margin-bottom:10px}@media (min-width:768px){#bootstrap-theme .navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}#bootstrap-theme .navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}#bootstrap-theme .navbar-form .form-control-static{display:inline-block}#bootstrap-theme .navbar-form .input-group{display:inline-table;vertical-align:middle}#bootstrap-theme .navbar-form .input-group .input-group-addon,#bootstrap-theme .navbar-form .input-group .input-group-btn,#bootstrap-theme .navbar-form .input-group .form-control{width:auto}#bootstrap-theme .navbar-form .input-group>.form-control{width:100%}#bootstrap-theme .navbar-form .control-label{margin-bottom:0;vertical-align:middle}#bootstrap-theme .navbar-form .radio,#bootstrap-theme .navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}#bootstrap-theme .navbar-form .radio label,#bootstrap-theme .navbar-form .checkbox label{padding-left:0}#bootstrap-theme .navbar-form .radio input[type=radio],#bootstrap-theme .navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}#bootstrap-theme .navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){#bootstrap-theme .navbar-form .form-group{margin-bottom:5px}#bootstrap-theme .navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){#bootstrap-theme .navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}#bootstrap-theme .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}#bootstrap-theme .navbar-btn{margin-top:10px;margin-bottom:10px}#bootstrap-theme .navbar-btn.btn-sm,#bootstrap-theme .btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}#bootstrap-theme .navbar-btn.btn-xs,#bootstrap-theme .btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}#bootstrap-theme .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){#bootstrap-theme .navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){#bootstrap-theme .navbar-left{float:left !important}#bootstrap-theme .navbar-right{float:right !important;margin-right:-15px}#bootstrap-theme .navbar-right~.navbar-right{margin-right:0}}#bootstrap-theme .navbar-default{background-color:#000;border-color:#000}#bootstrap-theme .navbar-default .navbar-brand{color:#fff}#bootstrap-theme .navbar-default .navbar-brand:hover,#bootstrap-theme .navbar-default .navbar-brand:focus{color:#fff;background-color:none}#bootstrap-theme .navbar-default .navbar-text{color:#ddd}#bootstrap-theme .navbar-default .navbar-nav>li>a{color:#fff}#bootstrap-theme .navbar-default .navbar-nav>li>a:hover,#bootstrap-theme .navbar-default .navbar-nav>li>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav>.active>a,#bootstrap-theme .navbar-default .navbar-nav>.active>a:hover,#bootstrap-theme .navbar-default .navbar-nav>.active>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav>.disabled>a,#bootstrap-theme .navbar-default .navbar-nav>.disabled>a:hover,#bootstrap-theme .navbar-default .navbar-nav>.disabled>a:focus{color:#ddd;background-color:transparent}#bootstrap-theme .navbar-default .navbar-nav>.open>a,#bootstrap-theme .navbar-default .navbar-nav>.open>a:hover,#bootstrap-theme .navbar-default .navbar-nav>.open>a:focus{color:#fff;background-color:#000}@media (max-width:767px){#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#fff}#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.active>a,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ddd;background-color:transparent}}#bootstrap-theme .navbar-default .navbar-toggle{border-color:#000}#bootstrap-theme .navbar-default .navbar-toggle:hover,#bootstrap-theme .navbar-default .navbar-toggle:focus{background-color:#000}#bootstrap-theme .navbar-default .navbar-toggle .icon-bar{background-color:#fff}#bootstrap-theme .navbar-default .navbar-collapse,#bootstrap-theme .navbar-default .navbar-form{border-color:#000}#bootstrap-theme .navbar-default .navbar-link{color:#fff}#bootstrap-theme .navbar-default .navbar-link:hover{color:#fff}#bootstrap-theme .navbar-default .btn-link{color:#fff}#bootstrap-theme .navbar-default .btn-link:hover,#bootstrap-theme .navbar-default .btn-link:focus{color:#fff}#bootstrap-theme .navbar-default .btn-link[disabled]:hover,#bootstrap-theme .navbar-default .btn-link[disabled]:focus,fieldset[disabled] #bootstrap-theme .navbar-default .btn-link:hover,fieldset[disabled] #bootstrap-theme .navbar-default .btn-link:focus{color:#ddd}#bootstrap-theme .navbar-inverse{background-color:#cde8fe;border-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-brand{color:#fff}#bootstrap-theme .navbar-inverse .navbar-brand:hover,#bootstrap-theme .navbar-inverse .navbar-brand:focus{color:#fff;background-color:none}#bootstrap-theme .navbar-inverse .navbar-text{color:#fff}#bootstrap-theme .navbar-inverse .navbar-nav>li>a{color:#fff}#bootstrap-theme .navbar-inverse .navbar-nav>li>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav>.active>a,#bootstrap-theme .navbar-inverse .navbar-nav>.active>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav>.disabled>a,#bootstrap-theme .navbar-inverse .navbar-nav>.disabled>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}#bootstrap-theme .navbar-inverse .navbar-nav>.open>a,#bootstrap-theme .navbar-inverse .navbar-nav>.open>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#b4ddfe}@media (max-width:767px){#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}#bootstrap-theme .navbar-inverse .navbar-toggle{border-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-toggle:hover,#bootstrap-theme .navbar-inverse .navbar-toggle:focus{background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}#bootstrap-theme .navbar-inverse .navbar-collapse,#bootstrap-theme .navbar-inverse .navbar-form{border-color:#aad8fd}#bootstrap-theme .navbar-inverse .navbar-link{color:#fff}#bootstrap-theme .navbar-inverse .navbar-link:hover{color:#fff}#bootstrap-theme .navbar-inverse .btn-link{color:#fff}#bootstrap-theme .navbar-inverse .btn-link:hover,#bootstrap-theme .navbar-inverse .btn-link:focus{color:#fff}#bootstrap-theme .navbar-inverse .btn-link[disabled]:hover,#bootstrap-theme .navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] #bootstrap-theme .navbar-inverse .btn-link:hover,fieldset[disabled] #bootstrap-theme .navbar-inverse .btn-link:focus{color:#ccc}#bootstrap-theme .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}#bootstrap-theme .breadcrumb>li{display:inline-block}#bootstrap-theme .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/ "}#bootstrap-theme .breadcrumb>.active{color:#999}#bootstrap-theme .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}#bootstrap-theme .pagination>li{display:inline}#bootstrap-theme .pagination>li>a,#bootstrap-theme .pagination>li>span{position:relative;float:left;padding:4px 8px;margin-left:-1px;line-height:1.428571429;color:#000;text-decoration:none;background-color:#fff;border:1px solid #ddd}#bootstrap-theme .pagination>li>a:hover,#bootstrap-theme .pagination>li>a:focus,#bootstrap-theme .pagination>li>span:hover,#bootstrap-theme .pagination>li>span:focus{z-index:2;color:#000;background-color:#eee;border-color:#ddd}#bootstrap-theme .pagination>li:first-child>a,#bootstrap-theme .pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}#bootstrap-theme .pagination>li:last-child>a,#bootstrap-theme .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}#bootstrap-theme .pagination>.active>a,#bootstrap-theme .pagination>.active>a:hover,#bootstrap-theme .pagination>.active>a:focus,#bootstrap-theme .pagination>.active>span,#bootstrap-theme .pagination>.active>span:hover,#bootstrap-theme .pagination>.active>span:focus{z-index:3;color:#999;cursor:default;background-color:#f5f5f5;border-color:#ddd}#bootstrap-theme .pagination>.disabled>span,#bootstrap-theme .pagination>.disabled>span:hover,#bootstrap-theme .pagination>.disabled>span:focus,#bootstrap-theme .pagination>.disabled>a,#bootstrap-theme .pagination>.disabled>a:hover,#bootstrap-theme .pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}#bootstrap-theme .pagination-lg>li>a,#bootstrap-theme .pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}#bootstrap-theme .pagination-lg>li:first-child>a,#bootstrap-theme .pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}#bootstrap-theme .pagination-lg>li:last-child>a,#bootstrap-theme .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}#bootstrap-theme .pagination-sm>li>a,#bootstrap-theme .pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}#bootstrap-theme .pagination-sm>li:first-child>a,#bootstrap-theme .pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .pagination-sm>li:last-child>a,#bootstrap-theme .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}#bootstrap-theme .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}#bootstrap-theme .pager:before,#bootstrap-theme .pager:after{display:table;content:" "}#bootstrap-theme .pager:after{clear:both}#bootstrap-theme .pager li{display:inline}#bootstrap-theme .pager li>a,#bootstrap-theme .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}#bootstrap-theme .pager li>a:hover,#bootstrap-theme .pager li>a:focus{text-decoration:none;background-color:#eee}#bootstrap-theme .pager .next>a,#bootstrap-theme .pager .next>span{float:right}#bootstrap-theme .pager .previous>a,#bootstrap-theme .pager .previous>span{float:left}#bootstrap-theme .pager .disabled>a,#bootstrap-theme .pager .disabled>a:hover,#bootstrap-theme .pager .disabled>a:focus,#bootstrap-theme .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}#bootstrap-theme .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}#bootstrap-theme .label:empty{display:none}.btn #bootstrap-theme .label{position:relative;top:-1px}#bootstrap-theme a.label:hover,#bootstrap-theme a.label:focus{color:#fff;text-decoration:none;cursor:pointer}#bootstrap-theme .label-default{background-color:#999}#bootstrap-theme .label-default[href]:hover,#bootstrap-theme .label-default[href]:focus{background-color:gray}#bootstrap-theme .label-primary{background-color:#000}#bootstrap-theme .label-primary[href]:hover,#bootstrap-theme .label-primary[href]:focus{background-color:#000}#bootstrap-theme .label-success{background-color:#73a839}#bootstrap-theme .label-success[href]:hover,#bootstrap-theme .label-success[href]:focus{background-color:#59822c}#bootstrap-theme .label-info{background-color:#cde8fe}#bootstrap-theme .label-info[href]:hover,#bootstrap-theme .label-info[href]:focus{background-color:#9bd1fd}#bootstrap-theme .label-warning{background-color:#dd5600}#bootstrap-theme .label-warning[href]:hover,#bootstrap-theme .label-warning[href]:focus{background-color:#aa4200}#bootstrap-theme .label-danger{background-color:#c71c22}#bootstrap-theme .label-danger[href]:hover,#bootstrap-theme .label-danger[href]:focus{background-color:#9a161a}#bootstrap-theme .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#000;border-radius:10px}#bootstrap-theme .badge:empty{display:none}.btn #bootstrap-theme .badge{position:relative;top:-1px}.btn-xs #bootstrap-theme .badge,#bootstrap-theme .btn-group-xs>.btn #bootstrap-theme .badge,.btn-group-xs>.btn #bootstrap-theme .badge{top:0;padding:1px 5px}.list-group-item.active>#bootstrap-theme .badge,.nav-pills>.active>a>#bootstrap-theme .badge{color:#000;background-color:#fff}.list-group-item>#bootstrap-theme .badge{float:right}.list-group-item>#bootstrap-theme .badge+#bootstrap-theme .badge{margin-right:5px}.nav-pills>li>a>#bootstrap-theme .badge{margin-left:3px}#bootstrap-theme a.badge:hover,#bootstrap-theme a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}#bootstrap-theme .jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}#bootstrap-theme .jumbotron h1,#bootstrap-theme .jumbotron .h1{color:inherit}#bootstrap-theme .jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}#bootstrap-theme .jumbotron>hr{border-top-color:#d5d5d5}.container #bootstrap-theme .jumbotron,.container-fluid #bootstrap-theme .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}#bootstrap-theme .jumbotron .container{max-width:100%}@media screen and (min-width:768px){#bootstrap-theme .jumbotron{padding-top:48px;padding-bottom:48px}.container #bootstrap-theme .jumbotron,.container-fluid #bootstrap-theme .jumbotron{padding-right:60px;padding-left:60px}#bootstrap-theme .jumbotron h1,#bootstrap-theme .jumbotron .h1{font-size:63px}}#bootstrap-theme .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}#bootstrap-theme .thumbnail>img,#bootstrap-theme .thumbnail a>img{display:block;max-width:100%;height:auto;margin-right:auto;margin-left:auto}#bootstrap-theme .thumbnail .caption{padding:9px;color:#555}#bootstrap-theme a.thumbnail:hover,#bootstrap-theme a.thumbnail:focus,#bootstrap-theme a.thumbnail.active{border-color:#000}#bootstrap-theme .alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}#bootstrap-theme .alert h4{margin-top:0;color:inherit}#bootstrap-theme .alert .alert-link{font-weight:700}#bootstrap-theme .alert>p,#bootstrap-theme .alert>ul{margin-bottom:0}#bootstrap-theme .alert>p+p{margin-top:5px}#bootstrap-theme .alert-dismissable,#bootstrap-theme .alert-dismissible{padding-right:35px}#bootstrap-theme .alert-dismissable .close,#bootstrap-theme .alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}#bootstrap-theme .alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}#bootstrap-theme .alert-success hr{border-top-color:#c9e2b3}#bootstrap-theme .alert-success .alert-link{color:#356635}#bootstrap-theme .alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}#bootstrap-theme .alert-info hr{border-top-color:#a6e1ec}#bootstrap-theme .alert-info .alert-link{color:#2d6987}#bootstrap-theme .alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}#bootstrap-theme .alert-warning hr{border-top-color:#f8e5be}#bootstrap-theme .alert-warning .alert-link{color:#a47e3c}#bootstrap-theme .alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}#bootstrap-theme .alert-danger hr{border-top-color:#e6c1c7}#bootstrap-theme .alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}#bootstrap-theme .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}#bootstrap-theme .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#000;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}#bootstrap-theme .progress-striped .progress-bar,#bootstrap-theme .progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}#bootstrap-theme .progress.active .progress-bar,#bootstrap-theme .progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}#bootstrap-theme .progress-bar-success{background-color:#73a839}.progress-striped #bootstrap-theme .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .progress-bar-info{background-color:#cde8fe}.progress-striped #bootstrap-theme .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .progress-bar-warning{background-color:#dd5600}.progress-striped #bootstrap-theme .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .progress-bar-danger{background-color:#c71c22}.progress-striped #bootstrap-theme .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .media{margin-top:15px}#bootstrap-theme .media:first-child{margin-top:0}#bootstrap-theme .media,#bootstrap-theme .media-body{overflow:hidden;zoom:1}#bootstrap-theme .media-body{width:10000px}#bootstrap-theme .media-object{display:block}#bootstrap-theme .media-object.img-thumbnail{max-width:none}#bootstrap-theme .media-right,#bootstrap-theme .media>.pull-right{padding-left:10px}#bootstrap-theme .media-left,#bootstrap-theme .media>.pull-left{padding-right:10px}#bootstrap-theme .media-left,#bootstrap-theme .media-right,#bootstrap-theme .media-body{display:table-cell;vertical-align:top}#bootstrap-theme .media-middle{vertical-align:middle}#bootstrap-theme .media-bottom{vertical-align:bottom}#bootstrap-theme .media-heading{margin-top:0;margin-bottom:5px}#bootstrap-theme .media-list{padding-left:0;list-style:none}#bootstrap-theme .list-group{padding-left:0;margin-bottom:20px}#bootstrap-theme .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}#bootstrap-theme .list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}#bootstrap-theme .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}#bootstrap-theme .list-group-item.disabled,#bootstrap-theme .list-group-item.disabled:hover,#bootstrap-theme .list-group-item.disabled:focus{color:#999;cursor:not-allowed;background-color:#eee}#bootstrap-theme .list-group-item.disabled .list-group-item-heading,#bootstrap-theme .list-group-item.disabled:hover .list-group-item-heading,#bootstrap-theme .list-group-item.disabled:focus .list-group-item-heading{color:inherit}#bootstrap-theme .list-group-item.disabled .list-group-item-text,#bootstrap-theme .list-group-item.disabled:hover .list-group-item-text,#bootstrap-theme .list-group-item.disabled:focus .list-group-item-text{color:#999}#bootstrap-theme .list-group-item.active,#bootstrap-theme .list-group-item.active:hover,#bootstrap-theme .list-group-item.active:focus{z-index:2;color:#fff;background-color:#000;border-color:#000}#bootstrap-theme .list-group-item.active .list-group-item-heading,#bootstrap-theme .list-group-item.active .list-group-item-heading>small,#bootstrap-theme .list-group-item.active .list-group-item-heading>.small,#bootstrap-theme .list-group-item.active:hover .list-group-item-heading,#bootstrap-theme .list-group-item.active:hover .list-group-item-heading>small,#bootstrap-theme .list-group-item.active:hover .list-group-item-heading>.small,#bootstrap-theme .list-group-item.active:focus .list-group-item-heading,#bootstrap-theme .list-group-item.active:focus .list-group-item-heading>small,#bootstrap-theme .list-group-item.active:focus .list-group-item-heading>.small{color:inherit}#bootstrap-theme .list-group-item.active .list-group-item-text,#bootstrap-theme .list-group-item.active:hover .list-group-item-text,#bootstrap-theme .list-group-item.active:focus .list-group-item-text{color:#666}#bootstrap-theme a.list-group-item,#bootstrap-theme button.list-group-item{color:#555}#bootstrap-theme a.list-group-item .list-group-item-heading,#bootstrap-theme button.list-group-item .list-group-item-heading{color:#333}#bootstrap-theme a.list-group-item:hover,#bootstrap-theme a.list-group-item:focus,#bootstrap-theme button.list-group-item:hover,#bootstrap-theme button.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}#bootstrap-theme button.list-group-item{width:100%;text-align:left}#bootstrap-theme .list-group-item-success{color:#468847;background-color:#dff0d8}#bootstrap-theme a.list-group-item-success,#bootstrap-theme button.list-group-item-success{color:#468847}#bootstrap-theme a.list-group-item-success .list-group-item-heading,#bootstrap-theme button.list-group-item-success .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-success:hover,#bootstrap-theme a.list-group-item-success:focus,#bootstrap-theme button.list-group-item-success:hover,#bootstrap-theme button.list-group-item-success:focus{color:#468847;background-color:#d0e9c6}#bootstrap-theme a.list-group-item-success.active,#bootstrap-theme a.list-group-item-success.active:hover,#bootstrap-theme a.list-group-item-success.active:focus,#bootstrap-theme button.list-group-item-success.active,#bootstrap-theme button.list-group-item-success.active:hover,#bootstrap-theme button.list-group-item-success.active:focus{color:#fff;background-color:#468847;border-color:#468847}#bootstrap-theme .list-group-item-info{color:#3a87ad;background-color:#d9edf7}#bootstrap-theme a.list-group-item-info,#bootstrap-theme button.list-group-item-info{color:#3a87ad}#bootstrap-theme a.list-group-item-info .list-group-item-heading,#bootstrap-theme button.list-group-item-info .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-info:hover,#bootstrap-theme a.list-group-item-info:focus,#bootstrap-theme button.list-group-item-info:hover,#bootstrap-theme button.list-group-item-info:focus{color:#3a87ad;background-color:#c4e3f3}#bootstrap-theme a.list-group-item-info.active,#bootstrap-theme a.list-group-item-info.active:hover,#bootstrap-theme a.list-group-item-info.active:focus,#bootstrap-theme button.list-group-item-info.active,#bootstrap-theme button.list-group-item-info.active:hover,#bootstrap-theme button.list-group-item-info.active:focus{color:#fff;background-color:#3a87ad;border-color:#3a87ad}#bootstrap-theme .list-group-item-warning{color:#c09853;background-color:#fcf8e3}#bootstrap-theme a.list-group-item-warning,#bootstrap-theme button.list-group-item-warning{color:#c09853}#bootstrap-theme a.list-group-item-warning .list-group-item-heading,#bootstrap-theme button.list-group-item-warning .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-warning:hover,#bootstrap-theme a.list-group-item-warning:focus,#bootstrap-theme button.list-group-item-warning:hover,#bootstrap-theme button.list-group-item-warning:focus{color:#c09853;background-color:#faf2cc}#bootstrap-theme a.list-group-item-warning.active,#bootstrap-theme a.list-group-item-warning.active:hover,#bootstrap-theme a.list-group-item-warning.active:focus,#bootstrap-theme button.list-group-item-warning.active,#bootstrap-theme button.list-group-item-warning.active:hover,#bootstrap-theme button.list-group-item-warning.active:focus{color:#fff;background-color:#c09853;border-color:#c09853}#bootstrap-theme .list-group-item-danger{color:#b94a48;background-color:#f2dede}#bootstrap-theme a.list-group-item-danger,#bootstrap-theme button.list-group-item-danger{color:#b94a48}#bootstrap-theme a.list-group-item-danger .list-group-item-heading,#bootstrap-theme button.list-group-item-danger .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-danger:hover,#bootstrap-theme a.list-group-item-danger:focus,#bootstrap-theme button.list-group-item-danger:hover,#bootstrap-theme button.list-group-item-danger:focus{color:#b94a48;background-color:#ebcccc}#bootstrap-theme a.list-group-item-danger.active,#bootstrap-theme a.list-group-item-danger.active:hover,#bootstrap-theme a.list-group-item-danger.active:focus,#bootstrap-theme button.list-group-item-danger.active,#bootstrap-theme button.list-group-item-danger.active:hover,#bootstrap-theme button.list-group-item-danger.active:focus{color:#fff;background-color:#b94a48;border-color:#b94a48}#bootstrap-theme .list-group-item-heading{margin-top:0;margin-bottom:5px}#bootstrap-theme .list-group-item-text{margin-bottom:0;line-height:1.3}#bootstrap-theme .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}#bootstrap-theme .panel-body{padding:15px}#bootstrap-theme .panel-body:before,#bootstrap-theme .panel-body:after{display:table;content:" "}#bootstrap-theme .panel-body:after{clear:both}#bootstrap-theme .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel-heading>.dropdown .dropdown-toggle{color:inherit}#bootstrap-theme .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}#bootstrap-theme .panel-title>a,#bootstrap-theme .panel-title>small,#bootstrap-theme .panel-title>.small,#bootstrap-theme .panel-title>small>a,#bootstrap-theme .panel-title>.small>a{color:inherit}#bootstrap-theme .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.list-group,#bootstrap-theme .panel>.panel-collapse>.list-group{margin-bottom:0}#bootstrap-theme .panel>.list-group .list-group-item,#bootstrap-theme .panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}#bootstrap-theme .panel>.list-group:first-child .list-group-item:first-child,#bootstrap-theme .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel>.list-group:last-child .list-group-item:last-child,#bootstrap-theme .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}#bootstrap-theme .list-group+.panel-footer{border-top-width:0}#bootstrap-theme .panel>.table,#bootstrap-theme .panel>.table-responsive>.table,#bootstrap-theme .panel>.panel-collapse>.table{margin-bottom:0}#bootstrap-theme .panel>.table caption,#bootstrap-theme .panel>.table-responsive>.table caption,#bootstrap-theme .panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}#bootstrap-theme .panel>.table:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child th:first-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child th:last-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}#bootstrap-theme .panel>.table:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}#bootstrap-theme .panel>.panel-body+.table,#bootstrap-theme .panel>.panel-body+.table-responsive,#bootstrap-theme .panel>.table+.panel-body,#bootstrap-theme .panel>.table-responsive+.panel-body{border-top:1px solid #ddd}#bootstrap-theme .panel>.table>tbody:first-child>tr:first-child th,#bootstrap-theme .panel>.table>tbody:first-child>tr:first-child td{border-top:0}#bootstrap-theme .panel>.table-bordered,#bootstrap-theme .panel>.table-responsive>.table-bordered{border:0}#bootstrap-theme .panel>.table-bordered>thead>tr>th:first-child,#bootstrap-theme .panel>.table-bordered>thead>tr>td:first-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>th:first-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>td:first-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>th:first-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>td:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>th:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}#bootstrap-theme .panel>.table-bordered>thead>tr>th:last-child,#bootstrap-theme .panel>.table-bordered>thead>tr>td:last-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>th:last-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>td:last-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>th:last-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>td:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>th:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}#bootstrap-theme .panel>.table-bordered>thead>tr:first-child>td,#bootstrap-theme .panel>.table-bordered>thead>tr:first-child>th,#bootstrap-theme .panel>.table-bordered>tbody>tr:first-child>td,#bootstrap-theme .panel>.table-bordered>tbody>tr:first-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr:first-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}#bootstrap-theme .panel>.table-bordered>tbody>tr:last-child>td,#bootstrap-theme .panel>.table-bordered>tbody>tr:last-child>th,#bootstrap-theme .panel>.table-bordered>tfoot>tr:last-child>td,#bootstrap-theme .panel>.table-bordered>tfoot>tr:last-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}#bootstrap-theme .panel>.table-responsive{margin-bottom:0;border:0}#bootstrap-theme .panel-group{margin-bottom:20px}#bootstrap-theme .panel-group .panel{margin-bottom:0;border-radius:4px}#bootstrap-theme .panel-group .panel+.panel{margin-top:5px}#bootstrap-theme .panel-group .panel-heading{border-bottom:0}#bootstrap-theme .panel-group .panel-heading+.panel-collapse>.panel-body,#bootstrap-theme .panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}#bootstrap-theme .panel-group .panel-footer{border-top:0}#bootstrap-theme .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}#bootstrap-theme .panel-default{border-color:#ddd}#bootstrap-theme .panel-default>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#ddd}#bootstrap-theme .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#555}#bootstrap-theme .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-primary{border-color:#ddd}#bootstrap-theme .panel-primary>.panel-heading{color:#fff;background-color:#000;border-color:#ddd}#bootstrap-theme .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-primary>.panel-heading .badge{color:#000;background-color:#fff}#bootstrap-theme .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-success{border-color:#ddd}#bootstrap-theme .panel-success>.panel-heading{color:#468847;background-color:#73a839;border-color:#ddd}#bootstrap-theme .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-success>.panel-heading .badge{color:#73a839;background-color:#468847}#bootstrap-theme .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-info{border-color:#ddd}#bootstrap-theme .panel-info>.panel-heading{color:#3a87ad;background-color:#cde8fe;border-color:#ddd}#bootstrap-theme .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-info>.panel-heading .badge{color:#cde8fe;background-color:#3a87ad}#bootstrap-theme .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-warning{border-color:#ddd}#bootstrap-theme .panel-warning>.panel-heading{color:#c09853;background-color:#dd5600;border-color:#ddd}#bootstrap-theme .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-warning>.panel-heading .badge{color:#dd5600;background-color:#c09853}#bootstrap-theme .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-danger{border-color:#ddd}#bootstrap-theme .panel-danger>.panel-heading{color:#b94a48;background-color:#c71c22;border-color:#ddd}#bootstrap-theme .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-danger>.panel-heading .badge{color:#c71c22;background-color:#b94a48}#bootstrap-theme .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}#bootstrap-theme .embed-responsive .embed-responsive-item,#bootstrap-theme .embed-responsive iframe,#bootstrap-theme .embed-responsive embed,#bootstrap-theme .embed-responsive object,#bootstrap-theme .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}#bootstrap-theme .embed-responsive-16by9{padding-bottom:56.25%}#bootstrap-theme .embed-responsive-4by3{padding-bottom:75%}#bootstrap-theme .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}#bootstrap-theme .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}#bootstrap-theme .well-lg{padding:24px;border-radius:6px}#bootstrap-theme .well-sm{padding:9px;border-radius:3px}#bootstrap-theme .close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;-webkit-filter:alpha(opacity=20);filter:alpha(opacity=20);opacity:.2}#bootstrap-theme .close:hover,#bootstrap-theme .close:focus{color:#000;text-decoration:none;cursor:pointer;-webkit-filter:alpha(opacity=50);filter:alpha(opacity=50);opacity:.5}#bootstrap-theme button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}#bootstrap-theme .modal-open{overflow:hidden}#bootstrap-theme .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}#bootstrap-theme .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-ms-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out}#bootstrap-theme .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}#bootstrap-theme .modal-open .modal{overflow-x:hidden;overflow-y:auto}#bootstrap-theme .modal-dialog{position:relative;width:auto;margin:10px}#bootstrap-theme .modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}#bootstrap-theme .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}#bootstrap-theme .modal-backdrop.fade{-webkit-filter:alpha(opacity=0);filter:alpha(opacity=0);opacity:0}#bootstrap-theme .modal-backdrop.in{-webkit-filter:alpha(opacity=50);filter:alpha(opacity=50);opacity:.5}#bootstrap-theme .modal-header{padding:15px;border-bottom:1px solid #e5e5e5}#bootstrap-theme .modal-header:before,#bootstrap-theme .modal-header:after{display:table;content:" "}#bootstrap-theme .modal-header:after{clear:both}#bootstrap-theme .modal-header .close{margin-top:-2px}#bootstrap-theme .modal-title{margin:0;line-height:1.428571429}#bootstrap-theme .modal-body{position:relative;padding:20px}#bootstrap-theme .modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}#bootstrap-theme .modal-footer:before,#bootstrap-theme .modal-footer:after{display:table;content:" "}#bootstrap-theme .modal-footer:after{clear:both}#bootstrap-theme .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}#bootstrap-theme .modal-footer .btn-group .btn+.btn{margin-left:-1px}#bootstrap-theme .modal-footer .btn-block+.btn-block{margin-left:0}#bootstrap-theme .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){#bootstrap-theme .modal-dialog{width:600px;margin:30px auto}#bootstrap-theme .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}#bootstrap-theme .modal-sm{width:300px}}@media (min-width:992px){#bootstrap-theme .modal-lg{width:900px}}#bootstrap-theme .tooltip{position:absolute;z-index:1070;display:block;font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.428571429;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;-ms-word-break:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;-webkit-filter:alpha(opacity=0);filter:alpha(opacity=0);opacity:0}#bootstrap-theme .tooltip.in{-webkit-filter:alpha(opacity=90);filter:alpha(opacity=90);opacity:.9}#bootstrap-theme .tooltip.top{padding:5px 0;margin-top:-3px}#bootstrap-theme .tooltip.right{padding:0 5px;margin-left:3px}#bootstrap-theme .tooltip.bottom{padding:5px 0;margin-top:3px}#bootstrap-theme .tooltip.left{padding:0 5px;margin-left:-3px}#bootstrap-theme .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}#bootstrap-theme .tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}#bootstrap-theme .tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}#bootstrap-theme .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}#bootstrap-theme .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}#bootstrap-theme .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}#bootstrap-theme .tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}#bootstrap-theme .tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}#bootstrap-theme .tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}#bootstrap-theme .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}#bootstrap-theme .popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.428571429;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;-ms-word-break:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}#bootstrap-theme .popover.top{margin-top:-10px}#bootstrap-theme .popover.right{margin-left:10px}#bootstrap-theme .popover.bottom{margin-top:10px}#bootstrap-theme .popover.left{margin-left:-10px}#bootstrap-theme .popover>.arrow{border-width:11px}#bootstrap-theme .popover>.arrow,#bootstrap-theme .popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}#bootstrap-theme .popover>.arrow:after{content:"";border-width:10px}#bootstrap-theme .popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}#bootstrap-theme .popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}#bootstrap-theme .popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}#bootstrap-theme .popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}#bootstrap-theme .popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}#bootstrap-theme .popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}#bootstrap-theme .popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}#bootstrap-theme .popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}#bootstrap-theme .popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}#bootstrap-theme .popover-content{padding:9px 14px}#bootstrap-theme .carousel{position:relative}#bootstrap-theme .carousel-inner{position:relative;width:100%;overflow:hidden}#bootstrap-theme .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}#bootstrap-theme .carousel-inner>.item>img,#bootstrap-theme .carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media (transform-3d),(-webkit-transform-3d){#bootstrap-theme .carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-ms-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}#bootstrap-theme .carousel-inner>.item.next,#bootstrap-theme .carousel-inner>.item.active.right{-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}#bootstrap-theme .carousel-inner>.item.prev,#bootstrap-theme .carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}#bootstrap-theme .carousel-inner>.item.next.left,#bootstrap-theme .carousel-inner>.item.prev.right,#bootstrap-theme .carousel-inner>.item.active{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}#bootstrap-theme .carousel-inner>.active,#bootstrap-theme .carousel-inner>.next,#bootstrap-theme .carousel-inner>.prev{display:block}#bootstrap-theme .carousel-inner>.active{left:0}#bootstrap-theme .carousel-inner>.next,#bootstrap-theme .carousel-inner>.prev{position:absolute;top:0;width:100%}#bootstrap-theme .carousel-inner>.next{left:100%}#bootstrap-theme .carousel-inner>.prev{left:-100%}#bootstrap-theme .carousel-inner>.next.left,#bootstrap-theme .carousel-inner>.prev.right{left:0}#bootstrap-theme .carousel-inner>.active.left{left:-100%}#bootstrap-theme .carousel-inner>.active.right{left:100%}#bootstrap-theme .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);-webkit-filter:alpha(opacity=50);filter:alpha(opacity=50);opacity:.5}#bootstrap-theme .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);-webkit-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);background-repeat:repeat-x}#bootstrap-theme .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);-webkit-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);background-repeat:repeat-x}#bootstrap-theme .carousel-control:hover,#bootstrap-theme .carousel-control:focus{color:#fff;text-decoration:none;outline:0;-webkit-filter:alpha(opacity=90);filter:alpha(opacity=90);opacity:.9}#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .icon-next,#bootstrap-theme .carousel-control .glyphicon-chevron-left,#bootstrap-theme .carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}#bootstrap-theme .carousel-control .icon-next,#bootstrap-theme .carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .icon-next{width:20px;height:20px;font-family:serif;line-height:1}#bootstrap-theme .carousel-control .icon-prev:before{content:"‹"}#bootstrap-theme .carousel-control .icon-next:before{content:"›"}#bootstrap-theme .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}#bootstrap-theme .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}#bootstrap-theme .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}#bootstrap-theme .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}#bootstrap-theme .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){#bootstrap-theme .carousel-control .glyphicon-chevron-left,#bootstrap-theme .carousel-control .glyphicon-chevron-right,#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}#bootstrap-theme .carousel-control .glyphicon-chevron-left,#bootstrap-theme .carousel-control .icon-prev{margin-left:-10px}#bootstrap-theme .carousel-control .glyphicon-chevron-right,#bootstrap-theme .carousel-control .icon-next{margin-right:-10px}#bootstrap-theme .carousel-caption{right:20%;left:20%;padding-bottom:30px}#bootstrap-theme .carousel-indicators{bottom:20px}}#bootstrap-theme .clearfix:before,#bootstrap-theme .clearfix:after{display:table;content:" "}#bootstrap-theme .clearfix:after{clear:both}#bootstrap-theme .center-block{display:block;margin-right:auto;margin-left:auto}#bootstrap-theme .pull-right{float:right !important}#bootstrap-theme .pull-left{float:left !important}#bootstrap-theme .hide{display:none !important}#bootstrap-theme .show{display:block !important}#bootstrap-theme .invisible{visibility:hidden}#bootstrap-theme .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}#bootstrap-theme .hidden{display:none !important}#bootstrap-theme .affix{position:fixed}@-ms-viewport{width:device-width}#bootstrap-theme .visible-xs{display:none !important}#bootstrap-theme .visible-sm{display:none !important}#bootstrap-theme .visible-md{display:none !important}#bootstrap-theme .visible-lg{display:none !important}#bootstrap-theme .visible-xs-block,#bootstrap-theme .visible-xs-inline,#bootstrap-theme .visible-xs-inline-block,#bootstrap-theme .visible-sm-block,#bootstrap-theme .visible-sm-inline,#bootstrap-theme .visible-sm-inline-block,#bootstrap-theme .visible-md-block,#bootstrap-theme .visible-md-inline,#bootstrap-theme .visible-md-inline-block,#bootstrap-theme .visible-lg-block,#bootstrap-theme .visible-lg-inline,#bootstrap-theme .visible-lg-inline-block{display:none !important}@media (max-width:767px){#bootstrap-theme .visible-xs{display:block !important}#bootstrap-theme table.visible-xs{display:table !important}#bootstrap-theme tr.visible-xs{display:table-row !important}#bootstrap-theme th.visible-xs,#bootstrap-theme td.visible-xs{display:table-cell !important}}@media (max-width:767px){#bootstrap-theme .visible-xs-block{display:block !important}}@media (max-width:767px){#bootstrap-theme .visible-xs-inline{display:inline !important}}@media (max-width:767px){#bootstrap-theme .visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm{display:block !important}#bootstrap-theme table.visible-sm{display:table !important}#bootstrap-theme tr.visible-sm{display:table-row !important}#bootstrap-theme th.visible-sm,#bootstrap-theme td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md{display:block !important}#bootstrap-theme table.visible-md{display:table !important}#bootstrap-theme tr.visible-md{display:table-row !important}#bootstrap-theme th.visible-md,#bootstrap-theme td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg{display:block !important}#bootstrap-theme table.visible-lg{display:table !important}#bootstrap-theme tr.visible-lg{display:table-row !important}#bootstrap-theme th.visible-lg,#bootstrap-theme td.visible-lg{display:table-cell !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg-block{display:block !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg-inline{display:inline !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){#bootstrap-theme .hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .hidden-md{display:none !important}}@media (min-width:1200px){#bootstrap-theme .hidden-lg{display:none !important}}#bootstrap-theme .visible-print{display:none !important}@media print{#bootstrap-theme .visible-print{display:block !important}#bootstrap-theme table.visible-print{display:table !important}#bootstrap-theme tr.visible-print{display:table-row !important}#bootstrap-theme th.visible-print,#bootstrap-theme td.visible-print{display:table-cell !important}}#bootstrap-theme .visible-print-block{display:none !important}@media print{#bootstrap-theme .visible-print-block{display:block !important}}#bootstrap-theme .visible-print-inline{display:none !important}@media print{#bootstrap-theme .visible-print-inline{display:inline !important}}#bootstrap-theme .visible-print-inline-block{display:none !important}@media print{#bootstrap-theme .visible-print-inline-block{display:inline-block !important}}@media print{#bootstrap-theme .hidden-print{display:none !important}}#bootstrap-theme ul,#bootstrap-theme ol{margin-left:0;margin-right:0}#bootstrap-theme .form-control.checkbox-inline>label{margin-left:9px}#bootstrap-theme label input[type=checkbox]:not(:checked)+*{font-weight:400}#bootstrap-theme .select2-choices{margin-bottom:0}#bootstrap-theme input[type=search]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}#bootstrap-theme .form-control .select2-choice{border:0;border-radius:2px}#bootstrap-theme .form-control .select2-choice .select2-arrow{border-radius:0 2px 2px 0}#bootstrap-theme .form-control.select2-container{height:auto !important;padding:0}#bootstrap-theme .form-control.select2-container.select2-dropdown-open{border-color:#5897fb;border-radius:3px 3px 0 0}#bootstrap-theme .form-control .select2-container.select2-dropdown-open .select2-choices{border-radius:3px 3px 0 0}#bootstrap-theme .form-control.select2-container .select2-choices{border:0 !important;border-radius:3px}#bootstrap-theme .control-group.warning .select2-container .select2-choice,#bootstrap-theme .control-group.warning .select2-container .select2-choices,#bootstrap-theme .control-group.warning .select2-container-active .select2-choice,#bootstrap-theme .control-group.warning .select2-container-active .select2-choices,#bootstrap-theme .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.warning .select2-container-multi.select2-container-active .select2-choices{border:1px solid #c09853 !important}#bootstrap-theme .control-group.warning .select2-container .select2-choice div{border-left:1px solid #c09853 !important;background:#fcf8e3 !important}#bootstrap-theme .control-group.error .select2-container .select2-choice,#bootstrap-theme .control-group.error .select2-container .select2-choices,#bootstrap-theme .control-group.error .select2-container-active .select2-choice,#bootstrap-theme .control-group.error .select2-container-active .select2-choices,#bootstrap-theme .control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.error .select2-container-multi.select2-container-active .select2-choices{border:1px solid #b94a48 !important}#bootstrap-theme .control-group.error .select2-container .select2-choice div{border-left:1px solid #b94a48 !important;background:#f2dede !important}#bootstrap-theme .control-group.info .select2-container .select2-choice,#bootstrap-theme .control-group.info .select2-container .select2-choices,#bootstrap-theme .control-group.info .select2-container-active .select2-choice,#bootstrap-theme .control-group.info .select2-container-active .select2-choices,#bootstrap-theme .control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.info .select2-container-multi.select2-container-active .select2-choices{border:1px solid #3a87ad !important}#bootstrap-theme .control-group.info .select2-container .select2-choice div{border-left:1px solid #3a87ad !important;background:#d9edf7 !important}#bootstrap-theme .control-group.success .select2-container .select2-choice,#bootstrap-theme .control-group.success .select2-container .select2-choices,#bootstrap-theme .control-group.success .select2-container-active .select2-choice,#bootstrap-theme .control-group.success .select2-container-active .select2-choices,#bootstrap-theme .control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.success .select2-container-multi.select2-container-active .select2-choices{border:1px solid #468847 !important}#bootstrap-theme .control-group.success .select2-container .select2-choice div{border-left:1px solid #468847 !important;background:#dff0d8 !important} \ No newline at end of file +#bootstrap-theme html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}#bootstrap-theme body{margin:0}#bootstrap-theme article,#bootstrap-theme aside,#bootstrap-theme details,#bootstrap-theme figcaption,#bootstrap-theme figure,#bootstrap-theme footer,#bootstrap-theme header,#bootstrap-theme hgroup,#bootstrap-theme main,#bootstrap-theme menu,#bootstrap-theme nav,#bootstrap-theme section,#bootstrap-theme summary{display:block}#bootstrap-theme audio,#bootstrap-theme canvas,#bootstrap-theme progress,#bootstrap-theme video{display:inline-block;vertical-align:baseline}#bootstrap-theme audio:not([controls]){display:none;height:0}#bootstrap-theme [hidden],#bootstrap-theme template{display:none}#bootstrap-theme a{background-color:transparent}#bootstrap-theme a:active,#bootstrap-theme a:hover{outline:0}#bootstrap-theme abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}#bootstrap-theme b,#bootstrap-theme strong{font-weight:700}#bootstrap-theme dfn{font-style:italic}#bootstrap-theme h1{font-size:2em;margin:.67em 0}#bootstrap-theme mark{background:#ff0;color:#000}#bootstrap-theme small{font-size:80%}#bootstrap-theme sub,#bootstrap-theme sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}#bootstrap-theme sup{top:-.5em}#bootstrap-theme sub{bottom:-.25em}#bootstrap-theme img{border:0}#bootstrap-theme svg:not(:root){overflow:hidden}#bootstrap-theme figure{margin:1em 40px}#bootstrap-theme hr{box-sizing:content-box;height:0}#bootstrap-theme pre{overflow:auto}#bootstrap-theme code,#bootstrap-theme kbd,#bootstrap-theme pre,#bootstrap-theme samp{font-family:monospace,monospace;font-size:1em}#bootstrap-theme button,#bootstrap-theme input,#bootstrap-theme optgroup,#bootstrap-theme select,#bootstrap-theme textarea{color:inherit;font:inherit;margin:0}#bootstrap-theme button{overflow:visible}#bootstrap-theme button,#bootstrap-theme select{text-transform:none}#bootstrap-theme button,#bootstrap-theme html input[type=button],#bootstrap-theme input[type=reset],#bootstrap-theme input[type=submit]{-webkit-appearance:button;cursor:pointer}#bootstrap-theme button[disabled],#bootstrap-theme html input[disabled]{cursor:default}#bootstrap-theme button::-moz-focus-inner,#bootstrap-theme input::-moz-focus-inner{border:0;padding:0}#bootstrap-theme input{line-height:normal}#bootstrap-theme input[type=checkbox],#bootstrap-theme input[type=radio]{box-sizing:border-box;padding:0}#bootstrap-theme input[type=number]::-webkit-inner-spin-button,#bootstrap-theme input[type=number]::-webkit-outer-spin-button{height:auto}#bootstrap-theme input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}#bootstrap-theme input[type=search]::-webkit-search-cancel-button,#bootstrap-theme input[type=search]::-webkit-search-decoration{-webkit-appearance:none}#bootstrap-theme fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}#bootstrap-theme legend{border:0;padding:0}#bootstrap-theme textarea{overflow:auto}#bootstrap-theme optgroup{font-weight:700}#bootstrap-theme table{border-collapse:collapse;border-spacing:0}#bootstrap-theme td,#bootstrap-theme th{padding:0}@media print{#bootstrap-theme *,#bootstrap-theme *:before,#bootstrap-theme *:after{color:#000 !important;text-shadow:none !important;background:0 0 !important;box-shadow:none !important}#bootstrap-theme a,#bootstrap-theme a:visited{text-decoration:underline}#bootstrap-theme a[href]:after{content:" (" attr(href) ")"}#bootstrap-theme abbr[title]:after{content:" (" attr(title) ")"}#bootstrap-theme a[href^="#"]:after,#bootstrap-theme a[href^="javascript:"]:after{content:""}#bootstrap-theme pre,#bootstrap-theme blockquote{border:1px solid #999;page-break-inside:avoid}#bootstrap-theme thead{display:table-header-group}#bootstrap-theme tr,#bootstrap-theme img{page-break-inside:avoid}#bootstrap-theme img{max-width:100% !important}#bootstrap-theme p,#bootstrap-theme h2,#bootstrap-theme h3{orphans:3;widows:3}#bootstrap-theme h2,#bootstrap-theme h3{page-break-after:avoid}#bootstrap-theme .navbar{display:none}#bootstrap-theme .btn>.caret,#bootstrap-theme .dropup>.btn>.caret{border-top-color:#000 !important}#bootstrap-theme .label{border:1px solid #000}#bootstrap-theme .table{border-collapse:collapse !important}#bootstrap-theme .table td,#bootstrap-theme .table th{background-color:#fff !important}#bootstrap-theme .table-bordered th,#bootstrap-theme .table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:"Glyphicons Halflings";src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}#bootstrap-theme .glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bootstrap-theme .glyphicon-asterisk:before{content:"*"}#bootstrap-theme .glyphicon-plus:before{content:"+"}#bootstrap-theme .glyphicon-euro:before,#bootstrap-theme .glyphicon-eur:before{content:"€"}#bootstrap-theme .glyphicon-minus:before{content:"−"}#bootstrap-theme .glyphicon-cloud:before{content:"â˜"}#bootstrap-theme .glyphicon-envelope:before{content:"✉"}#bootstrap-theme .glyphicon-pencil:before{content:"âœ"}#bootstrap-theme .glyphicon-glass:before{content:"î€"}#bootstrap-theme .glyphicon-music:before{content:""}#bootstrap-theme .glyphicon-search:before{content:""}#bootstrap-theme .glyphicon-heart:before{content:""}#bootstrap-theme .glyphicon-star:before{content:""}#bootstrap-theme .glyphicon-star-empty:before{content:""}#bootstrap-theme .glyphicon-user:before{content:""}#bootstrap-theme .glyphicon-film:before{content:""}#bootstrap-theme .glyphicon-th-large:before{content:"î€"}#bootstrap-theme .glyphicon-th:before{content:""}#bootstrap-theme .glyphicon-th-list:before{content:""}#bootstrap-theme .glyphicon-ok:before{content:""}#bootstrap-theme .glyphicon-remove:before{content:""}#bootstrap-theme .glyphicon-zoom-in:before{content:""}#bootstrap-theme .glyphicon-zoom-out:before{content:""}#bootstrap-theme .glyphicon-off:before{content:""}#bootstrap-theme .glyphicon-signal:before{content:""}#bootstrap-theme .glyphicon-cog:before{content:""}#bootstrap-theme .glyphicon-trash:before{content:"î€ "}#bootstrap-theme .glyphicon-home:before{content:""}#bootstrap-theme .glyphicon-file:before{content:""}#bootstrap-theme .glyphicon-time:before{content:""}#bootstrap-theme .glyphicon-road:before{content:""}#bootstrap-theme .glyphicon-download-alt:before{content:""}#bootstrap-theme .glyphicon-download:before{content:""}#bootstrap-theme .glyphicon-upload:before{content:""}#bootstrap-theme .glyphicon-inbox:before{content:""}#bootstrap-theme .glyphicon-play-circle:before{content:""}#bootstrap-theme .glyphicon-repeat:before{content:""}#bootstrap-theme .glyphicon-refresh:before{content:""}#bootstrap-theme .glyphicon-list-alt:before{content:""}#bootstrap-theme .glyphicon-lock:before{content:""}#bootstrap-theme .glyphicon-flag:before{content:""}#bootstrap-theme .glyphicon-headphones:before{content:""}#bootstrap-theme .glyphicon-volume-off:before{content:""}#bootstrap-theme .glyphicon-volume-down:before{content:""}#bootstrap-theme .glyphicon-volume-up:before{content:""}#bootstrap-theme .glyphicon-qrcode:before{content:""}#bootstrap-theme .glyphicon-barcode:before{content:"î€"}#bootstrap-theme .glyphicon-tag:before{content:"î"}#bootstrap-theme .glyphicon-tags:before{content:"î‚"}#bootstrap-theme .glyphicon-book:before{content:"îƒ"}#bootstrap-theme .glyphicon-bookmark:before{content:"î„"}#bootstrap-theme .glyphicon-print:before{content:"î…"}#bootstrap-theme .glyphicon-camera:before{content:"î†"}#bootstrap-theme .glyphicon-font:before{content:"î‡"}#bootstrap-theme .glyphicon-bold:before{content:"îˆ"}#bootstrap-theme .glyphicon-italic:before{content:"î‰"}#bootstrap-theme .glyphicon-text-height:before{content:"î"}#bootstrap-theme .glyphicon-text-width:before{content:"î‘"}#bootstrap-theme .glyphicon-align-left:before{content:"î’"}#bootstrap-theme .glyphicon-align-center:before{content:"î“"}#bootstrap-theme .glyphicon-align-right:before{content:"î”"}#bootstrap-theme .glyphicon-align-justify:before{content:"î•"}#bootstrap-theme .glyphicon-list:before{content:"î–"}#bootstrap-theme .glyphicon-indent-left:before{content:"î—"}#bootstrap-theme .glyphicon-indent-right:before{content:"î˜"}#bootstrap-theme .glyphicon-facetime-video:before{content:"î™"}#bootstrap-theme .glyphicon-picture:before{content:"î "}#bootstrap-theme .glyphicon-map-marker:before{content:"î¢"}#bootstrap-theme .glyphicon-adjust:before{content:"î£"}#bootstrap-theme .glyphicon-tint:before{content:"î¤"}#bootstrap-theme .glyphicon-edit:before{content:"î¥"}#bootstrap-theme .glyphicon-share:before{content:"î¦"}#bootstrap-theme .glyphicon-check:before{content:"î§"}#bootstrap-theme .glyphicon-move:before{content:"î¨"}#bootstrap-theme .glyphicon-step-backward:before{content:"î©"}#bootstrap-theme .glyphicon-fast-backward:before{content:"î°"}#bootstrap-theme .glyphicon-backward:before{content:"î±"}#bootstrap-theme .glyphicon-play:before{content:"î²"}#bootstrap-theme .glyphicon-pause:before{content:"î³"}#bootstrap-theme .glyphicon-stop:before{content:"î´"}#bootstrap-theme .glyphicon-forward:before{content:"îµ"}#bootstrap-theme .glyphicon-fast-forward:before{content:"î¶"}#bootstrap-theme .glyphicon-step-forward:before{content:"î·"}#bootstrap-theme .glyphicon-eject:before{content:"î¸"}#bootstrap-theme .glyphicon-chevron-left:before{content:"î¹"}#bootstrap-theme .glyphicon-chevron-right:before{content:"î‚€"}#bootstrap-theme .glyphicon-plus-sign:before{content:"î‚"}#bootstrap-theme .glyphicon-minus-sign:before{content:"î‚‚"}#bootstrap-theme .glyphicon-remove-sign:before{content:""}#bootstrap-theme .glyphicon-ok-sign:before{content:"î‚„"}#bootstrap-theme .glyphicon-question-sign:before{content:"î‚…"}#bootstrap-theme .glyphicon-info-sign:before{content:""}#bootstrap-theme .glyphicon-screenshot:before{content:""}#bootstrap-theme .glyphicon-remove-circle:before{content:""}#bootstrap-theme .glyphicon-ok-circle:before{content:""}#bootstrap-theme .glyphicon-ban-circle:before{content:"î‚"}#bootstrap-theme .glyphicon-arrow-left:before{content:"î‚‘"}#bootstrap-theme .glyphicon-arrow-right:before{content:"î‚’"}#bootstrap-theme .glyphicon-arrow-up:before{content:"î‚“"}#bootstrap-theme .glyphicon-arrow-down:before{content:"î‚”"}#bootstrap-theme .glyphicon-share-alt:before{content:"î‚•"}#bootstrap-theme .glyphicon-resize-full:before{content:"î‚–"}#bootstrap-theme .glyphicon-resize-small:before{content:"î‚—"}#bootstrap-theme .glyphicon-exclamation-sign:before{content:"î„"}#bootstrap-theme .glyphicon-gift:before{content:"î„‚"}#bootstrap-theme .glyphicon-leaf:before{content:""}#bootstrap-theme .glyphicon-fire:before{content:"î„„"}#bootstrap-theme .glyphicon-eye-open:before{content:"î„…"}#bootstrap-theme .glyphicon-eye-close:before{content:""}#bootstrap-theme .glyphicon-warning-sign:before{content:""}#bootstrap-theme .glyphicon-plane:before{content:""}#bootstrap-theme .glyphicon-calendar:before{content:""}#bootstrap-theme .glyphicon-random:before{content:"î„"}#bootstrap-theme .glyphicon-comment:before{content:"î„‘"}#bootstrap-theme .glyphicon-magnet:before{content:"î„’"}#bootstrap-theme .glyphicon-chevron-up:before{content:"î„“"}#bootstrap-theme .glyphicon-chevron-down:before{content:"î„”"}#bootstrap-theme .glyphicon-retweet:before{content:"î„•"}#bootstrap-theme .glyphicon-shopping-cart:before{content:"î„–"}#bootstrap-theme .glyphicon-folder-close:before{content:"î„—"}#bootstrap-theme .glyphicon-folder-open:before{content:""}#bootstrap-theme .glyphicon-resize-vertical:before{content:"î„™"}#bootstrap-theme .glyphicon-resize-horizontal:before{content:"î„ "}#bootstrap-theme .glyphicon-hdd:before{content:"î„¡"}#bootstrap-theme .glyphicon-bullhorn:before{content:"î„¢"}#bootstrap-theme .glyphicon-bell:before{content:"î„£"}#bootstrap-theme .glyphicon-certificate:before{content:""}#bootstrap-theme .glyphicon-thumbs-up:before{content:"î„¥"}#bootstrap-theme .glyphicon-thumbs-down:before{content:""}#bootstrap-theme .glyphicon-hand-right:before{content:""}#bootstrap-theme .glyphicon-hand-left:before{content:""}#bootstrap-theme .glyphicon-hand-up:before{content:"î„©"}#bootstrap-theme .glyphicon-hand-down:before{content:"î„°"}#bootstrap-theme .glyphicon-circle-arrow-right:before{content:""}#bootstrap-theme .glyphicon-circle-arrow-left:before{content:""}#bootstrap-theme .glyphicon-circle-arrow-up:before{content:""}#bootstrap-theme .glyphicon-circle-arrow-down:before{content:"î„´"}#bootstrap-theme .glyphicon-globe:before{content:""}#bootstrap-theme .glyphicon-wrench:before{content:""}#bootstrap-theme .glyphicon-tasks:before{content:"î„·"}#bootstrap-theme .glyphicon-filter:before{content:""}#bootstrap-theme .glyphicon-briefcase:before{content:""}#bootstrap-theme .glyphicon-fullscreen:before{content:"î…€"}#bootstrap-theme .glyphicon-dashboard:before{content:"î…"}#bootstrap-theme .glyphicon-paperclip:before{content:"î…‚"}#bootstrap-theme .glyphicon-heart-empty:before{content:"î…ƒ"}#bootstrap-theme .glyphicon-link:before{content:"î…„"}#bootstrap-theme .glyphicon-phone:before{content:"î……"}#bootstrap-theme .glyphicon-pushpin:before{content:"î…†"}#bootstrap-theme .glyphicon-usd:before{content:"î…ˆ"}#bootstrap-theme .glyphicon-gbp:before{content:"î…‰"}#bootstrap-theme .glyphicon-sort:before{content:"î…"}#bootstrap-theme .glyphicon-sort-by-alphabet:before{content:"î…‘"}#bootstrap-theme .glyphicon-sort-by-alphabet-alt:before{content:"î…’"}#bootstrap-theme .glyphicon-sort-by-order:before{content:"î…“"}#bootstrap-theme .glyphicon-sort-by-order-alt:before{content:"î…”"}#bootstrap-theme .glyphicon-sort-by-attributes:before{content:"î…•"}#bootstrap-theme .glyphicon-sort-by-attributes-alt:before{content:"î…–"}#bootstrap-theme .glyphicon-unchecked:before{content:"î…—"}#bootstrap-theme .glyphicon-expand:before{content:"î…˜"}#bootstrap-theme .glyphicon-collapse-down:before{content:"î…™"}#bootstrap-theme .glyphicon-collapse-up:before{content:"î… "}#bootstrap-theme .glyphicon-log-in:before{content:"î…¡"}#bootstrap-theme .glyphicon-flash:before{content:"î…¢"}#bootstrap-theme .glyphicon-log-out:before{content:"î…£"}#bootstrap-theme .glyphicon-new-window:before{content:"î…¤"}#bootstrap-theme .glyphicon-record:before{content:"î…¥"}#bootstrap-theme .glyphicon-save:before{content:"î…¦"}#bootstrap-theme .glyphicon-open:before{content:"î…§"}#bootstrap-theme .glyphicon-saved:before{content:"î…¨"}#bootstrap-theme .glyphicon-import:before{content:"î…©"}#bootstrap-theme .glyphicon-export:before{content:"î…°"}#bootstrap-theme .glyphicon-send:before{content:"î…±"}#bootstrap-theme .glyphicon-floppy-disk:before{content:"î…²"}#bootstrap-theme .glyphicon-floppy-saved:before{content:"î…³"}#bootstrap-theme .glyphicon-floppy-remove:before{content:"î…´"}#bootstrap-theme .glyphicon-floppy-save:before{content:"î…µ"}#bootstrap-theme .glyphicon-floppy-open:before{content:"î…¶"}#bootstrap-theme .glyphicon-credit-card:before{content:"î…·"}#bootstrap-theme .glyphicon-transfer:before{content:"î…¸"}#bootstrap-theme .glyphicon-cutlery:before{content:"î…¹"}#bootstrap-theme .glyphicon-header:before{content:""}#bootstrap-theme .glyphicon-compressed:before{content:"î†"}#bootstrap-theme .glyphicon-earphone:before{content:""}#bootstrap-theme .glyphicon-phone-alt:before{content:""}#bootstrap-theme .glyphicon-tower:before{content:""}#bootstrap-theme .glyphicon-stats:before{content:""}#bootstrap-theme .glyphicon-sd-video:before{content:""}#bootstrap-theme .glyphicon-hd-video:before{content:""}#bootstrap-theme .glyphicon-subtitles:before{content:""}#bootstrap-theme .glyphicon-sound-stereo:before{content:""}#bootstrap-theme .glyphicon-sound-dolby:before{content:"î†"}#bootstrap-theme .glyphicon-sound-5-1:before{content:""}#bootstrap-theme .glyphicon-sound-6-1:before{content:""}#bootstrap-theme .glyphicon-sound-7-1:before{content:""}#bootstrap-theme .glyphicon-copyright-mark:before{content:""}#bootstrap-theme .glyphicon-registration-mark:before{content:""}#bootstrap-theme .glyphicon-cloud-download:before{content:""}#bootstrap-theme .glyphicon-cloud-upload:before{content:""}#bootstrap-theme .glyphicon-tree-conifer:before{content:""}#bootstrap-theme .glyphicon-tree-deciduous:before{content:""}#bootstrap-theme .glyphicon-cd:before{content:"îˆ"}#bootstrap-theme .glyphicon-save-file:before{content:""}#bootstrap-theme .glyphicon-open-file:before{content:""}#bootstrap-theme .glyphicon-level-up:before{content:""}#bootstrap-theme .glyphicon-copy:before{content:""}#bootstrap-theme .glyphicon-paste:before{content:""}#bootstrap-theme .glyphicon-alert:before{content:""}#bootstrap-theme .glyphicon-equalizer:before{content:"îˆ"}#bootstrap-theme .glyphicon-king:before{content:""}#bootstrap-theme .glyphicon-queen:before{content:""}#bootstrap-theme .glyphicon-pawn:before{content:""}#bootstrap-theme .glyphicon-bishop:before{content:""}#bootstrap-theme .glyphicon-knight:before{content:""}#bootstrap-theme .glyphicon-baby-formula:before{content:""}#bootstrap-theme .glyphicon-tent:before{content:"⛺"}#bootstrap-theme .glyphicon-blackboard:before{content:""}#bootstrap-theme .glyphicon-bed:before{content:""}#bootstrap-theme .glyphicon-apple:before{content:""}#bootstrap-theme .glyphicon-erase:before{content:""}#bootstrap-theme .glyphicon-hourglass:before{content:"⌛"}#bootstrap-theme .glyphicon-lamp:before{content:""}#bootstrap-theme .glyphicon-duplicate:before{content:""}#bootstrap-theme .glyphicon-piggy-bank:before{content:""}#bootstrap-theme .glyphicon-scissors:before{content:""}#bootstrap-theme .glyphicon-bitcoin:before{content:""}#bootstrap-theme .glyphicon-btc:before{content:""}#bootstrap-theme .glyphicon-xbt:before{content:""}#bootstrap-theme .glyphicon-yen:before{content:"Â¥"}#bootstrap-theme .glyphicon-jpy:before{content:"Â¥"}#bootstrap-theme .glyphicon-ruble:before{content:"₽"}#bootstrap-theme .glyphicon-rub:before{content:"₽"}#bootstrap-theme .glyphicon-scale:before{content:""}#bootstrap-theme .glyphicon-ice-lolly:before{content:""}#bootstrap-theme .glyphicon-ice-lolly-tasted:before{content:""}#bootstrap-theme .glyphicon-education:before{content:""}#bootstrap-theme .glyphicon-option-horizontal:before{content:""}#bootstrap-theme .glyphicon-option-vertical:before{content:""}#bootstrap-theme .glyphicon-menu-hamburger:before{content:""}#bootstrap-theme .glyphicon-modal-window:before{content:""}#bootstrap-theme .glyphicon-oil:before{content:""}#bootstrap-theme .glyphicon-grain:before{content:""}#bootstrap-theme .glyphicon-sunglasses:before{content:""}#bootstrap-theme .glyphicon-text-size:before{content:"î‰"}#bootstrap-theme .glyphicon-text-color:before{content:""}#bootstrap-theme .glyphicon-text-background:before{content:""}#bootstrap-theme .glyphicon-object-align-top:before{content:""}#bootstrap-theme .glyphicon-object-align-bottom:before{content:""}#bootstrap-theme .glyphicon-object-align-horizontal:before{content:""}#bootstrap-theme .glyphicon-object-align-left:before{content:""}#bootstrap-theme .glyphicon-object-align-vertical:before{content:""}#bootstrap-theme .glyphicon-object-align-right:before{content:""}#bootstrap-theme .glyphicon-triangle-right:before{content:"î‰"}#bootstrap-theme .glyphicon-triangle-left:before{content:""}#bootstrap-theme .glyphicon-triangle-bottom:before{content:""}#bootstrap-theme .glyphicon-triangle-top:before{content:""}#bootstrap-theme .glyphicon-console:before{content:""}#bootstrap-theme .glyphicon-superscript:before{content:""}#bootstrap-theme .glyphicon-subscript:before{content:""}#bootstrap-theme .glyphicon-menu-left:before{content:""}#bootstrap-theme .glyphicon-menu-right:before{content:""}#bootstrap-theme .glyphicon-menu-down:before{content:""}#bootstrap-theme .glyphicon-menu-up:before{content:"î‰ "}#bootstrap-theme *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#bootstrap-theme *:before,#bootstrap-theme *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#bootstrap-theme html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}#bootstrap-theme body{font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff}#bootstrap-theme input,#bootstrap-theme button,#bootstrap-theme select,#bootstrap-theme textarea{font-family:inherit;font-size:inherit;line-height:inherit}#bootstrap-theme a{color:#2786c2;text-decoration:none}#bootstrap-theme a:hover,#bootstrap-theme a:focus{color:#1a5a82;text-decoration:underline}#bootstrap-theme a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#bootstrap-theme figure{margin:0}#bootstrap-theme img{vertical-align:middle}#bootstrap-theme .img-responsive{display:block;max-width:100%;height:auto}#bootstrap-theme .img-rounded{border-radius:6px}#bootstrap-theme .img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}#bootstrap-theme .img-circle{border-radius:50%}#bootstrap-theme hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}#bootstrap-theme .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}#bootstrap-theme .sr-only-focusable:active,#bootstrap-theme .sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}#bootstrap-theme [role=button]{cursor:pointer}#bootstrap-theme h1,#bootstrap-theme h2,#bootstrap-theme h3,#bootstrap-theme h4,#bootstrap-theme h5,#bootstrap-theme h6,#bootstrap-theme .h1,#bootstrap-theme .h2,#bootstrap-theme .h3,#bootstrap-theme .h4,#bootstrap-theme .h5,#bootstrap-theme .h6{font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.2;color:#000}#bootstrap-theme h1 small,#bootstrap-theme h1 .small,#bootstrap-theme h2 small,#bootstrap-theme h2 .small,#bootstrap-theme h3 small,#bootstrap-theme h3 .small,#bootstrap-theme h4 small,#bootstrap-theme h4 .small,#bootstrap-theme h5 small,#bootstrap-theme h5 .small,#bootstrap-theme h6 small,#bootstrap-theme h6 .small,#bootstrap-theme .h1 small,#bootstrap-theme .h1 .small,#bootstrap-theme .h2 small,#bootstrap-theme .h2 .small,#bootstrap-theme .h3 small,#bootstrap-theme .h3 .small,#bootstrap-theme .h4 small,#bootstrap-theme .h4 .small,#bootstrap-theme .h5 small,#bootstrap-theme .h5 .small,#bootstrap-theme .h6 small,#bootstrap-theme .h6 .small{font-weight:400;line-height:1;color:#999}#bootstrap-theme h1,#bootstrap-theme .h1,#bootstrap-theme h2,#bootstrap-theme .h2,#bootstrap-theme h3,#bootstrap-theme .h3{margin-top:20px;margin-bottom:10px}#bootstrap-theme h1 small,#bootstrap-theme h1 .small,#bootstrap-theme .h1 small,#bootstrap-theme .h1 .small,#bootstrap-theme h2 small,#bootstrap-theme h2 .small,#bootstrap-theme .h2 small,#bootstrap-theme .h2 .small,#bootstrap-theme h3 small,#bootstrap-theme h3 .small,#bootstrap-theme .h3 small,#bootstrap-theme .h3 .small{font-size:65%}#bootstrap-theme h4,#bootstrap-theme .h4,#bootstrap-theme h5,#bootstrap-theme .h5,#bootstrap-theme h6,#bootstrap-theme .h6{margin-top:10px;margin-bottom:10px}#bootstrap-theme h4 small,#bootstrap-theme h4 .small,#bootstrap-theme .h4 small,#bootstrap-theme .h4 .small,#bootstrap-theme h5 small,#bootstrap-theme h5 .small,#bootstrap-theme .h5 small,#bootstrap-theme .h5 .small,#bootstrap-theme h6 small,#bootstrap-theme h6 .small,#bootstrap-theme .h6 small,#bootstrap-theme .h6 .small{font-size:75%}#bootstrap-theme h1,#bootstrap-theme .h1{font-size:36px}#bootstrap-theme h2,#bootstrap-theme .h2{font-size:30px}#bootstrap-theme h3,#bootstrap-theme .h3{font-size:24px}#bootstrap-theme h4,#bootstrap-theme .h4{font-size:18px}#bootstrap-theme h5,#bootstrap-theme .h5{font-size:14px}#bootstrap-theme h6,#bootstrap-theme .h6{font-size:12px}#bootstrap-theme p{margin:0 0 10px}#bootstrap-theme .lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){#bootstrap-theme .lead{font-size:21px}}#bootstrap-theme small,#bootstrap-theme .small{font-size:85%}#bootstrap-theme mark,#bootstrap-theme .mark{padding:.2em;background-color:#fcf8e3}#bootstrap-theme .text-left{text-align:left}#bootstrap-theme .text-right{text-align:right}#bootstrap-theme .text-center{text-align:center}#bootstrap-theme .text-justify{text-align:justify}#bootstrap-theme .text-nowrap{white-space:nowrap}#bootstrap-theme .text-lowercase{text-transform:lowercase}#bootstrap-theme .text-uppercase,#bootstrap-theme .initialism{text-transform:uppercase}#bootstrap-theme .text-capitalize{text-transform:capitalize}#bootstrap-theme .text-muted{color:#999}#bootstrap-theme .text-primary{color:#000}#bootstrap-theme a.text-primary:hover,#bootstrap-theme a.text-primary:focus{color:#000}#bootstrap-theme .text-success{color:#468847}#bootstrap-theme a.text-success:hover,#bootstrap-theme a.text-success:focus{color:#356635}#bootstrap-theme .text-info{color:#3a87ad}#bootstrap-theme a.text-info:hover,#bootstrap-theme a.text-info:focus{color:#2d6987}#bootstrap-theme .text-warning{color:#c09853}#bootstrap-theme a.text-warning:hover,#bootstrap-theme a.text-warning:focus{color:#a47e3c}#bootstrap-theme .text-danger{color:#b94a48}#bootstrap-theme a.text-danger:hover,#bootstrap-theme a.text-danger:focus{color:#953b39}#bootstrap-theme .bg-primary{color:#fff}#bootstrap-theme .bg-primary{background-color:#000}#bootstrap-theme a.bg-primary:hover,#bootstrap-theme a.bg-primary:focus{background-color:#000}#bootstrap-theme .bg-success{background-color:#dff0d8}#bootstrap-theme a.bg-success:hover,#bootstrap-theme a.bg-success:focus{background-color:#c1e2b3}#bootstrap-theme .bg-info{background-color:#d9edf7}#bootstrap-theme a.bg-info:hover,#bootstrap-theme a.bg-info:focus{background-color:#afd9ee}#bootstrap-theme .bg-warning{background-color:#fcf8e3}#bootstrap-theme a.bg-warning:hover,#bootstrap-theme a.bg-warning:focus{background-color:#f7ecb5}#bootstrap-theme .bg-danger{background-color:#f2dede}#bootstrap-theme a.bg-danger:hover,#bootstrap-theme a.bg-danger:focus{background-color:#e4b9b9}#bootstrap-theme .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}#bootstrap-theme ul,#bootstrap-theme ol{margin-top:0;margin-bottom:10px}#bootstrap-theme ul ul,#bootstrap-theme ul ol,#bootstrap-theme ol ul,#bootstrap-theme ol ol{margin-bottom:0}#bootstrap-theme .list-unstyled{padding-left:0;list-style:none}#bootstrap-theme .list-inline{padding-left:0;list-style:none;margin-left:-5px}#bootstrap-theme .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}#bootstrap-theme dl{margin-top:0;margin-bottom:20px}#bootstrap-theme dt,#bootstrap-theme dd{line-height:1.428571429}#bootstrap-theme dt{font-weight:700}#bootstrap-theme dd{margin-left:0}#bootstrap-theme .dl-horizontal dd:before,#bootstrap-theme .dl-horizontal dd:after{display:table;content:" "}#bootstrap-theme .dl-horizontal dd:after{clear:both}@media (min-width:768px){#bootstrap-theme .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#bootstrap-theme .dl-horizontal dd{margin-left:180px}}#bootstrap-theme abbr[title],#bootstrap-theme abbr[data-original-title]{cursor:help}#bootstrap-theme .initialism{font-size:90%}#bootstrap-theme blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}#bootstrap-theme blockquote p:last-child,#bootstrap-theme blockquote ul:last-child,#bootstrap-theme blockquote ol:last-child{margin-bottom:0}#bootstrap-theme blockquote footer,#bootstrap-theme blockquote small,#bootstrap-theme blockquote .small{display:block;font-size:80%;line-height:1.428571429;color:#999}#bootstrap-theme blockquote footer:before,#bootstrap-theme blockquote small:before,#bootstrap-theme blockquote .small:before{content:"—  "}#bootstrap-theme .blockquote-reverse,#bootstrap-theme blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}#bootstrap-theme .blockquote-reverse footer:before,#bootstrap-theme .blockquote-reverse small:before,#bootstrap-theme .blockquote-reverse .small:before,#bootstrap-theme blockquote.pull-right footer:before,#bootstrap-theme blockquote.pull-right small:before,#bootstrap-theme blockquote.pull-right .small:before{content:""}#bootstrap-theme .blockquote-reverse footer:after,#bootstrap-theme .blockquote-reverse small:after,#bootstrap-theme .blockquote-reverse .small:after,#bootstrap-theme blockquote.pull-right footer:after,#bootstrap-theme blockquote.pull-right small:after,#bootstrap-theme blockquote.pull-right .small:after{content:" —"}#bootstrap-theme address{margin-bottom:20px;font-style:normal;line-height:1.428571429}#bootstrap-theme code,#bootstrap-theme kbd,#bootstrap-theme pre,#bootstrap-theme samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}#bootstrap-theme code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}#bootstrap-theme kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}#bootstrap-theme kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}#bootstrap-theme pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;-ms-word-break:break-all;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}#bootstrap-theme pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}#bootstrap-theme .pre-scrollable{max-height:340px;overflow-y:scroll}#bootstrap-theme .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}#bootstrap-theme .container:before,#bootstrap-theme .container:after{display:table;content:" "}#bootstrap-theme .container:after{clear:both}@media (min-width:768px){#bootstrap-theme .container{width:750px}}@media (min-width:992px){#bootstrap-theme .container{width:970px}}@media (min-width:1200px){#bootstrap-theme .container{width:1170px}}#bootstrap-theme .container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}#bootstrap-theme .container-fluid:before,#bootstrap-theme .container-fluid:after{display:table;content:" "}#bootstrap-theme .container-fluid:after{clear:both}#bootstrap-theme .row{margin-right:-15px;margin-left:-15px}#bootstrap-theme .row:before,#bootstrap-theme .row:after{display:table;content:" "}#bootstrap-theme .row:after{clear:both}#bootstrap-theme .row-no-gutters{margin-right:0;margin-left:0}#bootstrap-theme .row-no-gutters [class*=col-]{padding-right:0;padding-left:0}#bootstrap-theme .col-xs-1,#bootstrap-theme .col-sm-1,#bootstrap-theme .col-md-1,#bootstrap-theme .col-lg-1,#bootstrap-theme .col-xs-2,#bootstrap-theme .col-sm-2,#bootstrap-theme .col-md-2,#bootstrap-theme .col-lg-2,#bootstrap-theme .col-xs-3,#bootstrap-theme .col-sm-3,#bootstrap-theme .col-md-3,#bootstrap-theme .col-lg-3,#bootstrap-theme .col-xs-4,#bootstrap-theme .col-sm-4,#bootstrap-theme .col-md-4,#bootstrap-theme .col-lg-4,#bootstrap-theme .col-xs-5,#bootstrap-theme .col-sm-5,#bootstrap-theme .col-md-5,#bootstrap-theme .col-lg-5,#bootstrap-theme .col-xs-6,#bootstrap-theme .col-sm-6,#bootstrap-theme .col-md-6,#bootstrap-theme .col-lg-6,#bootstrap-theme .col-xs-7,#bootstrap-theme .col-sm-7,#bootstrap-theme .col-md-7,#bootstrap-theme .col-lg-7,#bootstrap-theme .col-xs-8,#bootstrap-theme .col-sm-8,#bootstrap-theme .col-md-8,#bootstrap-theme .col-lg-8,#bootstrap-theme .col-xs-9,#bootstrap-theme .col-sm-9,#bootstrap-theme .col-md-9,#bootstrap-theme .col-lg-9,#bootstrap-theme .col-xs-10,#bootstrap-theme .col-sm-10,#bootstrap-theme .col-md-10,#bootstrap-theme .col-lg-10,#bootstrap-theme .col-xs-11,#bootstrap-theme .col-sm-11,#bootstrap-theme .col-md-11,#bootstrap-theme .col-lg-11,#bootstrap-theme .col-xs-12,#bootstrap-theme .col-sm-12,#bootstrap-theme .col-md-12,#bootstrap-theme .col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}#bootstrap-theme .col-xs-1,#bootstrap-theme .col-xs-2,#bootstrap-theme .col-xs-3,#bootstrap-theme .col-xs-4,#bootstrap-theme .col-xs-5,#bootstrap-theme .col-xs-6,#bootstrap-theme .col-xs-7,#bootstrap-theme .col-xs-8,#bootstrap-theme .col-xs-9,#bootstrap-theme .col-xs-10,#bootstrap-theme .col-xs-11,#bootstrap-theme .col-xs-12{float:left}#bootstrap-theme .col-xs-1{width:8.3333333333%}#bootstrap-theme .col-xs-2{width:16.6666666667%}#bootstrap-theme .col-xs-3{width:25%}#bootstrap-theme .col-xs-4{width:33.3333333333%}#bootstrap-theme .col-xs-5{width:41.6666666667%}#bootstrap-theme .col-xs-6{width:50%}#bootstrap-theme .col-xs-7{width:58.3333333333%}#bootstrap-theme .col-xs-8{width:66.6666666667%}#bootstrap-theme .col-xs-9{width:75%}#bootstrap-theme .col-xs-10{width:83.3333333333%}#bootstrap-theme .col-xs-11{width:91.6666666667%}#bootstrap-theme .col-xs-12{width:100%}#bootstrap-theme .col-xs-pull-0{right:auto}#bootstrap-theme .col-xs-pull-1{right:8.3333333333%}#bootstrap-theme .col-xs-pull-2{right:16.6666666667%}#bootstrap-theme .col-xs-pull-3{right:25%}#bootstrap-theme .col-xs-pull-4{right:33.3333333333%}#bootstrap-theme .col-xs-pull-5{right:41.6666666667%}#bootstrap-theme .col-xs-pull-6{right:50%}#bootstrap-theme .col-xs-pull-7{right:58.3333333333%}#bootstrap-theme .col-xs-pull-8{right:66.6666666667%}#bootstrap-theme .col-xs-pull-9{right:75%}#bootstrap-theme .col-xs-pull-10{right:83.3333333333%}#bootstrap-theme .col-xs-pull-11{right:91.6666666667%}#bootstrap-theme .col-xs-pull-12{right:100%}#bootstrap-theme .col-xs-push-0{left:auto}#bootstrap-theme .col-xs-push-1{left:8.3333333333%}#bootstrap-theme .col-xs-push-2{left:16.6666666667%}#bootstrap-theme .col-xs-push-3{left:25%}#bootstrap-theme .col-xs-push-4{left:33.3333333333%}#bootstrap-theme .col-xs-push-5{left:41.6666666667%}#bootstrap-theme .col-xs-push-6{left:50%}#bootstrap-theme .col-xs-push-7{left:58.3333333333%}#bootstrap-theme .col-xs-push-8{left:66.6666666667%}#bootstrap-theme .col-xs-push-9{left:75%}#bootstrap-theme .col-xs-push-10{left:83.3333333333%}#bootstrap-theme .col-xs-push-11{left:91.6666666667%}#bootstrap-theme .col-xs-push-12{left:100%}#bootstrap-theme .col-xs-offset-0{margin-left:0}#bootstrap-theme .col-xs-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-xs-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-xs-offset-3{margin-left:25%}#bootstrap-theme .col-xs-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-xs-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-xs-offset-6{margin-left:50%}#bootstrap-theme .col-xs-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-xs-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-xs-offset-9{margin-left:75%}#bootstrap-theme .col-xs-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-xs-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-xs-offset-12{margin-left:100%}@media (min-width:768px){#bootstrap-theme .col-sm-1,#bootstrap-theme .col-sm-2,#bootstrap-theme .col-sm-3,#bootstrap-theme .col-sm-4,#bootstrap-theme .col-sm-5,#bootstrap-theme .col-sm-6,#bootstrap-theme .col-sm-7,#bootstrap-theme .col-sm-8,#bootstrap-theme .col-sm-9,#bootstrap-theme .col-sm-10,#bootstrap-theme .col-sm-11,#bootstrap-theme .col-sm-12{float:left}#bootstrap-theme .col-sm-1{width:8.3333333333%}#bootstrap-theme .col-sm-2{width:16.6666666667%}#bootstrap-theme .col-sm-3{width:25%}#bootstrap-theme .col-sm-4{width:33.3333333333%}#bootstrap-theme .col-sm-5{width:41.6666666667%}#bootstrap-theme .col-sm-6{width:50%}#bootstrap-theme .col-sm-7{width:58.3333333333%}#bootstrap-theme .col-sm-8{width:66.6666666667%}#bootstrap-theme .col-sm-9{width:75%}#bootstrap-theme .col-sm-10{width:83.3333333333%}#bootstrap-theme .col-sm-11{width:91.6666666667%}#bootstrap-theme .col-sm-12{width:100%}#bootstrap-theme .col-sm-pull-0{right:auto}#bootstrap-theme .col-sm-pull-1{right:8.3333333333%}#bootstrap-theme .col-sm-pull-2{right:16.6666666667%}#bootstrap-theme .col-sm-pull-3{right:25%}#bootstrap-theme .col-sm-pull-4{right:33.3333333333%}#bootstrap-theme .col-sm-pull-5{right:41.6666666667%}#bootstrap-theme .col-sm-pull-6{right:50%}#bootstrap-theme .col-sm-pull-7{right:58.3333333333%}#bootstrap-theme .col-sm-pull-8{right:66.6666666667%}#bootstrap-theme .col-sm-pull-9{right:75%}#bootstrap-theme .col-sm-pull-10{right:83.3333333333%}#bootstrap-theme .col-sm-pull-11{right:91.6666666667%}#bootstrap-theme .col-sm-pull-12{right:100%}#bootstrap-theme .col-sm-push-0{left:auto}#bootstrap-theme .col-sm-push-1{left:8.3333333333%}#bootstrap-theme .col-sm-push-2{left:16.6666666667%}#bootstrap-theme .col-sm-push-3{left:25%}#bootstrap-theme .col-sm-push-4{left:33.3333333333%}#bootstrap-theme .col-sm-push-5{left:41.6666666667%}#bootstrap-theme .col-sm-push-6{left:50%}#bootstrap-theme .col-sm-push-7{left:58.3333333333%}#bootstrap-theme .col-sm-push-8{left:66.6666666667%}#bootstrap-theme .col-sm-push-9{left:75%}#bootstrap-theme .col-sm-push-10{left:83.3333333333%}#bootstrap-theme .col-sm-push-11{left:91.6666666667%}#bootstrap-theme .col-sm-push-12{left:100%}#bootstrap-theme .col-sm-offset-0{margin-left:0}#bootstrap-theme .col-sm-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-sm-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-sm-offset-3{margin-left:25%}#bootstrap-theme .col-sm-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-sm-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-sm-offset-6{margin-left:50%}#bootstrap-theme .col-sm-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-sm-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-sm-offset-9{margin-left:75%}#bootstrap-theme .col-sm-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-sm-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-sm-offset-12{margin-left:100%}}@media (min-width:992px){#bootstrap-theme .col-md-1,#bootstrap-theme .col-md-2,#bootstrap-theme .col-md-3,#bootstrap-theme .col-md-4,#bootstrap-theme .col-md-5,#bootstrap-theme .col-md-6,#bootstrap-theme .col-md-7,#bootstrap-theme .col-md-8,#bootstrap-theme .col-md-9,#bootstrap-theme .col-md-10,#bootstrap-theme .col-md-11,#bootstrap-theme .col-md-12{float:left}#bootstrap-theme .col-md-1{width:8.3333333333%}#bootstrap-theme .col-md-2{width:16.6666666667%}#bootstrap-theme .col-md-3{width:25%}#bootstrap-theme .col-md-4{width:33.3333333333%}#bootstrap-theme .col-md-5{width:41.6666666667%}#bootstrap-theme .col-md-6{width:50%}#bootstrap-theme .col-md-7{width:58.3333333333%}#bootstrap-theme .col-md-8{width:66.6666666667%}#bootstrap-theme .col-md-9{width:75%}#bootstrap-theme .col-md-10{width:83.3333333333%}#bootstrap-theme .col-md-11{width:91.6666666667%}#bootstrap-theme .col-md-12{width:100%}#bootstrap-theme .col-md-pull-0{right:auto}#bootstrap-theme .col-md-pull-1{right:8.3333333333%}#bootstrap-theme .col-md-pull-2{right:16.6666666667%}#bootstrap-theme .col-md-pull-3{right:25%}#bootstrap-theme .col-md-pull-4{right:33.3333333333%}#bootstrap-theme .col-md-pull-5{right:41.6666666667%}#bootstrap-theme .col-md-pull-6{right:50%}#bootstrap-theme .col-md-pull-7{right:58.3333333333%}#bootstrap-theme .col-md-pull-8{right:66.6666666667%}#bootstrap-theme .col-md-pull-9{right:75%}#bootstrap-theme .col-md-pull-10{right:83.3333333333%}#bootstrap-theme .col-md-pull-11{right:91.6666666667%}#bootstrap-theme .col-md-pull-12{right:100%}#bootstrap-theme .col-md-push-0{left:auto}#bootstrap-theme .col-md-push-1{left:8.3333333333%}#bootstrap-theme .col-md-push-2{left:16.6666666667%}#bootstrap-theme .col-md-push-3{left:25%}#bootstrap-theme .col-md-push-4{left:33.3333333333%}#bootstrap-theme .col-md-push-5{left:41.6666666667%}#bootstrap-theme .col-md-push-6{left:50%}#bootstrap-theme .col-md-push-7{left:58.3333333333%}#bootstrap-theme .col-md-push-8{left:66.6666666667%}#bootstrap-theme .col-md-push-9{left:75%}#bootstrap-theme .col-md-push-10{left:83.3333333333%}#bootstrap-theme .col-md-push-11{left:91.6666666667%}#bootstrap-theme .col-md-push-12{left:100%}#bootstrap-theme .col-md-offset-0{margin-left:0}#bootstrap-theme .col-md-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-md-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-md-offset-3{margin-left:25%}#bootstrap-theme .col-md-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-md-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-md-offset-6{margin-left:50%}#bootstrap-theme .col-md-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-md-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-md-offset-9{margin-left:75%}#bootstrap-theme .col-md-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-md-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-md-offset-12{margin-left:100%}}@media (min-width:1200px){#bootstrap-theme .col-lg-1,#bootstrap-theme .col-lg-2,#bootstrap-theme .col-lg-3,#bootstrap-theme .col-lg-4,#bootstrap-theme .col-lg-5,#bootstrap-theme .col-lg-6,#bootstrap-theme .col-lg-7,#bootstrap-theme .col-lg-8,#bootstrap-theme .col-lg-9,#bootstrap-theme .col-lg-10,#bootstrap-theme .col-lg-11,#bootstrap-theme .col-lg-12{float:left}#bootstrap-theme .col-lg-1{width:8.3333333333%}#bootstrap-theme .col-lg-2{width:16.6666666667%}#bootstrap-theme .col-lg-3{width:25%}#bootstrap-theme .col-lg-4{width:33.3333333333%}#bootstrap-theme .col-lg-5{width:41.6666666667%}#bootstrap-theme .col-lg-6{width:50%}#bootstrap-theme .col-lg-7{width:58.3333333333%}#bootstrap-theme .col-lg-8{width:66.6666666667%}#bootstrap-theme .col-lg-9{width:75%}#bootstrap-theme .col-lg-10{width:83.3333333333%}#bootstrap-theme .col-lg-11{width:91.6666666667%}#bootstrap-theme .col-lg-12{width:100%}#bootstrap-theme .col-lg-pull-0{right:auto}#bootstrap-theme .col-lg-pull-1{right:8.3333333333%}#bootstrap-theme .col-lg-pull-2{right:16.6666666667%}#bootstrap-theme .col-lg-pull-3{right:25%}#bootstrap-theme .col-lg-pull-4{right:33.3333333333%}#bootstrap-theme .col-lg-pull-5{right:41.6666666667%}#bootstrap-theme .col-lg-pull-6{right:50%}#bootstrap-theme .col-lg-pull-7{right:58.3333333333%}#bootstrap-theme .col-lg-pull-8{right:66.6666666667%}#bootstrap-theme .col-lg-pull-9{right:75%}#bootstrap-theme .col-lg-pull-10{right:83.3333333333%}#bootstrap-theme .col-lg-pull-11{right:91.6666666667%}#bootstrap-theme .col-lg-pull-12{right:100%}#bootstrap-theme .col-lg-push-0{left:auto}#bootstrap-theme .col-lg-push-1{left:8.3333333333%}#bootstrap-theme .col-lg-push-2{left:16.6666666667%}#bootstrap-theme .col-lg-push-3{left:25%}#bootstrap-theme .col-lg-push-4{left:33.3333333333%}#bootstrap-theme .col-lg-push-5{left:41.6666666667%}#bootstrap-theme .col-lg-push-6{left:50%}#bootstrap-theme .col-lg-push-7{left:58.3333333333%}#bootstrap-theme .col-lg-push-8{left:66.6666666667%}#bootstrap-theme .col-lg-push-9{left:75%}#bootstrap-theme .col-lg-push-10{left:83.3333333333%}#bootstrap-theme .col-lg-push-11{left:91.6666666667%}#bootstrap-theme .col-lg-push-12{left:100%}#bootstrap-theme .col-lg-offset-0{margin-left:0}#bootstrap-theme .col-lg-offset-1{margin-left:8.3333333333%}#bootstrap-theme .col-lg-offset-2{margin-left:16.6666666667%}#bootstrap-theme .col-lg-offset-3{margin-left:25%}#bootstrap-theme .col-lg-offset-4{margin-left:33.3333333333%}#bootstrap-theme .col-lg-offset-5{margin-left:41.6666666667%}#bootstrap-theme .col-lg-offset-6{margin-left:50%}#bootstrap-theme .col-lg-offset-7{margin-left:58.3333333333%}#bootstrap-theme .col-lg-offset-8{margin-left:66.6666666667%}#bootstrap-theme .col-lg-offset-9{margin-left:75%}#bootstrap-theme .col-lg-offset-10{margin-left:83.3333333333%}#bootstrap-theme .col-lg-offset-11{margin-left:91.6666666667%}#bootstrap-theme .col-lg-offset-12{margin-left:100%}}#bootstrap-theme table{background-color:transparent}#bootstrap-theme table col[class*=col-]{position:static;display:table-column;float:none}#bootstrap-theme table td[class*=col-],#bootstrap-theme table th[class*=col-]{position:static;display:table-cell;float:none}#bootstrap-theme caption{padding-top:8px;padding-bottom:8px;color:#999;text-align:left}#bootstrap-theme th{text-align:left}#bootstrap-theme .table{width:100%;max-width:100%;margin-bottom:20px}#bootstrap-theme .table>thead>tr>th,#bootstrap-theme .table>thead>tr>td,#bootstrap-theme .table>tbody>tr>th,#bootstrap-theme .table>tbody>tr>td,#bootstrap-theme .table>tfoot>tr>th,#bootstrap-theme .table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}#bootstrap-theme .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}#bootstrap-theme .table>caption+thead>tr:first-child>th,#bootstrap-theme .table>caption+thead>tr:first-child>td,#bootstrap-theme .table>colgroup+thead>tr:first-child>th,#bootstrap-theme .table>colgroup+thead>tr:first-child>td,#bootstrap-theme .table>thead:first-child>tr:first-child>th,#bootstrap-theme .table>thead:first-child>tr:first-child>td{border-top:0}#bootstrap-theme .table>tbody+tbody{border-top:2px solid #ddd}#bootstrap-theme .table .table{background-color:#fff}#bootstrap-theme .table-condensed>thead>tr>th,#bootstrap-theme .table-condensed>thead>tr>td,#bootstrap-theme .table-condensed>tbody>tr>th,#bootstrap-theme .table-condensed>tbody>tr>td,#bootstrap-theme .table-condensed>tfoot>tr>th,#bootstrap-theme .table-condensed>tfoot>tr>td{padding:5px}#bootstrap-theme .table-bordered{border:1px solid #ddd}#bootstrap-theme .table-bordered>thead>tr>th,#bootstrap-theme .table-bordered>thead>tr>td,#bootstrap-theme .table-bordered>tbody>tr>th,#bootstrap-theme .table-bordered>tbody>tr>td,#bootstrap-theme .table-bordered>tfoot>tr>th,#bootstrap-theme .table-bordered>tfoot>tr>td{border:1px solid #ddd}#bootstrap-theme .table-bordered>thead>tr>th,#bootstrap-theme .table-bordered>thead>tr>td{border-bottom-width:2px}#bootstrap-theme .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}#bootstrap-theme .table-hover>tbody>tr:hover{background-color:#f5f5f5}#bootstrap-theme .table>thead>tr>td.active,#bootstrap-theme .table>thead>tr>th.active,#bootstrap-theme .table>thead>tr.active>td,#bootstrap-theme .table>thead>tr.active>th,#bootstrap-theme .table>tbody>tr>td.active,#bootstrap-theme .table>tbody>tr>th.active,#bootstrap-theme .table>tbody>tr.active>td,#bootstrap-theme .table>tbody>tr.active>th,#bootstrap-theme .table>tfoot>tr>td.active,#bootstrap-theme .table>tfoot>tr>th.active,#bootstrap-theme .table>tfoot>tr.active>td,#bootstrap-theme .table>tfoot>tr.active>th{background-color:#f5f5f5}#bootstrap-theme .table-hover>tbody>tr>td.active:hover,#bootstrap-theme .table-hover>tbody>tr>th.active:hover,#bootstrap-theme .table-hover>tbody>tr.active:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.active,#bootstrap-theme .table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}#bootstrap-theme .table>thead>tr>td.success,#bootstrap-theme .table>thead>tr>th.success,#bootstrap-theme .table>thead>tr.success>td,#bootstrap-theme .table>thead>tr.success>th,#bootstrap-theme .table>tbody>tr>td.success,#bootstrap-theme .table>tbody>tr>th.success,#bootstrap-theme .table>tbody>tr.success>td,#bootstrap-theme .table>tbody>tr.success>th,#bootstrap-theme .table>tfoot>tr>td.success,#bootstrap-theme .table>tfoot>tr>th.success,#bootstrap-theme .table>tfoot>tr.success>td,#bootstrap-theme .table>tfoot>tr.success>th{background-color:#dff0d8}#bootstrap-theme .table-hover>tbody>tr>td.success:hover,#bootstrap-theme .table-hover>tbody>tr>th.success:hover,#bootstrap-theme .table-hover>tbody>tr.success:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.success,#bootstrap-theme .table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}#bootstrap-theme .table>thead>tr>td.info,#bootstrap-theme .table>thead>tr>th.info,#bootstrap-theme .table>thead>tr.info>td,#bootstrap-theme .table>thead>tr.info>th,#bootstrap-theme .table>tbody>tr>td.info,#bootstrap-theme .table>tbody>tr>th.info,#bootstrap-theme .table>tbody>tr.info>td,#bootstrap-theme .table>tbody>tr.info>th,#bootstrap-theme .table>tfoot>tr>td.info,#bootstrap-theme .table>tfoot>tr>th.info,#bootstrap-theme .table>tfoot>tr.info>td,#bootstrap-theme .table>tfoot>tr.info>th{background-color:#d9edf7}#bootstrap-theme .table-hover>tbody>tr>td.info:hover,#bootstrap-theme .table-hover>tbody>tr>th.info:hover,#bootstrap-theme .table-hover>tbody>tr.info:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.info,#bootstrap-theme .table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}#bootstrap-theme .table>thead>tr>td.warning,#bootstrap-theme .table>thead>tr>th.warning,#bootstrap-theme .table>thead>tr.warning>td,#bootstrap-theme .table>thead>tr.warning>th,#bootstrap-theme .table>tbody>tr>td.warning,#bootstrap-theme .table>tbody>tr>th.warning,#bootstrap-theme .table>tbody>tr.warning>td,#bootstrap-theme .table>tbody>tr.warning>th,#bootstrap-theme .table>tfoot>tr>td.warning,#bootstrap-theme .table>tfoot>tr>th.warning,#bootstrap-theme .table>tfoot>tr.warning>td,#bootstrap-theme .table>tfoot>tr.warning>th{background-color:#fcf8e3}#bootstrap-theme .table-hover>tbody>tr>td.warning:hover,#bootstrap-theme .table-hover>tbody>tr>th.warning:hover,#bootstrap-theme .table-hover>tbody>tr.warning:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.warning,#bootstrap-theme .table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}#bootstrap-theme .table>thead>tr>td.danger,#bootstrap-theme .table>thead>tr>th.danger,#bootstrap-theme .table>thead>tr.danger>td,#bootstrap-theme .table>thead>tr.danger>th,#bootstrap-theme .table>tbody>tr>td.danger,#bootstrap-theme .table>tbody>tr>th.danger,#bootstrap-theme .table>tbody>tr.danger>td,#bootstrap-theme .table>tbody>tr.danger>th,#bootstrap-theme .table>tfoot>tr>td.danger,#bootstrap-theme .table>tfoot>tr>th.danger,#bootstrap-theme .table>tfoot>tr.danger>td,#bootstrap-theme .table>tfoot>tr.danger>th{background-color:#f2dede}#bootstrap-theme .table-hover>tbody>tr>td.danger:hover,#bootstrap-theme .table-hover>tbody>tr>th.danger:hover,#bootstrap-theme .table-hover>tbody>tr.danger:hover>td,#bootstrap-theme .table-hover>tbody>tr:hover>.danger,#bootstrap-theme .table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}#bootstrap-theme .table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){#bootstrap-theme .table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}#bootstrap-theme .table-responsive>.table{margin-bottom:0}#bootstrap-theme .table-responsive>.table>thead>tr>th,#bootstrap-theme .table-responsive>.table>thead>tr>td,#bootstrap-theme .table-responsive>.table>tbody>tr>th,#bootstrap-theme .table-responsive>.table>tbody>tr>td,#bootstrap-theme .table-responsive>.table>tfoot>tr>th,#bootstrap-theme .table-responsive>.table>tfoot>tr>td{white-space:nowrap}#bootstrap-theme .table-responsive>.table-bordered{border:0}#bootstrap-theme .table-responsive>.table-bordered>thead>tr>th:first-child,#bootstrap-theme .table-responsive>.table-bordered>thead>tr>td:first-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>th:first-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>td:first-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>th:first-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}#bootstrap-theme .table-responsive>.table-bordered>thead>tr>th:last-child,#bootstrap-theme .table-responsive>.table-bordered>thead>tr>td:last-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>th:last-child,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr>td:last-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>th:last-child,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}#bootstrap-theme .table-responsive>.table-bordered>tbody>tr:last-child>th,#bootstrap-theme .table-responsive>.table-bordered>tbody>tr:last-child>td,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr:last-child>th,#bootstrap-theme .table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}#bootstrap-theme fieldset{min-width:0;padding:0;margin:0;border:0}#bootstrap-theme legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#555;border:0;border-bottom:1px solid #e5e5e5}#bootstrap-theme label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}#bootstrap-theme input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}#bootstrap-theme input[type=radio],#bootstrap-theme input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}#bootstrap-theme input[type=radio][disabled],#bootstrap-theme input[type=radio].disabled,fieldset[disabled] #bootstrap-theme input[type=radio],#bootstrap-theme input[type=checkbox][disabled],#bootstrap-theme input[type=checkbox].disabled,fieldset[disabled] #bootstrap-theme input[type=checkbox]{cursor:not-allowed}#bootstrap-theme input[type=file]{display:block}#bootstrap-theme input[type=range]{display:block;width:100%}#bootstrap-theme select[multiple],#bootstrap-theme select[size]{height:auto}#bootstrap-theme input[type=file]:focus,#bootstrap-theme input[type=radio]:focus,#bootstrap-theme input[type=checkbox]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#bootstrap-theme output{display:block;padding-top:5px;font-size:14px;line-height:1.428571429;color:#555}#bootstrap-theme .form-control{display:block;width:100%;height:30px;padding:4px 8px;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}#bootstrap-theme .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}#bootstrap-theme .form-control::-moz-placeholder{color:#999;opacity:1}#bootstrap-theme .form-control:-ms-input-placeholder{color:#999}#bootstrap-theme .form-control::-webkit-input-placeholder{color:#999}#bootstrap-theme .form-control::-ms-expand{background-color:transparent;border:0}#bootstrap-theme .form-control[disabled],#bootstrap-theme .form-control[readonly],fieldset[disabled] #bootstrap-theme .form-control{background-color:#eee;opacity:1}#bootstrap-theme .form-control[disabled],fieldset[disabled] #bootstrap-theme .form-control{cursor:not-allowed}#bootstrap-theme textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){#bootstrap-theme input[type=date].form-control,#bootstrap-theme input[type=time].form-control,#bootstrap-theme input[type=datetime-local].form-control,#bootstrap-theme input[type=month].form-control{line-height:30px}#bootstrap-theme input[type=date].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=date],#bootstrap-theme .input-group-sm>input.input-group-addon[type=date],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=date],.input-group-sm #bootstrap-theme input[type=date],#bootstrap-theme input[type=time].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=time],#bootstrap-theme .input-group-sm>input.input-group-addon[type=time],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=time],.input-group-sm #bootstrap-theme input[type=time],#bootstrap-theme input[type=datetime-local].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=datetime-local],#bootstrap-theme .input-group-sm>input.input-group-addon[type=datetime-local],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=datetime-local],.input-group-sm #bootstrap-theme input[type=datetime-local],#bootstrap-theme input[type=month].input-sm,#bootstrap-theme .input-group-sm>input.form-control[type=month],#bootstrap-theme .input-group-sm>input.input-group-addon[type=month],#bootstrap-theme .input-group-sm>.input-group-btn>input.btn[type=month],.input-group-sm #bootstrap-theme input[type=month]{line-height:30px}#bootstrap-theme input[type=date].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=date],#bootstrap-theme .input-group-lg>input.input-group-addon[type=date],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=date],.input-group-lg #bootstrap-theme input[type=date],#bootstrap-theme input[type=time].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=time],#bootstrap-theme .input-group-lg>input.input-group-addon[type=time],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=time],.input-group-lg #bootstrap-theme input[type=time],#bootstrap-theme input[type=datetime-local].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=datetime-local],#bootstrap-theme .input-group-lg>input.input-group-addon[type=datetime-local],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=datetime-local],.input-group-lg #bootstrap-theme input[type=datetime-local],#bootstrap-theme input[type=month].input-lg,#bootstrap-theme .input-group-lg>input.form-control[type=month],#bootstrap-theme .input-group-lg>input.input-group-addon[type=month],#bootstrap-theme .input-group-lg>.input-group-btn>input.btn[type=month],.input-group-lg #bootstrap-theme input[type=month]{line-height:54px}}#bootstrap-theme .form-group{margin-bottom:15px}#bootstrap-theme .radio,#bootstrap-theme .checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}#bootstrap-theme .radio.disabled label,fieldset[disabled] #bootstrap-theme .radio label,#bootstrap-theme .checkbox.disabled label,fieldset[disabled] #bootstrap-theme .checkbox label{cursor:not-allowed}#bootstrap-theme .radio label,#bootstrap-theme .checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}#bootstrap-theme .radio input[type=radio],#bootstrap-theme .radio-inline input[type=radio],#bootstrap-theme .checkbox input[type=checkbox],#bootstrap-theme .checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}#bootstrap-theme .radio+.radio,#bootstrap-theme .checkbox+.checkbox{margin-top:-5px}#bootstrap-theme .radio-inline,#bootstrap-theme .checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}#bootstrap-theme .radio-inline.disabled,fieldset[disabled] #bootstrap-theme .radio-inline,#bootstrap-theme .checkbox-inline.disabled,fieldset[disabled] #bootstrap-theme .checkbox-inline{cursor:not-allowed}#bootstrap-theme .radio-inline+.radio-inline,#bootstrap-theme .checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}#bootstrap-theme .form-control-static{min-height:34px;padding-top:5px;padding-bottom:5px;margin-bottom:0}#bootstrap-theme .form-control-static.input-lg,#bootstrap-theme .input-group-lg>.form-control-static.form-control,#bootstrap-theme .input-group-lg>.form-control-static.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>.form-control-static.btn,#bootstrap-theme .form-control-static.input-sm,#bootstrap-theme .input-group-sm>.form-control-static.form-control,#bootstrap-theme .input-group-sm>.form-control-static.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}#bootstrap-theme .input-sm,#bootstrap-theme .input-group-sm>.form-control,#bootstrap-theme .input-group-sm>.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme select.input-sm,#bootstrap-theme .input-group-sm>select.form-control,#bootstrap-theme .input-group-sm>select.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}#bootstrap-theme textarea.input-sm,#bootstrap-theme .input-group-sm>textarea.form-control,#bootstrap-theme .input-group-sm>textarea.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>textarea.btn,#bootstrap-theme select[multiple].input-sm,#bootstrap-theme .input-group-sm>select.form-control[multiple],#bootstrap-theme .input-group-sm>select.input-group-addon[multiple],#bootstrap-theme .input-group-sm>.input-group-btn>select.btn[multiple]{height:auto}#bootstrap-theme .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme .form-group-sm select.form-control{height:30px;line-height:30px}#bootstrap-theme .form-group-sm textarea.form-control,#bootstrap-theme .form-group-sm select[multiple].form-control{height:auto}#bootstrap-theme .form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}#bootstrap-theme .input-lg,#bootstrap-theme .input-group-lg>.form-control,#bootstrap-theme .input-group-lg>.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}#bootstrap-theme select.input-lg,#bootstrap-theme .input-group-lg>select.form-control,#bootstrap-theme .input-group-lg>select.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>select.btn{height:54px;line-height:54px}#bootstrap-theme textarea.input-lg,#bootstrap-theme .input-group-lg>textarea.form-control,#bootstrap-theme .input-group-lg>textarea.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>textarea.btn,#bootstrap-theme select[multiple].input-lg,#bootstrap-theme .input-group-lg>select.form-control[multiple],#bootstrap-theme .input-group-lg>select.input-group-addon[multiple],#bootstrap-theme .input-group-lg>.input-group-btn>select.btn[multiple]{height:auto}#bootstrap-theme .form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}#bootstrap-theme .form-group-lg select.form-control{height:54px;line-height:54px}#bootstrap-theme .form-group-lg textarea.form-control,#bootstrap-theme .form-group-lg select[multiple].form-control{height:auto}#bootstrap-theme .form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}#bootstrap-theme .has-feedback{position:relative}#bootstrap-theme .has-feedback .form-control{padding-right:37.5px}#bootstrap-theme .form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:30px;height:30px;line-height:30px;text-align:center;pointer-events:none}#bootstrap-theme .input-lg+.form-control-feedback,#bootstrap-theme .input-group-lg>.form-control+.form-control-feedback,#bootstrap-theme .input-group-lg>.input-group-addon+.form-control-feedback,#bootstrap-theme .input-group-lg>.input-group-btn>.btn+.form-control-feedback,#bootstrap-theme .input-group-lg+.form-control-feedback,#bootstrap-theme .form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}#bootstrap-theme .input-sm+.form-control-feedback,#bootstrap-theme .input-group-sm>.form-control+.form-control-feedback,#bootstrap-theme .input-group-sm>.input-group-addon+.form-control-feedback,#bootstrap-theme .input-group-sm>.input-group-btn>.btn+.form-control-feedback,#bootstrap-theme .input-group-sm+.form-control-feedback,#bootstrap-theme .form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}#bootstrap-theme .has-success .help-block,#bootstrap-theme .has-success .control-label,#bootstrap-theme .has-success .radio,#bootstrap-theme .has-success .checkbox,#bootstrap-theme .has-success .radio-inline,#bootstrap-theme .has-success .checkbox-inline,#bootstrap-theme .has-success.radio label,#bootstrap-theme .has-success.checkbox label,#bootstrap-theme .has-success.radio-inline label,#bootstrap-theme .has-success.checkbox-inline label{color:#468847}#bootstrap-theme .has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}#bootstrap-theme .has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}#bootstrap-theme .has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}#bootstrap-theme .has-success .form-control-feedback{color:#468847}#bootstrap-theme .has-warning .help-block,#bootstrap-theme .has-warning .control-label,#bootstrap-theme .has-warning .radio,#bootstrap-theme .has-warning .checkbox,#bootstrap-theme .has-warning .radio-inline,#bootstrap-theme .has-warning .checkbox-inline,#bootstrap-theme .has-warning.radio label,#bootstrap-theme .has-warning.checkbox label,#bootstrap-theme .has-warning.radio-inline label,#bootstrap-theme .has-warning.checkbox-inline label{color:#c09853}#bootstrap-theme .has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}#bootstrap-theme .has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}#bootstrap-theme .has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}#bootstrap-theme .has-warning .form-control-feedback{color:#c09853}#bootstrap-theme .has-error .help-block,#bootstrap-theme .has-error .control-label,#bootstrap-theme .has-error .radio,#bootstrap-theme .has-error .checkbox,#bootstrap-theme .has-error .radio-inline,#bootstrap-theme .has-error .checkbox-inline,#bootstrap-theme .has-error.radio label,#bootstrap-theme .has-error.checkbox label,#bootstrap-theme .has-error.radio-inline label,#bootstrap-theme .has-error.checkbox-inline label{color:#b94a48}#bootstrap-theme .has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}#bootstrap-theme .has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}#bootstrap-theme .has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}#bootstrap-theme .has-error .form-control-feedback{color:#b94a48}#bootstrap-theme .has-feedback label~.form-control-feedback{top:25px}#bootstrap-theme .has-feedback label.sr-only~.form-control-feedback{top:0}#bootstrap-theme .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#959595}@media (min-width:768px){#bootstrap-theme .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}#bootstrap-theme .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}#bootstrap-theme .form-inline .form-control-static{display:inline-block}#bootstrap-theme .form-inline .input-group{display:inline-table;vertical-align:middle}#bootstrap-theme .form-inline .input-group .input-group-addon,#bootstrap-theme .form-inline .input-group .input-group-btn,#bootstrap-theme .form-inline .input-group .form-control{width:auto}#bootstrap-theme .form-inline .input-group>.form-control{width:100%}#bootstrap-theme .form-inline .control-label{margin-bottom:0;vertical-align:middle}#bootstrap-theme .form-inline .radio,#bootstrap-theme .form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}#bootstrap-theme .form-inline .radio label,#bootstrap-theme .form-inline .checkbox label{padding-left:0}#bootstrap-theme .form-inline .radio input[type=radio],#bootstrap-theme .form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}#bootstrap-theme .form-inline .has-feedback .form-control-feedback{top:0}}#bootstrap-theme .form-horizontal .radio,#bootstrap-theme .form-horizontal .checkbox,#bootstrap-theme .form-horizontal .radio-inline,#bootstrap-theme .form-horizontal .checkbox-inline{padding-top:5px;margin-top:0;margin-bottom:0}#bootstrap-theme .form-horizontal .radio,#bootstrap-theme .form-horizontal .checkbox{min-height:25px}#bootstrap-theme .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}#bootstrap-theme .form-horizontal .form-group:before,#bootstrap-theme .form-horizontal .form-group:after{display:table;content:" "}#bootstrap-theme .form-horizontal .form-group:after{clear:both}@media (min-width:768px){#bootstrap-theme .form-horizontal .control-label{padding-top:5px;margin-bottom:0;text-align:right}}#bootstrap-theme .form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){#bootstrap-theme .form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){#bootstrap-theme .form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}#bootstrap-theme .btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:4px 8px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#bootstrap-theme .btn:focus,#bootstrap-theme .btn.focus,#bootstrap-theme .btn:active:focus,#bootstrap-theme .btn:active.focus,#bootstrap-theme .btn.active:focus,#bootstrap-theme .btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#bootstrap-theme .btn:hover,#bootstrap-theme .btn:focus,#bootstrap-theme .btn.focus{color:#fff;text-decoration:none}#bootstrap-theme .btn:active,#bootstrap-theme .btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}#bootstrap-theme .btn.disabled,#bootstrap-theme .btn[disabled],fieldset[disabled] #bootstrap-theme .btn{cursor:not-allowed;-webkit-filter:alpha(opacity=65);filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}#bootstrap-theme a.btn.disabled,fieldset[disabled] #bootstrap-theme a.btn{pointer-events:none}#bootstrap-theme .btn-default{color:#fff;background-color:#70716b;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:focus,#bootstrap-theme .btn-default.focus{color:#fff;background-color:#565752;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:hover{color:#fff;background-color:#565752;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:active,#bootstrap-theme .btn-default.active,.open>#bootstrap-theme .btn-default.dropdown-toggle{color:#fff;background-color:#565752;background-image:none;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default:active:hover,#bootstrap-theme .btn-default:active:focus,#bootstrap-theme .btn-default:active.focus,#bootstrap-theme .btn-default.active:hover,#bootstrap-theme .btn-default.active:focus,#bootstrap-theme .btn-default.active.focus,.open>#bootstrap-theme .btn-default.dropdown-toggle:hover,.open>#bootstrap-theme .btn-default.dropdown-toggle:focus,.open>#bootstrap-theme .btn-default.dropdown-toggle.focus{color:#fff;background-color:#444441;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default.disabled:hover,#bootstrap-theme .btn-default.disabled:focus,#bootstrap-theme .btn-default.disabled.focus,#bootstrap-theme .btn-default[disabled]:hover,#bootstrap-theme .btn-default[disabled]:focus,#bootstrap-theme .btn-default[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-default:hover,fieldset[disabled] #bootstrap-theme .btn-default:focus,fieldset[disabled] #bootstrap-theme .btn-default.focus{background-color:#70716b;border-color:rgba(0,0,0,.1)}#bootstrap-theme .btn-default .badge{color:#70716b;background-color:#fff}#bootstrap-theme .btn-primary{color:#fff;background-color:#70716b;border-color:#70716b}#bootstrap-theme .btn-primary:focus,#bootstrap-theme .btn-primary.focus{color:#fff;background-color:#565752;border-color:#2f302d}#bootstrap-theme .btn-primary:hover{color:#fff;background-color:#565752;border-color:#51524d}#bootstrap-theme .btn-primary:active,#bootstrap-theme .btn-primary.active,.open>#bootstrap-theme .btn-primary.dropdown-toggle{color:#fff;background-color:#565752;background-image:none;border-color:#51524d}#bootstrap-theme .btn-primary:active:hover,#bootstrap-theme .btn-primary:active:focus,#bootstrap-theme .btn-primary:active.focus,#bootstrap-theme .btn-primary.active:hover,#bootstrap-theme .btn-primary.active:focus,#bootstrap-theme .btn-primary.active.focus,.open>#bootstrap-theme .btn-primary.dropdown-toggle:hover,.open>#bootstrap-theme .btn-primary.dropdown-toggle:focus,.open>#bootstrap-theme .btn-primary.dropdown-toggle.focus{color:#fff;background-color:#444441;border-color:#2f302d}#bootstrap-theme .btn-primary.disabled:hover,#bootstrap-theme .btn-primary.disabled:focus,#bootstrap-theme .btn-primary.disabled.focus,#bootstrap-theme .btn-primary[disabled]:hover,#bootstrap-theme .btn-primary[disabled]:focus,#bootstrap-theme .btn-primary[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-primary:hover,fieldset[disabled] #bootstrap-theme .btn-primary:focus,fieldset[disabled] #bootstrap-theme .btn-primary.focus{background-color:#70716b;border-color:#70716b}#bootstrap-theme .btn-primary .badge{color:#70716b;background-color:#fff}#bootstrap-theme .btn-success{color:#fff;background-color:#73a839;border-color:#73a839}#bootstrap-theme .btn-success:focus,#bootstrap-theme .btn-success.focus{color:#fff;background-color:#59822c;border-color:#324919}#bootstrap-theme .btn-success:hover{color:#fff;background-color:#59822c;border-color:#547a29}#bootstrap-theme .btn-success:active,#bootstrap-theme .btn-success.active,.open>#bootstrap-theme .btn-success.dropdown-toggle{color:#fff;background-color:#59822c;background-image:none;border-color:#547a29}#bootstrap-theme .btn-success:active:hover,#bootstrap-theme .btn-success:active:focus,#bootstrap-theme .btn-success:active.focus,#bootstrap-theme .btn-success.active:hover,#bootstrap-theme .btn-success.active:focus,#bootstrap-theme .btn-success.active.focus,.open>#bootstrap-theme .btn-success.dropdown-toggle:hover,.open>#bootstrap-theme .btn-success.dropdown-toggle:focus,.open>#bootstrap-theme .btn-success.dropdown-toggle.focus{color:#fff;background-color:#476723;border-color:#324919}#bootstrap-theme .btn-success.disabled:hover,#bootstrap-theme .btn-success.disabled:focus,#bootstrap-theme .btn-success.disabled.focus,#bootstrap-theme .btn-success[disabled]:hover,#bootstrap-theme .btn-success[disabled]:focus,#bootstrap-theme .btn-success[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-success:hover,fieldset[disabled] #bootstrap-theme .btn-success:focus,fieldset[disabled] #bootstrap-theme .btn-success.focus{background-color:#73a839;border-color:#73a839}#bootstrap-theme .btn-success .badge{color:#73a839;background-color:#fff}#bootstrap-theme .btn-info{color:#fff;background-color:#cde8fe;border-color:#cde8fe}#bootstrap-theme .btn-info:focus,#bootstrap-theme .btn-info.focus{color:#fff;background-color:#9bd1fd;border-color:#50affc}#bootstrap-theme .btn-info:hover{color:#fff;background-color:#9bd1fd;border-color:#91ccfd}#bootstrap-theme .btn-info:active,#bootstrap-theme .btn-info.active,.open>#bootstrap-theme .btn-info.dropdown-toggle{color:#fff;background-color:#9bd1fd;background-image:none;border-color:#91ccfd}#bootstrap-theme .btn-info:active:hover,#bootstrap-theme .btn-info:active:focus,#bootstrap-theme .btn-info:active.focus,#bootstrap-theme .btn-info.active:hover,#bootstrap-theme .btn-info.active:focus,#bootstrap-theme .btn-info.active.focus,.open>#bootstrap-theme .btn-info.dropdown-toggle:hover,.open>#bootstrap-theme .btn-info.dropdown-toggle:focus,.open>#bootstrap-theme .btn-info.dropdown-toggle.focus{color:#fff;background-color:#78c1fc;border-color:#50affc}#bootstrap-theme .btn-info.disabled:hover,#bootstrap-theme .btn-info.disabled:focus,#bootstrap-theme .btn-info.disabled.focus,#bootstrap-theme .btn-info[disabled]:hover,#bootstrap-theme .btn-info[disabled]:focus,#bootstrap-theme .btn-info[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-info:hover,fieldset[disabled] #bootstrap-theme .btn-info:focus,fieldset[disabled] #bootstrap-theme .btn-info.focus{background-color:#cde8fe;border-color:#cde8fe}#bootstrap-theme .btn-info .badge{color:#cde8fe;background-color:#fff}#bootstrap-theme .btn-warning{color:#fff;background-color:#dd5600;border-color:#dd5600}#bootstrap-theme .btn-warning:focus,#bootstrap-theme .btn-warning.focus{color:#fff;background-color:#aa4200;border-color:#5e2400}#bootstrap-theme .btn-warning:hover{color:#fff;background-color:#aa4200;border-color:#a03e00}#bootstrap-theme .btn-warning:active,#bootstrap-theme .btn-warning.active,.open>#bootstrap-theme .btn-warning.dropdown-toggle{color:#fff;background-color:#aa4200;background-image:none;border-color:#a03e00}#bootstrap-theme .btn-warning:active:hover,#bootstrap-theme .btn-warning:active:focus,#bootstrap-theme .btn-warning:active.focus,#bootstrap-theme .btn-warning.active:hover,#bootstrap-theme .btn-warning.active:focus,#bootstrap-theme .btn-warning.active.focus,.open>#bootstrap-theme .btn-warning.dropdown-toggle:hover,.open>#bootstrap-theme .btn-warning.dropdown-toggle:focus,.open>#bootstrap-theme .btn-warning.dropdown-toggle.focus{color:#fff;background-color:#863400;border-color:#5e2400}#bootstrap-theme .btn-warning.disabled:hover,#bootstrap-theme .btn-warning.disabled:focus,#bootstrap-theme .btn-warning.disabled.focus,#bootstrap-theme .btn-warning[disabled]:hover,#bootstrap-theme .btn-warning[disabled]:focus,#bootstrap-theme .btn-warning[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-warning:hover,fieldset[disabled] #bootstrap-theme .btn-warning:focus,fieldset[disabled] #bootstrap-theme .btn-warning.focus{background-color:#dd5600;border-color:#dd5600}#bootstrap-theme .btn-warning .badge{color:#dd5600;background-color:#fff}#bootstrap-theme .btn-danger{color:#fff;background-color:#c71c22;border-color:#c71c22}#bootstrap-theme .btn-danger:focus,#bootstrap-theme .btn-danger.focus{color:#fff;background-color:#9a161a;border-color:#570c0f}#bootstrap-theme .btn-danger:hover{color:#fff;background-color:#9a161a;border-color:#911419}#bootstrap-theme .btn-danger:active,#bootstrap-theme .btn-danger.active,.open>#bootstrap-theme .btn-danger.dropdown-toggle{color:#fff;background-color:#9a161a;background-image:none;border-color:#911419}#bootstrap-theme .btn-danger:active:hover,#bootstrap-theme .btn-danger:active:focus,#bootstrap-theme .btn-danger:active.focus,#bootstrap-theme .btn-danger.active:hover,#bootstrap-theme .btn-danger.active:focus,#bootstrap-theme .btn-danger.active.focus,.open>#bootstrap-theme .btn-danger.dropdown-toggle:hover,.open>#bootstrap-theme .btn-danger.dropdown-toggle:focus,.open>#bootstrap-theme .btn-danger.dropdown-toggle.focus{color:#fff;background-color:#7b1115;border-color:#570c0f}#bootstrap-theme .btn-danger.disabled:hover,#bootstrap-theme .btn-danger.disabled:focus,#bootstrap-theme .btn-danger.disabled.focus,#bootstrap-theme .btn-danger[disabled]:hover,#bootstrap-theme .btn-danger[disabled]:focus,#bootstrap-theme .btn-danger[disabled].focus,fieldset[disabled] #bootstrap-theme .btn-danger:hover,fieldset[disabled] #bootstrap-theme .btn-danger:focus,fieldset[disabled] #bootstrap-theme .btn-danger.focus{background-color:#c71c22;border-color:#c71c22}#bootstrap-theme .btn-danger .badge{color:#c71c22;background-color:#fff}#bootstrap-theme .btn-link{font-weight:400;color:#2786c2;border-radius:0}#bootstrap-theme .btn-link,#bootstrap-theme .btn-link:active,#bootstrap-theme .btn-link.active,#bootstrap-theme .btn-link[disabled],fieldset[disabled] #bootstrap-theme .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}#bootstrap-theme .btn-link,#bootstrap-theme .btn-link:hover,#bootstrap-theme .btn-link:focus,#bootstrap-theme .btn-link:active{border-color:transparent}#bootstrap-theme .btn-link:hover,#bootstrap-theme .btn-link:focus{color:#1a5a82;text-decoration:underline;background-color:transparent}#bootstrap-theme .btn-link[disabled]:hover,#bootstrap-theme .btn-link[disabled]:focus,fieldset[disabled] #bootstrap-theme .btn-link:hover,fieldset[disabled] #bootstrap-theme .btn-link:focus{color:#999;text-decoration:none}#bootstrap-theme .btn-lg,#bootstrap-theme .btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}#bootstrap-theme .btn-sm,#bootstrap-theme .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme .btn-xs,#bootstrap-theme .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}#bootstrap-theme .btn-block{display:block;width:100%}#bootstrap-theme .btn-block+.btn-block{margin-top:5px}#bootstrap-theme input[type=submit].btn-block,#bootstrap-theme input[type=reset].btn-block,#bootstrap-theme input[type=button].btn-block{width:100%}#bootstrap-theme .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}#bootstrap-theme .fade.in{opacity:1}#bootstrap-theme .collapse{display:none}#bootstrap-theme .collapse.in{display:block}#bootstrap-theme tr.collapse.in{display:table-row}#bootstrap-theme tbody.collapse.in{display:table-row-group}#bootstrap-theme .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}#bootstrap-theme .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}#bootstrap-theme .dropup,#bootstrap-theme .dropdown{position:relative}#bootstrap-theme .dropdown-toggle:focus{outline:0}#bootstrap-theme .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}#bootstrap-theme .dropdown-menu.pull-right{right:0;left:auto}#bootstrap-theme .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}#bootstrap-theme .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}#bootstrap-theme .dropdown-menu>li>a:hover,#bootstrap-theme .dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#000}#bootstrap-theme .dropdown-menu>.active>a,#bootstrap-theme .dropdown-menu>.active>a:hover,#bootstrap-theme .dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#000;outline:0}#bootstrap-theme .dropdown-menu>.disabled>a,#bootstrap-theme .dropdown-menu>.disabled>a:hover,#bootstrap-theme .dropdown-menu>.disabled>a:focus{color:#999}#bootstrap-theme .dropdown-menu>.disabled>a:hover,#bootstrap-theme .dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;-webkit-filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}#bootstrap-theme .open>.dropdown-menu{display:block}#bootstrap-theme .open>a{outline:0}#bootstrap-theme .dropdown-menu-right{right:0;left:auto}#bootstrap-theme .dropdown-menu-left{right:auto;left:0}#bootstrap-theme .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999;white-space:nowrap}#bootstrap-theme .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}#bootstrap-theme .pull-right>.dropdown-menu{right:0;left:auto}#bootstrap-theme .dropup .caret,#bootstrap-theme .navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9}#bootstrap-theme .dropup .dropdown-menu,#bootstrap-theme .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){#bootstrap-theme .navbar-right .dropdown-menu{right:0;left:auto}#bootstrap-theme .navbar-right .dropdown-menu-left{left:0;right:auto}}#bootstrap-theme .btn-group,#bootstrap-theme .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}#bootstrap-theme .btn-group>.btn,#bootstrap-theme .btn-group-vertical>.btn{position:relative;float:left}#bootstrap-theme .btn-group>.btn:hover,#bootstrap-theme .btn-group>.btn:focus,#bootstrap-theme .btn-group>.btn:active,#bootstrap-theme .btn-group>.btn.active,#bootstrap-theme .btn-group-vertical>.btn:hover,#bootstrap-theme .btn-group-vertical>.btn:focus,#bootstrap-theme .btn-group-vertical>.btn:active,#bootstrap-theme .btn-group-vertical>.btn.active{z-index:2}#bootstrap-theme .btn-group .btn+.btn,#bootstrap-theme .btn-group .btn+.btn-group,#bootstrap-theme .btn-group .btn-group+.btn,#bootstrap-theme .btn-group .btn-group+.btn-group{margin-left:-1px}#bootstrap-theme .btn-toolbar{margin-left:-5px}#bootstrap-theme .btn-toolbar:before,#bootstrap-theme .btn-toolbar:after{display:table;content:" "}#bootstrap-theme .btn-toolbar:after{clear:both}#bootstrap-theme .btn-toolbar .btn,#bootstrap-theme .btn-toolbar .btn-group,#bootstrap-theme .btn-toolbar .input-group{float:left}#bootstrap-theme .btn-toolbar>.btn,#bootstrap-theme .btn-toolbar>.btn-group,#bootstrap-theme .btn-toolbar>.input-group{margin-left:5px}#bootstrap-theme .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}#bootstrap-theme .btn-group>.btn:first-child{margin-left:0}#bootstrap-theme .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}#bootstrap-theme .btn-group>.btn:last-child:not(:first-child),#bootstrap-theme .btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group>.btn-group{float:left}#bootstrap-theme .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}#bootstrap-theme .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,#bootstrap-theme .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}#bootstrap-theme .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group .dropdown-toggle:active,#bootstrap-theme .btn-group.open .dropdown-toggle{outline:0}#bootstrap-theme .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}#bootstrap-theme .btn-group>.btn-lg+.dropdown-toggle,#bootstrap-theme .btn-group-lg.btn-group>.btn+.dropdown-toggle,#bootstrap-theme .btn-group-lg>.btn-group>.btn+.dropdown-toggle{padding-right:12px;padding-left:12px}#bootstrap-theme .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}#bootstrap-theme .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}#bootstrap-theme .btn .caret{margin-left:0}#bootstrap-theme .btn-lg .caret,#bootstrap-theme .btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}#bootstrap-theme .dropup .btn-lg .caret,#bootstrap-theme .dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}#bootstrap-theme .btn-group-vertical>.btn,#bootstrap-theme .btn-group-vertical>.btn-group,#bootstrap-theme .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}#bootstrap-theme .btn-group-vertical>.btn-group:before,#bootstrap-theme .btn-group-vertical>.btn-group:after{display:table;content:" "}#bootstrap-theme .btn-group-vertical>.btn-group:after{clear:both}#bootstrap-theme .btn-group-vertical>.btn-group>.btn{float:none}#bootstrap-theme .btn-group-vertical>.btn+.btn,#bootstrap-theme .btn-group-vertical>.btn+.btn-group,#bootstrap-theme .btn-group-vertical>.btn-group+.btn,#bootstrap-theme .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}#bootstrap-theme .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}#bootstrap-theme .btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}#bootstrap-theme .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}#bootstrap-theme .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,#bootstrap-theme .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}#bootstrap-theme .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}#bootstrap-theme .btn-group-justified>.btn,#bootstrap-theme .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}#bootstrap-theme .btn-group-justified>.btn-group .btn{width:100%}#bootstrap-theme .btn-group-justified>.btn-group .dropdown-menu{left:auto}#bootstrap-theme [data-toggle=buttons]>.btn input[type=radio],#bootstrap-theme [data-toggle=buttons]>.btn input[type=checkbox],#bootstrap-theme [data-toggle=buttons]>.btn-group>.btn input[type=radio],#bootstrap-theme [data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}#bootstrap-theme .input-group{position:relative;display:table;border-collapse:separate}#bootstrap-theme .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}#bootstrap-theme .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}#bootstrap-theme .input-group .form-control:focus{z-index:3}#bootstrap-theme .input-group-addon,#bootstrap-theme .input-group-btn,#bootstrap-theme .input-group .form-control{display:table-cell}#bootstrap-theme .input-group-addon:not(:first-child):not(:last-child),#bootstrap-theme .input-group-btn:not(:first-child):not(:last-child),#bootstrap-theme .input-group .form-control:not(:first-child):not(:last-child){border-radius:0}#bootstrap-theme .input-group-addon,#bootstrap-theme .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}#bootstrap-theme .input-group-addon{padding:4px 8px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}#bootstrap-theme .input-group-addon.input-sm,#bootstrap-theme .input-group-sm>.input-group-addon.form-control,#bootstrap-theme .input-group-sm>.input-group-addon,#bootstrap-theme .input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}#bootstrap-theme .input-group-addon.input-lg,#bootstrap-theme .input-group-lg>.input-group-addon.form-control,#bootstrap-theme .input-group-lg>.input-group-addon,#bootstrap-theme .input-group-lg>.input-group-btn>.input-group-addon.btn{padding:14px 16px;font-size:18px;border-radius:6px}#bootstrap-theme .input-group-addon input[type=radio],#bootstrap-theme .input-group-addon input[type=checkbox]{margin-top:0}#bootstrap-theme .input-group .form-control:first-child,#bootstrap-theme .input-group-addon:first-child,#bootstrap-theme .input-group-btn:first-child>.btn,#bootstrap-theme .input-group-btn:first-child>.btn-group>.btn,#bootstrap-theme .input-group-btn:first-child>.dropdown-toggle,#bootstrap-theme .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),#bootstrap-theme .input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}#bootstrap-theme .input-group-addon:first-child{border-right:0}#bootstrap-theme .input-group .form-control:last-child,#bootstrap-theme .input-group-addon:last-child,#bootstrap-theme .input-group-btn:last-child>.btn,#bootstrap-theme .input-group-btn:last-child>.btn-group>.btn,#bootstrap-theme .input-group-btn:last-child>.dropdown-toggle,#bootstrap-theme .input-group-btn:first-child>.btn:not(:first-child),#bootstrap-theme .input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}#bootstrap-theme .input-group-addon:last-child{border-left:0}#bootstrap-theme .input-group-btn{position:relative;font-size:0;white-space:nowrap}#bootstrap-theme .input-group-btn>.btn{position:relative}#bootstrap-theme .input-group-btn>.btn+.btn{margin-left:-1px}#bootstrap-theme .input-group-btn>.btn:hover,#bootstrap-theme .input-group-btn>.btn:focus,#bootstrap-theme .input-group-btn>.btn:active{z-index:2}#bootstrap-theme .input-group-btn:first-child>.btn,#bootstrap-theme .input-group-btn:first-child>.btn-group{margin-right:-1px}#bootstrap-theme .input-group-btn:last-child>.btn,#bootstrap-theme .input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}#bootstrap-theme .nav{padding-left:0;margin-bottom:0;list-style:none}#bootstrap-theme .nav:before,#bootstrap-theme .nav:after{display:table;content:" "}#bootstrap-theme .nav:after{clear:both}#bootstrap-theme .nav>li{position:relative;display:block}#bootstrap-theme .nav>li>a{position:relative;display:block;padding:10px 15px}#bootstrap-theme .nav>li>a:hover,#bootstrap-theme .nav>li>a:focus{text-decoration:none;background-color:#eee}#bootstrap-theme .nav>li.disabled>a{color:#999}#bootstrap-theme .nav>li.disabled>a:hover,#bootstrap-theme .nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}#bootstrap-theme .nav .open>a,#bootstrap-theme .nav .open>a:hover,#bootstrap-theme .nav .open>a:focus{background-color:#eee;border-color:#2786c2}#bootstrap-theme .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}#bootstrap-theme .nav>li>a>img{max-width:none}#bootstrap-theme .nav-tabs{border-bottom:1px solid #ddd}#bootstrap-theme .nav-tabs>li{float:left;margin-bottom:-1px}#bootstrap-theme .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}#bootstrap-theme .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}#bootstrap-theme .nav-tabs>li.active>a,#bootstrap-theme .nav-tabs>li.active>a:hover,#bootstrap-theme .nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}#bootstrap-theme .nav-pills>li{float:left}#bootstrap-theme .nav-pills>li>a{border-radius:4px}#bootstrap-theme .nav-pills>li+li{margin-left:2px}#bootstrap-theme .nav-pills>li.active>a,#bootstrap-theme .nav-pills>li.active>a:hover,#bootstrap-theme .nav-pills>li.active>a:focus{color:#fff;background-color:#000}#bootstrap-theme .nav-stacked>li{float:none}#bootstrap-theme .nav-stacked>li+li{margin-top:2px;margin-left:0}#bootstrap-theme .nav-justified,#bootstrap-theme .nav-tabs.nav-justified{width:100%}#bootstrap-theme .nav-justified>li,#bootstrap-theme .nav-tabs.nav-justified>li{float:none}#bootstrap-theme .nav-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}#bootstrap-theme .nav-justified>.dropdown .dropdown-menu,#bootstrap-theme .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){#bootstrap-theme .nav-justified>li,#bootstrap-theme .nav-tabs.nav-justified>li{display:table-cell;width:1%}#bootstrap-theme .nav-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{margin-bottom:0}}#bootstrap-theme .nav-tabs-justified,#bootstrap-theme .nav-tabs.nav-justified{border-bottom:0}#bootstrap-theme .nav-tabs-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}#bootstrap-theme .nav-tabs-justified>.active>a,#bootstrap-theme .nav-tabs.nav-justified>.active>a,#bootstrap-theme .nav-tabs-justified>.active>a:hover,#bootstrap-theme .nav-tabs.nav-justified>.active>a:hover,#bootstrap-theme .nav-tabs-justified>.active>a:focus,#bootstrap-theme .nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){#bootstrap-theme .nav-tabs-justified>li>a,#bootstrap-theme .nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}#bootstrap-theme .nav-tabs-justified>.active>a,#bootstrap-theme .nav-tabs.nav-justified>.active>a,#bootstrap-theme .nav-tabs-justified>.active>a:hover,#bootstrap-theme .nav-tabs.nav-justified>.active>a:hover,#bootstrap-theme .nav-tabs-justified>.active>a:focus,#bootstrap-theme .nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}#bootstrap-theme .tab-content>.tab-pane{display:none}#bootstrap-theme .tab-content>.active{display:block}#bootstrap-theme .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}#bootstrap-theme .navbar:before,#bootstrap-theme .navbar:after{display:table;content:" "}#bootstrap-theme .navbar:after{clear:both}@media (min-width:768px){#bootstrap-theme .navbar{border-radius:4px}}#bootstrap-theme .navbar-header:before,#bootstrap-theme .navbar-header:after{display:table;content:" "}#bootstrap-theme .navbar-header:after{clear:both}@media (min-width:768px){#bootstrap-theme .navbar-header{float:left}}#bootstrap-theme .navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}#bootstrap-theme .navbar-collapse:before,#bootstrap-theme .navbar-collapse:after{display:table;content:" "}#bootstrap-theme .navbar-collapse:after{clear:both}#bootstrap-theme .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){#bootstrap-theme .navbar-collapse{width:auto;border-top:0;box-shadow:none}#bootstrap-theme .navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}#bootstrap-theme .navbar-collapse.in{overflow-y:visible}.navbar-fixed-top #bootstrap-theme .navbar-collapse,.navbar-static-top #bootstrap-theme .navbar-collapse,.navbar-fixed-bottom #bootstrap-theme .navbar-collapse{padding-right:0;padding-left:0}}#bootstrap-theme .navbar-fixed-top,#bootstrap-theme .navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}#bootstrap-theme .navbar-fixed-top .navbar-collapse,#bootstrap-theme .navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){#bootstrap-theme .navbar-fixed-top .navbar-collapse,#bootstrap-theme .navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width:768px){#bootstrap-theme .navbar-fixed-top,#bootstrap-theme .navbar-fixed-bottom{border-radius:0}}#bootstrap-theme .navbar-fixed-top{top:0;border-width:0 0 1px}#bootstrap-theme .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}#bootstrap-theme .container>.navbar-header,#bootstrap-theme .container>.navbar-collapse,#bootstrap-theme .container-fluid>.navbar-header,#bootstrap-theme .container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){#bootstrap-theme .container>.navbar-header,#bootstrap-theme .container>.navbar-collapse,#bootstrap-theme .container-fluid>.navbar-header,#bootstrap-theme .container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}#bootstrap-theme .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){#bootstrap-theme .navbar-static-top{border-radius:0}}#bootstrap-theme .navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}#bootstrap-theme .navbar-brand:hover,#bootstrap-theme .navbar-brand:focus{text-decoration:none}#bootstrap-theme .navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container #bootstrap-theme .navbar-brand,.navbar>.container-fluid #bootstrap-theme .navbar-brand{margin-left:-15px}}#bootstrap-theme .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}#bootstrap-theme .navbar-toggle:focus{outline:0}#bootstrap-theme .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}#bootstrap-theme .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){#bootstrap-theme .navbar-toggle{display:none}}#bootstrap-theme .navbar-nav{margin:7.5px -15px}#bootstrap-theme .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){#bootstrap-theme .navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a,#bootstrap-theme .navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a{line-height:20px}#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a:hover,#bootstrap-theme .navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){#bootstrap-theme .navbar-nav{float:left;margin:0}#bootstrap-theme .navbar-nav>li{float:left}#bootstrap-theme .navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}#bootstrap-theme .navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:10px;margin-bottom:10px}@media (min-width:768px){#bootstrap-theme .navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}#bootstrap-theme .navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}#bootstrap-theme .navbar-form .form-control-static{display:inline-block}#bootstrap-theme .navbar-form .input-group{display:inline-table;vertical-align:middle}#bootstrap-theme .navbar-form .input-group .input-group-addon,#bootstrap-theme .navbar-form .input-group .input-group-btn,#bootstrap-theme .navbar-form .input-group .form-control{width:auto}#bootstrap-theme .navbar-form .input-group>.form-control{width:100%}#bootstrap-theme .navbar-form .control-label{margin-bottom:0;vertical-align:middle}#bootstrap-theme .navbar-form .radio,#bootstrap-theme .navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}#bootstrap-theme .navbar-form .radio label,#bootstrap-theme .navbar-form .checkbox label{padding-left:0}#bootstrap-theme .navbar-form .radio input[type=radio],#bootstrap-theme .navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}#bootstrap-theme .navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){#bootstrap-theme .navbar-form .form-group{margin-bottom:5px}#bootstrap-theme .navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){#bootstrap-theme .navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}#bootstrap-theme .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}#bootstrap-theme .navbar-btn{margin-top:10px;margin-bottom:10px}#bootstrap-theme .navbar-btn.btn-sm,#bootstrap-theme .btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}#bootstrap-theme .navbar-btn.btn-xs,#bootstrap-theme .btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}#bootstrap-theme .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){#bootstrap-theme .navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){#bootstrap-theme .navbar-left{float:left !important}#bootstrap-theme .navbar-right{float:right !important;margin-right:-15px}#bootstrap-theme .navbar-right~.navbar-right{margin-right:0}}#bootstrap-theme .navbar-default{background-color:#000;border-color:#000}#bootstrap-theme .navbar-default .navbar-brand{color:#fff}#bootstrap-theme .navbar-default .navbar-brand:hover,#bootstrap-theme .navbar-default .navbar-brand:focus{color:#fff;background-color:none}#bootstrap-theme .navbar-default .navbar-text{color:#ddd}#bootstrap-theme .navbar-default .navbar-nav>li>a{color:#fff}#bootstrap-theme .navbar-default .navbar-nav>li>a:hover,#bootstrap-theme .navbar-default .navbar-nav>li>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav>.active>a,#bootstrap-theme .navbar-default .navbar-nav>.active>a:hover,#bootstrap-theme .navbar-default .navbar-nav>.active>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav>.disabled>a,#bootstrap-theme .navbar-default .navbar-nav>.disabled>a:hover,#bootstrap-theme .navbar-default .navbar-nav>.disabled>a:focus{color:#ddd;background-color:transparent}#bootstrap-theme .navbar-default .navbar-nav>.open>a,#bootstrap-theme .navbar-default .navbar-nav>.open>a:hover,#bootstrap-theme .navbar-default .navbar-nav>.open>a:focus{color:#fff;background-color:#000}@media (max-width:767px){#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#fff}#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.active>a,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#000}#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,#bootstrap-theme .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ddd;background-color:transparent}}#bootstrap-theme .navbar-default .navbar-toggle{border-color:#000}#bootstrap-theme .navbar-default .navbar-toggle:hover,#bootstrap-theme .navbar-default .navbar-toggle:focus{background-color:#000}#bootstrap-theme .navbar-default .navbar-toggle .icon-bar{background-color:#fff}#bootstrap-theme .navbar-default .navbar-collapse,#bootstrap-theme .navbar-default .navbar-form{border-color:#000}#bootstrap-theme .navbar-default .navbar-link{color:#fff}#bootstrap-theme .navbar-default .navbar-link:hover{color:#fff}#bootstrap-theme .navbar-default .btn-link{color:#fff}#bootstrap-theme .navbar-default .btn-link:hover,#bootstrap-theme .navbar-default .btn-link:focus{color:#fff}#bootstrap-theme .navbar-default .btn-link[disabled]:hover,#bootstrap-theme .navbar-default .btn-link[disabled]:focus,fieldset[disabled] #bootstrap-theme .navbar-default .btn-link:hover,fieldset[disabled] #bootstrap-theme .navbar-default .btn-link:focus{color:#ddd}#bootstrap-theme .navbar-inverse{background-color:#cde8fe;border-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-brand{color:#fff}#bootstrap-theme .navbar-inverse .navbar-brand:hover,#bootstrap-theme .navbar-inverse .navbar-brand:focus{color:#fff;background-color:none}#bootstrap-theme .navbar-inverse .navbar-text{color:#fff}#bootstrap-theme .navbar-inverse .navbar-nav>li>a{color:#fff}#bootstrap-theme .navbar-inverse .navbar-nav>li>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav>.active>a,#bootstrap-theme .navbar-inverse .navbar-nav>.active>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav>.disabled>a,#bootstrap-theme .navbar-inverse .navbar-nav>.disabled>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}#bootstrap-theme .navbar-inverse .navbar-nav>.open>a,#bootstrap-theme .navbar-inverse .navbar-nav>.open>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#b4ddfe}@media (max-width:767px){#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,#bootstrap-theme .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}#bootstrap-theme .navbar-inverse .navbar-toggle{border-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-toggle:hover,#bootstrap-theme .navbar-inverse .navbar-toggle:focus{background-color:#b4ddfe}#bootstrap-theme .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}#bootstrap-theme .navbar-inverse .navbar-collapse,#bootstrap-theme .navbar-inverse .navbar-form{border-color:#aad8fd}#bootstrap-theme .navbar-inverse .navbar-link{color:#fff}#bootstrap-theme .navbar-inverse .navbar-link:hover{color:#fff}#bootstrap-theme .navbar-inverse .btn-link{color:#fff}#bootstrap-theme .navbar-inverse .btn-link:hover,#bootstrap-theme .navbar-inverse .btn-link:focus{color:#fff}#bootstrap-theme .navbar-inverse .btn-link[disabled]:hover,#bootstrap-theme .navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] #bootstrap-theme .navbar-inverse .btn-link:hover,fieldset[disabled] #bootstrap-theme .navbar-inverse .btn-link:focus{color:#ccc}#bootstrap-theme .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}#bootstrap-theme .breadcrumb>li{display:inline-block}#bootstrap-theme .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/ "}#bootstrap-theme .breadcrumb>.active{color:#999}#bootstrap-theme .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}#bootstrap-theme .pagination>li{display:inline}#bootstrap-theme .pagination>li>a,#bootstrap-theme .pagination>li>span{position:relative;float:left;padding:4px 8px;margin-left:-1px;line-height:1.428571429;color:#2786c2;text-decoration:none;background-color:#fff;border:1px solid #ddd}#bootstrap-theme .pagination>li>a:hover,#bootstrap-theme .pagination>li>a:focus,#bootstrap-theme .pagination>li>span:hover,#bootstrap-theme .pagination>li>span:focus{z-index:2;color:#1a5a82;background-color:#eee;border-color:#ddd}#bootstrap-theme .pagination>li:first-child>a,#bootstrap-theme .pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}#bootstrap-theme .pagination>li:last-child>a,#bootstrap-theme .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}#bootstrap-theme .pagination>.active>a,#bootstrap-theme .pagination>.active>a:hover,#bootstrap-theme .pagination>.active>a:focus,#bootstrap-theme .pagination>.active>span,#bootstrap-theme .pagination>.active>span:hover,#bootstrap-theme .pagination>.active>span:focus{z-index:3;color:#999;cursor:default;background-color:#f5f5f5;border-color:#ddd}#bootstrap-theme .pagination>.disabled>span,#bootstrap-theme .pagination>.disabled>span:hover,#bootstrap-theme .pagination>.disabled>span:focus,#bootstrap-theme .pagination>.disabled>a,#bootstrap-theme .pagination>.disabled>a:hover,#bootstrap-theme .pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}#bootstrap-theme .pagination-lg>li>a,#bootstrap-theme .pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}#bootstrap-theme .pagination-lg>li:first-child>a,#bootstrap-theme .pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}#bootstrap-theme .pagination-lg>li:last-child>a,#bootstrap-theme .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}#bootstrap-theme .pagination-sm>li>a,#bootstrap-theme .pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}#bootstrap-theme .pagination-sm>li:first-child>a,#bootstrap-theme .pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .pagination-sm>li:last-child>a,#bootstrap-theme .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}#bootstrap-theme .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}#bootstrap-theme .pager:before,#bootstrap-theme .pager:after{display:table;content:" "}#bootstrap-theme .pager:after{clear:both}#bootstrap-theme .pager li{display:inline}#bootstrap-theme .pager li>a,#bootstrap-theme .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}#bootstrap-theme .pager li>a:hover,#bootstrap-theme .pager li>a:focus{text-decoration:none;background-color:#eee}#bootstrap-theme .pager .next>a,#bootstrap-theme .pager .next>span{float:right}#bootstrap-theme .pager .previous>a,#bootstrap-theme .pager .previous>span{float:left}#bootstrap-theme .pager .disabled>a,#bootstrap-theme .pager .disabled>a:hover,#bootstrap-theme .pager .disabled>a:focus,#bootstrap-theme .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}#bootstrap-theme .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}#bootstrap-theme .label:empty{display:none}.btn #bootstrap-theme .label{position:relative;top:-1px}#bootstrap-theme a.label:hover,#bootstrap-theme a.label:focus{color:#fff;text-decoration:none;cursor:pointer}#bootstrap-theme .label-default{background-color:#999}#bootstrap-theme .label-default[href]:hover,#bootstrap-theme .label-default[href]:focus{background-color:gray}#bootstrap-theme .label-primary{background-color:#000}#bootstrap-theme .label-primary[href]:hover,#bootstrap-theme .label-primary[href]:focus{background-color:#000}#bootstrap-theme .label-success{background-color:#73a839}#bootstrap-theme .label-success[href]:hover,#bootstrap-theme .label-success[href]:focus{background-color:#59822c}#bootstrap-theme .label-info{background-color:#cde8fe}#bootstrap-theme .label-info[href]:hover,#bootstrap-theme .label-info[href]:focus{background-color:#9bd1fd}#bootstrap-theme .label-warning{background-color:#dd5600}#bootstrap-theme .label-warning[href]:hover,#bootstrap-theme .label-warning[href]:focus{background-color:#aa4200}#bootstrap-theme .label-danger{background-color:#c71c22}#bootstrap-theme .label-danger[href]:hover,#bootstrap-theme .label-danger[href]:focus{background-color:#9a161a}#bootstrap-theme .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#000;border-radius:10px}#bootstrap-theme .badge:empty{display:none}.btn #bootstrap-theme .badge{position:relative;top:-1px}.btn-xs #bootstrap-theme .badge,#bootstrap-theme .btn-group-xs>.btn #bootstrap-theme .badge,.btn-group-xs>.btn #bootstrap-theme .badge{top:0;padding:1px 5px}.list-group-item.active>#bootstrap-theme .badge,.nav-pills>.active>a>#bootstrap-theme .badge{color:#2786c2;background-color:#fff}.list-group-item>#bootstrap-theme .badge{float:right}.list-group-item>#bootstrap-theme .badge+#bootstrap-theme .badge{margin-right:5px}.nav-pills>li>a>#bootstrap-theme .badge{margin-left:3px}#bootstrap-theme a.badge:hover,#bootstrap-theme a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}#bootstrap-theme .jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}#bootstrap-theme .jumbotron h1,#bootstrap-theme .jumbotron .h1{color:inherit}#bootstrap-theme .jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}#bootstrap-theme .jumbotron>hr{border-top-color:#d5d5d5}.container #bootstrap-theme .jumbotron,.container-fluid #bootstrap-theme .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}#bootstrap-theme .jumbotron .container{max-width:100%}@media screen and (min-width:768px){#bootstrap-theme .jumbotron{padding-top:48px;padding-bottom:48px}.container #bootstrap-theme .jumbotron,.container-fluid #bootstrap-theme .jumbotron{padding-right:60px;padding-left:60px}#bootstrap-theme .jumbotron h1,#bootstrap-theme .jumbotron .h1{font-size:63px}}#bootstrap-theme .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}#bootstrap-theme .thumbnail>img,#bootstrap-theme .thumbnail a>img{display:block;max-width:100%;height:auto;margin-right:auto;margin-left:auto}#bootstrap-theme .thumbnail .caption{padding:9px;color:#555}#bootstrap-theme a.thumbnail:hover,#bootstrap-theme a.thumbnail:focus,#bootstrap-theme a.thumbnail.active{border-color:#2786c2}#bootstrap-theme .alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}#bootstrap-theme .alert h4{margin-top:0;color:inherit}#bootstrap-theme .alert .alert-link{font-weight:700}#bootstrap-theme .alert>p,#bootstrap-theme .alert>ul{margin-bottom:0}#bootstrap-theme .alert>p+p{margin-top:5px}#bootstrap-theme .alert-dismissable,#bootstrap-theme .alert-dismissible{padding-right:35px}#bootstrap-theme .alert-dismissable .close,#bootstrap-theme .alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}#bootstrap-theme .alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}#bootstrap-theme .alert-success hr{border-top-color:#c9e2b3}#bootstrap-theme .alert-success .alert-link{color:#356635}#bootstrap-theme .alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}#bootstrap-theme .alert-info hr{border-top-color:#a6e1ec}#bootstrap-theme .alert-info .alert-link{color:#2d6987}#bootstrap-theme .alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}#bootstrap-theme .alert-warning hr{border-top-color:#f8e5be}#bootstrap-theme .alert-warning .alert-link{color:#a47e3c}#bootstrap-theme .alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}#bootstrap-theme .alert-danger hr{border-top-color:#e6c1c7}#bootstrap-theme .alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}#bootstrap-theme .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}#bootstrap-theme .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#000;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}#bootstrap-theme .progress-striped .progress-bar,#bootstrap-theme .progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}#bootstrap-theme .progress.active .progress-bar,#bootstrap-theme .progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}#bootstrap-theme .progress-bar-success{background-color:#73a839}.progress-striped #bootstrap-theme .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .progress-bar-info{background-color:#cde8fe}.progress-striped #bootstrap-theme .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .progress-bar-warning{background-color:#dd5600}.progress-striped #bootstrap-theme .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .progress-bar-danger{background-color:#c71c22}.progress-striped #bootstrap-theme .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}#bootstrap-theme .media{margin-top:15px}#bootstrap-theme .media:first-child{margin-top:0}#bootstrap-theme .media,#bootstrap-theme .media-body{overflow:hidden;zoom:1}#bootstrap-theme .media-body{width:10000px}#bootstrap-theme .media-object{display:block}#bootstrap-theme .media-object.img-thumbnail{max-width:none}#bootstrap-theme .media-right,#bootstrap-theme .media>.pull-right{padding-left:10px}#bootstrap-theme .media-left,#bootstrap-theme .media>.pull-left{padding-right:10px}#bootstrap-theme .media-left,#bootstrap-theme .media-right,#bootstrap-theme .media-body{display:table-cell;vertical-align:top}#bootstrap-theme .media-middle{vertical-align:middle}#bootstrap-theme .media-bottom{vertical-align:bottom}#bootstrap-theme .media-heading{margin-top:0;margin-bottom:5px}#bootstrap-theme .media-list{padding-left:0;list-style:none}#bootstrap-theme .list-group{padding-left:0;margin-bottom:20px}#bootstrap-theme .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}#bootstrap-theme .list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}#bootstrap-theme .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}#bootstrap-theme .list-group-item.disabled,#bootstrap-theme .list-group-item.disabled:hover,#bootstrap-theme .list-group-item.disabled:focus{color:#999;cursor:not-allowed;background-color:#eee}#bootstrap-theme .list-group-item.disabled .list-group-item-heading,#bootstrap-theme .list-group-item.disabled:hover .list-group-item-heading,#bootstrap-theme .list-group-item.disabled:focus .list-group-item-heading{color:inherit}#bootstrap-theme .list-group-item.disabled .list-group-item-text,#bootstrap-theme .list-group-item.disabled:hover .list-group-item-text,#bootstrap-theme .list-group-item.disabled:focus .list-group-item-text{color:#999}#bootstrap-theme .list-group-item.active,#bootstrap-theme .list-group-item.active:hover,#bootstrap-theme .list-group-item.active:focus{z-index:2;color:#fff;background-color:#000;border-color:#000}#bootstrap-theme .list-group-item.active .list-group-item-heading,#bootstrap-theme .list-group-item.active .list-group-item-heading>small,#bootstrap-theme .list-group-item.active .list-group-item-heading>.small,#bootstrap-theme .list-group-item.active:hover .list-group-item-heading,#bootstrap-theme .list-group-item.active:hover .list-group-item-heading>small,#bootstrap-theme .list-group-item.active:hover .list-group-item-heading>.small,#bootstrap-theme .list-group-item.active:focus .list-group-item-heading,#bootstrap-theme .list-group-item.active:focus .list-group-item-heading>small,#bootstrap-theme .list-group-item.active:focus .list-group-item-heading>.small{color:inherit}#bootstrap-theme .list-group-item.active .list-group-item-text,#bootstrap-theme .list-group-item.active:hover .list-group-item-text,#bootstrap-theme .list-group-item.active:focus .list-group-item-text{color:#666}#bootstrap-theme a.list-group-item,#bootstrap-theme button.list-group-item{color:#555}#bootstrap-theme a.list-group-item .list-group-item-heading,#bootstrap-theme button.list-group-item .list-group-item-heading{color:#333}#bootstrap-theme a.list-group-item:hover,#bootstrap-theme a.list-group-item:focus,#bootstrap-theme button.list-group-item:hover,#bootstrap-theme button.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}#bootstrap-theme button.list-group-item{width:100%;text-align:left}#bootstrap-theme .list-group-item-success{color:#468847;background-color:#dff0d8}#bootstrap-theme a.list-group-item-success,#bootstrap-theme button.list-group-item-success{color:#468847}#bootstrap-theme a.list-group-item-success .list-group-item-heading,#bootstrap-theme button.list-group-item-success .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-success:hover,#bootstrap-theme a.list-group-item-success:focus,#bootstrap-theme button.list-group-item-success:hover,#bootstrap-theme button.list-group-item-success:focus{color:#468847;background-color:#d0e9c6}#bootstrap-theme a.list-group-item-success.active,#bootstrap-theme a.list-group-item-success.active:hover,#bootstrap-theme a.list-group-item-success.active:focus,#bootstrap-theme button.list-group-item-success.active,#bootstrap-theme button.list-group-item-success.active:hover,#bootstrap-theme button.list-group-item-success.active:focus{color:#fff;background-color:#468847;border-color:#468847}#bootstrap-theme .list-group-item-info{color:#3a87ad;background-color:#d9edf7}#bootstrap-theme a.list-group-item-info,#bootstrap-theme button.list-group-item-info{color:#3a87ad}#bootstrap-theme a.list-group-item-info .list-group-item-heading,#bootstrap-theme button.list-group-item-info .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-info:hover,#bootstrap-theme a.list-group-item-info:focus,#bootstrap-theme button.list-group-item-info:hover,#bootstrap-theme button.list-group-item-info:focus{color:#3a87ad;background-color:#c4e3f3}#bootstrap-theme a.list-group-item-info.active,#bootstrap-theme a.list-group-item-info.active:hover,#bootstrap-theme a.list-group-item-info.active:focus,#bootstrap-theme button.list-group-item-info.active,#bootstrap-theme button.list-group-item-info.active:hover,#bootstrap-theme button.list-group-item-info.active:focus{color:#fff;background-color:#3a87ad;border-color:#3a87ad}#bootstrap-theme .list-group-item-warning{color:#c09853;background-color:#fcf8e3}#bootstrap-theme a.list-group-item-warning,#bootstrap-theme button.list-group-item-warning{color:#c09853}#bootstrap-theme a.list-group-item-warning .list-group-item-heading,#bootstrap-theme button.list-group-item-warning .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-warning:hover,#bootstrap-theme a.list-group-item-warning:focus,#bootstrap-theme button.list-group-item-warning:hover,#bootstrap-theme button.list-group-item-warning:focus{color:#c09853;background-color:#faf2cc}#bootstrap-theme a.list-group-item-warning.active,#bootstrap-theme a.list-group-item-warning.active:hover,#bootstrap-theme a.list-group-item-warning.active:focus,#bootstrap-theme button.list-group-item-warning.active,#bootstrap-theme button.list-group-item-warning.active:hover,#bootstrap-theme button.list-group-item-warning.active:focus{color:#fff;background-color:#c09853;border-color:#c09853}#bootstrap-theme .list-group-item-danger{color:#b94a48;background-color:#f2dede}#bootstrap-theme a.list-group-item-danger,#bootstrap-theme button.list-group-item-danger{color:#b94a48}#bootstrap-theme a.list-group-item-danger .list-group-item-heading,#bootstrap-theme button.list-group-item-danger .list-group-item-heading{color:inherit}#bootstrap-theme a.list-group-item-danger:hover,#bootstrap-theme a.list-group-item-danger:focus,#bootstrap-theme button.list-group-item-danger:hover,#bootstrap-theme button.list-group-item-danger:focus{color:#b94a48;background-color:#ebcccc}#bootstrap-theme a.list-group-item-danger.active,#bootstrap-theme a.list-group-item-danger.active:hover,#bootstrap-theme a.list-group-item-danger.active:focus,#bootstrap-theme button.list-group-item-danger.active,#bootstrap-theme button.list-group-item-danger.active:hover,#bootstrap-theme button.list-group-item-danger.active:focus{color:#fff;background-color:#b94a48;border-color:#b94a48}#bootstrap-theme .list-group-item-heading{margin-top:0;margin-bottom:5px}#bootstrap-theme .list-group-item-text{margin-bottom:0;line-height:1.3}#bootstrap-theme .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}#bootstrap-theme .panel-body{padding:15px}#bootstrap-theme .panel-body:before,#bootstrap-theme .panel-body:after{display:table;content:" "}#bootstrap-theme .panel-body:after{clear:both}#bootstrap-theme .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel-heading>.dropdown .dropdown-toggle{color:inherit}#bootstrap-theme .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}#bootstrap-theme .panel-title>a,#bootstrap-theme .panel-title>small,#bootstrap-theme .panel-title>.small,#bootstrap-theme .panel-title>small>a,#bootstrap-theme .panel-title>.small>a{color:inherit}#bootstrap-theme .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.list-group,#bootstrap-theme .panel>.panel-collapse>.list-group{margin-bottom:0}#bootstrap-theme .panel>.list-group .list-group-item,#bootstrap-theme .panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}#bootstrap-theme .panel>.list-group:first-child .list-group-item:first-child,#bootstrap-theme .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel>.list-group:last-child .list-group-item:last-child,#bootstrap-theme .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}#bootstrap-theme .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}#bootstrap-theme .list-group+.panel-footer{border-top-width:0}#bootstrap-theme .panel>.table,#bootstrap-theme .panel>.table-responsive>.table,#bootstrap-theme .panel>.panel-collapse>.table{margin-bottom:0}#bootstrap-theme .panel>.table caption,#bootstrap-theme .panel>.table-responsive>.table caption,#bootstrap-theme .panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}#bootstrap-theme .panel>.table:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child th:first-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table:first-child>thead:first-child>tr:first-child th:last-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,#bootstrap-theme .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}#bootstrap-theme .panel>.table:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,#bootstrap-theme .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}#bootstrap-theme .panel>.panel-body+.table,#bootstrap-theme .panel>.panel-body+.table-responsive,#bootstrap-theme .panel>.table+.panel-body,#bootstrap-theme .panel>.table-responsive+.panel-body{border-top:1px solid #ddd}#bootstrap-theme .panel>.table>tbody:first-child>tr:first-child th,#bootstrap-theme .panel>.table>tbody:first-child>tr:first-child td{border-top:0}#bootstrap-theme .panel>.table-bordered,#bootstrap-theme .panel>.table-responsive>.table-bordered{border:0}#bootstrap-theme .panel>.table-bordered>thead>tr>th:first-child,#bootstrap-theme .panel>.table-bordered>thead>tr>td:first-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>th:first-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>td:first-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>th:first-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>td:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>th:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}#bootstrap-theme .panel>.table-bordered>thead>tr>th:last-child,#bootstrap-theme .panel>.table-bordered>thead>tr>td:last-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>th:last-child,#bootstrap-theme .panel>.table-bordered>tbody>tr>td:last-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>th:last-child,#bootstrap-theme .panel>.table-bordered>tfoot>tr>td:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>th:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}#bootstrap-theme .panel>.table-bordered>thead>tr:first-child>td,#bootstrap-theme .panel>.table-bordered>thead>tr:first-child>th,#bootstrap-theme .panel>.table-bordered>tbody>tr:first-child>td,#bootstrap-theme .panel>.table-bordered>tbody>tr:first-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>thead>tr:first-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}#bootstrap-theme .panel>.table-bordered>tbody>tr:last-child>td,#bootstrap-theme .panel>.table-bordered>tbody>tr:last-child>th,#bootstrap-theme .panel>.table-bordered>tfoot>tr:last-child>td,#bootstrap-theme .panel>.table-bordered>tfoot>tr:last-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,#bootstrap-theme .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}#bootstrap-theme .panel>.table-responsive{margin-bottom:0;border:0}#bootstrap-theme .panel-group{margin-bottom:20px}#bootstrap-theme .panel-group .panel{margin-bottom:0;border-radius:4px}#bootstrap-theme .panel-group .panel+.panel{margin-top:5px}#bootstrap-theme .panel-group .panel-heading{border-bottom:0}#bootstrap-theme .panel-group .panel-heading+.panel-collapse>.panel-body,#bootstrap-theme .panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}#bootstrap-theme .panel-group .panel-footer{border-top:0}#bootstrap-theme .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}#bootstrap-theme .panel-default{border-color:#ddd}#bootstrap-theme .panel-default>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#ddd}#bootstrap-theme .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#555}#bootstrap-theme .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-primary{border-color:#ddd}#bootstrap-theme .panel-primary>.panel-heading{color:#fff;background-color:#000;border-color:#ddd}#bootstrap-theme .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-primary>.panel-heading .badge{color:#000;background-color:#fff}#bootstrap-theme .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-success{border-color:#ddd}#bootstrap-theme .panel-success>.panel-heading{color:#468847;background-color:#73a839;border-color:#ddd}#bootstrap-theme .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-success>.panel-heading .badge{color:#73a839;background-color:#468847}#bootstrap-theme .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-info{border-color:#ddd}#bootstrap-theme .panel-info>.panel-heading{color:#3a87ad;background-color:#cde8fe;border-color:#ddd}#bootstrap-theme .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-info>.panel-heading .badge{color:#cde8fe;background-color:#3a87ad}#bootstrap-theme .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-warning{border-color:#ddd}#bootstrap-theme .panel-warning>.panel-heading{color:#c09853;background-color:#dd5600;border-color:#ddd}#bootstrap-theme .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-warning>.panel-heading .badge{color:#dd5600;background-color:#c09853}#bootstrap-theme .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .panel-danger{border-color:#ddd}#bootstrap-theme .panel-danger>.panel-heading{color:#b94a48;background-color:#c71c22;border-color:#ddd}#bootstrap-theme .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}#bootstrap-theme .panel-danger>.panel-heading .badge{color:#c71c22;background-color:#b94a48}#bootstrap-theme .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}#bootstrap-theme .embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}#bootstrap-theme .embed-responsive .embed-responsive-item,#bootstrap-theme .embed-responsive iframe,#bootstrap-theme .embed-responsive embed,#bootstrap-theme .embed-responsive object,#bootstrap-theme .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}#bootstrap-theme .embed-responsive-16by9{padding-bottom:56.25%}#bootstrap-theme .embed-responsive-4by3{padding-bottom:75%}#bootstrap-theme .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}#bootstrap-theme .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}#bootstrap-theme .well-lg{padding:24px;border-radius:6px}#bootstrap-theme .well-sm{padding:9px;border-radius:3px}#bootstrap-theme .close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;-webkit-filter:alpha(opacity=20);filter:alpha(opacity=20);opacity:.2}#bootstrap-theme .close:hover,#bootstrap-theme .close:focus{color:#000;text-decoration:none;cursor:pointer;-webkit-filter:alpha(opacity=50);filter:alpha(opacity=50);opacity:.5}#bootstrap-theme button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}#bootstrap-theme .modal-open{overflow:hidden}#bootstrap-theme .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}#bootstrap-theme .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-ms-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out}#bootstrap-theme .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}#bootstrap-theme .modal-open .modal{overflow-x:hidden;overflow-y:auto}#bootstrap-theme .modal-dialog{position:relative;width:auto;margin:10px}#bootstrap-theme .modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}#bootstrap-theme .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}#bootstrap-theme .modal-backdrop.fade{-webkit-filter:alpha(opacity=0);filter:alpha(opacity=0);opacity:0}#bootstrap-theme .modal-backdrop.in{-webkit-filter:alpha(opacity=50);filter:alpha(opacity=50);opacity:.5}#bootstrap-theme .modal-header{padding:15px;border-bottom:1px solid #e5e5e5}#bootstrap-theme .modal-header:before,#bootstrap-theme .modal-header:after{display:table;content:" "}#bootstrap-theme .modal-header:after{clear:both}#bootstrap-theme .modal-header .close{margin-top:-2px}#bootstrap-theme .modal-title{margin:0;line-height:1.428571429}#bootstrap-theme .modal-body{position:relative;padding:20px}#bootstrap-theme .modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}#bootstrap-theme .modal-footer:before,#bootstrap-theme .modal-footer:after{display:table;content:" "}#bootstrap-theme .modal-footer:after{clear:both}#bootstrap-theme .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}#bootstrap-theme .modal-footer .btn-group .btn+.btn{margin-left:-1px}#bootstrap-theme .modal-footer .btn-block+.btn-block{margin-left:0}#bootstrap-theme .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){#bootstrap-theme .modal-dialog{width:600px;margin:30px auto}#bootstrap-theme .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}#bootstrap-theme .modal-sm{width:300px}}@media (min-width:992px){#bootstrap-theme .modal-lg{width:900px}}#bootstrap-theme .tooltip{position:absolute;z-index:1070;display:block;font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.428571429;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;-ms-word-break:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;-webkit-filter:alpha(opacity=0);filter:alpha(opacity=0);opacity:0}#bootstrap-theme .tooltip.in{-webkit-filter:alpha(opacity=90);filter:alpha(opacity=90);opacity:.9}#bootstrap-theme .tooltip.top{padding:5px 0;margin-top:-3px}#bootstrap-theme .tooltip.right{padding:0 5px;margin-left:3px}#bootstrap-theme .tooltip.bottom{padding:5px 0;margin-top:3px}#bootstrap-theme .tooltip.left{padding:0 5px;margin-left:-3px}#bootstrap-theme .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}#bootstrap-theme .tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}#bootstrap-theme .tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}#bootstrap-theme .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}#bootstrap-theme .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}#bootstrap-theme .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}#bootstrap-theme .tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}#bootstrap-theme .tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}#bootstrap-theme .tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}#bootstrap-theme .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}#bootstrap-theme .popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Verdana","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.428571429;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;-ms-word-break:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}#bootstrap-theme .popover.top{margin-top:-10px}#bootstrap-theme .popover.right{margin-left:10px}#bootstrap-theme .popover.bottom{margin-top:10px}#bootstrap-theme .popover.left{margin-left:-10px}#bootstrap-theme .popover>.arrow{border-width:11px}#bootstrap-theme .popover>.arrow,#bootstrap-theme .popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}#bootstrap-theme .popover>.arrow:after{content:"";border-width:10px}#bootstrap-theme .popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}#bootstrap-theme .popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}#bootstrap-theme .popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}#bootstrap-theme .popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}#bootstrap-theme .popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}#bootstrap-theme .popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}#bootstrap-theme .popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}#bootstrap-theme .popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}#bootstrap-theme .popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}#bootstrap-theme .popover-content{padding:9px 14px}#bootstrap-theme .carousel{position:relative}#bootstrap-theme .carousel-inner{position:relative;width:100%;overflow:hidden}#bootstrap-theme .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}#bootstrap-theme .carousel-inner>.item>img,#bootstrap-theme .carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media (transform-3d),(-webkit-transform-3d){#bootstrap-theme .carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-ms-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}#bootstrap-theme .carousel-inner>.item.next,#bootstrap-theme .carousel-inner>.item.active.right{-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}#bootstrap-theme .carousel-inner>.item.prev,#bootstrap-theme .carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}#bootstrap-theme .carousel-inner>.item.next.left,#bootstrap-theme .carousel-inner>.item.prev.right,#bootstrap-theme .carousel-inner>.item.active{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}#bootstrap-theme .carousel-inner>.active,#bootstrap-theme .carousel-inner>.next,#bootstrap-theme .carousel-inner>.prev{display:block}#bootstrap-theme .carousel-inner>.active{left:0}#bootstrap-theme .carousel-inner>.next,#bootstrap-theme .carousel-inner>.prev{position:absolute;top:0;width:100%}#bootstrap-theme .carousel-inner>.next{left:100%}#bootstrap-theme .carousel-inner>.prev{left:-100%}#bootstrap-theme .carousel-inner>.next.left,#bootstrap-theme .carousel-inner>.prev.right{left:0}#bootstrap-theme .carousel-inner>.active.left{left:-100%}#bootstrap-theme .carousel-inner>.active.right{left:100%}#bootstrap-theme .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);-webkit-filter:alpha(opacity=50);filter:alpha(opacity=50);opacity:.5}#bootstrap-theme .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);-webkit-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);background-repeat:repeat-x}#bootstrap-theme .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);-webkit-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);background-repeat:repeat-x}#bootstrap-theme .carousel-control:hover,#bootstrap-theme .carousel-control:focus{color:#fff;text-decoration:none;outline:0;-webkit-filter:alpha(opacity=90);filter:alpha(opacity=90);opacity:.9}#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .icon-next,#bootstrap-theme .carousel-control .glyphicon-chevron-left,#bootstrap-theme .carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}#bootstrap-theme .carousel-control .icon-next,#bootstrap-theme .carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .icon-next{width:20px;height:20px;font-family:serif;line-height:1}#bootstrap-theme .carousel-control .icon-prev:before{content:"‹"}#bootstrap-theme .carousel-control .icon-next:before{content:"›"}#bootstrap-theme .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}#bootstrap-theme .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}#bootstrap-theme .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}#bootstrap-theme .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}#bootstrap-theme .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){#bootstrap-theme .carousel-control .glyphicon-chevron-left,#bootstrap-theme .carousel-control .glyphicon-chevron-right,#bootstrap-theme .carousel-control .icon-prev,#bootstrap-theme .carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}#bootstrap-theme .carousel-control .glyphicon-chevron-left,#bootstrap-theme .carousel-control .icon-prev{margin-left:-10px}#bootstrap-theme .carousel-control .glyphicon-chevron-right,#bootstrap-theme .carousel-control .icon-next{margin-right:-10px}#bootstrap-theme .carousel-caption{right:20%;left:20%;padding-bottom:30px}#bootstrap-theme .carousel-indicators{bottom:20px}}#bootstrap-theme .clearfix:before,#bootstrap-theme .clearfix:after{display:table;content:" "}#bootstrap-theme .clearfix:after{clear:both}#bootstrap-theme .center-block{display:block;margin-right:auto;margin-left:auto}#bootstrap-theme .pull-right{float:right !important}#bootstrap-theme .pull-left{float:left !important}#bootstrap-theme .hide{display:none !important}#bootstrap-theme .show{display:block !important}#bootstrap-theme .invisible{visibility:hidden}#bootstrap-theme .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}#bootstrap-theme .hidden{display:none !important}#bootstrap-theme .affix{position:fixed}@-ms-viewport{width:device-width}#bootstrap-theme .visible-xs{display:none !important}#bootstrap-theme .visible-sm{display:none !important}#bootstrap-theme .visible-md{display:none !important}#bootstrap-theme .visible-lg{display:none !important}#bootstrap-theme .visible-xs-block,#bootstrap-theme .visible-xs-inline,#bootstrap-theme .visible-xs-inline-block,#bootstrap-theme .visible-sm-block,#bootstrap-theme .visible-sm-inline,#bootstrap-theme .visible-sm-inline-block,#bootstrap-theme .visible-md-block,#bootstrap-theme .visible-md-inline,#bootstrap-theme .visible-md-inline-block,#bootstrap-theme .visible-lg-block,#bootstrap-theme .visible-lg-inline,#bootstrap-theme .visible-lg-inline-block{display:none !important}@media (max-width:767px){#bootstrap-theme .visible-xs{display:block !important}#bootstrap-theme table.visible-xs{display:table !important}#bootstrap-theme tr.visible-xs{display:table-row !important}#bootstrap-theme th.visible-xs,#bootstrap-theme td.visible-xs{display:table-cell !important}}@media (max-width:767px){#bootstrap-theme .visible-xs-block{display:block !important}}@media (max-width:767px){#bootstrap-theme .visible-xs-inline{display:inline !important}}@media (max-width:767px){#bootstrap-theme .visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm{display:block !important}#bootstrap-theme table.visible-sm{display:table !important}#bootstrap-theme tr.visible-sm{display:table-row !important}#bootstrap-theme th.visible-sm,#bootstrap-theme td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md{display:block !important}#bootstrap-theme table.visible-md{display:table !important}#bootstrap-theme tr.visible-md{display:table-row !important}#bootstrap-theme th.visible-md,#bootstrap-theme td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg{display:block !important}#bootstrap-theme table.visible-lg{display:table !important}#bootstrap-theme tr.visible-lg{display:table-row !important}#bootstrap-theme th.visible-lg,#bootstrap-theme td.visible-lg{display:table-cell !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg-block{display:block !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg-inline{display:inline !important}}@media (min-width:1200px){#bootstrap-theme .visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){#bootstrap-theme .hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){#bootstrap-theme .hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){#bootstrap-theme .hidden-md{display:none !important}}@media (min-width:1200px){#bootstrap-theme .hidden-lg{display:none !important}}#bootstrap-theme .visible-print{display:none !important}@media print{#bootstrap-theme .visible-print{display:block !important}#bootstrap-theme table.visible-print{display:table !important}#bootstrap-theme tr.visible-print{display:table-row !important}#bootstrap-theme th.visible-print,#bootstrap-theme td.visible-print{display:table-cell !important}}#bootstrap-theme .visible-print-block{display:none !important}@media print{#bootstrap-theme .visible-print-block{display:block !important}}#bootstrap-theme .visible-print-inline{display:none !important}@media print{#bootstrap-theme .visible-print-inline{display:inline !important}}#bootstrap-theme .visible-print-inline-block{display:none !important}@media print{#bootstrap-theme .visible-print-inline-block{display:inline-block !important}}@media print{#bootstrap-theme .hidden-print{display:none !important}}#bootstrap-theme ul,#bootstrap-theme ol{margin-left:0;margin-right:0}#bootstrap-theme .form-control.checkbox-inline>label{margin-left:9px}#bootstrap-theme label input[type=checkbox]:not(:checked)+*{font-weight:400}#bootstrap-theme .select2-choices{margin-bottom:0}#bootstrap-theme input[type=search]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}#bootstrap-theme .form-control .select2-choice{border:0;border-radius:2px}#bootstrap-theme .form-control .select2-choice .select2-arrow{border-radius:0 2px 2px 0}#bootstrap-theme .form-control.select2-container{height:auto !important;padding:0}#bootstrap-theme .form-control.select2-container.select2-dropdown-open{border-color:#5897fb;border-radius:3px 3px 0 0}#bootstrap-theme .form-control .select2-container.select2-dropdown-open .select2-choices{border-radius:3px 3px 0 0}#bootstrap-theme .form-control.select2-container .select2-choices{border:0 !important;border-radius:3px}#bootstrap-theme .control-group.warning .select2-container .select2-choice,#bootstrap-theme .control-group.warning .select2-container .select2-choices,#bootstrap-theme .control-group.warning .select2-container-active .select2-choice,#bootstrap-theme .control-group.warning .select2-container-active .select2-choices,#bootstrap-theme .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.warning .select2-container-multi.select2-container-active .select2-choices{border:1px solid #c09853 !important}#bootstrap-theme .control-group.warning .select2-container .select2-choice div{border-left:1px solid #c09853 !important;background:#fcf8e3 !important}#bootstrap-theme .control-group.error .select2-container .select2-choice,#bootstrap-theme .control-group.error .select2-container .select2-choices,#bootstrap-theme .control-group.error .select2-container-active .select2-choice,#bootstrap-theme .control-group.error .select2-container-active .select2-choices,#bootstrap-theme .control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.error .select2-container-multi.select2-container-active .select2-choices{border:1px solid #b94a48 !important}#bootstrap-theme .control-group.error .select2-container .select2-choice div{border-left:1px solid #b94a48 !important;background:#f2dede !important}#bootstrap-theme .control-group.info .select2-container .select2-choice,#bootstrap-theme .control-group.info .select2-container .select2-choices,#bootstrap-theme .control-group.info .select2-container-active .select2-choice,#bootstrap-theme .control-group.info .select2-container-active .select2-choices,#bootstrap-theme .control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.info .select2-container-multi.select2-container-active .select2-choices{border:1px solid #3a87ad !important}#bootstrap-theme .control-group.info .select2-container .select2-choice div{border-left:1px solid #3a87ad !important;background:#d9edf7 !important}#bootstrap-theme .control-group.success .select2-container .select2-choice,#bootstrap-theme .control-group.success .select2-container .select2-choices,#bootstrap-theme .control-group.success .select2-container-active .select2-choice,#bootstrap-theme .control-group.success .select2-container-active .select2-choices,#bootstrap-theme .control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,#bootstrap-theme .control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,#bootstrap-theme .control-group.success .select2-container-multi.select2-container-active .select2-choices{border:1px solid #468847 !important}#bootstrap-theme .control-group.success .select2-container .select2-choice div{border-left:1px solid #468847 !important;background:#dff0d8 !important} \ No newline at end of file diff --git a/civicrm/ext/greenwich/info.xml b/civicrm/ext/greenwich/info.xml index 04e87a48a3..6da868e0ab 100644 --- a/civicrm/ext/greenwich/info.xml +++ b/civicrm/ext/greenwich/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-07-21</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/greenwich/scss/_greenwich.scss b/civicrm/ext/greenwich/scss/_greenwich.scss index b639e1204e..0bf1a36276 100644 --- a/civicrm/ext/greenwich/scss/_greenwich.scss +++ b/civicrm/ext/greenwich/scss/_greenwich.scss @@ -1,5 +1,5 @@ /*! Generated by Live LESS Theme Customizer */ - + // // Variables @@ -34,7 +34,7 @@ $body-bg: rgb(255, 255, 255); $text-color: $gray; //** Global textual link color. -$link-color: $brand-primary; +$link-color: #2786c2; //** Link hover color set via `darken()` function. $link-hover-color: darken($link-color, 15%); //** Link hover decoration. @@ -891,4 +891,3 @@ $dl-horizontal-offset: $component-offset-horizontal; $dl-horizontal-breakpoint: $grid-float-breakpoint; //** Horizontal line color. $hr-border: $gray-lighter; - \ No newline at end of file diff --git a/civicrm/ext/oauth-client/CRM/OAuth/BAO/OAuthContactToken.php b/civicrm/ext/oauth-client/CRM/OAuth/BAO/OAuthContactToken.php new file mode 100644 index 0000000000..920707b34f --- /dev/null +++ b/civicrm/ext/oauth-client/CRM/OAuth/BAO/OAuthContactToken.php @@ -0,0 +1,5 @@ +<?php + +class CRM_OAuth_BAO_OAuthContactToken extends CRM_OAuth_DAO_OAuthContactToken { + +} diff --git a/civicrm/ext/oauth-client/CRM/OAuth/ContactFromToken.php b/civicrm/ext/oauth-client/CRM/OAuth/ContactFromToken.php new file mode 100644 index 0000000000..396fbd5dd8 --- /dev/null +++ b/civicrm/ext/oauth-client/CRM/OAuth/ContactFromToken.php @@ -0,0 +1,80 @@ +<?php + +class CRM_OAuth_ContactFromToken { + + /** + * Given a token, we add a new record to civicrm_contact based on the + * provider's template + */ + public static function createContact(array $token): array { + $client = \Civi\Api4\OAuthClient::get(FALSE) + ->addWhere('id', '=', $token['client_id']) + ->execute() + ->single(); + $provider = \Civi\Api4\OAuthProvider::get(FALSE) + ->addWhere('name', '=', $client['provider']) + ->execute() + ->single(); + + $vars = ['token' => $token, 'client' => $client, 'provider' => $provider]; + $template = ['checkPermissions' => FALSE] + $provider['contactTemplate']; + $contact = civicrm_api4( + 'Contact', + 'create', + self::evalArrayTemplate($template, $vars) + )->single(); + return $contact; + } + + /** + * @param array $template + * Array of key-value expressions. Arrays can be nested. + * Ex: ['name' => '{{person.first}} {{person.last}}'] + * + * Expressions begin with a variable name; a string followed by a dot + * denotes an array key. Ex: {{person.first}} means + * $vars['person']['first']. + * + * Optionally, the value may be piped through other 'filter' functions. + * Ex: {{person.first|lowercase}} + * + * @param array $vars + * Array tree of data to interpolate. + * + * @return array + * The template array, with '{{...}}' expressions evaluated. + */ + public static function evalArrayTemplate(array $template, array $vars): array { + $filterFunctions = [ + 'lowercase' => function ($s) { + return strtolower($s); + }, + ]; + + $evaluateLeafNode = function (&$node) use ($filterFunctions, $vars) { + if (!(preg_match(';{{([a-zA-Z0-9_\.\|]+)}};', $node, $matches))) { + return $node; + } + + $parts = explode('|', $matches[1]); + $value = (string) CRM_Utils_Array::pathGet($vars, explode('.', $parts[0])); + $filterSteps = array_slice($parts, 1); + + foreach ($filterSteps as $f) { + if (isset($filterFunctions[$f])) { + $value = $filterFunctions[$f]($value); + } + else { + $value = NULL; + } + } + + $node = $value; + }; + + $result = $template; + array_walk_recursive($result, $evaluateLeafNode); + return $result; + } + +} diff --git a/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthClient.php b/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthClient.php index 0307da99b4..92d2f4378e 100644 --- a/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthClient.php +++ b/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthClient.php @@ -6,7 +6,7 @@ * * Generated from oauth-client/xml/schema/CRM/OAuth/OAuthClient.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7487cf595064832b3d55188b3e48bffc) + * (GenCodeChecksum:16542326ad093d2d6826a11f1576522e) */ use CRM_OAuth_ExtensionUtil as E; @@ -123,6 +123,7 @@ class CRM_OAuth_DAO_OAuthClient extends CRM_Core_DAO { 'entity' => 'OAuthClient', 'bao' => 'CRM_OAuth_DAO_OAuthClient', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '5.32', ], 'provider' => [ @@ -164,6 +165,9 @@ class CRM_OAuth_DAO_OAuthClient extends CRM_Core_DAO { 'title' => E::ts('Client Secret'), 'description' => E::ts('Client Secret'), 'where' => 'civicrm_oauth_client.secret', + 'permission' => [ + 'manage OAuth client', + ], 'table_name' => 'civicrm_oauth_client', 'entity' => 'OAuthClient', 'bao' => 'CRM_OAuth_DAO_OAuthClient', @@ -176,6 +180,9 @@ class CRM_OAuth_DAO_OAuthClient extends CRM_Core_DAO { 'title' => E::ts('Options'), 'description' => E::ts('Extra override options for the service (JSON)'), 'where' => 'civicrm_oauth_client.options', + 'permission' => [ + 'manage OAuth client', + ], 'table_name' => 'civicrm_oauth_client', 'entity' => 'OAuthClient', 'bao' => 'CRM_OAuth_DAO_OAuthClient', diff --git a/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthContactToken.php b/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthContactToken.php new file mode 100644 index 0000000000..691a37b578 --- /dev/null +++ b/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthContactToken.php @@ -0,0 +1,483 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:48364c8d563f29a459f0c3ccbe4f1c8e) + */ +use CRM_OAuth_ExtensionUtil as E; + +/** + * Database access object for the OAuthContactToken entity. + */ +class CRM_OAuth_DAO_OAuthContactToken extends CRM_Core_DAO { + const EXT = E::LONG_NAME; + const TABLE_ADDED = '5.35'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_oauth_contact_token'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = FALSE; + + /** + * Token ID + * + * @var int + */ + public $id; + + /** + * The tag specifies how this token will be used. + * + * @var string + */ + public $tag; + + /** + * Client ID + * + * @var int + */ + public $client_id; + + /** + * Contact ID + * + * @var int + */ + public $contact_id; + + /** + * Ex: authorization_code + * + * @var string + */ + public $grant_type; + + /** + * List of scopes addressed by this token + * + * @var text + */ + public $scopes; + + /** + * Ex: Bearer or MAC + * + * @var string + */ + public $token_type; + + /** + * Token to present when accessing resources + * + * @var text + */ + public $access_token; + + /** + * Expiration time for the access_token (seconds since epoch) + * + * @var int + */ + public $expires; + + /** + * Token to present when refreshing the access_token + * + * @var text + */ + public $refresh_token; + + /** + * Identifier for the resource owner. Structure varies by service. + * + * @var string + */ + public $resource_owner_name; + + /** + * Cached details describing the resource owner + * + * @var text + */ + public $resource_owner; + + /** + * ?? copied from OAuthSysToken + * + * @var text + */ + public $error; + + /** + * The token response data, per AccessToken::jsonSerialize + * + * @var text + */ + public $raw; + + /** + * When the token was created. + * + * @var timestamp + */ + public $created_date; + + /** + * When the token was created or modified. + * + * @var timestamp + */ + public $modified_date; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_oauth_contact_token'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? E::ts('OAuth Contact Tokens') : E::ts('OAuth Contact Token'); + } + + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() { + if (!isset(Civi::$statics[__CLASS__]['links'])) { + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'client_id', 'civicrm_oauth_client', 'id'); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id', 'civicrm_contact', 'id'); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + } + return Civi::$statics[__CLASS__]['links']; + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => E::ts('Token ID'), + 'description' => E::ts('Token ID'), + 'required' => TRUE, + 'where' => 'civicrm_oauth_contact_token.id', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'readonly' => TRUE, + 'add' => '5.35', + ], + 'tag' => [ + 'name' => 'tag', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Tag'), + 'description' => E::ts('The tag specifies how this token will be used.'), + 'maxlength' => 128, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_oauth_contact_token.tag', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'client_id' => [ + 'name' => 'client_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => E::ts('Client ID'), + 'description' => E::ts('Client ID'), + 'where' => 'civicrm_oauth_contact_token.client_id', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'FKClassName' => 'CRM_OAuth_DAO_OAuthClient', + 'add' => '5.35', + ], + 'contact_id' => [ + 'name' => 'contact_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => E::ts('Contact ID'), + 'description' => E::ts('Contact ID'), + 'where' => 'civicrm_oauth_contact_token.contact_id', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'FKClassName' => 'CRM_Contact_DAO_Contact', + 'add' => '5.35', + ], + 'grant_type' => [ + 'name' => 'grant_type', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Grant type'), + 'description' => E::ts('Ex: authorization_code'), + 'maxlength' => 31, + 'size' => CRM_Utils_Type::MEDIUM, + 'where' => 'civicrm_oauth_contact_token.grant_type', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'scopes' => [ + 'name' => 'scopes', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Scopes'), + 'description' => E::ts('List of scopes addressed by this token'), + 'where' => 'civicrm_oauth_contact_token.scopes', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'serialize' => self::SERIALIZE_SEPARATOR_BOOKEND, + 'add' => '5.35', + ], + 'token_type' => [ + 'name' => 'token_type', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Token Type'), + 'description' => E::ts('Ex: Bearer or MAC'), + 'maxlength' => 128, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_oauth_contact_token.token_type', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'access_token' => [ + 'name' => 'access_token', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Access Token'), + 'description' => E::ts('Token to present when accessing resources'), + 'where' => 'civicrm_oauth_contact_token.access_token', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'expires' => [ + 'name' => 'expires', + 'type' => CRM_Utils_Type::T_INT, + 'title' => E::ts('Expiration time'), + 'description' => E::ts('Expiration time for the access_token (seconds since epoch)'), + 'where' => 'civicrm_oauth_contact_token.expires', + 'default' => '0', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'refresh_token' => [ + 'name' => 'refresh_token', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Refresh Token'), + 'description' => E::ts('Token to present when refreshing the access_token'), + 'where' => 'civicrm_oauth_contact_token.refresh_token', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'resource_owner_name' => [ + 'name' => 'resource_owner_name', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Resource Owner Name'), + 'description' => E::ts('Identifier for the resource owner. Structure varies by service.'), + 'maxlength' => 128, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_oauth_contact_token.resource_owner_name', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'resource_owner' => [ + 'name' => 'resource_owner', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Resource Owner'), + 'description' => E::ts('Cached details describing the resource owner'), + 'where' => 'civicrm_oauth_contact_token.resource_owner', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'serialize' => self::SERIALIZE_JSON, + 'add' => '5.35', + ], + 'error' => [ + 'name' => 'error', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Error'), + 'description' => E::ts('?? copied from OAuthSysToken'), + 'where' => 'civicrm_oauth_contact_token.error', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'serialize' => self::SERIALIZE_JSON, + 'add' => '5.35', + ], + 'raw' => [ + 'name' => 'raw', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Raw token'), + 'description' => E::ts('The token response data, per AccessToken::jsonSerialize'), + 'where' => 'civicrm_oauth_contact_token.raw', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'serialize' => self::SERIALIZE_JSON, + 'add' => '5.35', + ], + 'created_date' => [ + 'name' => 'created_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => E::ts('Created Date'), + 'description' => E::ts('When the token was created.'), + 'required' => FALSE, + 'where' => 'civicrm_oauth_contact_token.created_date', + 'default' => 'CURRENT_TIMESTAMP', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + 'modified_date' => [ + 'name' => 'modified_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => E::ts('Modified Date'), + 'description' => E::ts('When the token was created or modified.'), + 'required' => FALSE, + 'where' => 'civicrm_oauth_contact_token.modified_date', + 'default' => 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP', + 'table_name' => 'civicrm_oauth_contact_token', + 'entity' => 'OAuthContactToken', + 'bao' => 'CRM_OAuth_DAO_OAuthContactToken', + 'localizable' => 0, + 'add' => '5.35', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * 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() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'oauth_contact_token', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'oauth_contact_token', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = [ + 'UI_tag' => [ + 'name' => 'UI_tag', + 'field' => [ + 0 => 'tag', + ], + 'localizable' => FALSE, + 'sig' => 'civicrm_oauth_contact_token::0::tag', + ], + ]; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthSysToken.php b/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthSysToken.php index c39e59eec1..6e924542e9 100644 --- a/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthSysToken.php +++ b/civicrm/ext/oauth-client/CRM/OAuth/DAO/OAuthSysToken.php @@ -6,7 +6,7 @@ * * Generated from oauth-client/xml/schema/CRM/OAuth/OAuthSysToken.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:071b8b361ebc9d1b4867e4cef2172389) + * (GenCodeChecksum:75d2f40faea06bdd175a66124d1ac77d) */ use CRM_OAuth_ExtensionUtil as E; @@ -188,6 +188,7 @@ class CRM_OAuth_DAO_OAuthSysToken extends CRM_Core_DAO { 'entity' => 'OAuthSysToken', 'bao' => 'CRM_OAuth_DAO_OAuthSysToken', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '5.32', ], 'tag' => [ diff --git a/civicrm/ext/oauth-client/CRM/OAuth/Upgrader.php b/civicrm/ext/oauth-client/CRM/OAuth/Upgrader.php index acc937d6d6..ce471b7a8f 100644 --- a/civicrm/ext/oauth-client/CRM/OAuth/Upgrader.php +++ b/civicrm/ext/oauth-client/CRM/OAuth/Upgrader.php @@ -27,6 +27,18 @@ class CRM_OAuth_Upgrader extends CRM_OAuth_Upgrader_Base { ]); } + /** + * Add support for OAuthContactToken + * + * @return bool TRUE on success + * @throws Exception + */ + public function upgrade_0001(): bool { + $this->ctx->log->info('Applying update 0001'); + $this->executeSqlFile('sql/upgrade_0001.sql'); + return TRUE; + } + /** * Example: Run an external SQL script when the module is installed. * diff --git a/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Create.php b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Create.php new file mode 100644 index 0000000000..78055ededf --- /dev/null +++ b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Create.php @@ -0,0 +1,62 @@ +<?php + + +namespace Civi\Api4\Action\OAuthContactToken; + +use Civi\Api4\Generic\Result; + +class Create extends \Civi\Api4\Generic\DAOCreateAction { + + public function _run(Result $result) { + $this->fillContactIdFromTag(); + $this->assertPermissionForTokenContact(); + parent::_run($result); + } + + private function fillContactIdFromTag(): void { + if (isset($this->values['contact_id'])) { + return; + } + + $tag = $this->values['tag'] ?? NULL; + + if ('linkContact:' === substr($tag, 0, 12)) { + $this->values['contact_id'] = substr($tag, 12); + } + elseif ('nullContactId' === $tag) { + $this->values['contact_id'] = NULL; + } + elseif ('createContact' === $tag) { + $contact = \CRM_OAuth_ContactFromToken::createContact($this->values); + $this->values['contact_id'] = $contact['id']; + } + else { + $this->values['contact_id'] = \CRM_Core_Session::singleton() + ->getLoggedInContactID(); + } + } + + /** + * @throws \Civi\API\Exception\UnauthorizedException + */ + private function assertPermissionForTokenContact(): void { + if (!$this->getCheckPermissions()) { + return; + } + if (\CRM_Core_Permission::check('manage all OAuth contact tokens')) { + return; + } + if (\CRM_Core_Permission::check('manage my OAuth contact tokens')) { + $loggedInContactID = \CRM_Core_Session::singleton() + ->getLoggedInContactID(); + $tokenContactID = $this->values['contact_id'] ?? NULL; + if ($loggedInContactID == $tokenContactID) { + return; + } + } + throw new \Civi\API\Exception\UnauthorizedException(ts( + "You do not have permission to create OAuth tokens for contact id %1", + [1 => $tokenContactID])); + } + +} diff --git a/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Delete.php b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Delete.php new file mode 100644 index 0000000000..d0d02bc1ae --- /dev/null +++ b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Delete.php @@ -0,0 +1,10 @@ +<?php + + +namespace Civi\Api4\Action\OAuthContactToken; + +class Delete extends \Civi\Api4\Generic\DAODeleteAction { + + use OnlyModifyOwnTokensTrait; + +} diff --git a/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Get.php b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Get.php new file mode 100644 index 0000000000..346dd90883 --- /dev/null +++ b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Get.php @@ -0,0 +1,29 @@ +<?php + + +namespace Civi\Api4\Action\OAuthContactToken; + +class Get extends \Civi\Api4\Generic\DAOGetAction { + + protected function setDefaultWhereClause() { + $this->applyContactTokenPermissions(); + parent::setDefaultWhereClause(); + } + + private function applyContactTokenPermissions() { + if (!$this->getCheckPermissions()) { + return; + } + if (\CRM_Core_Permission::check(['manage all OAuth contact tokens'])) { + return; + } + if (\CRM_Core_Permission::check(['manage my OAuth contact tokens'])) { + $loggedInContactID = \CRM_Core_Session::singleton() + ->getLoggedInContactID(); + $this->addWhere('contact_id', '=', $loggedInContactID); + return; + } + throw new \Civi\API\Exception\UnauthorizedException(ts('Insufficient permissions to get contact tokens')); + } + +} diff --git a/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/OnlyModifyOwnTokensTrait.php b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/OnlyModifyOwnTokensTrait.php new file mode 100644 index 0000000000..77817ab4aa --- /dev/null +++ b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/OnlyModifyOwnTokensTrait.php @@ -0,0 +1,31 @@ +<?php + +namespace Civi\Api4\Action\OAuthContactToken; + +trait OnlyModifyOwnTokensTrait { + + public function isAuthorized(): bool { + if (\CRM_Core_Permission::check(['manage all OAuth contact tokens'])) { + return TRUE; + } + if (!\CRM_Core_Permission::check(['manage my OAuth contact tokens'])) { + return FALSE; + } + $loggedInContactID = \CRM_Core_Session::singleton()->getLoggedInContactID(); + foreach ($this->where as $clause) { + [$field, $op, $val] = $clause; + if ($field !== 'contact_id') { + continue; + } + if (($op === '=' || $op === 'LIKE') && $val != $loggedInContactID) { + return FALSE; + } + if ($op === 'IN' && $val != [$loggedInContactID]) { + return FALSE; + } + } + $this->addWhere('contact_id', '=', $loggedInContactID); + return TRUE; + } + +} diff --git a/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Update.php b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Update.php new file mode 100644 index 0000000000..954566a652 --- /dev/null +++ b/civicrm/ext/oauth-client/Civi/Api4/Action/OAuthContactToken/Update.php @@ -0,0 +1,10 @@ +<?php + + +namespace Civi\Api4\Action\OAuthContactToken; + +class Update extends \Civi\Api4\Generic\DAOUpdateAction { + + use OnlyModifyOwnTokensTrait; + +} diff --git a/civicrm/ext/oauth-client/Civi/Api4/OAuthClient.php b/civicrm/ext/oauth-client/Civi/Api4/OAuthClient.php index decfad9cec..cc70d604c4 100644 --- a/civicrm/ext/oauth-client/Civi/Api4/OAuthClient.php +++ b/civicrm/ext/oauth-client/Civi/Api4/OAuthClient.php @@ -1,4 +1,5 @@ <?php + namespace Civi\Api4; use Civi\Api4\Action\OAuthClient\Create; @@ -27,9 +28,10 @@ class OAuthClient extends Generic\DAOEntity { * Initiate the "Authorization Code" workflow. * * @param bool $checkPermissions + * * @return \Civi\Api4\Action\OAuthClient\AuthorizationCode */ - public static function authorizationCode($checkPermissions = TRUE) { + public static function authorizationCode($checkPermissions = TRUE): Action\OAuthClient\AuthorizationCode { $action = new \Civi\Api4\Action\OAuthClient\AuthorizationCode(static::class, __FUNCTION__); return $action->setCheckPermissions($checkPermissions); } @@ -38,9 +40,10 @@ class OAuthClient extends Generic\DAOEntity { * Request access with client credentials * * @param bool $checkPermissions + * * @return \Civi\Api4\Action\OAuthClient\ClientCredential */ - public static function clientCredential($checkPermissions = TRUE) { + public static function clientCredential($checkPermissions = TRUE): Action\OAuthClient\ClientCredential { $action = new \Civi\Api4\Action\OAuthClient\ClientCredential(static::class, __FUNCTION__); return $action->setCheckPermissions($checkPermissions); } @@ -49,17 +52,25 @@ class OAuthClient extends Generic\DAOEntity { * Request access with a username and password. * * @param bool $checkPermissions + * * @return \Civi\Api4\Action\OAuthClient\UserPassword */ - public static function userPassword($checkPermissions = TRUE) { + public static function userPassword($checkPermissions = TRUE): Action\OAuthClient\UserPassword { $action = new \Civi\Api4\Action\OAuthClient\UserPassword(static::class, __FUNCTION__); return $action->setCheckPermissions($checkPermissions); } - public static function permissions() { + public static function permissions(): array { return [ 'meta' => ['access CiviCRM'], 'default' => ['manage OAuth client'], + 'get' => [ + [ + 'manage OAuth client', + 'manage my OAuth contact tokens', + 'manage all OAuth contact tokens', + ], + ], ]; } diff --git a/civicrm/ext/oauth-client/Civi/Api4/OAuthContactToken.php b/civicrm/ext/oauth-client/Civi/Api4/OAuthContactToken.php new file mode 100644 index 0000000000..59cd596251 --- /dev/null +++ b/civicrm/ext/oauth-client/Civi/Api4/OAuthContactToken.php @@ -0,0 +1,47 @@ +<?php + + +namespace Civi\Api4; + +/** + * OAuthContactToken entity. + * + * Provided by the OAuth Client extension. + * + * @package Civi\Api4 + */ +class OAuthContactToken extends Generic\DAOEntity { + + public static function create($checkPermissions = TRUE) { + $action = new Action\OAuthContactToken\Create(static::class, __FUNCTION__); + return $action->setCheckPermissions($checkPermissions); + } + + public static function get($checkPermissions = TRUE) { + $action = new Action\OAuthContactToken\Get(static::class, __FUNCTION__); + return $action->setCheckPermissions($checkPermissions); + } + + public static function update($checkPermissions = TRUE) { + $action = new Action\OAuthContactToken\Update(static::class, __FUNCTION__); + return $action->setCheckPermissions($checkPermissions); + } + + public static function delete($checkPermissions = TRUE) { + $action = new Action\OAuthContactToken\Delete(static::class, __FUNCTION__); + return $action->setCheckPermissions($checkPermissions); + } + + public static function permissions(): array { + return [ + 'meta' => ['access CiviCRM'], + 'default' => [ + [ + 'manage my OAuth contact tokens', + 'manage all OAuth contact tokens', + ], + ], + ]; + } + +} diff --git a/civicrm/ext/oauth-client/Civi/OAuth/OAuthTokenFacade.php b/civicrm/ext/oauth-client/Civi/OAuth/OAuthTokenFacade.php index dcad4770bf..58a9c3edd2 100644 --- a/civicrm/ext/oauth-client/Civi/OAuth/OAuthTokenFacade.php +++ b/civicrm/ext/oauth-client/Civi/OAuth/OAuthTokenFacade.php @@ -6,7 +6,7 @@ use League\OAuth2\Client\Provider\ResourceOwnerInterface; class OAuthTokenFacade { - const STORAGE_TYPES = ';^OAuthSysToken$;'; + const STORAGE_TYPES = ';^OAuth(Sys|Contact)Token$;'; /** * Request and store a token. @@ -14,24 +14,28 @@ class OAuthTokenFacade { * @param array $options * With some mix of the following: * - client: array, the OAuthClient record - * - scope: array|string|null, list of scopes to request. if omitted, inherit default from client/provider + * - scope: array|string|null, list of scopes to request. if omitted, + * inherit default from client/provider * - storage: string, default: "OAuthSysToken" * - tag: string|null, a symbolic/freeform identifier for looking-up tokens - * - grant_type: string, ex "authorization_code", "client_credentials", "password" - * - cred: array, extra credentialing options to pass to the "token" URL (via getAccessToken($tokenOptions)), - * eg "username", "password", "code" + * - grant_type: string, ex "authorization_code", "client_credentials", + * "password" + * - cred: array, extra credentialing options to pass to the "token" URL + * (via getAccessToken($tokenOptions)), eg "username", "password", "code" + * * @return array * @throws \API_Exception * @see \League\OAuth2\Client\Provider\AbstractProvider::getAccessToken() */ - public function init($options) { + public function init($options): array { $options['storage'] = $options['storage'] ?? 'OAuthSysToken'; if (!preg_match(self::STORAGE_TYPES, $options['storage'])) { throw new \API_Exception("Invalid token storage ({$options['storage']})"); } /** @var \League\OAuth2\Client\Provider\GenericProvider $provider */ - $provider = \Civi::service('oauth2.league')->createProvider($options['client']); + $provider = \Civi::service('oauth2.league') + ->createProvider($options['client']); $scopeSeparator = $this->callProtected($provider, 'getScopeSeparator'); $sendOptions = $options['cred'] ?? []; @@ -60,7 +64,9 @@ class OAuthTokenFacade { 'refresh_token' => $accessToken->getRefreshToken(), 'expires' => $accessToken->getExpires(), 'raw' => $accessToken->jsonSerialize(), + 'storage' => $options['storage'], ]; + try { $owner = $provider->getResourceOwner($accessToken); $tokenRecord['resource_owner_name'] = $this->findName($owner); @@ -82,9 +88,10 @@ class OAuthTokenFacade { * @param mixed $obj * @param string $method * @param array $args + * * @return mixed */ - protected function callProtected($obj, $method, $args = []) { + protected function callProtected($obj, string $method, $args = []) { $r = new \ReflectionMethod(get_class($obj), $method); $r->setAccessible(TRUE); return $r->invokeArgs($obj, $args); @@ -93,9 +100,10 @@ class OAuthTokenFacade { /** * @param string $delim * @param string|array|null $scopes + * * @return array|null */ - protected function splitScopes($delim, $scopes) { + protected function splitScopes(string $delim, $scopes) { if ($scopes === NULL || is_array($scopes)) { return $scopes; } @@ -111,7 +119,7 @@ class OAuthTokenFacade { return NULL; } - protected function implodeScopes($delim, $scopes) { + protected function implodeScopes($delim, $scopes): ?string { if ($scopes === NULL || is_string($scopes)) { return $scopes; } @@ -125,6 +133,9 @@ class OAuthTokenFacade { } protected function findName(ResourceOwnerInterface $owner) { + if (method_exists($owner, 'getName')) { + return $owner->getName(); + } $values = $owner->toArray(); $fields = ['upn', 'userPrincipalName', 'mail', 'email', 'id']; foreach ($fields as $field) { diff --git a/civicrm/ext/oauth-client/info.xml b/civicrm/ext/oauth-client/info.xml index 0a07417b6f..8fd908977d 100644 --- a/civicrm/ext/oauth-client/info.xml +++ b/civicrm/ext/oauth-client/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-23</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <develStage>stable</develStage> <compatibility> <ver>5.38</ver> @@ -25,7 +25,7 @@ </requires> <comments>This extension provides a framework for oauth support</comments> <classloader> - <psr0 prefix="CRM_" path="" /> + <psr0 prefix="CRM_" path=""/> <psr4 prefix="Civi\" path="Civi"/> </classloader> <upgrader>CRM_OAuth_Upgrader</upgrader> diff --git a/civicrm/ext/oauth-client/oauth_client.civix.php b/civicrm/ext/oauth-client/oauth_client.civix.php index 64892d344e..0347786a07 100644 --- a/civicrm/ext/oauth-client/oauth_client.civix.php +++ b/civicrm/ext/oauth-client/oauth_client.civix.php @@ -221,7 +221,8 @@ function _oauth_client_civix_upgrader() { * Search directory tree for files which match a glob pattern. * * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() + * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only + * for backward compatibility of extension code that uses it. * * @param string $dir base dir * @param string $pattern , glob pattern, eg "*.txt" @@ -229,32 +230,7 @@ function _oauth_client_civix_upgrader() { * @return array */ function _oauth_client_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_oauth_client_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; + return CRM_Utils_File::findFiles($dir, $pattern); } /** @@ -479,6 +455,11 @@ function _oauth_client_civix_civicrm_entityTypes(&$entityTypes) { 'class' => 'CRM_OAuth_DAO_OAuthClient', 'table' => 'civicrm_oauth_client', ], + 'CRM_OAuth_DAO_OAuthContactToken' => [ + 'name' => 'OAuthContactToken', + 'class' => 'CRM_OAuth_DAO_OAuthContactToken', + 'table' => 'civicrm_oauth_contact_token', + ], 'CRM_OAuth_DAO_OAuthSysToken' => [ 'name' => 'OAuthSysToken', 'class' => 'CRM_OAuth_DAO_OAuthSysToken', diff --git a/civicrm/ext/oauth-client/oauth_client.php b/civicrm/ext/oauth-client/oauth_client.php index 84930ee6c4..91bd0f85e5 100644 --- a/civicrm/ext/oauth-client/oauth_client.php +++ b/civicrm/ext/oauth-client/oauth_client.php @@ -51,6 +51,18 @@ function oauth_client_civicrm_permission(&$permissions) { $prefix . ts('manage OAuth client secrets'), ts('Access OAuth secrets'), ]; + $permissions['create OAuth tokens via auth code flow'] = [ + $prefix . ts('create OAuth tokens via auth code flow'), + ts('Create OAuth tokens via the authorization code flow'), + ]; + $permissions['manage my OAuth contact tokens'] = [ + $prefix . ts('manage my OAuth contact tokens'), + ts("Manage user's own OAuth tokens"), + ]; + $permissions['manage all OAuth contact tokens'] = [ + $prefix . ts('manage all OAuth contact tokens'), + ts("Manage OAuth tokens for all contacts"), + ]; } /** diff --git a/civicrm/ext/oauth-client/phpunit.xml.dist b/civicrm/ext/oauth-client/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/oauth-client/phpunit.xml.dist +++ b/civicrm/ext/oauth-client/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/oauth-client/sql/auto_install.sql b/civicrm/ext/oauth-client/sql/auto_install.sql index b5297d59d3..dbb478e5c0 100644 --- a/civicrm/ext/oauth-client/sql/auto_install.sql +++ b/civicrm/ext/oauth-client/sql/auto_install.sql @@ -10,7 +10,6 @@ -- DO NOT EDIT. Generated by CRM_Core_CodeGen -- - -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | @@ -24,13 +23,14 @@ -- -- /******************************************************* -- * --- * Clean up the exisiting tables +-- * Clean up the existing tables -- * -- *******************************************************/ SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `civicrm_oauth_systoken`; +DROP TABLE IF EXISTS `civicrm_oauth_contact_token`; DROP TABLE IF EXISTS `civicrm_oauth_client`; SET FOREIGN_KEY_CHECKS=1; @@ -55,19 +55,53 @@ CREATE TABLE `civicrm_oauth_client` ( `options` text COMMENT 'Extra override options for the service (JSON)', `is_active` tinyint NOT NULL DEFAULT 1 COMMENT 'Is the client currently enabled?', `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the client was created.', - `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the client was created or modified.' + `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the client was created or modified.' , PRIMARY KEY (`id`) - + , INDEX `UI_provider`( provider ) , INDEX `UI_guid`( guid ) - - -) ; + + +) ENGINE=InnoDB ; + +-- /******************************************************* +-- * +-- * civicrm_oauth_contact_token +-- * +-- *******************************************************/ +CREATE TABLE `civicrm_oauth_contact_token` ( + + + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Token ID', + `tag` varchar(128) COMMENT 'The tag specifies how this token will be used.', + `client_id` int unsigned COMMENT 'Client ID', + `contact_id` int unsigned COMMENT 'Contact ID', + `grant_type` varchar(31) COMMENT 'Ex: authorization_code', + `scopes` text COMMENT 'List of scopes addressed by this token', + `token_type` varchar(128) COMMENT 'Ex: Bearer or MAC', + `access_token` text COMMENT 'Token to present when accessing resources', + `expires` int unsigned DEFAULT 0 COMMENT 'Expiration time for the access_token (seconds since epoch)', + `refresh_token` text COMMENT 'Token to present when refreshing the access_token', + `resource_owner_name` varchar(128) COMMENT 'Identifier for the resource owner. Structure varies by service.', + `resource_owner` text COMMENT 'Cached details describing the resource owner', + `error` text COMMENT '?? copied from OAuthSysToken', + `raw` text COMMENT 'The token response data, per AccessToken::jsonSerialize', + `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the token was created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the token was created or modified.' +, + PRIMARY KEY (`id`) + + , INDEX `UI_tag`( + tag + ) + +, CONSTRAINT FK_civicrm_oauth_contact_token_client_id FOREIGN KEY (`client_id`) REFERENCES `civicrm_oauth_client`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_oauth_contact_token_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB ; -- /******************************************************* -- * @@ -91,15 +125,14 @@ CREATE TABLE `civicrm_oauth_systoken` ( `error` text COMMENT 'List of scopes addressed by this token', `raw` text COMMENT 'The token response data, per AccessToken::jsonSerialize', `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the token was created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the token was created or modified.' + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the token was created or modified.' , PRIMARY KEY (`id`) - + , INDEX `UI_tag`( tag ) - -, CONSTRAINT FK_civicrm_oauth_systoken_client_id FOREIGN KEY (`client_id`) REFERENCES `civicrm_oauth_client`(`id`) ON DELETE CASCADE -) ; - \ No newline at end of file +, CONSTRAINT FK_civicrm_oauth_systoken_client_id FOREIGN KEY (`client_id`) REFERENCES `civicrm_oauth_client`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB ; + diff --git a/civicrm/ext/oauth-client/sql/auto_uninstall.sql b/civicrm/ext/oauth-client/sql/auto_uninstall.sql index db6fecf209..a3c96fd566 100644 --- a/civicrm/ext/oauth-client/sql/auto_uninstall.sql +++ b/civicrm/ext/oauth-client/sql/auto_uninstall.sql @@ -11,13 +11,14 @@ -- -- /******************************************************* -- * --- * Clean up the exisiting tables +-- * Clean up the existing tables -- * -- *******************************************************/ SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `civicrm_oauth_systoken`; +DROP TABLE IF EXISTS `civicrm_oauth_contact_token`; DROP TABLE IF EXISTS `civicrm_oauth_client`; SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/civicrm/ext/oauth-client/tests/phpunit/Civi/OAuth/AuthCodeFlowTest.php b/civicrm/ext/oauth-client/tests/phpunit/Civi/OAuth/AuthCodeFlowTest.php index 250d5c6ef8..94579c9c25 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/Civi/OAuth/AuthCodeFlowTest.php +++ b/civicrm/ext/oauth-client/tests/phpunit/Civi/OAuth/AuthCodeFlowTest.php @@ -37,7 +37,7 @@ class AuthCodeFlowTest extends \PHPUnit\Framework\TestCase implements $providers = array_merge($providers, $this->providers); } - public function makeDummyProviderThatGetsAToken(): void { + public function makeDummyProviderThatGetsAToken(): array { $idTokenHeader = ['alg' => 'RS256', 'kid' => '123456789', 'typ' => 'JWT']; $idTokenPayload = [ 'iss' => 'https://dummy', @@ -102,6 +102,8 @@ class AuthCodeFlowTest extends \PHPUnit\Framework\TestCase implements ]; require_once 'tests/fixtures/DummyProvider.php'; + + return $this->providers; } public function makeDummyProviderClient(): array { @@ -114,7 +116,7 @@ class AuthCodeFlowTest extends \PHPUnit\Framework\TestCase implements )->execute()->single(); } - public function testFetchAndStoreSysToken() { + public function testSysToken_FetchAndStore() { $this->makeDummyProviderThatGetsAToken(); $client = $this->makeDummyProviderClient(); @@ -155,4 +157,235 @@ class AuthCodeFlowTest extends \PHPUnit\Framework\TestCase implements $tokenRecord['resource_owner']); } + public function testContactToken_AnonymousUser_LinkExistingContactRecord() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + + $this->assertNull(\CRM_Core_Session::singleton()->getLoggedInContactID()); + $notLoggedInContactID = \Civi\Api4\Contact::get(FALSE) + ->setSelect(['id']) + ->setLimit(1) + ->execute() + ->single()['id']; + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // Assuming we set the tag to $notLoggedInContactID in the call to + // Civi\Api4\OAuthClient::authorizationCode(), this is the call that + // \CRM_OAuth_Page_Return::run would make upon receiving an auth code. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => "linkContact:$notLoggedInContactID", + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertEquals($notLoggedInContactID, $tokenRecord['contact_id']); + } + + public function testContactToken_AnonymousUser_SetNullContactId() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + + $this->assertNull(\CRM_Core_Session::singleton()->getLoggedInContactID()); + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // Assuming we set tag='nullContactId' in the call to Civi\Api4\OAuthClient::authorizationCode(), + // this is the call that \CRM_OAuth_Page_Return::run would make upon receiving an auth code. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => 'nullContactId', + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertNull($tokenRecord['contact_id']); + } + + public function testContactToken_AnonymousUser_CreateContact() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + + $this->assertNull(\CRM_Core_Session::singleton()->getLoggedInContactID()); + $notLoggedInContactID = \Civi\Api4\Contact::get(FALSE) + ->addSelect('id') + ->addOrderBy('id', 'DESC') + ->setLimit(1) + ->execute() + ->single()['id']; + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // Assuming we set tag='createContact' when calling Civi\Api4\OAuthClient::authorizationCode(), + // this is the call that \CRM_OAuth_Page_Return::run would make upon receiving an auth code. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => "createContact", + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertGreaterThan($notLoggedInContactID, $tokenRecord['contact_id']); + $contact = \Civi\Api4\Contact::get(0) + ->addWhere('id', '=', $tokenRecord['contact_id']) + ->addJoin('Email AS email') + ->addSelect('email.email') + ->execute()->single(); + $this->assertEquals('test@baz.biff', $contact['email.email']); + } + + public function testContactToken_LoggedInUser_Default() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + $loggedInContactID = $this->createLoggedInUser(); + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // This is what \CRM_OAuth_Page_Return::run would call upon receiving an auth code, + // assuming we hadn't set any tag earlier in the process. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => NULL, + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertEquals($loggedInContactID, $tokenRecord['contact_id']); + } + + public function testContactToken_LoggedInUser_LinkOtherContact() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + $loggedInContactID = $this->createLoggedInUser(); + $notLoggedInContactID = \Civi\Api4\Contact::get(FALSE) + ->setSelect(['id']) + ->setLimit(1) + ->execute() + ->single()['id']; + $this->assertNotEquals($loggedInContactID, $notLoggedInContactID); + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // Assuming we set tag="linkContact:$notLoggedInContactID" when invoking + // Civi\Api4\OAuthClient::authorizationCode(), this is the call that + // CRM_OAuth_Page_Return::run would make upon receiving an auth code. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => "linkContact:$notLoggedInContactID", + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertEquals($notLoggedInContactID, $tokenRecord['contact_id']); + } + + public function testContactToken_LoggedInUser_CreateContact() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + $loggedInContactID = $this->createLoggedInUser(); + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // Assuming we set tag='createContact' when calling Civi\Api4\OAuthClient::authorizationCode(), + // this is the call that \CRM_OAuth_Page_Return::run would make upon receiving an auth code. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => "createContact", + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertGreaterThan($loggedInContactID, $tokenRecord['contact_id']); + $contact = \Civi\Api4\Contact::get(0) + ->addWhere('id', '=', $tokenRecord['contact_id']) + ->addJoin('Email AS email') + ->addSelect('email.email') + ->execute()->single(); + $this->assertEquals('test@baz.biff', $contact['email.email']); + } + + public function testContactToken_LoggedInUser_SetNullContactId() { + $this->makeDummyProviderThatGetsAToken(); + $client = $this->makeDummyProviderClient(); + $loggedInContactID = $this->createLoggedInUser(); + + /** @var OAuthTokenFacade $tokenService */ + $tokenService = \Civi::service('oauth2.token'); + + // Assuming we set tag="nullContactId" when invoking + // Civi\Api4\OAuthClient::authorizationCode(), this is the call that + // CRM_OAuth_Page_Return::run would make upon receiving an auth code. + $tokenRecord = $tokenService->init( + [ + 'client' => $client, + 'scope' => 'foo', + 'tag' => "nullContactId", + 'storage' => 'OAuthContactToken', + 'grant_type' => 'authorization_code', + 'cred' => ['code' => 'example-auth-code'], + ] + ); + $this->assertTrue(is_numeric($tokenRecord['id'])); + $this->assertEquals($client['id'], $tokenRecord['client_id']); + $this->assertEquals(['foo'], $tokenRecord['scopes']); + $this->assertEquals('example-access-token-value', $tokenRecord['access_token']); + $this->assertEquals('example-refresh-token-value', $tokenRecord['refresh_token']); + $this->assertNull($tokenRecord['contact_id']); + } + } diff --git a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthContactTokenTest.php b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthContactTokenTest.php new file mode 100644 index 0000000000..131bf6d73f --- /dev/null +++ b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthContactTokenTest.php @@ -0,0 +1,345 @@ +<?php + +use Civi\Test\HeadlessInterface; +use Civi\Test\HookInterface; +use Civi\Test\TransactionalInterface; + +/** + * Create, read, and destroy contact-specific OAuth tokens + * + * A logged in user who has permission to "manage my OAuth contact tokens" + * can create tokens associated with their own contact id, and can + * read/update/delete those tokens if they have at least view access + * to their own contact record. + * + * A user who has permission to "manage all OAuth contact tokens" can create + * tokens associated with any contact, and can read/update/delete tokens + * associated with any contact for whom they have at least view access. + * + * Users who have either of the "manage OAuth contact tokens" permissions can + * also get basic OAuthClient information, NOT including the client's secret. + * + * @group headless + */ +class api_v4_OAuthContactTokenTest extends \PHPUnit\Framework\TestCase implements + HeadlessInterface, + HookInterface, + TransactionalInterface { + + use Civi\Test\ContactTestTrait; + use \Civi\Test\Api3TestTrait; + + private $hookEvents; + + public function setUpHeadless(): \Civi\Test\CiviEnvBuilder { + // Civi\Test has many helpers, like install(), uninstall(), sql(), and sqlFile(). + // See: https://docs.civicrm.org/dev/en/latest/testing/phpunit/#civitest + return \Civi\Test::headless()->install('oauth-client')->apply(); + } + + public function setUp(): void { + parent::setUp(); + $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_oauth_client')); + $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_oauth_contact_token')); + } + + public function tearDown(): void { + parent::tearDown(); + } + + private function createClient(): ?array { + $createClient = Civi\Api4\OAuthClient::create(FALSE)->setValues( + [ + 'provider' => 'test_example_1', + 'guid' => "example-client-guid", + 'secret' => "example-secret", + ] + )->execute(); + $client = $createClient->first(); + $this->assertTrue(is_numeric($client['id'])); + return $client; + } + + private function createTestContactIDs(): array { + $notLoggedInContactID = Civi\Api4\Contact::get(FALSE) + ->setSelect(['id']) + ->setLimit(1) + ->execute() + ->single()['id']; + $loggedInContactID = $this->createLoggedInUser(); + return [$loggedInContactID, $notLoggedInContactID]; + } + + private function usePerms(array $permissions) { + $base = ['access CiviCRM']; + CRM_Core_Config::singleton()->userPermissionClass->permissions = array_merge($base, $permissions); + if ($cid = CRM_Core_Session::singleton()->getLoggedInContactID()) { + CRM_ACL_BAO_Cache::deleteContactCacheEntry($cid); + CRM_Contact_BAO_Contact_Permission::cache($cid, CRM_Core_Permission::VIEW, TRUE); + } + } + + private function getTestTokenCreateValues($client, $contactId, $prefix) { + return [ + 'client_id' => $client['id'], + 'contact_id' => $contactId, + 'access_token' => "$prefix-user-access-token", + 'refresh_token' => "$prefix-user-refresh-token", + ]; + } + + private function makeToken(array $values): ?array { + return Civi\Api4\OAuthContactToken::create(FALSE) + ->setValues($values) + ->execute() + ->first(); + } + + private function createOwnAndStrangerTokens( + $client, + $loggedInContactID, + $notLoggedInContactID + ): array { + $ownTokenCreationVals = $this->getTestTokenCreateValues( + $client, $loggedInContactID, 'own'); + $strangerTokenCreationVals = $this->getTestTokenCreateValues( + $client, $notLoggedInContactID, 'other'); + return [ + $this->makeToken($ownTokenCreationVals), + $this->makeToken($strangerTokenCreationVals), + ]; + } + + public function hook_civicrm_post($op, $objectName, $objectId, &$objectRef) { + if ($objectName === 'OAuthContactToken') { + $this->hookEvents['post'][] = func_get_args(); + } + } + + public function testGetClientDetails() { + $createClient = $this->createClient(); + + $this->usePerms(['manage my OAuth contact tokens']); + $getClient = Civi\Api4\OAuthClient::get() + ->addWhere('id', '=', $createClient['id']) + ->execute() + ->single(); + $this->assertEquals($createClient['guid'], $getClient['guid']); + $this->assertEquals($createClient['provider'], $getClient['provider']); + $this->assertArrayNotHasKey('secret', $getClient); + } + + public function testCreate() { + $client = $this->createClient(); + [$loggedInContactID, $notLoggedInContactID] = $this->createTestContactIDs(); + $ownTokenCreateVals = $this->getTestTokenCreateValues( + $client, $loggedInContactID, 'own'); + $strangerTokenCreateVals = $this->getTestTokenCreateValues( + $client, $notLoggedInContactID, 'other'); + + $this->usePerms(['manage all OAuth contact tokens']); + $createOtherContactToken = Civi\Api4\OAuthContactToken::create() + ->setValues($strangerTokenCreateVals) + ->execute(); + $token = $createOtherContactToken->first(); + $tokenIDOfDifferentContact = $token['id']; + $this->assertTrue(is_numeric($tokenIDOfDifferentContact)); + $this->assertEquals($client['id'], $token['client_id']); + $this->assertEquals($notLoggedInContactID, $token['contact_id']); + $this->assertEquals($strangerTokenCreateVals['access_token'], $token['access_token']); + $this->assertEquals($strangerTokenCreateVals['refresh_token'], $token['refresh_token']); + + $this->usePerms(['manage my OAuth contact tokens']); + $createOwnToken = Civi\Api4\OAuthContactToken::create() + ->setValues($ownTokenCreateVals) + ->execute(); + $token = $createOwnToken->first(); + $tokenIDOfLoggedInContact = $token['id']; + $this->assertTrue(is_numeric($tokenIDOfLoggedInContact)); + $this->assertEquals($client['id'], $token['client_id']); + $this->assertEquals($loggedInContactID, $token['contact_id']); + $this->assertEquals($ownTokenCreateVals['access_token'], $token['access_token']); + $this->assertEquals($ownTokenCreateVals['refresh_token'], $token['refresh_token']); + + $this->usePerms(['manage my OAuth contact tokens']); + try { + Civi\Api4\OAuthContactToken::create() + ->setValues($strangerTokenCreateVals) + ->execute(); + $this->fail('Expected \Civi\API\Exception\UnauthorizedException but none was thrown'); + } + catch (\Civi\API\Exception\UnauthorizedException $e) { + // exception successfully thrown + } + } + + public function testRead() { + $client = $this->createClient(); + [$loggedInContactID, $notLoggedInContactID] = $this->createTestContactIDs(); + $ownTokenCreationVals = $this->getTestTokenCreateValues( + $client, $loggedInContactID, 'own'); + $this->createOwnAndStrangerTokens($client, $loggedInContactID, $notLoggedInContactID); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $getTokensWithFullAccess = Civi\Api4\OAuthContactToken::get()->execute(); + $this->assertCount(2, $getTokensWithFullAccess); + + $this->usePerms(['manage my OAuth contact tokens', 'view my contact']); + $getTokensWithOwnAccess = Civi\Api4\OAuthContactToken::get()->execute(); + $this->assertCount(1, $getTokensWithOwnAccess); + $token = $getTokensWithOwnAccess->first(); + $this->assertEquals($client['id'], $token['client_id']); + $this->assertEquals($loggedInContactID, $token['contact_id']); + $this->assertEquals($ownTokenCreationVals['access_token'], $token['access_token']); + $this->assertEquals($ownTokenCreationVals['refresh_token'], $token['refresh_token']); + + $this->usePerms(['manage my OAuth contact tokens', 'view my contact']); + $getTokensForWrongContact = Civi\Api4\OAuthContactToken::get() + ->addWhere('contact_id', '=', $notLoggedInContactID) + ->execute(); + $this->assertCount(0, $getTokensForWrongContact); + + $this->usePerms(['manage all OAuth contact tokens']); + $getTokensWithNoContactAccess = Civi\Api4\OAuthContactToken::get() + ->execute(); + $this->assertCount(0, $getTokensWithNoContactAccess); + } + + public function testUpdate() { + $client = $this->createClient(); + [$loggedInContactID, $notLoggedInContactID] = $this->createTestContactIDs(); + [ + $ownContactToken, + $strangerContactToken, + ] = $this->createOwnAndStrangerTokens( + $client, + $loggedInContactID, + $notLoggedInContactID + ); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $updateTokensWithFullAccess = Civi\Api4\OAuthContactToken::update() + ->addWhere('contact_id', '=', $notLoggedInContactID) + ->setValues(['access_token' => 'stranger-token-revised']) + ->execute(); + $this->assertCount(1, $updateTokensWithFullAccess); + $token = $updateTokensWithFullAccess->first(); + $this->assertEquals($strangerContactToken['id'], $token['id']); + + $this->usePerms(['manage my OAuth contact tokens', 'view my contact']); + $updateTokensWithLimitedAccess = Civi\Api4\OAuthContactToken::update() + ->addWhere('client.guid', '=', $client['guid']) + ->setValues(['access_token' => 'own-token-revised']) + ->execute(); + $this->assertCount(1, $updateTokensWithLimitedAccess); + $token = $updateTokensWithLimitedAccess->first(); + $this->assertEquals($ownContactToken['id'], $token['id']); + + $this->usePerms(['manage my OAuth contact tokens', 'view my contact']); + $getUpdatedTokensWithLimitedAccess = Civi\Api4\OAuthContactToken::get() + ->execute(); + $this->assertCount(1, $getUpdatedTokensWithLimitedAccess); + $token = $getUpdatedTokensWithLimitedAccess->first(); + $this->assertEquals($loggedInContactID, $token['contact_id']); + $this->assertEquals("own-token-revised", $token['access_token']); + + $this->usePerms(['manage my OAuth contact tokens', 'view my contact']); + try { + Civi\Api4\OAuthContactToken::update() + ->addWhere('contact_id', '=', $notLoggedInContactID) + ->setValues(['access_token' => "stranger-token-revised"]) + ->execute(); + $this->fail('Expected \Civi\API\Exception\UnauthorizedException but none was thrown'); + } + catch (\Civi\API\Exception\UnauthorizedException $e) { + // exception successfully thrown + } + + $this->usePerms(['manage my OAuth contact tokens', 'view my contact']); + $updateTokensForWrongContact = Civi\Api4\OAuthContactToken::update() + ->addWhere('contact.id', '=', $notLoggedInContactID) + // ^ sneaky way to update a different contact? + ->setValues(['access_token' => "stranger-token-revised"]) + ->execute(); + $this->assertCount(0, $updateTokensForWrongContact); + } + + public function testDelete() { + $client = $this->createClient(); + [$loggedInContactID, $notLoggedInContactID] = $this->createTestContactIDs(); + $this->createOwnAndStrangerTokens($client, $loggedInContactID, $notLoggedInContactID); + + $this->usePerms(['manage my OAuth contact tokens', 'view all contacts']); + $deleteTokensWithLimitedAccess = Civi\Api4\OAuthContactToken::delete() + ->setWhere([['client.guid', '=', $client['guid']]]) + ->execute(); + + $this->usePerms(['manage my OAuth contact tokens', 'view all contacts']); + $getTokensWithLimitedAccess = Civi\Api4\OAuthContactToken::get()->execute(); + $this->assertCount(0, $getTokensWithLimitedAccess); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $getTokensWithFullAccess = Civi\Api4\OAuthContactToken::get()->execute(); + $this->assertCount(1, $getTokensWithFullAccess); + + $this->usePerms(['manage my OAuth contact tokens', 'view all contacts']); + $this->expectException(\Civi\API\Exception\UnauthorizedException::class); + Civi\Api4\OAuthContactToken::delete() + ->addWhere('contact_id', '=', $notLoggedInContactID) + ->execute(); + } + + public function testGetByScope() { + $client = $this->createClient(); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $tokenCreationVals = [ + 'client_id' => $client['id'], + 'contact_id' => 1, + 'access_token' => "loggedin-user-access-token", + 'refresh_token' => "loggedin-user-refresh-token", + 'scopes' => ['foo', 'bar'], + ]; + $createToken = Civi\Api4\OAuthContactToken::create() + ->setValues($tokenCreationVals) + ->execute(); + $token = $createToken->first(); + $this->assertTrue(is_numeric($token['id'])); + $this->assertEquals(['foo', 'bar'], $token['scopes']); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $getTokens = Civi\Api4\OAuthContactToken::get() + ->addWhere('client.provider', '=', $client['provider']) + ->addWhere('scopes', 'CONTAINS', 'foo') + ->execute(); + $this->assertCount(1, $getTokens); + $this->assertEquals($createToken->first()['id'], $getTokens->first()['id']); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $getTokens = Civi\Api4\OAuthContactToken::get() + ->addWhere('client.provider', '=', $client['provider']) + ->addWhere('scopes', 'CONTAINS', 'nada') + ->execute(); + $this->assertCount(0, $getTokens); + + $this->usePerms(['manage all OAuth contact tokens', 'view all contacts']); + $getTokens = Civi\Api4\OAuthContactToken::get() + ->addWhere('client.provider', '=', 'some-other-provider') + ->addWhere('scopes', 'CONTAINS', 'foo') + ->execute(); + $this->assertCount(0, $getTokens); + } + + public function testPostHook() { + $client = $this->createClient(); + [$loggedInContactID, $notLoggedInContactID] = $this->createTestContactIDs(); + $strangerTokenCreationVals = $this->getTestTokenCreateValues( + $client, $loggedInContactID, 'other'); + + $this->usePerms(['manage all OAuth contact tokens']); + $this->makeToken($strangerTokenCreationVals); + + self::assertCount(1, $this->hookEvents['post']); + } + +} diff --git a/civicrm/ext/oauth-client/xml/Menu/oauth_client.xml b/civicrm/ext/oauth-client/xml/Menu/oauth_client.xml index 1039478f63..f4d9687206 100644 --- a/civicrm/ext/oauth-client/xml/Menu/oauth_client.xml +++ b/civicrm/ext/oauth-client/xml/Menu/oauth_client.xml @@ -4,6 +4,6 @@ <path>civicrm/oauth-client/return</path> <page_callback>CRM_OAuth_Page_Return</page_callback> <title>Return</title> - <access_arguments>access CiviCRM</access_arguments> + <access_arguments>create OAuth tokens via auth code flow;manage OAuth client</access_arguments> </item> </menu> diff --git a/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthClient.xml b/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthClient.xml index 9b3649a6f9..695c874c33 100644 --- a/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthClient.xml +++ b/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthClient.xml @@ -55,9 +55,9 @@ <comment>Client Secret</comment> <add>5.32</add> <!-- Would prefer this be write-only for std admin, and read-write with special/elevated perm --> - <!--<permission>--> - <!--<or>manage OAuth client secrets</or>--> - <!--</permission>--> + <permission> + manage OAuth client + </permission> </field> <field> @@ -67,6 +67,9 @@ <!-- Ex: urlAuthorize, urlAccessToken, urlResourceOwnerDetails, scopes --> <serialize>JSON</serialize> <add>5.32</add> + <permission> + manage OAuth client + </permission> </field> <!-- Lifecycle --> diff --git a/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.entityType.php b/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.entityType.php new file mode 100644 index 0000000000..f0791fd315 --- /dev/null +++ b/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.entityType.php @@ -0,0 +1,10 @@ +<?php +// This file declares a new entity type. For more details, see "hook_civicrm_entityTypes" at: +// https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes +return [ + [ + 'name' => 'OAuthContactToken', + 'class' => 'CRM_OAuth_DAO_OAuthContactToken', + 'table' => 'civicrm_oauth_contact_token', + ], +]; diff --git a/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.xml b/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.xml new file mode 100644 index 0000000000..d03931bc0e --- /dev/null +++ b/civicrm/ext/oauth-client/xml/schema/CRM/OAuth/OAuthContactToken.xml @@ -0,0 +1,175 @@ +<table> + <base>CRM/OAuth</base> + <class>OAuthContactToken</class> + <name>civicrm_oauth_contact_token</name> + <add>5.35</add> + <field> + <name>id</name> + <title>Token ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Token ID</comment> + <add>5.35</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <!-- Details based on how the token was requested --> + + <field> + <name>tag</name> + <title>Tag</title> + <type>varchar</type> + <length>128</length> + <comment>The tag specifies how this token will be used.</comment> + <add>5.35</add> + </field> + <index> + <name>UI_tag</name> + <fieldName>tag</fieldName> + <add>5.35</add> + </index> + + <field> + <name>client_id</name> + <title>Client ID</title> + <type>int unsigned</type> + <comment>Client ID</comment> + <add>5.35</add> + </field> + <foreignKey> + <name>client_id</name> + <table>civicrm_oauth_client</table> + <key>id</key> + <add>5.35</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <comment>Contact ID</comment> + <add>5.35</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>5.35</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <field> + <name>grant_type</name> + <title>Grant type</title> + <type>varchar</type> + <length>31</length> + <!-- FIXME: Pseudoconstant --> + <comment>Ex: authorization_code</comment> + <add>5.35</add> + </field> + + <field> + <name>scopes</name> + <type>text</type> + <comment>List of scopes addressed by this token</comment> + <serialize>SEPARATOR_BOOKEND</serialize> + <add>5.35</add> + </field> + + <!-- Data provided by the authentication server --> + + <field> + <name>token_type</name> + <title>Token Type</title> + <type>varchar</type> + <length>128</length> + <comment>Ex: Bearer or MAC</comment> + <add>5.35</add> + </field> + + <field> + <name>access_token</name> + <title>Access Token</title> + <type>text</type> + <!-- text or varchar? In theory, if the auth svc uses JWT, tokens can get long --> + <comment>Token to present when accessing resources</comment> + <add>5.35</add> + </field> + + <field> + <name>expires</name> + <type>int unsigned</type> + <title>Expiration time</title> + <default>0</default> + <comment>Expiration time for the access_token (seconds since epoch)</comment> + <add>5.35</add> + </field> + + <field> + <name>refresh_token</name> + <title>Refresh Token</title> + <type>text</type> + <!-- text or varchar? In theory, if the auth svc uses JWT, tokens can get long --> + <comment>Token to present when refreshing the access_token</comment> + <add>5.35</add> + </field> + + <field> + <name>resource_owner_name</name> + <title>Resource Owner Name</title> + <type>varchar</type> + <length>128</length> + <comment>Identifier for the resource owner. Structure varies by service.</comment> + <add>5.35</add> + </field> + + <field> + <name>resource_owner</name> + <title>Resource Owner</title> + <type>text</type> + <comment>Cached details describing the resource owner</comment> + <serialize>JSON</serialize> + <add>5.35</add> + </field> + + <field> + <name>error</name> + <type>text</type> + <comment>?? copied from OAuthSysToken</comment> + <serialize>JSON</serialize> + <add>5.35</add> + </field> + + <field> + <name>raw</name> + <title>Raw token</title> + <type>text</type> + <serialize>JSON</serialize> + <comment>The token response data, per AccessToken::jsonSerialize</comment> + <add>5.35</add> + </field> + + <!-- Lifecycle --> + + <field> + <name>created_date</name> + <type>timestamp</type> + <comment>When the token was created.</comment> + <required>false</required> + <default>CURRENT_TIMESTAMP</default> + <add>5.35</add> + </field> + <field> + <name>modified_date</name> + <type>timestamp</type> + <comment>When the token was created or modified.</comment> + <required>false</required> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> + <add>5.35</add> + </field> + +</table> diff --git a/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php b/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php index 23d1af2cab..49c6e7ce52 100644 --- a/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php +++ b/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php @@ -58,14 +58,29 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { * This function collects all the information from a web/api form and invokes * the relevant payment processor specific functions to perform the transaction * - * @param array $params - * Assoc array of input parameters for this transaction. + * @param array|PropertyBag $params + * + * @param string $component * * @return array - * the result in an nice formatted array (or an error object) - * @abstract + * Result array (containing at least the key payment_status_id) + * + * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function doDirectPayment(&$params) { + public function doPayment(&$params, $component = 'contribute') { + $propertyBag = \Civi\Payment\PropertyBag::cast($params); + $this->_component = $component; + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + + // If we have a $0 amount, skip call to processor and set payment_status to Completed. + // Conceivably a processor might override this - perhaps for setting up a token - but we don't + // have an example of that at the moment. + if ($propertyBag->getAmount() == 0) { + $result['payment_status_id'] = array_search('Completed', $statuses); + $result['payment_status'] = 'Completed'; + return $result; + } + if (!defined('CURLOPT_SSLCERT')) { throw new PaymentProcessorException(ts('Payflow Pro requires curl with SSL support')); } @@ -328,6 +343,8 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { $params['recur_trxn_id'] = $nvpArray['PROFILEID']; //'trxn_id' is varchar(255) field. returned value is length 12 } + $params['payment_status_id'] = array_search('Completed', $statuses); + $params['payment_status'] = 'Completed'; return $params; case 1: diff --git a/civicrm/ext/payflowpro/info.xml b/civicrm/ext/payflowpro/info.xml index 0b270dfa59..7b23f67ace 100644 --- a/civicrm/ext/payflowpro/info.xml +++ b/civicrm/ext/payflowpro/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-13</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <develStage>stable</develStage> <compatibility> <ver>5.0</ver> diff --git a/civicrm/ext/payflowpro/phpunit.xml.dist b/civicrm/ext/payflowpro/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/payflowpro/phpunit.xml.dist +++ b/civicrm/ext/payflowpro/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/payflowpro/tests/phpunit/CRM/Core/Payment/PayflowProTest.php b/civicrm/ext/payflowpro/tests/phpunit/CRM/Core/Payment/PayflowProTest.php index 8560f7ec66..2dae42df51 100644 --- a/civicrm/ext/payflowpro/tests/phpunit/CRM/Core/Payment/PayflowProTest.php +++ b/civicrm/ext/payflowpro/tests/phpunit/CRM/Core/Payment/PayflowProTest.php @@ -31,13 +31,13 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem ->apply(); } - public function setUp() { + public function setUp(): void { $this->setUpPayflowProcessor(); $this->processor = \Civi\Payment\System::singleton()->getById($this->ids['PaymentProcessor']['PayflowPro']); parent::setUp(); } - public function tearDown() { + public function tearDown(): void { $this->callAPISuccess('PaymentProcessor', 'delete', ['id' => $this->ids['PaymentProcessor']['PayflowPro']]); parent::tearDown(); } @@ -45,7 +45,7 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem /** * Test making a once off payment */ - public function testSinglePayment() { + public function testSinglePayment(): void { $this->setupMockHandler(); $params = $this->getBillingParams(); $params['amount'] = 20.00; @@ -71,7 +71,7 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem /** * Test making a recurring payment */ - public function testRecuringPayment() { + public function testRecuringPayment(): void { $this->setupMockHandler(NULL, FALSE, TRUE); $params = $this->getBillingParams(); $params['amount'] = 20.00; @@ -100,7 +100,7 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem /** * Test making a failed once off payment */ - public function testErrorSinglePayment() { + public function testErrorSinglePayment(): void { $this->setupMockHandler(NULL, TRUE); $params = $this->getBillingParams(); $params['amount'] = 2220.00; @@ -158,7 +158,7 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem ]; } - public function setUpPayflowProcessor() { + public function setUpPayflowProcessor(): void { $paymentProcessorType = $this->callAPISuccess('PaymentProcessorType', 'get', ['name' => 'PayflowPro']); $this->callAPISuccess('PaymentProcessorType', 'create', ['id' => $paymentProcessorType['id'], 'is_active' => 1]); $params = [ @@ -202,7 +202,7 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem * * @throws \CiviCRM_API3_Exception */ - protected function setupMockHandler($id = NULL, $error = FALSE, $recurring = FALSE) { + protected function setupMockHandler($id = NULL, $error = FALSE, $recurring = FALSE): void { if ($id) { $this->processor = Civi\Payment\System::singleton()->getById($id); } @@ -219,19 +219,19 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem * * @return array */ - public function getExpectedSinglePaymentResponses() { + public function getExpectedSinglePaymentResponses(): array { return [ 'RESULT=0&PNREF=A80N0E942869&RESPMSG=Approved&AUTHCODE=028703&AVSADDR=Y&AVSZIP=Y&CVV2MATCH=Y&HOSTCODE=000&RESPTEXT=AP&PROCAVS=Y&PROCCVV2=M&IAVS=N', ]; } - public function getExpectedRecurringPaymentResponses() { + public function getExpectedRecurringPaymentResponses(): array { return [ 'RESULT=0&RPREF=R3V53AE13D76&PROFILEID=RT0000000003&RESPMSG=Approved&TRXRESULT=0&TRXPNREF=A40N0DAB30B0&TRXRESPMSG=Approved&AUTHCODE=008917&AVSADDR=Y&AVSZIP=Y&CVV2MATCH=Y&HOSTCODE=000&RESPTEXT=AP&PROCAVS=Y&PROCCVV2=M&IAVS=N', ]; } - public function getExpectedSinglePaymentErrorResponses() { + public function getExpectedSinglePaymentErrorResponses(): array { return [ 'RESULT=12&PNREF=A80N0E94337E&RESPMSG=Declined&AVSADDR=Y&AVSZIP=Y&CVV2MATCH=Y&HOSTCODE=005&RESPTEXT=DECLINE&PROCAVS=Y&PROCCVV2=M&IAVS=N', ]; @@ -242,13 +242,13 @@ class CRM_Core_Payment_PayflowProTest extends \PHPUnit\Framework\TestCase implem * * @return array */ - public function getExpectedSinglePaymentRequests() { + public function getExpectedSinglePaymentRequests(): array { return [ 'USER[4]=test&VENDOR[4]=test&PARTNER[6]=PayPal&PWD[8]=test1234&TENDER[1]=C&TRXTYPE[1]=S&ACCT[16]=4111111111111111&CVV2[3]=123&EXPDATE[4]=1022&ACCTTYPE[4]=Visa&AMT[5]=20.00&CURRENCY[3]=AUD&FIRSTNAME[4]=John&LASTNAME[8]=O\'Connor&STREET[16]=8 Hobbitton Road&CITY[9]=The+Shire&STATE[3]=NSW&ZIP[4]=5010&COUNTRY[3]=AUS&EMAIL[24]=unittesteway@civicrm.org&CUSTIP[9]=127.0.0.1&COMMENT1[4]=4200&COMMENT2[4]=live&INVNUM[3]=xyz&ORDERDESC[17]=Test+Contribution&VERBOSITY[6]=MEDIUM&BILLTOCOUNTRY[3]=AUS', ]; } - public function getExpectedRecuringPaymentRequests() { + public function getExpectedRecuringPaymentRequests(): array { return [ 'USER[4]=test&VENDOR[4]=test&PARTNER[6]=PayPal&PWD[8]=test1234&TENDER[1]=C&TRXTYPE[1]=R&ACCT[16]=4111111111111111&CVV2[3]=123&EXPDATE[4]=1022&ACCTTYPE[4]=Visa&AMT[5]=20.00&CURRENCY[3]=AUD&FIRSTNAME[4]=John&LASTNAME[8]=O\'Connor&STREET[16]=8 Hobbitton Road&CITY[9]=The+Shire&STATE[3]=NSW&ZIP[4]=5010&COUNTRY[3]=AUS&EMAIL[24]=unittesteway@civicrm.org&CUSTIP[9]=127.0.0.1&COMMENT1[4]=4200&COMMENT2[4]=live&INVNUM[3]=xyz&ORDERDESC[17]=Test+Contribution&VERBOSITY[6]=MEDIUM&BILLTOCOUNTRY[3]=AUS&OPTIONALTRX[1]=S&OPTIONALTRXAMT[5]=20.00&ACTION[1]=A&PROFILENAME[19]=RegularContribution&TERM[2]=12&START[8]=' . date('mdY', mktime(0, 0, 0, date("m") + 1, date("d"), date("Y"))) . '&PAYPERIOD[4]=MONT', ]; diff --git a/civicrm/ext/recaptcha/info.xml b/civicrm/ext/recaptcha/info.xml index 3c2abbcecc..8d62bfd02c 100644 --- a/civicrm/ext/recaptcha/info.xml +++ b/civicrm/ext/recaptcha/info.xml @@ -13,7 +13,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-03</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/search_kit/CRM/Search/Upgrader.php b/civicrm/ext/search_kit/CRM/Search/Upgrader.php index 3f6de4d5ee..31c06e64ca 100644 --- a/civicrm/ext/search_kit/CRM/Search/Upgrader.php +++ b/civicrm/ext/search_kit/CRM/Search/Upgrader.php @@ -18,6 +18,7 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { ->addValue('icon', 'crm-i fa-search-plus') ->addValue('has_separator', 2) ->addValue('weight', 99) + ->addValue('permission', 'administer CiviCRM data') ->execute(); } @@ -133,4 +134,14 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { return TRUE; } + /** + * Upgrade 1004 - fix menu permission. + * @return bool + */ + public function upgrade_1004() { + $this->ctx->log->info('Applying update 1000 - fix menu permission.'); + CRM_Core_DAO::executeQuery("UPDATE civicrm_navigation SET permission = 'administer CiviCRM data' WHERE url = 'civicrm/admin/search'"); + return TRUE; + } + } diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php index ff34da0f2d..1c58800f43 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php @@ -26,17 +26,16 @@ class GetSearchTasks extends \Civi\Api4\Generic\AbstractAction { public function _run(\Civi\Api4\Generic\Result $result) { $entity = Entity::get($this->checkPermissions)->addWhere('name', '=', $this->entity) ->addSelect('name', 'title_plural') - ->setChain(['actions' => [$this->entity, 'getActions', ['where' => [['name', 'IN', ['update', 'delete']]]], 'name']]) + ->setChain(['actions' => ['$name', 'getActions', ['where' => [['name', 'IN', ['update', 'delete']]]], 'name']]) ->execute()->first(); if (!$entity) { return; } - $tasks = []; + $tasks = [$entity['name'] => []]; if (array_key_exists($entity['name'], \CRM_Export_BAO_Export::getComponents())) { - $tasks[] = [ - 'name' => 'export', + $tasks[$entity['name']]['export'] = [ 'title' => E::ts('Export %1', [1 => $entity['title_plural']]), 'icon' => 'fa-file-excel-o', 'crmPopup' => [ @@ -47,33 +46,38 @@ class GetSearchTasks extends \Civi\Api4\Generic\AbstractAction { } if (array_key_exists('update', $entity['actions'])) { - $tasks[] = [ - 'name' => 'update', + $tasks[$entity['name']]['update'] = [ + 'module' => 'crmSearchTasks', 'title' => E::ts('Update %1', [1 => $entity['title_plural']]), 'icon' => 'fa-save', - 'uiDialog' => ['templateUrl' => '~/crmSearchActions/crmSearchActionUpdate.html'], + 'uiDialog' => ['templateUrl' => '~/crmSearchTasks/crmSearchTaskUpdate.html'], ]; } if (array_key_exists('delete', $entity['actions'])) { - $tasks[] = [ - 'name' => 'delete', + $tasks[$entity['name']]['delete'] = [ + 'module' => 'crmSearchTasks', 'title' => E::ts('Delete %1', [1 => $entity['title_plural']]), 'icon' => 'fa-trash', - 'uiDialog' => ['templateUrl' => '~/crmSearchActions/crmSearchActionDelete.html'], + 'uiDialog' => ['templateUrl' => '~/crmSearchTasks/crmSearchTaskDelete.html'], ]; } if ($entity['name'] === 'Contact') { - // Add contact tasks which support standalone mode (with a 'url' property) - $contactTasks = \CRM_Contact_Task::permissionedTaskTitles(\CRM_Core_Permission::getPermission()); + // Add contact tasks which support standalone mode + $contactTasks = $this->checkPermissions ? \CRM_Contact_Task::permissionedTaskTitles(\CRM_Core_Permission::getPermission()) : NULL; foreach (\CRM_Contact_Task::tasks() as $id => $task) { - if (isset($contactTasks[$id]) && !empty($task['url']) && $task['url'] !== 'civicrm/task/delete-contact') { + if ( + (!$this->checkPermissions || isset($contactTasks[$id])) && + // Must support standalone mode (with a 'url' property) + !empty($task['url']) && + // The delete task is redundant with the new api-based one + $task['url'] !== 'civicrm/task/delete-contact' + ) { if ($task['url'] === 'civicrm/task/pick-profile') { $task['title'] = E::ts('Profile Update'); } - $tasks[] = [ - 'name' => 'contact.' . $id, + $tasks[$entity['name']]['contact.' . $id] = [ 'title' => $task['title'], 'icon' => $task['icon'] ?? 'fa-gear', 'crmPopup' => [ @@ -86,10 +90,10 @@ class GetSearchTasks extends \Civi\Api4\Generic\AbstractAction { } if ($entity['name'] === 'Contribution') { + // FIXME: tasks() function always checks permissions, should respect `$this->checkPermissions` foreach (\CRM_Contribute_Task::tasks() as $id => $task) { if (!empty($task['url'])) { - $tasks[] = [ - 'name' => 'contribution.' . $id, + $tasks[$entity['name']]['contribution.' . $id] = [ 'title' => $task['title'], 'icon' => $task['icon'] ?? 'fa-gear', 'crmPopup' => [ @@ -101,11 +105,30 @@ class GetSearchTasks extends \Civi\Api4\Generic\AbstractAction { } } - usort($tasks, function($a, $b) { + // Call `hook_civicrm_searchKitTasks`. + // Note - this hook serves 2 purposes, both to augment this list of tasks AND to + // get a full list of Angular modules which provide tasks. That's why this hook needs + // the base-level array and not just the array of tasks for `$this->entity`. + // Although it may seem wasteful to have extensions add tasks for all possible entities and then + // discard most of it (all but the ones relevant to `$this->entity`), it's necessary to do it this way + // so that they can be declared as angular dependencies - see search_kit_civicrm_angularModules(). + $null = NULL; + $checkPermissions = $this->checkPermissions; + $userId = $this->checkPermissions ? \CRM_Core_Session::getLoggedInContactID() : NULL; + \CRM_Utils_Hook::singleton()->invoke(['tasks', 'checkPermissions', 'userId'], + $tasks, $checkPermissions, $userId, + $null, $null, $null, 'civicrm_searchKitTasks' + ); + + usort($tasks[$entity['name']], function($a, $b) { return strnatcasecmp($a['title'], $b['title']); }); - $result->exchangeArray($tasks); + foreach ($tasks[$entity['name']] as $name => &$task) { + $task['name'] = $name; + } + + $result->exchangeArray(array_values($tasks[$entity['name']])); } } diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php index 4bc54ae629..dcf36703c5 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Run.php @@ -63,6 +63,11 @@ class Run extends \Civi\Api4\Generic\AbstractAction { */ private $_afform; + /** + * @var array + */ + private $_extraEntityFields = []; + /** * @param \Civi\Api4\Generic\Result $result * @throws UnauthorizedException @@ -270,11 +275,11 @@ class Run extends \Civi\Api4\Generic\AbstractAction { /** * Determines if a column is eligible to use an aggregate function - * @param $fieldName - * @param $prefix + * @param string $fieldName + * @param string $prefix * @return bool */ - private function canAggregate($fieldName, $prefix) { + private function canAggregate($fieldName, $prefix = '') { $apiParams = $this->savedSearch['api_params']; // If the query does not use grouping, never @@ -357,13 +362,21 @@ class Run extends \Civi\Api4\Generic\AbstractAction { * @param array $apiParams */ private function augmentSelectClause(&$apiParams): void { + foreach ($this->getExtraEntityFields($this->savedSearch['api_entity']) as $extraFieldName) { + if (!in_array($extraFieldName, $apiParams['select']) && !$this->canAggregate($extraFieldName)) { + $apiParams['select'][] = $extraFieldName; + } + } $joinAliases = []; - // Select the ids of explicitly joined entities (helps with displaying links) + // Select the ids, etc. of explicitly joined entities (helps with displaying links) foreach ($apiParams['join'] ?? [] as $join) { - $joinAliases[] = $joinAlias = explode(' AS ', $join[0])[1]; - $idFieldName = $joinAlias . '.id'; - if (!in_array($idFieldName, $apiParams['select']) && !$this->canAggregate('id', $joinAlias . '.')) { - $apiParams['select'][] = $idFieldName; + [$joinEntity, $joinAlias] = explode(' AS ', $join[0]); + $joinAliases[] = $joinAlias; + foreach ($this->getExtraEntityFields($joinEntity) as $extraField) { + $extraFieldName = $joinAlias . '.' . $extraField; + if (!in_array($extraFieldName, $apiParams['select']) && !$this->canAggregate($extraField, $joinAlias . '.')) { + $apiParams['select'][] = $extraFieldName; + } } } // Select the ids of implicitly joined entities (helps with displaying links) @@ -391,4 +404,23 @@ class Run extends \Civi\Api4\Generic\AbstractAction { } } + /** + * Get list of extra fields needed for displaying links for a given entity + * + * @param string $entityName + * @return array + */ + private function getExtraEntityFields(string $entityName): array { + if (!isset($this->_extraEntityFields[$entityName])) { + $info = CoreUtil::getApiClass($entityName)::getInfo(); + $this->_extraEntityFields[$entityName] = [$info['id_field']]; + foreach ($info['paths'] ?? [] as $path) { + $matches = []; + preg_match_all('#\[(\w+)]#', $path, $matches); + $this->_extraEntityFields[$entityName] = array_unique(array_merge($this->_extraEntityFields[$entityName], $matches[1] ?? [])); + } + } + return $this->_extraEntityFields[$entityName]; + } + } diff --git a/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php b/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php index 939e74664e..3bb683ce96 100644 --- a/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php +++ b/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php @@ -6,7 +6,7 @@ namespace Civi\Api4; * * Provided by the Search Kit extension. * - * @searchable false + * @searchable none * @package Civi\Api4 */ class SearchDisplay extends Generic\DAOEntity { diff --git a/civicrm/ext/search_kit/Civi/Search/Admin.php b/civicrm/ext/search_kit/Civi/Search/Admin.php index b516429806..05ae166e76 100644 --- a/civicrm/ext/search_kit/Civi/Search/Admin.php +++ b/civicrm/ext/search_kit/Civi/Search/Admin.php @@ -32,6 +32,7 @@ class Admin { 'functions' => \CRM_Api4_Page_Api4Explorer::getSqlFunctions(), 'displayTypes' => Display::getDisplayTypes(['id', 'name', 'label', 'description', 'icon']), 'styles' => \CRM_Utils_Array::makeNonAssociative(self::getStyles()), + 'defaultPagerSize' => \Civi::settings()->get('default_pager_size'), 'afformEnabled' => $extensions->isActiveModule('afform'), 'afformAdminEnabled' => $extensions->isActiveModule('afform_admin'), ]; @@ -81,8 +82,8 @@ class Admin { public static function getSchema() { $schema = []; $entities = \Civi\Api4\Entity::get() - ->addSelect('name', 'title', 'type', 'title_plural', 'description', 'label_field', 'icon', 'paths', 'dao', 'bridge', 'ui_join_filters') - ->addWhere('searchable', '=', TRUE) + ->addSelect('name', 'title', 'type', 'title_plural', 'description', 'label_field', 'icon', 'paths', 'dao', 'bridge', 'ui_join_filters', 'searchable') + ->addWhere('searchable', '!=', 'none') ->addOrderBy('title_plural') ->setChain([ 'get' => ['$name', 'getActions', ['where' => [['name', '=', 'get']]], ['params']], @@ -101,7 +102,7 @@ class Admin { } } $getFields = civicrm_api4($entity['name'], 'getFields', [ - 'select' => ['name', 'title', 'label', 'description', 'options', 'input_type', 'input_attrs', 'data_type', 'serialize', 'entity', 'fk_entity', 'readonly'], + 'select' => ['name', 'title', 'label', 'description', 'type', 'options', 'input_type', 'input_attrs', 'data_type', 'serialize', 'entity', 'fk_entity', 'readonly', 'operators'], 'where' => [['name', 'NOT IN', ['api_key', 'hash']]], 'orderBy' => ['label'], ]); @@ -121,7 +122,7 @@ class Admin { // Add in FK fields for implicit joins // For example, add a `campaign_id.title` field to the Contribution entity foreach ($schema as &$entity) { - if (in_array('DAOEntity', $entity['type'], TRUE) && !in_array('EntityBridge', $entity['type'], TRUE)) { + if ($entity['searchable'] !== 'bridge') { foreach (array_reverse($entity['fields'], TRUE) as $index => $field) { if (!empty($field['fk_entity']) && !$field['options'] && empty($field['serialize']) && !empty($schema[$field['fk_entity']]['label_field'])) { $isCustom = strpos($field['name'], '.'); @@ -189,15 +190,18 @@ class Admin { }); $fields = array_column($entity['fields'], NULL, 'name'); $bridge = in_array('EntityBridge', $entity['type']) ? $entity['name'] : NULL; + $bridgeFields = array_keys($entity['bridge'] ?? []); foreach ($references as $reference) { $keyField = $fields[$reference->getReferenceKey()] ?? NULL; - // Exclude any joins that are better represented by pseudoconstants - if (is_a($reference, 'CRM_Core_Reference_OptionValue') - || !$keyField || !empty($keyField['options']) + if ( + // Sanity check - keyField must exist + !$keyField || + // Exclude any joins that are better represented by pseudoconstants + is_a($reference, 'CRM_Core_Reference_OptionValue') || (!$bridge && !empty($keyField['options'])) || // Limit bridge joins to just the first - || $bridge && array_search($keyField['name'], $entity['bridge']) !== 0 + ($bridge && array_search($keyField['name'], $bridgeFields) !== 0) || // Sanity check - table should match - || $daoClass::getTableName() !== $reference->getReferenceTable() + $daoClass::getTableName() !== $reference->getReferenceTable() ) { continue; } @@ -237,7 +241,7 @@ class Admin { // Bridge joins (sanity check - bridge must specify exactly 2 FK fields) elseif (count($entity['bridge']) === 2) { // Get the other entity being linked through this bridge - $baseKey = array_search($reference->getReferenceKey(), $entity['bridge']) ? $entity['bridge'][0] : $entity['bridge'][1]; + $baseKey = array_search($reference->getReferenceKey(), $bridgeFields) ? $bridgeFields[0] : $bridgeFields[1]; $baseEntity = $allowedEntities[$fields[$baseKey]['fk_entity']] ?? NULL; if (!$baseEntity) { continue; @@ -248,7 +252,7 @@ class Admin { $alias = $baseEntity['name'] . "_{$bridge}_" . $targetEntityName; $joins[$baseEntity['name']][] = [ 'label' => $baseEntity['title'] . ' ' . $targetsTitle, - 'description' => E::ts('Multiple %1 per %2', [1 => $targetsTitle, 2 => $baseEntity['title']]), + 'description' => $entity['bridge'][$baseKey]['description'] ?? E::ts('Multiple %1 per %2', [1 => $targetsTitle, 2 => $baseEntity['title']]), 'entity' => $targetEntityName, 'conditions' => array_merge( [$bridge], @@ -263,7 +267,7 @@ class Admin { $alias = $targetEntityName . "_{$bridge}_" . $baseEntity['name']; $joins[$targetEntityName][] = [ 'label' => $targetEntity['title'] . ' ' . $baseEntity['title_plural'], - 'description' => E::ts('Multiple %1 per %2', [1 => $baseEntity['title_plural'], 2 => $targetEntity['title']]), + 'description' => $entity['bridge'][$reference->getReferenceKey()]['description'] ?? E::ts('Multiple %1 per %2', [1 => $baseEntity['title_plural'], 2 => $targetEntity['title']]), 'entity' => $baseEntity['name'], 'conditions' => array_merge( [$bridge], diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin.ang.php b/civicrm/ext/search_kit/ang/crmSearchAdmin.ang.php index 29413f3fef..a65b495313 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin.ang.php +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin.ang.php @@ -14,6 +14,6 @@ return [ ], 'bundles' => ['bootstrap3'], 'basePages' => ['civicrm/admin/search'], - 'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'ui.sortable', 'ui.bootstrap', 'api4', 'crmSearchActions', 'crmRouteBinder'], + 'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'ui.sortable', 'ui.bootstrap', 'api4', 'crmSearchTasks', 'crmRouteBinder'], 'settingsFactory' => ['\Civi\Search\Admin', 'getAdminSettings'], ]; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/controls.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/controls.html index 93407f4445..bd2c52c2d4 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/controls.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/controls.html @@ -10,5 +10,5 @@ {{:: ts('Auto') }} </button> </div> - <crm-search-actions entity="$ctrl.savedSearch.api_entity" ids="$ctrl.selectedRows" refresh="$ctrl.refreshPage()"></crm-search-actions> + <crm-search-tasks entity="$ctrl.savedSearch.api_entity" ids="$ctrl.selectedRows" refresh="$ctrl.refreshPage()"></crm-search-tasks> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html index 732b1f4aeb..b45e138e00 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html @@ -9,9 +9,9 @@ <i class="crm-i fa-trash" aria-hidden="true"></i> </button> </div> - <fieldset class="api4-clause-fieldset"> - <crm-search-clause clauses="join" format="json" skip="2 + getJoin(join[0]).conditions.length" op="AND" label="{{:: ts('If') }}" fields="fieldsForWhere" ></crm-search-clause> - </fieldset> + <div class="api4-clause-fieldset"> + <crm-search-clause clauses="join" format="json" skip="2 + getJoin(join[0]).conditions.length" op="AND" label="{{:: ts('If') }}" hide-label="true" placeholder="ts('Add Condition')" fields="fieldsForJoin(join[0])" ></crm-search-clause> + </div> </fieldset> <fieldset> <div class="form-inline"> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/pager.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/pager.html index 0932e7b4d0..954911b1aa 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/pager.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose/pager.html @@ -28,7 +28,7 @@ </div> <div class="form-inline text-right"> <label for="crm-search-results-page-size" > - {{:: ts('Page size:') }} + {{:: ts('Page Size') }} </label> <input class="form-control" id="crm-search-results-page-size" type="number" ng-model="$ctrl.limit" min="10" step="10" ng-change="onChangeLimit()"> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js index 84eef3d1e8..1d56e21cda 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -8,12 +8,13 @@ templateUrl: '~/crmSearchAdmin/crmSearchAdmin.html', controller: function($scope, $element, $location, $timeout, crmApi4, dialogService, searchMeta, formatForSelect2) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), - ctrl = this; + ctrl = this, + fieldsForJoinGetters = {}; this.DEFAULT_AGGREGATE_FN = 'GROUP_CONCAT'; this.selectedRows = []; - this.limit = CRM.cache.get('searchPageSize', 30); + this.limit = CRM.crmSearchAdmin.defaultPagerSize; this.page = 1; this.displayTypes = _.indexBy(CRM.crmSearchAdmin.displayTypes, 'id'); // After a search this.results is an object of result arrays keyed by page, @@ -30,12 +31,6 @@ {k: 'INNER', v: ts('With (required)')}, {k: 'EXCLUDE', v: ts('Without')}, ]; - // Try to create a sensible list of entities one might want to search for, - // excluding those whos primary purpose is to provide joins or option lists to other entities - var primaryEntities = _.filter(CRM.crmSearchAdmin.schema, function(entity) { - return !_.includes(entity.type, 'EntityBridge') && !_.includes(entity.type, 'OptionList'); - }); - $scope.entities = formatForSelect2(primaryEntities, 'name', 'title_plural', ['description', 'icon']); $scope.getEntity = searchMeta.getEntity; $scope.getField = searchMeta.getField; this.perm = { @@ -63,6 +58,15 @@ }); } + var primaryEntities = _.filter(CRM.crmSearchAdmin.schema, {searchable: 'primary'}), + secondaryEntities = _.filter(CRM.crmSearchAdmin.schema, {searchable: 'secondary'}); + $scope.mainEntitySelect = formatForSelect2(primaryEntities, 'name', 'title_plural', ['description', 'icon']); + $scope.mainEntitySelect.push({ + text: ts('More...'), + description: ts('Other less-commonly searched entities'), + children: formatForSelect2(secondaryEntities, 'name', 'title_plural', ['description', 'icon']) + }); + $scope.$watchCollection('$ctrl.savedSearch.api_params.select', onChangeSelect); $scope.$watch('$ctrl.savedSearch.api_params.where', onChangeFilters, true); @@ -569,8 +573,6 @@ $scope.onChangeLimit = function() { // Refresh only if search has already been run if (ctrl.autoSearch || ctrl.results) { - // Save page size in localStorage - CRM.cache.set('searchPageSize', ctrl.limit); ctrl.refreshAll(); } }; @@ -730,19 +732,30 @@ } $scope.fieldsForGroupBy = function() { - return {results: ctrl.getAllFields('', function(key) { + return {results: ctrl.getAllFields('', ['Field', 'Custom'], function(key) { return _.contains(ctrl.savedSearch.api_params.groupBy, key); }) }; }; $scope.fieldsForSelect = function() { - return {results: ctrl.getAllFields(':label', function(key) { + return {results: ctrl.getAllFields(':label', ['Field', 'Custom', 'Extra'], function(key) { return _.contains(ctrl.savedSearch.api_params.select, key); }) }; }; + function getFieldsForJoin(joinEntity) { + return {results: ctrl.getAllFields(':name', ['Field', 'Custom'], null, joinEntity)}; + } + + $scope.fieldsForJoin = function(joinEntity) { + if (!fieldsForJoinGetters[joinEntity]) { + fieldsForJoinGetters[joinEntity] = _.wrap(joinEntity, getFieldsForJoin); + } + return fieldsForJoinGetters[joinEntity]; + }; + $scope.fieldsForWhere = function() { return {results: ctrl.getAllFields(':name')}; }; @@ -772,7 +785,7 @@ }); } - this.getAllFields = function(suffix, disabledIf) { + this.getAllFields = function(suffix, allowedTypes, disabledIf, topJoin) { disabledIf = disabledIf || _.noop; function formatFields(entityName, join) { var prefix = join ? join.alias + '.' : '', @@ -788,14 +801,16 @@ if (disabledIf(item.id)) { item.disabled = true; } - result.push(item); + if (!allowedTypes || _.includes(allowedTypes, field.type)) { + result.push(item); + } }); } // Add extra searchable fields from bridge entity if (join && join.bridge) { addFields(_.filter(searchMeta.getEntity(join.bridge).fields, function(field) { - return (field.name !== 'id' && field.name !== 'entity_id' && field.name !== 'entity_table' && !field.fk_entity); + return (field.name !== 'id' && field.name !== 'entity_id' && field.name !== 'entity_table' && !field.fk_entity && !_.includes(field.name, '.')); })); } @@ -804,13 +819,11 @@ } var mainEntity = searchMeta.getEntity(ctrl.savedSearch.api_entity), - result = [{ - text: mainEntity.title_plural, - icon: mainEntity.icon, - children: formatFields(ctrl.savedSearch.api_entity) - }]; - _.each(ctrl.savedSearch.api_params.join, function(join) { - var joinInfo = searchMeta.getJoin(join[0]), + joinEntities = _.map(ctrl.savedSearch.api_params.join, 0), + result = []; + + function addJoin(join) { + var joinInfo = searchMeta.getJoin(join), joinEntity = searchMeta.getEntity(joinInfo.entity); result.push({ text: joinInfo.label, @@ -818,7 +831,20 @@ icon: joinEntity.icon, children: formatFields(joinEntity.name, joinInfo) }); + } + + // Place specified join at top of list + if (topJoin) { + addJoin(topJoin); + _.pull(joinEntities, topJoin); + } + + result.push({ + text: mainEntity.title_plural, + icon: mainEntity.icon, + children: formatFields(ctrl.savedSearch.api_entity) }); + _.each(joinEntities, addJoin); return result; }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html index 045284a5e6..db7c24aa50 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html @@ -17,8 +17,8 @@ <input id="crm-saved-search-label" class="form-control" ng-model="$ctrl.savedSearch.label" type="text" required placeholder="{{ ts('Untitled Search') }}" /> </div> <div class="crm-flex-4 form-inline"> - <label for="crm-search-main-entity">{{:: ts('Search for:') }}</label> - <input id="crm-search-main-entity" class="form-control huge" ng-model="$ctrl.savedSearch.api_entity" crm-ui-select="::{allowClear: false, data: entities}" ng-disabled="$ctrl.savedSearch.id" /> + <label for="crm-search-main-entity">{{:: ts('Search for') }}</label> + <input id="crm-search-main-entity" class="form-control huge collapsible-optgroups" ng-model="$ctrl.savedSearch.api_entity" crm-ui-select="::{allowClear: false, data: mainEntitySelect}" ng-disabled="$ctrl.savedSearch.id" /> <div class="btn-group btn-group-md pull-right"> <button type="button" class="btn" ng-class="{'btn-primary': status === 'unsaved', 'btn-warning': status === 'saving', 'btn-success': status === 'saved'}" ng-disabled="status !== 'unsaved'" ng-click="$ctrl.save()"> <i class="crm-i" ng-class="{'fa-check': status !== 'saving', 'fa-spin fa-spinner': status === 'saving'}"></i> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js index f754d34cb6..d6d673be87 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js @@ -67,6 +67,17 @@ }, }; + this.toggleLimit = function() { + if (ctrl.display.settings.limit) { + ctrl.display.settings.limit = 0; + if (ctrl.display.settings.pager) { + ctrl.display.settings.pager = false; + } + } else { + ctrl.display.settings.limit = CRM.crmSearchAdmin.defaultPagerSize; + } + }; + // Drag-n-drop settings for reordering columns this.sortableOptions = { connectWith: '.crm-search-admin-edit-columns', @@ -333,7 +344,7 @@ results: [{ text: ts('Columns'), children: ctrl.crmSearchAdmin.getSelectFields(disabledIf) - }].concat(ctrl.crmSearchAdmin.getAllFields('', disabledIf)) + }].concat(ctrl.crmSearchAdmin.getAllFields('', ['Field', 'Custom'], disabledIf)) }; }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html index 52bb428b6d..41c63274b9 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html @@ -1,6 +1,6 @@ <fieldset> <div class="form-inline"> - <label for="crm-search-admin-display-label">{{:: ts('Name:') }} <span class="crm-marker">*</span></label> - <input id="crm-search-admin-display-label" type="text" class="form-control" ng-model="$ctrl.display.label" required placeholder="{{ ts('Untitled') }}"/> + <label for="crm-search-admin-display-label">{{:: ts('Name') }} <span class="crm-marker">*</span></label> + <input id="crm-search-admin-display-label" type="text" class="form-control" ng-model="$ctrl.display.label" required placeholder="{{:: ts('Untitled') }}"/> </div> </fieldset> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html index d37ae8b8c3..18d9decbf3 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html @@ -1,5 +1,5 @@ <div class="form-inline" ng-repeat="sort in $ctrl.display.settings.sort"> - <label for="crm-search-display-sort-{{$index}}">{{ $index ? ts('Also by:') : ts('Sort by:') }}</label> + <label for="crm-search-display-sort-{{$index}}">{{ $index ? ts('Also by') : ts('Sort by') }}</label> <input id="crm-search-display-sort-{{$index}}" class="form-control huge" ng-model="sort[0]" crm-ui-select="{data: $ctrl.parent.fieldsForSort}" /> <select class="form-control" ng-model="sort[1]"> <option value="ASC">{{ ts('Ascending') }}</option> @@ -8,6 +8,6 @@ <a href class="crm-hover-button" title="{{:: ts('Clear') }}" ng-click="$ctrl.display.settings.sort.splice($index, 1)"><i class="crm-i fa-times" aria-hidden="true"></i></a> </div> <div class="form-inline"> - <label for="crm-search-display-add-sort">{{ $ctrl.display.settings.sort.length ? ts('Also by:') : ts('Sort by:') }}</label> + <label for="crm-search-display-add-sort">{{ $ctrl.display.settings.sort.length ? ts('Also by') : ts('Sort by') }}</label> <input id="crm-search-display-add-sort" class="form-control crm-action-menu fa-plus huge" ng-model="controls.sort" crm-ui-select="{placeholder: ts('Select field'), data: $ctrl.parent.fieldsForSort}" ng-change="$ctrl.parent.pushSetting('sort', [controls.sort, 'ASC']); controls.sort = '';"/> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js index 6c0b6378dc..f6409c30ee 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js @@ -9,6 +9,8 @@ op: '@', skip: '<', label: '@', + hideLabel: '@', + placeholder: '<', deleteGroup: '&' }, templateUrl: '~/crmSearchAdmin/crmSearchClause.html', @@ -17,7 +19,7 @@ ctrl = this, meta = {}; this.conjunctions = {AND: ts('And'), OR: ts('Or'), NOT: ts('Not')}; - this.operators = CRM.crmSearchAdmin.operators; + this.operators = {}; this.sortOptions = { axis: 'y', connectWith: '.api4-clause-group-sortable', @@ -29,8 +31,30 @@ this.$onInit = function() { ctrl.hasParent = !!$element.attr('delete-group'); + _.each(ctrl.clauses, updateOperators); }; + this.getOperators = function(clause) { + var field = ctrl.getField(clause[0]); + if (!field || !field.operators) { + return CRM.crmSearchAdmin.operators; + } + var opKey = field.operators.join(); + if (!ctrl.operators[opKey]) { + ctrl.operators[opKey] = _.filter(CRM.crmSearchAdmin.operators, function(operator) { + return _.includes(field.operators, operator.key); + }); + } + return ctrl.operators[opKey]; + }; + + function updateOperators(clause) { + if (!ctrl.skip && (!clause[1] || !_.includes(_.pluck(ctrl.getOperators(clause), 'key'), clause[1]))) { + clause[1] = ctrl.getOperators(clause)[0].key; + ctrl.changeClauseOperator(clause); + } + } + this.getField = function(expr) { if (!meta[expr]) { meta[expr] = searchMeta.parseExpr(expr); @@ -66,8 +90,10 @@ this.addClause = function() { $timeout(function() { if (ctrl.newClause) { + var newIndex = ctrl.clauses.length; ctrl.clauses.push([ctrl.newClause, '=', '']); ctrl.newClause = null; + updateOperators(ctrl.clauses[newIndex]); } }); }; @@ -80,6 +106,8 @@ this.changeClauseField = function(clause, index) { if (clause[0] === '') { ctrl.deleteRow(index); + } else { + updateOperators(clause); } }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html index 73d2ba64a9..163e31f39d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html @@ -1,4 +1,4 @@ -<legend>{{ $ctrl.label || ts('%1 group', {1: $ctrl.conjunctions[$ctrl.op]}) }}</legend> +<legend ng-if="!$ctrl.hideLabel">{{ $ctrl.label || ts('%1 group', {1: $ctrl.conjunctions[$ctrl.op]}) }}</legend> <div class="btn-group btn-group-xs" ng-if=":: $ctrl.hasParent"> <button type="button" class="btn btn-danger-outline" ng-click="$ctrl.deleteGroup()" title="{{:: ts('Remove group') }}"> <i class="crm-i fa-trash" aria-hidden="true"></i> @@ -15,8 +15,8 @@ </span> </div> <div ng-if="!$ctrl.conjunctions[clause[0]]" class="api4-input-group"> - <input class="form-control" ng-model="clause[0]" crm-ui-select="{data: $ctrl.fields, allowClear: true, placeholder: 'Field'}" ng-change="$ctrl.changeClauseField(clause, index)" /> - <select class="form-control api4-operator" ng-model="clause[1]" ng-options="o.key as o.value for o in $ctrl.operators" ng-change="$ctrl.changeClauseOperator(clause)" ></select> + <input class="form-control collapsible-optgroups" ng-model="clause[0]" crm-ui-select="{data: $ctrl.fields, allowClear: true, placeholder: 'Field'}" ng-change="$ctrl.changeClauseField(clause, index)" /> + <select class="form-control api4-operator" ng-model="clause[1]" ng-options="o.key as o.value for o in $ctrl.getOperators(clause)" ng-change="$ctrl.changeClauseOperator(clause)" ></select> <crm-search-input ng-if="$ctrl.operatorTakesInput(clause[1])" ng-model="clause[2]" field="$ctrl.getField(clause[0])" option-key="$ctrl.getOptionKey(clause[0])" op="clause[1]" format="$ctrl.format" class="form-group"></crm-search-input> </div> <fieldset class="clearfix" ng-if="$ctrl.conjunctions[clause[0]]"> @@ -38,5 +38,5 @@ </ul> </div> </div> - <input class="form-control" ng-model="$ctrl.newClause" ng-change="$ctrl.addClause()" crm-ui-select="{data: $ctrl.fields, placeholder: ts('Select field')}" /> + <input class="form-control collapsible-optgroups" ng-model="$ctrl.newClause" ng-change="$ctrl.addClause()" crm-ui-select="{data: $ctrl.fields, placeholder: $ctrl.placeholder || ts('Select field')}" /> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/buttons.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/buttons.html index 58a972e1e9..6b2829dcd7 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/buttons.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/buttons.html @@ -1,6 +1,6 @@ <div class="form-inline"> <label for="crm-search-admin-col-size-{{$index}}"> - {{:: ts('Button Size:') }} + {{:: ts('Button Size') }} </label> <select id="crm-search-admin-col-size-{{$index}}" class="form-control" ng-model="col.size"> <option value="btn-lg">{{:: ts('Large') }}</option> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html index 21737f80ea..08f16d139f 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html @@ -1,9 +1,9 @@ <div class="form-inline crm-search-admin-flex-row"> - <label title="{{ ts('Display as clickable link') }}" > + <label title="{{:: ts('Display as clickable link') }}" > <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" > - {{ col.link ? ts('Link:') : ts('Link') }} + {{:: ts('Link') }} </label> - <select class="form-control" ng-model="$ctrl.link.target" ng-if="col.link"> + <select class="form-control" ng-model="col.link.target" ng-if="col.link"> <option value>{{:: ts('Open normally') }}</option> <option value="_blank">{{:: ts('New tab') }}</option> <option value="crm-popup">{{:: ts('Popup dialog') }}</option> @@ -14,7 +14,7 @@ <div class="form-inline crm-search-admin-flex-row"> <label> <input type="checkbox" ng-checked="col.title" ng-click="col.title = col.title ? null : $ctrl.parent.getFieldLabel(col.key)" > - {{ col.title ? ts('Tooltip:') : ts('Tooltip') }} + {{:: ts('Tooltip') }} </label> <input class="form-control crm-flex-1" type="text" ng-model="col.title" ng-if="col.title" ng-model-options="{updateOn: 'blur'}" /> <crm-search-admin-token-select ng-if="col.title" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="title"></crm-search-admin-token-select> @@ -22,7 +22,7 @@ <div class="form-inline crm-search-admin-flex-row"> <label title="{{ ts('Change the contents of this field, or combine multiple field values.') }}"> <input type="checkbox" ng-checked="col.rewrite" ng-click="$ctrl.parent.toggleRewrite(col)" > - {{ col.rewrite ? ts('Rewrite:') : ts('Rewrite') }} + {{:: ts('Rewrite') }} </label> <input type="text" class="form-control crm-flex-1" ng-if="col.rewrite" ng-model="col.rewrite" ng-model-options="{updateOn: 'blur'}"> <crm-search-admin-token-select ng-if="col.rewrite" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="rewrite"></crm-search-admin-token-select> @@ -30,10 +30,10 @@ <div class="form-inline"> <label ng-if="$ctrl.parent.isEditable(col)" title="{{:: ts('Users will be able to click to edit this field.') }}"> <input type="checkbox" ng-checked="col.editable" ng-click="$ctrl.parent.toggleEditable(col)"> - {{:: ts('In-place edit') }} + {{:: ts('In-Place Edit') }} </label> <label ng-if="!$ctrl.parent.isEditable(col)" class="disabled" title="{{:: ts('Read-only or rewritten fields cannot be editable.') }}"> <input type="checkbox" disabled> - {{:: ts('In-place edit') }} + {{:: ts('In-Place Edit') }} </label> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/menu.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/menu.html index 1758e2f63f..f9ea37ce1a 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/menu.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/menu.html @@ -1,6 +1,6 @@ <div class="form-inline"> <label for="crm-search-admin-col-size-{{$index}}"> - {{:: ts('Menu Button Size:') }} + {{:: ts('Menu Button Size') }} </label> <select id="crm-search-admin-col-size-{{$index}}" class="form-control" ng-model="col.size"> <option value="btn-lg">{{:: ts('Large') }}</option> @@ -9,7 +9,7 @@ <option value="btn-xs">{{:: ts('Tiny') }}</option> </select> <label for="crm-search-admin-col-style-{{$index}}"> - {{:: ts('Style:') }} + {{:: ts('Style') }} </label> <select id="crm-search-admin-col-style-{{$index}}" class="form-control" ng-model="col.style"> <option ng-repeat="opt in $ctrl.parent.styles" value="{{ opt.key }}">{{ opt.value }}</option> @@ -17,7 +17,7 @@ </div> <div class="form-inline"> <label> - {{:: ts('Menu Text/Icon:') }} + {{:: ts('Menu Text/Icon') }} </label> <div class="btn-group"> <button type="button" class="btn btn-{{ col.style + ' ' + col.size }}"> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js index ac8e3483db..081b45393f 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js @@ -34,7 +34,7 @@ if (!ctrl.display.settings) { ctrl.display.settings = { style: 'ul', - limit: 20, + limit: CRM.crmSearchAdmin.defaultPagerSize, pager: true }; } diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html index 362cde215a..6334927aa3 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html @@ -1,23 +1,31 @@ <fieldset ng-include="'~/crmSearchAdmin/crmSearchAdminDisplaySort.html'"></fieldset> <fieldset> <div class="form-inline"> - <label for="crm-search-admin-display-style">{{:: ts('Style:') }}</label> + <label for="crm-search-admin-display-style">{{:: ts('Style') }}</label> <select id="crm-search-admin-display-style" class="form-control" ng-model="$ctrl.display.settings.style" ng-change="$ctrl.display.settings.symbol = ''"> <option value="ul">{{:: ts('Bullets') }}</option> <option value="ol">{{:: ts('Numbers') }}</option> </select> - <label for="crm-search-admin-display-symbol">{{:: ts('Symbol:') }}</label> + <label for="crm-search-admin-display-symbol">{{:: ts('Symbol') }}</label> <select id="crm-search-admin-display-symbol" class="form-control" ng-model="$ctrl.display.settings.symbol"> <option ng-repeat="symbol in $ctrl.symbols[$ctrl.display.settings.style]" value="{{ symbol.char }}"> {{ symbol.label }} </option> </select> - <div class="form-inline"> </div> - <label for="crm-search-admin-display-limit">{{:: ts('Results to display (0 for no limit):') }}</label> - <input id="crm-search-admin-display-limit" type="number" min="0" step="1" class="form-control" ng-model="$ctrl.display.settings.limit"> + <div class="form-inline"> + <div class="checkbox-inline form-control"> + <label> + <input type="checkbox" ng-checked="$ctrl.display.settings.limit" ng-click="$ctrl.parent.toggleLimit()"> + <span>{{:: ts('Limit Results') }}</span> + </label> + <input id="crm-search-admin-display-limit" ng-if="$ctrl.display.settings.limit" type="number" min="1" step="1" class="form-control" ng-model="$ctrl.display.settings.limit"> + </div> <div class="checkbox-inline form-control"> - <label><input type="checkbox" ng-model="$ctrl.display.settings.pager"> <span>{{:: ts('Use Pager') }}</span></label> + <label ng-class="{disabled: !$ctrl.display.settings.limit}"> + <input type="checkbox" ng-model="$ctrl.display.settings.pager" ng-disabled="!$ctrl.display.settings.limit"> + <span>{{:: ts('Use Pager') }}</span> + </label> </div> </div> </fieldset> @@ -30,7 +38,7 @@ <fieldset ng-repeat="col in $ctrl.display.settings.columns" class="crm-draggable"> <legend><i class="crm-i fa-arrows crm-search-move-icon"></i> {{ $ctrl.parent.getColLabel(col) }}</legend> <div class="form-inline" title="{{ ts('Should this item display on its own line or inline with other items?') }}"> - <label><input type="checkbox" ng-model="col.break"> {{:: ts('Display on new line') }}</label> + <label><input type="checkbox" ng-model="col.break"> {{:: ts('New Line') }}</label> <button type="button" class="btn-xs pull-right" ng-click="$ctrl.parent.removeCol($index)" title="{{:: ts('Remove') }}"> <i class="crm-i fa-ban"></i> </button> @@ -38,7 +46,7 @@ <div class="form-inline crm-search-admin-flex-row"> <label> <input type="checkbox" ng-checked="col.label" ng-click="col.label = col.label ? null : $ctrl.parent.getColLabel(col)" > - {{ col.label ? ts('Label:') : ts('Label') }} + {{:: ts('Label') }} </label> <input ng-if="col.label" class="form-control crm-flex-1" type="text" ng-model="col.label" ng-model-options="{updateOn: 'blur'}"> <crm-search-admin-token-select ng-if="col.label" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="label"></crm-search-admin-token-select> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js index 343c14cfc8..937b85d174 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js @@ -18,7 +18,7 @@ this.$onInit = function () { if (!ctrl.display.settings) { ctrl.display.settings = { - limit: 20, + limit: CRM.crmSearchAdmin.defaultPagerSize, pager: true }; } diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html index 5264ceb1cb..f068b4bcda 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html @@ -1,13 +1,24 @@ <fieldset ng-include="'~/crmSearchAdmin/crmSearchAdminDisplaySort.html'"></fieldset> <fieldset> <div class="form-inline"> - <label for="crm-search-admin-display-limit">{{:: ts('Results to display (0 for no limit):') }}</label> - <input id="crm-search-admin-display-limit" type="number" min="0" step="1" class="form-control" ng-model="$ctrl.display.settings.limit"> <div class="checkbox-inline form-control"> - <label><input type="checkbox" ng-model="$ctrl.display.settings.pager"> <span>{{:: ts('Use Pager') }}</span></label> + <label> + <input type="checkbox" ng-checked="$ctrl.display.settings.limit" ng-click="$ctrl.parent.toggleLimit()"> + <span>{{:: ts('Limit Results') }}</span> + </label> + <input id="crm-search-admin-display-limit" ng-if="$ctrl.display.settings.limit" type="number" min="1" step="1" class="form-control" ng-model="$ctrl.display.settings.limit"> </div> <div class="checkbox-inline form-control"> - <label><input type="checkbox" ng-model="$ctrl.display.settings.actions"> <span>{{:: ts('Enable Actions') }}</span></label> + <label ng-class="{disabled: !$ctrl.display.settings.limit}"> + <input type="checkbox" ng-model="$ctrl.display.settings.pager" ng-disabled="!$ctrl.display.settings.limit"> + <span>{{:: ts('Use Pager') }}</span> + </label> + </div> + <div class="checkbox-inline form-control"> + <label> + <input type="checkbox" ng-model="$ctrl.display.settings.actions"> + <span>{{:: ts('Enable Actions') }}</span> + </label> </div> </div> </fieldset> @@ -20,14 +31,14 @@ <fieldset ng-repeat="col in $ctrl.display.settings.columns" class="crm-draggable"> <legend><i class="crm-i fa-arrows crm-search-move-icon"></i> {{ $ctrl.parent.getColLabel(col) }}</legend> <div class="form-inline crm-search-admin-flex-row"> - <label for="crm-search-admin-edit-col-{{ $index }}">{{:: ts('Header:') }}</label> + <label for="crm-search-admin-edit-col-{{ $index }}">{{:: ts('Header') }}</label> <input id="crm-search-admin-edit-col-{{ $index }}" class="form-control crm-flex-1" type="text" ng-model="col.label" > <button type="button" class="btn-xs" ng-click="$ctrl.parent.removeCol($index)" title="{{:: ts('Remove') }}"> <i class="crm-i fa-ban"></i> </button> </div> <div class="form-inline"> - <label>{{:: ts('Alignment:') }}</label> + <label>{{:: ts('Alignment') }}</label> <select ng-model="col.alignment" class="form-control"> <option value="">{{:: ts('Left') }}</option> <option value="text-center">{{:: ts('Center') }}</option> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html index dabb22b1d4..db196e3930 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html @@ -3,9 +3,9 @@ </div> <div class="form-inline"> - <label for="crm-search-admin-group-title">{{ ts('Group Title:') }} <span class="crm-marker">*</span></label> + <label for="crm-search-admin-group-title">{{ ts('Group Title') }} <span class="crm-marker">*</span></label> <input id="crm-search-admin-group-title" class="form-control" placeholder="{{:: ts('Untitled') }}" ng-model="$ctrl.savedSearch.groups[0].title" ng-disabled="!smartGroupColumns.length" ng-required="smartGroupColumns.length"> - <label for="api-save-search-select-column">{{:: ts('Contact Column:') }}</label> + <label for="api-save-search-select-column">{{:: ts('Contact Column') }}</label> <input id="api-save-search-select-column" ng-model="$ctrl.savedSearch.api_params.select[0]" class="form-control huge" crm-ui-select="{data: smartGroupColumns}"/> </div> <fieldset ng-show="smartGroupColumns.length"> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.controller.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.controller.js index 53e4ac32b1..be17c652da 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.controller.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.controller.js @@ -1,17 +1,20 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchAdmin').controller('searchList', function($scope, savedSearches, crmApi4) { + angular.module('crmSearchAdmin').controller('searchList', function($scope, savedSearches, crmApi4, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = $scope.$ctrl = this; $scope.formatDate = CRM.utils.formatDate; this.savedSearches = savedSearches; + this.sortField = 'modified_date'; + this.sortDir = true; this.afformEnabled = CRM.crmSearchAdmin.afformEnabled; this.afformAdminEnabled = CRM.crmSearchAdmin.afformAdminEnabled; - this.entityTitles = _.transform(CRM.crmSearchAdmin.schema, function(titles, entity) { - titles[entity.name] = entity.title_plural; - }, {}); + _.each(savedSearches, function(search) { + search.entity_title = searchMeta.getEntity(search.api_entity).title_plural; + search.afform_count = 0; + }); this.searchPath = CRM.url('civicrm/search'); this.afformPath = CRM.url('civicrm/admin/afform'); @@ -20,6 +23,12 @@ return encodeURI(angular.toJson(params)); }; + // Change sort field/direction when clicking a column header + this.sortBy = function(col) { + ctrl.sortDir = ctrl.sortField === col ? !ctrl.sortDir : false; + ctrl.sortField = col; + }; + this.deleteSearch = function(search) { var index = _.findIndex(savedSearches, {id: search.id}); if (index > -1) { @@ -45,13 +54,17 @@ _.each(afforms, function(afform) { var searchName = afform.layout.match(/<crm-search-display-[^>]+search-name[ ]*=[ ]*['"]([^"']+)/); if (searchName) { - ctrl.afforms[searchName[1]] = ctrl.afforms[searchName[1]] || []; - ctrl.afforms[searchName[1]].push({ - title: afform.title, - name: afform.name, - // FIXME: This is the view url, currently not exposed to the UI, as BS3 doesn't support submenus. - url: afform.server_route ? CRM.url(afform.server_route) : null - }); + var search = _.find(ctrl.savedSearches, {name: searchName[1]}); + if (search) { + search.afform_count++; + ctrl.afforms[searchName[1]] = ctrl.afforms[searchName[1]] || []; + ctrl.afforms[searchName[1]].push({ + title: afform.title, + name: afform.name, + // FIXME: This is the view url, currently not exposed to the UI, as BS3 doesn't support submenus. + url: afform.server_route ? CRM.url(afform.server_route) : null + }); + } } }); }); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.html index 856f4e89a8..a698477772 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchList.html @@ -1,7 +1,7 @@ -<div id="bootstrap-theme" class="crm-search"> +<div id="bootstrap-theme" class="crm-search crm-search-admin-list"> <h1 crm-page-title>{{:: ts('Saved Searches') }}</h1> <div class="form-inline"> - <label for="search-list-filter">{{:: ts('Filter:') }}</label> + <label for="search-list-filter">{{:: ts('Filter') }}</label> <input class="form-control" type="search" id="search-list-filter" ng-model="$ctrl.searchFilter" placeholder=""> <a class="btn btn-primary pull-right" href="#/create/Contact/"> <i class="crm-i fa-plus"></i> @@ -11,22 +11,48 @@ <table> <thead> <tr> - <th>{{:: ts('ID') }}</th> - <th>{{:: ts('Label') }}</th> - <th>{{:: ts('For') }}</th> - <th>{{:: ts('Displays') }}</th> - <th>{{:: ts('Smart Group') }}</th> - <th ng-if="$ctrl.afformEnabled">{{:: ts('Forms') }}</th> - <th>{{:: ts('Created') }}</th> - <th>{{:: ts('Last Modified') }}</th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('label')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'label'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'label'"></i> + {{:: ts('Label') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('entity_title')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'entity_title'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'entity_title'"></i> + {{:: ts('For') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('display_name.length')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'display_name.length'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'display_name.length'"></i> + {{:: ts('Displays') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('groups[0]')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'groups[0]'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'groups[0]'"></i> + {{:: ts('Smart Group') }} + </th> + <th ng-if="$ctrl.afformEnabled" ng-click="$ctrl.sortBy('afform_count')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'afform_count'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'afform_count'"></i> + {{:: ts('Forms') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('created_date')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'created_date'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'created_date'"></i> + {{:: ts('Created') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('modified_date')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'modified_date'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'modified_date'"></i> + {{:: ts('Last Modified') }} + </th> <th></th> </tr> </thead> <tbody> - <tr ng-repeat="search in $ctrl.savedSearches | filter:$ctrl.searchFilter"> - <td>{{:: search.id }}</td> + <tr ng-repeat="search in $ctrl.savedSearches | filter:$ctrl.searchFilter | orderBy:$ctrl.sortField:$ctrl.sortDir"> <td>{{:: search.label }}</td> - <td>{{:: $ctrl.entityTitles[search.api_entity] }}</td> + <td>{{:: search.entity_title }}</td> <td> <div class="btn-group"> <button type="button" disabled ng-if="!search.display_name" class="btn btn-xs dropdown-toggle btn-primary-outline"> @@ -49,7 +75,7 @@ <td ng-if="::$ctrl.afformEnabled"> <div class="btn-group"> <button type="button" ng-click="$ctrl.loadAfforms()" ng-if="search.display_name" class="btn btn-xs dropdown-toggle btn-primary-outline" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - {{ $ctrl.afforms ? ($ctrl.afforms[search.name] && $ctrl.afforms[search.name].length === 1 ? ts('1 Form') : ts('%1 Forms', {1: $ctrl.afforms[search.name] ? $ctrl.afforms[search.name].length : 0})) : ts('Forms...') }} + {{ $ctrl.afforms ? (search.afform_count === 1 ? ts('1 Form') : ts('%1 Forms', {1: search.afform_count})) : ts('Forms...') }} <span class="caret"></span> </button> <ul class="dropdown-menu"> @@ -59,7 +85,7 @@ </a> </li> <li class="divider" role="separator" ng-if="::$ctrl.afformAdminEnabled"></li> - <li ng-if="!$ctrl.afforms || !$ctrl.afforms[search.name]" class="disabled"> + <li ng-if="!search.afform_count" class="disabled"> <a href> <i ng-if="!$ctrl.afforms" class="crm-i fa-spinner fa-spin"></i> <em ng-if="$ctrl.afforms && !$ctrl.afforms[search.name]">{{:: ts('None Found') }}</em> @@ -74,8 +100,12 @@ </ul> </div> </td> - <td>{{:: ts('%1 by %2', {1: formatDate(search.created_date), 2: search['created.display_name']}) }}</td> - <td>{{:: ts('%1 by %2', {1: formatDate(search.created_date), 2: search['modified.display_name']}) }}</td> + <td title="{{:: formatDate(search.created_date, null, true) }}"> + {{:: search['created.display_name'] ? ts('%1 by %2', {1: formatDate(search.created_date), 2: search['created.display_name']}) : formatDate(search.created_date) }} + </td> + <td title="{{:: formatDate(search.modified_date, null, true) }}"> + {{:: search['modified.display_name'] ? ts('%1 by %2', {1: formatDate(search.modified_date), 2: search['modified.display_name']}) : formatDate(search.modified_date) }} + </td> <td class="text-right"> <a class="btn btn-xs btn-default" href="#/edit/{{:: search.id }}">{{:: ts('Edit') }}</a> <a class="btn btn-xs btn-default" href="#/create/{{:: search.api_entity + '?params=' + $ctrl.encode(search.api_params) }}">{{:: ts('Clone') }}</a> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html index 800139aea7..c5cf94aeb0 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html @@ -7,7 +7,7 @@ <li role="presentation" ng-class="{active: controls.tab === 'group'}" ng-if="$ctrl.savedSearch.groups.length" title="{{ !$ctrl.groupExists ? ts('Group will be deleted.') : '' }}"> <a href ng-click="selectTab('group')" ng-disabled="!$ctrl.groupExists"> <i class="crm-i fa-users"></i> - {{:: ts('Smart Group:') }} {{ $ctrl.savedSearch.groups[0].title }} + {{:: ts('Smart Group') }} {{ $ctrl.savedSearch.groups[0].title }} </a> <button type="button" class="btn-xs btn-danger-outline crm-search-delete-display" ng-click="$ctrl.removeGroup()" title="{{ $ctrl.groupExists ? ts('Delete') : ts('Undelete') }}"> <i class="crm-i fa-{{ $ctrl.groupExists ? 'trash' : 'undo' }}"></i> @@ -33,7 +33,7 @@ {{:: ts('Smart Group') }} </a> </li> - <li class="dropdown-header">{{ ts('Display:') }}</li> + <li class="dropdown-header">{{ ts('Display') }}</li> <li ng-repeat="type in ::$ctrl.displayTypes"> <a href ng-click="$ctrl.addDisplay(type.id)"> <i class="crm-i {{:: type.icon }}"></i> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay.module.js b/civicrm/ext/search_kit/ang/crmSearchDisplay.module.js index 8c08cffa0e..24c96974b3 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay.module.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay.module.js @@ -7,7 +7,7 @@ .factory('searchDisplayUtils', function(crmApi4) { // Replace tokens keyed to rowData. - // If rowMeta is provided, values will be formatted; if omiited, raw values will be provided. + // If rowMeta is provided, values will be formatted; if omitted, raw values will be provided. function replaceTokens(str, rowData, rowMeta) { if (!str) { return ''; @@ -30,19 +30,11 @@ return url; } - // Returns html-escaped display value for a single column in a row + // Returns display value for a single column in a row function formatDisplayValue(rowData, key, rowMeta) { var column = _.findWhere(rowMeta, {key: key}), - displayValue = column.rewrite ? replaceTokens(column.rewrite, rowData, rowMeta) : formatRawValue(column, rowData[key]), - result = _.escape(displayValue); - if (column.link) { - var target = ''; - if (column.link.target) { - target = column.link.target === 'crm-popup' ? 'class="crm-popup" ' : 'target="' + column.link.target + '" '; - } - result = '<a ' + target + 'href="' + _.escape(getUrl(column.link.path, rowData)) + '">' + result + '</a>'; - } - return result; + displayValue = column.rewrite ? replaceTokens(column.rewrite, rowData, rowMeta) : formatRawValue(column, rowData[key]); + return displayValue; } // Formats raw field value according to data type diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/buttons.html b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/buttons.html index 7630a9b863..8e570383c7 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/buttons.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/buttons.html @@ -1,5 +1,5 @@ <span ng-repeat="item in col.links"> - <a class="btn {{:: col.size }} btn-{{:: item.style }} {{:: item.target }}" target="{{:: item.target }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> + <a class="btn {{:: col.size }} btn-{{:: item.style }}" target="{{:: item.target }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> <i ng-if=":: item.icon" class="crm-i {{:: item.icon }}"></i> {{:: item.text }} </a> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html index 4f21543abf..0d75587970 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html @@ -1,2 +1,7 @@ <crm-search-display-editable row="row" col="col" on-success="$ctrl.refresh(row)" cancel="$ctrl.editing = null;" ng-if="col.editable && $ctrl.editing && $ctrl.editing[0] === rowIndex && $ctrl.editing[1] === col.key"></crm-search-display-editable> -<span ng-bind-html=":: $ctrl.formatFieldValue(row, col)" ng-class="{'crm-editable-enabled': col.editable && !$ctrl.editing && row[col.editable.id]}" ng-click="col.editable && !$ctrl.editing && ($ctrl.editing = [rowIndex, col.key])"></span> +<span ng-if="::!col.link" ng-class="{'crm-editable-enabled': col.editable && !$ctrl.editing && row[col.editable.id]}" ng-click="col.editable && !$ctrl.editing && ($ctrl.editing = [rowIndex, col.key])"> + {{:: $ctrl.formatFieldValue(row, col) }} +</span> +<a ng-if="::col.link" target="{{:: col.link.target }}" href="{{:: displayUtils.getUrl(col.link.path, row) }}"> + {{:: $ctrl.formatFieldValue(row, col) }} +</a> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/links.html b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/links.html index d84651693d..c78ecda3ee 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/links.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/links.html @@ -1,5 +1,5 @@ <span ng-repeat="item in col.links"> - <a class="text-{{:: item.style }} {{:: item.target }}" target="{{:: item.target }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> + <a class="text-{{:: item.style }}" target="{{:: item.target }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> <i ng-if=":: item.icon" class="crm-i {{:: item.icon }}"></i> {{:: item.text }} </a> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/menu.html b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/menu.html index 213f814424..ffd5c08ea7 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/menu.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/menu.html @@ -5,7 +5,7 @@ </button> <ul class="dropdown-menu {{ col.alignment === 'text-right' ? 'dropdown-menu-right' : '' }}" ng-if=":: col.open"> <li ng-repeat="item in col.links" class="bg-{{:: item.style }}"> - <a href="{{:: displayUtils.getUrl(item.path, row) }}" class="{{:: item.target }}" target="{{:: item.target }}"> + <a href="{{:: displayUtils.getUrl(item.path, row) }}" target="{{:: item.target }}"> <i ng-if=":: item.icon" class="crm-i {{:: item.icon }}"></i> {{:: item.text }} </a> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php b/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php index b1c65325e1..d010a2f97d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php @@ -9,7 +9,7 @@ return [ 'ang/crmSearchDisplayTable', ], 'basePages' => ['civicrm/search', 'civicrm/admin/search'], - 'requires' => ['crmSearchDisplay', 'crmUi', 'crmSearchActions', 'ui.bootstrap'], + 'requires' => ['crmSearchDisplay', 'crmUi', 'crmSearchTasks', 'ui.bootstrap'], 'bundles' => ['bootstrap3'], 'exports' => [ 'crm-search-display-table' => 'E', diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html index e867270f72..9cf6fcfdbd 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html @@ -1,6 +1,6 @@ <div class="crm-search-display crm-search-display-table"> <div class="form-inline" ng-if="$ctrl.settings.actions"> - <crm-search-actions entity="$ctrl.apiEntity" ids="$ctrl.selectedRows" refresh="$ctrl.getResults()"></crm-search-actions> + <crm-search-tasks entity="$ctrl.apiEntity" ids="$ctrl.selectedRows" refresh="$ctrl.getResults()"></crm-search-tasks> </div> <table> <thead> diff --git a/civicrm/ext/search_kit/ang/crmSearchActions.ang.php b/civicrm/ext/search_kit/ang/crmSearchTasks.ang.php similarity index 71% rename from civicrm/ext/search_kit/ang/crmSearchActions.ang.php rename to civicrm/ext/search_kit/ang/crmSearchTasks.ang.php index 31e6290bf3..5604659a33 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions.ang.php +++ b/civicrm/ext/search_kit/ang/crmSearchTasks.ang.php @@ -2,15 +2,15 @@ // Search actions module - provides dropdown menu with bulk actions to take on selected rows. return [ 'js' => [ - 'ang/crmSearchActions.module.js', - 'ang/crmSearchActions/*.js', - 'ang/crmSearchActions/*/*.js', + 'ang/crmSearchTasks.module.js', + 'ang/crmSearchTasks/*.js', + 'ang/crmSearchTasks/*/*.js', ], 'partials' => [ - 'ang/crmSearchActions', + 'ang/crmSearchTasks', ], 'css' => [ - 'css/crmSearchActions.css', + 'css/crmSearchTasks.css', ], 'basePages' => [], 'requires' => ['crmUi', 'crmUtil', 'dialogService', 'api4', 'checklist-model'], diff --git a/civicrm/ext/search_kit/ang/crmSearchActions.module.js b/civicrm/ext/search_kit/ang/crmSearchTasks.module.js similarity index 88% rename from civicrm/ext/search_kit/ang/crmSearchActions.module.js rename to civicrm/ext/search_kit/ang/crmSearchTasks.module.js index 341e341287..e1d9ce4b38 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions.module.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks.module.js @@ -2,7 +2,7 @@ "use strict"; // Declare module - angular.module('crmSearchActions', CRM.angRequires('crmSearchActions')) + angular.module('crmSearchTasks', CRM.angRequires('crmSearchTasks')) // Reformat an array of objects for compatibility with select2 // Todo this probably belongs in core diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchBatchRunner.component.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchBatchRunner.component.js similarity index 93% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchBatchRunner.component.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchBatchRunner.component.js index ef66e518b8..415d44d68a 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchBatchRunner.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchBatchRunner.component.js @@ -1,7 +1,7 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions').component('crmSearchBatchRunner', { + angular.module('crmSearchTasks').component('crmSearchBatchRunner', { bindings: { entity: '<', action: '@', @@ -10,7 +10,7 @@ success: '&', error: '&' }, - templateUrl: '~/crmSearchActions/crmSearchBatchRunner.html', + templateUrl: '~/crmSearchTasks/crmSearchBatchRunner.html', controller: function($scope, $timeout, $interval, crmApi4) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this, diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchBatchRunner.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchBatchRunner.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchBatchRunner.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchBatchRunner.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/boolean.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/boolean.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/boolean.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/boolean.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmMultiSelectDate.directive.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmMultiSelectDate.directive.js similarity index 98% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmMultiSelectDate.directive.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmMultiSelectDate.directive.js index e830358fbb..8b97a054ae 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmMultiSelectDate.directive.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmMultiSelectDate.directive.js @@ -1,7 +1,7 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions') + angular.module('crmSearchTasks') .directive('crmMultiSelectDate', function () { return { restrict: 'A', diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInput.component.js similarity index 91% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInput.component.js index 9accd4807e..c98d4705e5 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInput.component.js @@ -1,7 +1,7 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions').component('crmSearchInput', { + angular.module('crmSearchTasks').component('crmSearchInput', { bindings: { field: '<', 'op': '<', @@ -9,7 +9,7 @@ 'optionKey': '<' }, require: {ngModel: 'ngModel'}, - templateUrl: '~/crmSearchActions/crmSearchInput/crmSearchInput.html', + templateUrl: '~/crmSearchTasks/crmSearchInput/crmSearchInput.html', controller: function($scope) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this; diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInput.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInput.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInput.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInput.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js similarity index 83% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js index f38f7a45e4..cd6dfe78cd 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js @@ -1,7 +1,7 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions').component('crmSearchInputVal', { + angular.module('crmSearchTasks').component('crmSearchInputVal', { bindings: { field: '<', 'multi': '<', @@ -15,7 +15,7 @@ this.$onInit = function() { var rendered = false; - ctrl.dateRanges = CRM.crmSearchActions.dateRanges; + ctrl.dateRanges = CRM.crmSearchTasks.dateRanges; ctrl.entity = ctrl.field.fk_entity || ctrl.field.entity; this.ngModel.$render = function() { @@ -87,30 +87,30 @@ this.getTemplate = function() { if (ctrl.field.input_type === 'Date') { - return '~/crmSearchActions/crmSearchInput/date.html'; + return '~/crmSearchTasks/crmSearchInput/date.html'; } if (ctrl.field.data_type === 'Boolean') { - return '~/crmSearchActions/crmSearchInput/boolean.html'; + return '~/crmSearchTasks/crmSearchInput/boolean.html'; } if (ctrl.field.options) { - return '~/crmSearchActions/crmSearchInput/select.html'; + return '~/crmSearchTasks/crmSearchInput/select.html'; } if (ctrl.field.fk_entity || ctrl.field.name === 'id') { - return '~/crmSearchActions/crmSearchInput/entityRef.html'; + return '~/crmSearchTasks/crmSearchInput/entityRef.html'; } if (ctrl.field.data_type === 'Integer') { - return '~/crmSearchActions/crmSearchInput/integer.html'; + return '~/crmSearchTasks/crmSearchInput/integer.html'; } if (ctrl.field.data_type === 'Float') { - return '~/crmSearchActions/crmSearchInput/float.html'; + return '~/crmSearchTasks/crmSearchInput/float.html'; } - return '~/crmSearchActions/crmSearchInput/text.html'; + return '~/crmSearchTasks/crmSearchInput/text.html'; }; this.getFieldOptions = function() { diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/date.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/date.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/date.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/date.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/entityRef.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/entityRef.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/entityRef.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/entityRef.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/float.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/float.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/float.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/float.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/integer.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/integer.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/integer.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/integer.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/select.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/select.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/select.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/select.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/text.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/text.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchInput/text.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/text.html diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionDelete.ctrl.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js similarity index 76% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionDelete.ctrl.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js index 6e54266ab2..273a206344 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionDelete.ctrl.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js @@ -1,7 +1,7 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions').controller('crmSearchActionDelete', function($scope, dialogService) { + angular.module('crmSearchTasks').controller('crmSearchTaskDelete', function($scope, dialogService) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), model = $scope.model, ctrl = this; @@ -9,7 +9,7 @@ this.entityTitle = model.ids.length === 1 ? model.entityInfo.title : model.entityInfo.title_plural; this.cancel = function() { - dialogService.cancel('crmSearchAction'); + dialogService.cancel('crmSearchTask'); }; this.delete = function() { @@ -19,12 +19,12 @@ this.onSuccess = function() { CRM.alert(ts('Successfully deleted %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Deleted'), 'success'); - dialogService.close('crmSearchAction'); + dialogService.close('crmSearchTask'); }; this.onError = function() { CRM.alert(ts('An error occurred while attempting to delete %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Error'), 'error'); - dialogService.close('crmSearchAction'); + dialogService.close('crmSearchTask'); }; }); diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionDelete.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html similarity index 88% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionDelete.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html index 7f924aa409..74e0aec7ae 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionDelete.html +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html @@ -1,8 +1,8 @@ <div id="bootstrap-theme"> - <form ng-controller="crmSearchActionDelete as $ctrl"> + <form ng-controller="crmSearchTaskDelete as $ctrl"> <p><strong>{{:: ts('Are you sure you want to delete %1 %2?', {1: model.ids.length, 2: $ctrl.entityTitle}) }}</strong></p> <hr /> - <div ng-if="$ctrl.run" class="crm-search-action-progress"> + <div ng-if="$ctrl.run" class="crm-search-task-progress"> <h5>{{:: ts('Deleting %1 %2...', {1: model.ids.length, 2: $ctrl.entityTitle}) }}</h5> <crm-search-batch-runner entity="model.entity" action="Delete" params="$ctrl.run" ids="model.ids" success="$ctrl.onSuccess()" error="$ctrl.onError()" ></crm-search-batch-runner> </div> @@ -17,4 +17,5 @@ {{:: ts('Delete %1', {1: $ctrl.entityTitle}) }} </button> </div> + </form> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js similarity index 90% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js index d06dcf473b..bb684b03ab 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js @@ -1,7 +1,7 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions').controller('crmSearchActionUpdate', function ($scope, $timeout, crmApi4, dialogService) { + angular.module('crmSearchTasks').controller('crmSearchTaskUpdate', function ($scope, $timeout, crmApi4, dialogService) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), model = $scope.model, ctrl = this; @@ -68,7 +68,7 @@ }; this.cancel = function() { - dialogService.cancel('crmSearchAction'); + dialogService.cancel('crmSearchTask'); }; this.save = function() { @@ -80,12 +80,12 @@ this.onSuccess = function() { CRM.alert(ts('Successfully updated %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Saved'), 'success'); - dialogService.close('crmSearchAction'); + dialogService.close('crmSearchTask'); }; this.onError = function() { CRM.alert(ts('An error occurred while attempting to update %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Error'), 'error'); - dialogService.close('crmSearchAction'); + dialogService.close('crmSearchTask'); }; }); diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionUpdate.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.html similarity index 93% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionUpdate.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.html index 58e5697537..9ae3811079 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActionUpdate.html +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.html @@ -1,5 +1,5 @@ <div id="bootstrap-theme"> - <form ng-controller="crmSearchActionUpdate as $ctrl"> + <form ng-controller="crmSearchTaskUpdate as $ctrl"> <p><strong>{{:: ts('Update the %1 selected %2 with the following values:', {1: model.ids.length, 2: $ctrl.entityTitle}) }}</strong></p> <div class="form-inline" ng-repeat="clause in $ctrl.values" > <input class="form-control" ng-change="$ctrl.updateField($index)" ng-disabled="$ctrl.run" ng-model="clause[0]" crm-ui-select="{data: $ctrl.availableFields, allowClear: true, placeholder: 'Field'}" /> @@ -8,7 +8,7 @@ <div class="form-inline" ng-hide="$ctrl.run"> <input class="form-control twenty" style="width: 15em;" ng-model="$ctrl.add" ng-change="$ctrl.addField()" ng-disabled="!$ctrl.fields" ng-class="{loading: !$ctrl.fields}" crm-ui-select="{data: $ctrl.availableFields, placeholder: ts('Add Value')}"/> </div> - <div ng-if="$ctrl.run" class="crm-search-action-progress"> + <div ng-if="$ctrl.run" class="crm-search-task-progress"> <h5>{{:: ts('Updating %1 %2...', {1: model.ids.length, 2: $ctrl.entityTitle}) }}</h5> <crm-search-batch-runner entity="model.entity" action="Update" params="$ctrl.run" ids="model.ids" success="$ctrl.onSuccess()" error="$ctrl.onError()" ></crm-search-batch-runner> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActions.component.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTasks.component.js similarity index 89% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActions.component.js rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTasks.component.js index f278c00e3a..0e1ae4a1a5 100644 --- a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActions.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTasks.component.js @@ -1,13 +1,13 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchActions').component('crmSearchActions', { + angular.module('crmSearchTasks').component('crmSearchTasks', { bindings: { entity: '<', refresh: '&', ids: '<' }, - templateUrl: '~/crmSearchActions/crmSearchActions.html', + templateUrl: '~/crmSearchTasks/crmSearchTasks.html', controller: function($scope, crmApi4, dialogService) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this, @@ -58,7 +58,7 @@ autoOpen: false, title: action.title }); - dialogService.open('crmSearchAction', action.uiDialog.templateUrl, data, options) + dialogService.open('crmSearchTask', action.uiDialog.templateUrl, data, options) .then(ctrl.refresh); } }; diff --git a/civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActions.html b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTasks.html similarity index 100% rename from civicrm/ext/search_kit/ang/crmSearchActions/crmSearchActions.html rename to civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchTasks.html diff --git a/civicrm/ext/search_kit/css/crmSearchAdmin.css b/civicrm/ext/search_kit/css/crmSearchAdmin.css index 0bad2c7879..1082b8a938 100644 --- a/civicrm/ext/search_kit/css/crmSearchAdmin.css +++ b/civicrm/ext/search_kit/css/crmSearchAdmin.css @@ -1,3 +1,14 @@ +#bootstrap-theme.crm-search-admin-list th[ng-click] { + cursor: pointer; +} +#bootstrap-theme.crm-search-admin-list th i.fa-sort-desc, +#bootstrap-theme.crm-search-admin-list th i.fa-sort-asc { + color: #1a5a82; +} +#bootstrap-theme.crm-search-admin-list th:not(:hover) i.fa-sort { + opacity: .5; +} + #bootstrap-theme .crm-search-criteria-column { min-width: 500px; } @@ -134,6 +145,12 @@ #bootstrap-theme.crm-search input[type=number] { width: 90px; } +/* For display.settings.limit field */ +#bootstrap-theme.crm-search .checkbox-inline.form-control input[type=number] { + position: relative; + top: -5px; + right: -9px; +} #bootstrap-theme.crm-search .api4-add-where-group-menu { min-width: 80px; diff --git a/civicrm/ext/search_kit/css/crmSearchActions.css b/civicrm/ext/search_kit/css/crmSearchTasks.css similarity index 62% rename from civicrm/ext/search_kit/css/crmSearchActions.css rename to civicrm/ext/search_kit/css/crmSearchTasks.css index aab0e8c9dc..69f37e8959 100644 --- a/civicrm/ext/search_kit/css/crmSearchActions.css +++ b/civicrm/ext/search_kit/css/crmSearchTasks.css @@ -1,4 +1,4 @@ -.crm-search-action-progress { +.crm-search-task-progress { padding: 10px; margin-top: 10px; border: 1px solid lightgrey; @@ -22,3 +22,13 @@ bottom: -22px; left: 0; } +#bootstrap-theme .crm-search-display th[ng-click] { + cursor: pointer; +} +#bootstrap-theme .crm-search-display th i.fa-sort-desc, +#bootstrap-theme .crm-search-display th i.fa-sort-asc { + color: #1a5a82; +} +#bootstrap-theme .crm-search-display th:not(:hover) i.fa-sort { + opacity: .5; +} diff --git a/civicrm/ext/search_kit/info.xml b/civicrm/ext/search_kit/info.xml index 6519587974..0d98947df4 100644 --- a/civicrm/ext/search_kit/info.xml +++ b/civicrm/ext/search_kit/info.xml @@ -14,14 +14,14 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-01-06</releaseDate> - <version>1.0.beta3</version> + <version>5.39.0</version> <develStage>beta</develStage> <compatibility> <ver>5.38</ver> </compatibility> <comments>This extension is still in beta. Click on the chat link above to discuss development, report problems or ask questions.</comments> <classloader> - <psr0 prefix="CRM_" path="" /> + <psr0 prefix="CRM_" path=""/> <psr4 prefix="Civi\" path="Civi"/> </classloader> <upgrader>CRM_Search_Upgrader</upgrader> diff --git a/civicrm/ext/search_kit/phpunit.xml.dist b/civicrm/ext/search_kit/phpunit.xml.dist index 1990cb6164..9ff226c007 100644 --- a/civicrm/ext/search_kit/phpunit.xml.dist +++ b/civicrm/ext/search_kit/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="SearchKit Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/search_kit/search_kit.php b/civicrm/ext/search_kit/search_kit.php index 170a4a55e0..dc661c8b97 100644 --- a/civicrm/ext/search_kit/search_kit.php +++ b/civicrm/ext/search_kit/search_kit.php @@ -45,6 +45,23 @@ function search_kit_civicrm_managed(&$entities) { */ function search_kit_civicrm_angularModules(&$angularModules) { _search_kit_civix_civicrm_angularModules($angularModules); + // Fetch all search tasks provided by extensions and add their Angular modules as crmSearchTasks dependencies + $tasks = []; + $null = NULL; + $checkPermissions = FALSE; + \CRM_Utils_Hook::singleton()->invoke(['tasks', 'checkPermissions', 'userId'], + $tasks, $checkPermissions, $null, + $null, $null, $null, 'civicrm_searchKitTasks' + ); + foreach ($tasks as $entityTasks) { + foreach ($entityTasks as $task) { + if (isset($task['module']) && $task['module'] !== 'crmSearchTasks' && + !in_array($task['module'], $angularModules['crmSearchTasks']['requires'], TRUE) + ) { + $angularModules['crmSearchTasks']['requires'][] = $task['module']; + } + } + } } /** diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php index 02506e6a8f..5264f9e33c 100644 --- a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php @@ -8,14 +8,11 @@ use Civi\Api4\UFMatch; use Civi\Test\HeadlessInterface; use Civi\Test\TransactionalInterface; -// FIXME: This shouldn't be needed but the core classLoader doesn't seem present when this file loads -require_once 'tests/phpunit/CRMTraits/ACL/PermissionTrait.php'; - /** * @group headless */ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface { - use \CRMTraits_ACL_PermissionTrait; + use \Civi\Test\ACLPermissionTrait; public function setUpHeadless() { // Civi\Test has many helpers, like install(), uninstall(), sql(), and sqlFile(). @@ -25,14 +22,6 @@ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInter ->apply(); } - public function setUp() { - parent::setUp(); - } - - public function tearDown() { - parent::tearDown(); - } - /** * Test running a searchDisplay with various filters. */ diff --git a/civicrm/ext/search_kit/xml/Menu/search_kit.xml b/civicrm/ext/search_kit/xml/Menu/search_kit.xml index 168defc411..eb53c32709 100644 --- a/civicrm/ext/search_kit/xml/Menu/search_kit.xml +++ b/civicrm/ext/search_kit/xml/Menu/search_kit.xml @@ -8,6 +8,6 @@ <item> <path>civicrm/admin/search</path> <page_callback>CRM_Search_Page_Admin</page_callback> - <access_arguments>administer CiviCRM</access_arguments> + <access_arguments>administer CiviCRM data</access_arguments> </item> </menu> diff --git a/civicrm/ext/sequentialcreditnotes/info.xml b/civicrm/ext/sequentialcreditnotes/info.xml index 4208564f09..718dbd74b3 100644 --- a/civicrm/ext/sequentialcreditnotes/info.xml +++ b/civicrm/ext/sequentialcreditnotes/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-28</releaseDate> - <version>1.0</version> + <version>5.39.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist b/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist index fc8f870b72..8321e70acd 100644 --- a/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist +++ b/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/install/index.php b/civicrm/install/index.php index 5ed5587e21..a56b5289c6 100644 --- a/civicrm/install/index.php +++ b/civicrm/install/index.php @@ -1070,7 +1070,7 @@ class InstallRequirements { } else { $versionDetails = mysqli_query($this->conn, 'SELECT version() as version')->fetch_assoc(); - if (version_compare($versionDetails['version'], $min) == -1) { + if (version_compare($versionDetails['version'], $version) == -1) { $testDetails[2] .= "{$majorHas}.{$minorHas}."; $this->error($testDetails); } diff --git a/civicrm/js/Common.js b/civicrm/js/Common.js index cb3c8d2370..c17432bb7f 100644 --- a/civicrm/js/Common.js +++ b/civicrm/js/Common.js @@ -185,7 +185,7 @@ if (!CRM.vars) CRM.vars = {}; // Workaround for https://github.com/ivaynberg/select2/issues/1246 $.ui.dialog.prototype._allowInteraction = function(e) { - return !!$(e.target).closest('.ui-dialog, .ui-datepicker, .select2-drop, .cke_dialog, #civicrm-menu').length; + return !!$(e.target).closest('.ui-dialog, .ui-datepicker, .select2-drop, .cke_dialog, .ck-balloon-panel, #civicrm-menu').length; }; // Implements jQuery hook.prop @@ -474,12 +474,36 @@ if (!CRM.vars) CRM.vars = {}; }; } - // Use description as title for each option - $el.on('select2-loaded.crmSelect2', function() { - $('.crm-select2-row-description', '#select2-drop').each(function() { - $(this).closest('.select2-result-label').attr('title', $(this).text()); + $el + .on('select2-loaded.crmSelect2', function() { + // Use description as title for each option + $('.crm-select2-row-description', '#select2-drop').each(function() { + $(this).closest('.select2-result-label').attr('title', $(this).text()); + }); + // Collapsible optgroups should be expanded when searching + if ($('#select2-drop.collapsible-optgroups-enabled .select2-search input.select2-input').val()) { + $('#select2-drop.collapsible-optgroups-enabled li.select2-result-with-children') + .addClass('optgroup-expanded'); + } + }) + // Handle collapsible optgroups + .on('select2-open', function(e) { + var isCollapsible = $(e.target).hasClass('collapsible-optgroups'); + $('#select2-drop') + .off('.collapseOptionGroup') + .toggleClass('collapsible-optgroups-enabled', isCollapsible); + if (isCollapsible) { + $('#select2-drop') + .on('click.collapseOptionGroup', '.select2-result-with-children > .select2-result-label', function() { + $(this).parent().toggleClass('optgroup-expanded'); + }) + // If the first item in the list is an optgroup, expand it + .find('li.select2-result-with-children:first-child').addClass('optgroup-expanded'); + } + }) + .on('select2-close', function() { + $('#select2-drop').off('.collapseOptionGroup').removeClass('collapsible-optgroups-enabled'); }); - }); // Defaults for single-selects if ($el.is('select:not([multiple])')) { diff --git a/civicrm/js/crm.ajax.js b/civicrm/js/crm.ajax.js index aabfd28f3a..563e57a6df 100644 --- a/civicrm/js/crm.ajax.js +++ b/civicrm/js/crm.ajax.js @@ -487,7 +487,7 @@ if (settings.openInline) { settings.autoClose = $el.crmSnippet('isOriginalUrl'); $(this).off('.openInline').on('click.openInline', settings.openInline, function(e) { - if ($(this).is(exclude + ', .crm-popup')) { + if ($(this).is(exclude + ', .crm-popup, [target=crm-popup]')) { return; } if ($(this).hasClass('open-inline-noreturn')) { @@ -594,7 +594,7 @@ $(function($) { $('body') - .on('click', 'a.crm-popup', CRM.popup) + .on('click', 'a.crm-popup, a[target=crm-popup]', CRM.popup) // Close unsaved dialog messages .on('dialogopen', function(e) { $('.alert.unsaved-dialog .ui-notify-cross', '#crm-notification-container').click(); diff --git a/civicrm/packages/DB/DataObject.php b/civicrm/packages/DB/DataObject.php index a2e9897114..630a890604 100644 --- a/civicrm/packages/DB/DataObject.php +++ b/civicrm/packages/DB/DataObject.php @@ -2717,7 +2717,8 @@ class DB_DataObject extends DB_DataObject_Overload continue; } } else { - switch (strtolower(substr(trim($string),0,6))) { + // civicrm-packages#324 Use mb function because if setlocale is set to tr_TR.utf8, INSERT would become Insert + switch (mb_strtolower(substr(trim($string),0,6))) { case 'insert': case 'update': @@ -2754,8 +2755,9 @@ class DB_DataObject extends DB_DataObject_Overload // CRM-18093 starts. // CRM-20445 starts Strip any prepended comments + // civicrm-packages#324 Use mb function because if setlocale is set to tr_TR.utf8, INSERT would become Insert $queryString = (substr($string, 0, 2) === '/*') ? substr($string, strpos($string, '*/') + 2) : $string; - $action = strtolower(substr(trim($queryString),0,6)); + $action = mb_strtolower(substr(trim($queryString),0,6)); // CRM-20445 ends if (!empty($_DB_DATAOBJECT['CONFIG']['debug']) || (defined('CIVICRM_DEBUG_LOG_QUERY') && CIVICRM_DEBUG_LOG_QUERY)) { @@ -2804,7 +2806,7 @@ class DB_DataObject extends DB_DataObject_Overload if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug(serialize($result), 'RESULT',5); } - if (method_exists($result, 'numRows')) { + if (is_object($result) && method_exists($result, 'numRows')) { if ($_DB_driver == 'DB') { $DB->expectError(DB_ERROR_UNSUPPORTED); } else { diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 1d11e5516e..682f61cc3b 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,6 +15,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress +## CiviCRM 5.39.0 + +Released July 7, 2021 + +- **[Synopsis](release-notes/5.39.0.md#synopsis)** +- **[Features](release-notes/5.39.0.md#features)** +- **[Bugs resolved](release-notes/5.39.0.md#bugs)** +- **[Miscellany](release-notes/5.39.0.md#misc)** +- **[Credits](release-notes/5.39.0.md#credits)** +- **[Feedback](release-notes/5.39.0.md#feedback)** + ## CiviCRM 5.38.1 Released June 30, 2021 diff --git a/civicrm/release-notes/5.39.0.md b/civicrm/release-notes/5.39.0.md new file mode 100644 index 0000000000..d778cf51ce --- /dev/null +++ b/civicrm/release-notes/5.39.0.md @@ -0,0 +1,1073 @@ +# CiviCRM 5.39.0 + +Released July 7, 2021 + +- **[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?** | **yes** | +| **Alter the API?** | **yes** | +| Require attention to configuration options? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **Separate the default language for contacts from the site language (Work Towards + [dev/core#2584](https://lab.civicrm.org/dev/core/-/issues/2584): + [20214](https://github.com/civicrm/civicrm-core/pull/20214))** + + Improves user experience for multilingual sites by separating the + CiviCRM contacts default language setting from the site default language. + +- **Canonize API for storing translated data (Work Towards + [dev/translation#67](https://lab.civicrm.org/dev/translation/-/issues/67): + [20478](https://github.com/civicrm/civicrm-core/pull/20478))** + + Defines a "Translation" table (`civicrm_translation`), to represent a single + translated string (e.g. a translated message-title or a translated + event-description). + +- **Allow for the default number of search results to be configurable + ([dev/core#2187](https://lab.civicrm.org/dev/core/-/issues/2187): + [20336](https://github.com/civicrm/civicrm-core/pull/20336 and + [18969](https://github.com/civicrm/civicrm-core/pull/18969))** + + Creates a setting to define the number of search results to be returned. + +- **Give the custom CSS file a 'name' to make it easier to manipulate in + hook_civicrm_alterBundle() + ([20278](https://github.com/civicrm/civicrm-core/pull/20278))** + + Gives the resource bundles custom CSS file a useful 'name' to make it easier + to manipulate in the alterBundle hook. + +- **OAuth: initial support for per-contact OAuth tokens + ([20189](https://github.com/civicrm/civicrm-core/pull/20189))** + + Adds a system for managing OAuthContactTokens -- tokens linked to a + contact_id. + +- **BAOs, Tests, etal - Support `HookInterface` and `EventSubscriberInterface` + for auto-registration + ([20427](https://github.com/civicrm/civicrm-core/pull/20427))** + + Expands the functionality for declaring event-listeners in different classes, + making it easier to participate in Symfony events. + +- **The version numbers for core-extensions should match core-proper. + ([dev/release#17](https://lab.civicrm.org/dev/release/-/issues/17): + [20303](https://github.com/civicrm/civicrm-core/pull/20303) and + [20302](https://github.com/civicrm/civicrm-core/pull/20302))** + + Ensures that CiviCRM core extension version numbers are updated to match the + core release they are included in and denotes development stage of extensions + using icons. + +- **Enable/Disable Extension Receives API Error (Work Towards + [dev/core#2646](https://lab.civicrm.org/dev/core/-/issues/2646): + [20564](https://github.com/civicrm/civicrm-core/pull/20564))** + + Improves the error messages when disabling or enabling an extension causes an + API Error. + +- **Regen.sh/setup.sh would be nice if the output for civicrm_generated.mysql + had long lines broken up + ([dev/core#1549](https://lab.civicrm.org/dev/core/-/issues/1549): + [20513](https://github.com/civicrm/civicrm-core/pull/20513))** + + Improves display of civicrm_generated.mysql output so its easier to read. + +- **Use new crm-angular-js instead of ng-app to bootstrap AngularJS + ([20419](https://github.com/civicrm/civicrm-core/pull/20419))** + + Updates the method used to bootstrap Angular for internal consistency and so + that multiple angular apps can be used on the same page. + +- **APIv4 - Save custom fields in bulk + ([20269](https://github.com/civicrm/civicrm-core/pull/20269))** + + Makes it so custom fields can be saved in bulk thru APIv4. + +- **Add APIv4 Batch.create spec + ([20501](https://github.com/civicrm/civicrm-core/pull/20501))** + + Adds a spec for APIv4 Batch.create. + +- **APIv4 - Make the @searchable flag explicit for OptionList type entities. + ([20560](https://github.com/civicrm/civicrm-core/pull/20560))** + + Improves code for categorizing entities for SearchKit, making searchability + easier to grok and less magical/mysterious. + +- **Apiv4 entity parity (Work Towards + [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486): + [20559](https://github.com/civicrm/civicrm-core/pull/20559), + [20499](https://github.com/civicrm/civicrm-core/pull/20499), + [20464](https://github.com/civicrm/civicrm-core/pull/20464), + [20609](https://github.com/civicrm/civicrm-core/pull/20609), + [20433](https://github.com/civicrm/civicrm-core/pull/20433) and + [20474](https://github.com/civicrm/civicrm-core/pull/20474))** + + Works towards APIv4 parity with APIv3 by adding the following entities to + APIv4: WordReplacement, FinancialItem and ACLEntityRole. + +- **Introduce civi.api4.authorizeRecord and civi.api4.validate + ([20533](https://github.com/civicrm/civicrm-core/pull/20533))** + + Refactors APIv4 code so that events use more consistent style (ie + civi.api4.{$TASK} with alias civi.api4.{$TASK}::{$ENTITY}). + +- **APIv4 Entity.get refactor to be more efficient + ([20470](https://github.com/civicrm/civicrm-core/pull/20470))** + + Makes APIv4 Entity.get more efficient. + +- **APIv4 - Return id_field as part of Entity.get + ([20457](https://github.com/civicrm/civicrm-core/pull/20457))** + + Improves APIv4 metadata so it returns the name of the unique identifier field + for each entity (usually but not always named "id"). + +- **Add DedupeRule, DedupeRuleGroup and DedupeException API4 entity + ([20466](https://github.com/civicrm/civicrm-core/pull/20466))** + + Adds the following entities to APIv4: DedupeRule, DedupeRuleGroup and + DedupeException. + +- **Use PHPUnit8 in main test suites + ([20370](https://github.com/civicrm/civicrm-core/pull/20370))** + + Makes phpunit8 the default test runner for PHP versions greater than 7.2 for + the core test suites. + +- **Link styling with default greenwich theme is not linklike on search kit + screen ([dev/core#2403](https://lab.civicrm.org/dev/core/-/issues/2403): + [20341](https://github.com/civicrm/civicrm-core/pull/20341))** + + Improves the SearchKit user interface by making links blue so that they are + easier to find. + +- **Afform - Improve Gui, prefill & submit APIs + ([20383](https://github.com/civicrm/civicrm-core/pull/20383))** + + Standardizes prefill & submit APIs to use the same logic for validating + contacts. Displays correct form URL in the Afform GUI depending on is_frontend + setting. Shows warning about url arguments to prevent unintentional + permissions escalation. + +- **Afform Gui - Add support for entityRef fields + ([20216](https://github.com/civicrm/civicrm-core/pull/20216))** + + Adds a widget to Afform for EntityRef to autocomplete contacts & other + entities, allows the autocomplete field to be changed to Number (for entering + ID) or Select (for choosing another entity on a form). + +- **Afform Entity Reference Submit + ([20305](https://github.com/civicrm/civicrm-core/pull/20305))** + + Improves Afform Submit handling to handle entity reference fields that + reference other form elements. + +- **SearchKit - allow searches based on relationships + ([20558](https://github.com/civicrm/civicrm-core/pull/20558))** + + Allows SearchKit searches based on relationships. + +- **SearchKit - Add API filter for contacts in groups and smart groups + ([20507](https://github.com/civicrm/civicrm-core/pull/20507))** + + Adds a filter-style field to search for contacts in (or not in) one or more + groups. + +- **SearchKit - Update `hook_civicrm_searchKitTasks` signature + ([20467](https://github.com/civicrm/civicrm-core/pull/20467))** + + Updates the hook_civicrm_searchKitTasks signature to include checkPermissions + and userId. + +- **SearchKit - Add static groups and organize main entity selector + ([20434](https://github.com/civicrm/civicrm-core/pull/20434))** + + Adds static (non-smart) groups to SearchKit, and organizes main entity + selector to be less cluttered, with primary entities up top and the rest + within a collapsible optgroup. + +- **SearchKit and Afform UI improvements + ([20348](https://github.com/civicrm/civicrm-core/pull/20348))** + + Cleans up the admin UI for SearchKit and Afform, adds click-to-sort table + headers and fixes a bug where SavedSearch modified_date were not being saved. + +- **SearchKit - Rename crmSearchActions module to crmSearchTasks & add hook + ([20307](https://github.com/civicrm/civicrm-core/pull/20307))** + + Adds hook_civicrm_searchKitTasks() to make it easy for other extensions to add + tasks specific to SearchKit. Also renames the module for consistency. + +- **[php8-compat] Upgrade PHPWord Package to support php8 + ([20449](https://github.com/civicrm/civicrm-core/pull/20449))** + + Work towards making CiviCRM php8 compatible, specifically by upgrading PHPWord + Package. + +- **[php8-compat] Upgrade TCPDF version to support php8 + ([20540](https://github.com/civicrm/civicrm-core/pull/20540))** + + Work Towards making CiviCRM php8 compatible specifically by upgrading TCPDF. + +- **Consider joining the GitHub Sponsors program + ([community/sustainability#20](https://lab.civicrm.org/community/sustainability/-/issues/20): + [248](https://github.com/civicrm/civicrm-wordpress/pull/248) and + [62](https://github.com/civicrm/civicrm-joomla/pull/62))** + + Adds a sponsor link as apart of the GitHub Sponsors program. + +- **Change the help text for Message Templates and Scheduled Reminders to + include link to CiviCRM Token Documentation page + ([20259](https://github.com/civicrm/civicrm-core/pull/20259))** + + Improves user experience by linking to CiviCRM Token documentation from the + Message Templates and Scheduled Reminders forms. + +- **authx - Accept API keys by default + ([20081](https://github.com/civicrm/civicrm-core/pull/20081))** + + Relaxes the default settings so that it is easier to use authx + as a replacement for extern/rest.php (which uses the api_key for + authentication). + +### CiviCase + +- **Add defaults for APIv4 Case create + ([20306](https://github.com/civicrm/civicrm-core/pull/20306))** + + Adds the following defaults for APIv4 Case.create: + - default Case Creator = current user + - default Case Start Date = now + +### CiviContribute + +- **Improve Sample data by ensuring all Credit Card Contributions have a + transaction id and that they are shown to be linked to the test payment + processor ([20312](https://github.com/civicrm/civicrm-core/pull/20312))** + + Improves CiviContribute sample date. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **"You do not have permission to access this page" when exporting participants + in Search Kit + ([dev/report#67](https://lab.civicrm.org/dev/report/-/issues/67): + [20528](https://github.com/civicrm/civicrm-core/pull/20528))** + + Fixes an 'access denied' error on standalone SearchKit export forms, caused by + renaming the PHP classes. + +- **500 error saving Search Kit Smart Group sorted on aggregated field + ([dev/report#68](https://lab.civicrm.org/dev/report/-/issues/68): + [20610](https://github.com/civicrm/civicrm-core/pull/20610))** + +- **Fatal error reported when photo cannot be found + ([dev/core#2369](https://lab.civicrm.org/dev/core/-/issues/2369): + [20447](https://github.com/civicrm/civicrm-core/pull/20447))** + +- **Loss of translation when copying (cloning) entities (multilingual) + ([dev/core#2479](https://lab.civicrm.org/dev/core/-/issues/2479): + [20059](https://github.com/civicrm/civicrm-core/pull/20059))** + +- **Fatal error while upgrading smart-group data + ([dev/core#2659](https://lab.civicrm.org/dev/core/-/issues/2659): + [20756](https://github.com/civicrm/civicrm-core/pull/20756/))** + +- **CRM_Utils_File::isAbsolute does not respect PHP stream wrappers (Work + Towards [dev/core#2590](https://lab.civicrm.org/dev/core/-/issues/2590): + [20270](https://github.com/civicrm/civicrm-core/pull/20270))** + + Removes unused function. + +- **Installer doesn't check MySQL version properly + ([dev/core#2602](https://lab.civicrm.org/dev/core/-/issues/2602): + [20255](https://github.com/civicrm/civicrm-core/pull/20255))** + +- **Useradd task gives a deprecation notice for the password confirmation field + ([dev/core#2613](https://lab.civicrm.org/dev/core/-/issues/2613): + [20347](https://github.com/civicrm/civicrm-core/pull/20347))** + +- **APIv4 - Delete undocumented deprecated activityType lookup + ([20506](https://github.com/civicrm/civicrm-core/pull/20506))** + + Deletes an undocumented APIv4 quirk that's been giving deprecated warnings for + over a year. + +- **APIv4 - Fix getFields to respect default_value from getFields + ([20481](https://github.com/civicrm/civicrm-core/pull/20481))** + +- **AfformGui - Fix tabs when cms theme adds extra margin + ([20431](https://github.com/civicrm/civicrm-core/pull/20431))** + +- **Afform GUI - Fix tab breakage in Shoreditch theme + ([20416](https://github.com/civicrm/civicrm-core/pull/20416))** + +- **Afform drag n drop fixes + ([20281](https://github.com/civicrm/civicrm-core/pull/20281) and + [20263](https://github.com/civicrm/civicrm-core/pull/20263))** + +- **Afform - Fix custom field handling and add tests + ([20480](https://github.com/civicrm/civicrm-core/pull/20480))** + +- **Afform - hide disabled contact types & entities from disabled + components/extensions + ([20283](https://github.com/civicrm/civicrm-core/pull/20283))** + + Cleans up and improves Afform's internal entity lookup so it won't show + disabled entities. + +- **SearchKit - Fix link target selection + ([20537](https://github.com/civicrm/civicrm-core/pull/20537))** + +- **SearchKit - Fix menu permission + ([20349](https://github.com/civicrm/civicrm-core/pull/20349))** + +- **SearchKit - Organize ON clause field selectors with joined entity first + ([20454](https://github.com/civicrm/civicrm-core/pull/20454))** + +- **[php8-compat] Fix some more examples of where required parameters are after + optional parameters in function declaration + ([20515](https://github.com/civicrm/civicrm-core/pull/20515))** + +- **[php8-compat] Fix PHP Beautifier notice by conditionally assigning dynamic + foreign key to the template + ([20509](https://github.com/civicrm/civicrm-core/pull/20509))** + +- **[php8-compat] Fix issue in APIv3 Where by because product has a column + called options the testCreateSingleValueAlter triggers a cannot access offset + of type string on string in php8 + ([20508](https://github.com/civicrm/civicrm-core/pull/20508))** + +- **[php8-compat] Fix issue with returning bool from uasort by using the + spaceship operator + ([20502](https://github.com/civicrm/civicrm-core/pull/20502))** + +- **[php8-compat] Fix Upgrade call back issues by making functions static and + also fixing an issue with an array key not existing when checking obsolete + extensions ([20503](https://github.com/civicrm/civicrm-core/pull/20503))** + +- **Update PHPUnit for PHPUnit8 config to ensure we don't cache test results + ([645](https://github.com/civicrm/civicrm-drupal/pull/645), + [140](https://github.com/civicrm/civicrm-backdrop/pull/140) and + [249](https://github.com/civicrm/civicrm-wordpress/pull/249))** + +- **[php8-compat] Fix calling method_exist with paremeter that is bool not an + object in php8 ([323](https: + +- **[php8-compat] Fix calling method_exist with paremeter that is bool not an + object in php8 ([20443](https://github.com/civicrm/civicrm-core/pull/20443))** + +- **[php8-compat] Fix deprecation error where by required function parameter + follows an optional function parameter + ([20473](https://github.com/civicrm/civicrm-core/pull/20473))** + +- **[php8-compat] Fix Warning Notices when running schema generation + ([20445](https://github.com/civicrm/civicrm-core/pull/20445))** + +- **[php8-compat] Update Various Symfony components to latest version in the + 3.4.x series to fix deprecation notice around libxml entity disable + ([20444](https://github.com/civicrm/civicrm-core/pull/20444))** + +- **Fix the populateTempTable to be more direct + ([20548](https://github.com/civicrm/civicrm-core/pull/20548))** + +- **Sort trigger data before processing + ([20541](https://github.com/civicrm/civicrm-core/pull/20541))** + +- **Allow legacy warnings to be fully suppressed in PropertyBag + ([20331](https://github.com/civicrm/civicrm-core/pull/20331))** + +- **Prevent adding duplicate dashlet if present with same name and label + ([20375](https://github.com/civicrm/civicrm-core/pull/20375))** + +- **Ensure contacts without a name are updated when primary email changes + ([20403](https://github.com/civicrm/civicrm-core/pull/20403))** + +- **fix arguments sent to hook_civicrm_check + ([20400](https://github.com/civicrm/civicrm-core/pull/20400))** + +- **Fix Distmaker building by ensuring we are rsyncing from the right folder + ([20353](https://github.com/civicrm/civicrm-core/pull/20353))** + +- **Fix mandatory keys check fail for value of float 0.0 in a required key in an + entity ([20342](https://github.com/civicrm/civicrm-core/pull/20342))** + +- **Fix extraneous white space in generated SQL + ([20340](https://github.com/civicrm/civicrm-core/pull/20340))** + +- **Fix case sensitive parameter for call to getCustomFieldTokens + ([20333](https://github.com/civicrm/civicrm-core/pull/20333))** + +- **Fix CKEditor5 link editing in modal dialog + ([20285](https://github.com/civicrm/civicrm-core/pull/20285))** + +- **Correct copy-paste error in CustomField schema + ([20329](https://github.com/civicrm/civicrm-core/pull/20329))** + +- **Explicitly throw an error/status bounce on Edit/New if no types. + ([19840](https://github.com/civicrm/civicrm-core/pull/19840))** + +- **Core_DAO - Fire links_callback for all entities + ([20332](https://github.com/civicrm/civicrm-core/pull/20332))** + +- **Get county fields populated via api call + ([20309](https://github.com/civicrm/civicrm-core/pull/20309))** + + Ensure that county fields are properly populated when calling the + Profile.getfields api. + +- **Activate user when no activation is required + ([20229](https://github.com/civicrm/civicrm-core/pull/20229))** + + Ensures that any user created on a site that does not require admin approval + is considered active. + +- **Switch to non deprecated buildPermissionClause() for contact detail report + ([20314](https://github.com/civicrm/civicrm-core/pull/20314))** + +- **Switch to non deprecated buildPermissionClause() for contact summary report + ([20287](https://github.com/civicrm/civicrm-core/pull/20287))** + +- **Freeze readonly fields + ([20204](https://github.com/civicrm/civicrm-core/pull/20204))** + +- **CiviCRM Scheduled Reminders, Subject field missing Token selector - users + must copy Token from Body field to Subject + ([20260](https://github.com/civicrm/civicrm-core/pull/20260))** + +- **Fix delete customgroup using API4 so it removes data table + ([20265](https://github.com/civicrm/civicrm-core/pull/20265))** + +- **hook_managed - Do not try to disable managed entities if is_active is not + available to api3.create + ([20144](https://github.com/civicrm/civicrm-core/pull/20144))** + +- **DB/DataObject: use mb_strtolower because in turkish, INSERT becomes Insert + ([324](https://github.com/civicrm/civicrm-packages/pull/324))** + +### CiviCase + +- **APIv4 - CiviCase API: Fix opening a case with current user as creator + ([20238](https://github.com/civicrm/civicrm-core/pull/20238))** + +- **My Cases dashlet no longer working (javascript network error - blank + dashlet) ([dev/core#2606](https://lab.civicrm.org/dev/core/-/issues/2606): + [20275](https://github.com/civicrm/civicrm-core/pull/20275))** + +## CiviContribute + +- **PayPal fails to create contribution following duplicate merge when + membership record has been deleted + ([dev/core#2593](https://lab.civicrm.org/dev/core/-/issues/2593): + [20422](https://github.com/civicrm/civicrm-core/pull/20422), + [20424](https://github.com/civicrm/civicrm-core/pull/20424), + [20246](https://github.com/civicrm/civicrm-core/pull/20246) and + [20300](https://github.com/civicrm/civicrm-core/pull/20300))** + +- **"Pay Now" button on user dashboard is only for Pending, not Partially Paid + contributions + ([dev/financial#173](https://lab.civicrm.org/dev/financial/-/issues/173): + [20376](https://github.com/civicrm/civicrm-core/pull/20376))** + + Ensures the 'Pay Now' buttons on the user dashboard are displayed for + partially paid contributions. + +- **Do not error on view contribution recur if not displaying contributions + ([20209](https://github.com/civicrm/civicrm-core/pull/20209))** + +- **Fix for tax rates being mangled on contribution update + ([20357](https://github.com/civicrm/civicrm-core/pull/20357))** + +- **Add call to validateAllContributions & fix getTotalAmount + ([20391](https://github.com/civicrm/civicrm-core/pull/20391))** + +- **Add warning when url_site is not specified for paypal (it won't work if not + set) ([20082](https://github.com/civicrm/civicrm-core/pull/20082))** + +- **Typo when retrieving help_pre textarea attributes for price field + ([20276](https://github.com/civicrm/civicrm-core/pull/20276))** + +- **Fix old-ish regression on paypal standard self-service cancel links + ([20210](https://github.com/civicrm/civicrm-core/pull/20210))** + +- **Don't pass doPayment by reference in Contribution.transact API + ([20463](https://github.com/civicrm/civicrm-core/pull/20463))** + +- **If paymentprocessor still uses doTransferCheckout/doDirectPayment trigger + deprecated function warning + ([20384](https://github.com/civicrm/civicrm-core/pull/20384))** + +- **Convert payJunction to doPayment + ([20326](https://github.com/civicrm/civicrm-core/pull/20326))** + +- **Convert FirstData to doPayment + ([20325](https://github.com/civicrm/civicrm-core/pull/20325))** + +- **Convert elavon to doPayment + ([20324](https://github.com/civicrm/civicrm-core/pull/20324))** + +- **Convert Realex to doPayment + ([20327](https://github.com/civicrm/civicrm-core/pull/20327))** + +- **Convert payflowpro to doPayment + ([20328](https://github.com/civicrm/civicrm-core/pull/20328))** + +- **Convert eway to doPayment + ([20323](https://github.com/civicrm/civicrm-core/pull/20323))** + +- **Convert AuthorizeNet to doPayment() + ([20322](https://github.com/civicrm/civicrm-core/pull/20322))** + +- **Sample payment processor types are misaligned in the sample data + ([dev/core#2614](https://lab.civicrm.org/dev/core/-/issues/2614): + [20311](https://github.com/civicrm/civicrm-core/pull/20311))** + +### CiviMail + +- **<link> URLs are tracked and shouldn't be + ([dev/mail#95](https://lab.civicrm.org/dev/mail/-/issues/95): + [20129](https://github.com/civicrm/civicrm-core/pull/20129))** + + Ensures link tracking is applied only to URLs inside <a> tags. + +### CiviMember + +- **Creating a relationship fails when a related membership has a contact + reference custom field. + ([dev/membership#37](https://lab.civicrm.org/dev/membership/-/issues/37): + [20493](https://github.com/civicrm/civicrm-core/pull/20493))** + +- **Use line items to look up memberships + ([20495](https://github.com/civicrm/civicrm-core/pull/20495))** + +- **Use order api when creating a recurring membership from the Membership + ([20077](https://github.com/civicrm/civicrm-core/pull/20077))** + +### Drupal Integration + +- **AuthX extension: user_load() deprecated in Drupal 8.x. + ([dev/core#2636](https://lab.civicrm.org/dev/core/-/issues/2636): + [20479](https://github.com/civicrm/civicrm-core/pull/20479))** + +- **drush install - Bump up entropy for autogenerated creds. Add signing key. + ([128](https://github.com/civicrm/civicrm-backdrop/pull/128))** + +### WordPress Integration + +- **[php8-compat] Fix undefined property on Array Cache class in wordpress on + PHP8 ([20491](https://github.com/civicrm/civicrm-core/pull/20491))** + +- **Remove Base Page content filter once it has been used + ([dev/wordpress#91](https://lab.civicrm.org/dev/wordpress/-/issues/91): + [240](https://github.com/civicrm/civicrm-wordpress/pull/240))** + + Fixes a bug where CiviCRM content would repeat itself in certain page + configurations. + +## <a name="misc"></a>Miscellany + +- **Add file_exists check on loading services xml + ([20620](https://github.com/civicrm/civicrm-core/pull/20620))** + +- **APIv4 - Cleanup getFields, add @internal flag for non-public field + attributes ([20489](https://github.com/civicrm/civicrm-core/pull/20489))** + +- **Extract code that populates temp table for an individual group + ([20458](https://github.com/civicrm/civicrm-core/pull/20458))** + +- **Cleanup - declare return types, remove unused var + ([20363](https://github.com/civicrm/civicrm-core/pull/20363))** + +- **Bump lodash from 4.17.19 to 4.17.21 + ([20247](https://github.com/civicrm/civicrm-core/pull/20247))** + +- **Bump DOMPDF to `~1.0.0` + ([20465](https://github.com/civicrm/civicrm-core/pull/20465))** + +- **Make functions protected + ([20455](https://github.com/civicrm/civicrm-core/pull/20455))** + +- **Deprecate function CRM_Core_BAO_CustomField::bulkSave + ([20367](https://github.com/civicrm/civicrm-core/pull/20367))** + +- **Cleanup tracking on group.load + ([20310](https://github.com/civicrm/civicrm-core/pull/20310))** + +- **Describe logic behind placement of `invalidateRouteCache` + ([20414](https://github.com/civicrm/civicrm-core/pull/20414))** + +- **Fix internal group contact cache functions to be protected + ([20385](https://github.com/civicrm/civicrm-core/pull/20385))** + +- **Clarify types on `hook_custom` and `hook_customPre` + ([20488](https://github.com/civicrm/civicrm-core/pull/20488))** + +- **Cleanup references to old dedupe class names + ([20492](https://github.com/civicrm/civicrm-core/pull/20492))** + +- **Switch l10n.js from ajax callback to assetBuilder + ([20121](https://github.com/civicrm/civicrm-core/pull/20121))** + +- **ACLEntityRole BAO tidy fixes + ([20504](https://github.com/civicrm/civicrm-core/pull/20504))** + +- **Dedupe DAO is out of date + ([20534](https://github.com/civicrm/civicrm-core/pull/20534))** + +- **Switch table mapping to square bracket array syntax. + ([20535](https://github.com/civicrm/civicrm-core/pull/20535))** + +- **Update civicrm_generated (5.39 version) + ([20571](https://github.com/civicrm/civicrm-core/pull/20571))** + +- **[REF] Cannot edit CiviCRM Joomla permissions (access control) in 5.37.0 + (Clean up for [dev/core#2601](https://lab.civicrm.org/dev/core/-/issues/2601): + [20271](https://github.com/civicrm/civicrm-core/pull/20271))** + +- **Revised fix for menu/UI issues for Joomla 4.0 + ([20401](https://github.com/civicrm/civicrm-core/pull/20401))** + +- **[php8-compat] Fix Include/Exclude Group Custom Search Tests by better + handling empty arrays on exclusions in the custom search + ([20539](https://github.com/civicrm/civicrm-core/pull/20539))** + +- **[php8-compat] Fix Resources Test issue due to undefined array key add + CacheCode ([20538](https://github.com/civicrm/civicrm-core/pull/20538))** + +- **[php8-compat] Fix api_v3_PaymentTest failures by putting in more guards into + message templates + ([20520](https://github.com/civicrm/civicrm-core/pull/20520))** + +- **[php8-compat] Update smarty templates and some PHP files to get the + api_v3_contribution testclass to pass on php8 + ([20512](https://github.com/civicrm/civicrm-core/pull/20512))** + +- **[php8-compact] Add in guards into various templates to fix hook tests in + php8 ([20542](https://github.com/civicrm/civicrm-core/pull/20542))** + +- **[php8-compact] Fix Report tests failing on php8 + ([20549](https://github.com/civicrm/civicrm-core/pull/20549))** + +- **[php8-compat] Partial Fix of hook tests for php8 + ([20545](https://github.com/civicrm/civicrm-core/pull/20545))** + +- **[php8-compat] [REF] Fix a couple of functions triggering deprecation notices + in php 8.0 where by an optional parameter is before required parameters in the + function signature + ([20442](https://github.com/civicrm/civicrm-core/pull/20442))** + +- **[php8-compat] [REF] Fix call to function CRM_Utils_String::createRandom by + ensuring that the length is the first parameter not 2nd + ([20441](https://github.com/civicrm/civicrm-core/pull/20441))** + +- **[php8-compat][NFC] Ensure that the 2nd parameter of hash_equals is a string + in authx ([20483](https://github.com/civicrm/civicrm-core/pull/20483))** + +- **[php8-compat][NFC] Fix using ZipArchive::open on an empty file + ([20500](https://github.com/civicrm/civicrm-core/pull/20500))** + +- **[php8-compat][NFC] Fix issue where by we are tryiing to access array keys + that haven't been created yet + ([20496](https://github.com/civicrm/civicrm-core/pull/20496))** + +- **[REF][php8-compat] Fix more instances of where there is a required parameter + for a function after an optional one and fix an issue where by a NULL function + property is treated as not exisiting in php8 + ([20497](https://github.com/civicrm/civicrm-core/pull/20497))** + +- **[REF][php8-compat] Further fixes where there is a required paramater after + an optional paramater + ([20490](https://github.com/civicrm/civicrm-core/pull/20490))** + +- **[php8-compat][REF] Fix some more test failures in php8 + ([20516](https://github.com/civicrm/civicrm-core/pull/20516))** + +- **[php8-compat][REF] Fix api_v3_contributionpagetest on php8 + ([20518](https://github.com/civicrm/civicrm-core/pull/20518))** + +- **[php8-compat][REF] Fix more php8 test failures caused by template issues + ([20517](https://github.com/civicrm/civicrm-core/pull/20517))** + +- **[php8-compat][REF] Fix php8 error on undefined constant + CIVICRM_DISABLE_DEFAULT_MENU + ([20485](https://github.com/civicrm/civicrm-core/pull/20485))** + +- **[php8-compat][REF] Fix Date unit tests in php8 by passing in 00 instead of + null for hours,minutes and seconds + ([20525](https://github.com/civicrm/civicrm-core/pull/20525))** + +- **[php8-compact][REF] Fix another couple of places where by there are required + variables in php function declaration after optional ones + ([20526](https://github.com/civicrm/civicrm-core/pull/20526))** + +- **[php8-compact][REF] Fix api_v3_PaymentTokenTest to work on php8 + ([20527](https://github.com/civicrm/civicrm-core/pull/20527))** + +- **[php8-compat][REF] Fix Case and Custom data tests by adding guards in to + templates ([20524](https://github.com/civicrm/civicrm-core/pull/20524))** + +- **[php8-compat][phpunit8][NFC] Fix PHPUnit Warnings and fix a php error on + function declaration syntax in core extension tests + ([20477](https://github.com/civicrm/civicrm-core/pull/20477))** + +- **Remove extraneous debug + ([20319](https://github.com/civicrm/civicrm-core/pull/20319))** + +- **Remove legacy references to partial_amount_to_pay + ([20358](https://github.com/civicrm/civicrm-core/pull/20358))** + +- **Remove remains of md5 check from authorizenet + ([20406](https://github.com/civicrm/civicrm-core/pull/20406))** + +- **Remove deprecation of order-must-be-pending + ([20205](https://github.com/civicrm/civicrm-core/pull/20205))** + +- **Remove some unused variables + ([20487](https://github.com/civicrm/civicrm-core/pull/20487))** + +- **Remove never-passed parameter from now unshared function + ([20304](https://github.com/civicrm/civicrm-core/pull/20304))** + +- **Remove defunct default return property + ([20139](https://github.com/civicrm/civicrm-core/pull/20139))** + +- **Remove now-unused ids parameter from signature + ([20299](https://github.com/civicrm/civicrm-core/pull/20299))** + +- **Remove unused functions from payJunction + ([20417](https://github.com/civicrm/civicrm-core/pull/20417))** + +- **Remove unused variable on dummy processor + ([20418](https://github.com/civicrm/civicrm-core/pull/20418))** + +- **Remove pass-by-ref as param not altered + ([20475](https://github.com/civicrm/civicrm-core/pull/20475))** + +- **[REF] (Code style) To const, or not const - that is the event + ([dev/core#1744](https://lab.civicrm.org/dev/core/-/issues/1744): + [20555](https://github.com/civicrm/civicrm-core/pull/20555))** + +- **[REF] Extract function to get locks + ([20373](https://github.com/civicrm/civicrm-core/pull/20373))** + +- **[REF] Remove unused variable + ([20378](https://github.com/civicrm/civicrm-core/pull/20378))** + +- **[REF] Slightly more logical order of code + ([20368](https://github.com/civicrm/civicrm-core/pull/20368))** + +- **[REF] Extract code to transfer groups from temp table to cache + ([20435](https://github.com/civicrm/civicrm-core/pull/20435))** + +- **[REF] Remove never-passed param + ([20456](https://github.com/civicrm/civicrm-core/pull/20456))** + +- **[REF] APIv4 refactoring to support calculated fields + ([20440](https://github.com/civicrm/civicrm-core/pull/20440))** + +- **[REF] Set receipt_date after sending, (from batch) not in anticipation + ([20395](https://github.com/civicrm/civicrm-core/pull/20395))** + +- **[REF] Minor extraction - getInfoUrl + ([20421](https://github.com/civicrm/civicrm-core/pull/20421))** + +- **[REF] Fix issue where by mailing urls were always stuck in the original + language not the overriden language in a multilingual site + ([20102](https://github.com/civicrm/civicrm-core/pull/20102))** + +- **[REF] Paypal pro - remove call to load contact record + ([20423](https://github.com/civicrm/civicrm-core/pull/20423))** + +- **[REF] Stop passing unneed params to the recur function + ([20412](https://github.com/civicrm/civicrm-core/pull/20412))** + +- **[REF] Replace isFirst parameter + ([20411](https://github.com/civicrm/civicrm-core/pull/20411))** + +- **[REF] Remove now-unused params + ([20410](https://github.com/civicrm/civicrm-core/pull/20410))** + +- **[REF] Paypal IPN - Cleanup references to completion + ([20407](https://github.com/civicrm/civicrm-core/pull/20407))** + +- **[REF] Replace deprecated code call + ([20409](https://github.com/civicrm/civicrm-core/pull/20409))** + +- **[REF] Cleanup validation in PaypalProIPN single function + ([20360](https://github.com/civicrm/civicrm-core/pull/20360))** + +- **[REF] Minor simplification + ([20393](https://github.com/civicrm/civicrm-core/pull/20393))** + +- **[REF] Useradd contact task - Use OO instead of hardcoding "if Wordpress" + ([20366](https://github.com/civicrm/civicrm-core/pull/20366))** + +- **[REF] Cleanup on import rows error + ([20196](https://github.com/civicrm/civicrm-core/pull/20196))** + +- **[REF] Extract function to build temporary table of members of group from + Report_Form ([20297](https://github.com/civicrm/civicrm-core/pull/20297))** + +- **[REF] Remove now-unused parameter + ([20354](https://github.com/civicrm/civicrm-core/pull/20354))** + +- **[REF] Extract getContributionObject + ([20355](https://github.com/civicrm/civicrm-core/pull/20355))** + +- **[REF] Add getter for contributionID + ([20318](https://github.com/civicrm/civicrm-core/pull/20318))** + +- **[REF] Make previous unshared function protected & Remove hard-coded params + ([20345](https://github.com/civicrm/civicrm-core/pull/20345))** + +- **[REF] Update Pear Validate Finance CreditCard to use latest tagged release + that now includes the improved mastercard 2bin regex + ([20351](https://github.com/civicrm/civicrm-core/pull/20351))** + +- **[REF] Make previously unshared function protected + ([20346](https://github.com/civicrm/civicrm-core/pull/20346))** + +- **[REF] Remove unused parameters + ([20301](https://github.com/civicrm/civicrm-core/pull/20301))** + +- **[REF] Cleanup BAO_ActionSchedule::getlist() signature + ([20239](https://github.com/civicrm/civicrm-core/pull/20239))** + +- **(REF) Regen CRM/Core/DAO/CustomField.php + ([20337](https://github.com/civicrm/civicrm-core/pull/20337))** + +- **[REF] Remove redundant call to clearGroupContactCache + ([20243](https://github.com/civicrm/civicrm-core/pull/20243))** + +- **[REF] [tests only] Replace direct calls to enable logging with calls to the + setting ([20460](https://github.com/civicrm/civicrm-core/pull/20460))** + +- **[REF] Remove function parameter only used from test + ([20459](https://github.com/civicrm/civicrm-core/pull/20459))** + +- **[REF] Extract code determining list of groups requiring a refresh + ([20242](https://github.com/civicrm/civicrm-core/pull/20242))** + +- **REF - Cleanup array key checking to use array_key_exists + ([20563](https://github.com/civicrm/civicrm-core/pull/20563))** + +- **[REF] CRM_Contact_Task - Use short array syntax + ([20562](https://github.com/civicrm/civicrm-core/pull/20562))** + +- **[REF] Fix Authx tests on Druapl 8/9 by ensuring that we only return an id + for the user id if it is greater than 0 + ([20498](https://github.com/civicrm/civicrm-core/pull/20498))** + +- **[REF] Move ACLPermission Trait into Civi Folder so that it can be accessed + by Extensions ([20208](https://github.com/civicrm/civicrm-core/pull/20208))** + +- **[REF] Use function to getContributionRecurID + ([20293](https://github.com/civicrm/civicrm-core/pull/20293))** + +- **[REF] Duplicate processMembership preliminary to cleanup + ([20295](https://github.com/civicrm/civicrm-core/pull/20295))** + +- **[REF] Switch to using getContributionRecurID function, remove now unused + param ([20316](https://github.com/civicrm/civicrm-core/pull/20316))** + +- **[REF] Fully remove ids variable from paypal std + ([20317](https://github.com/civicrm/civicrm-core/pull/20317))** + +- **[REF] Make use of recently added default pager size setting in Reports + ([20273](https://github.com/civicrm/civicrm-core/pull/20273))** + +- **[REF] Duplicate & deprecate processMembership + ([20313](https://github.com/civicrm/civicrm-core/pull/20313))** + +- **[REF] Provide standardised methods to get recurring contribution id & object + ([20294](https://github.com/civicrm/civicrm-core/pull/20294))** + +- **[REF] Reverse if statement + ([20211](https://github.com/civicrm/civicrm-core/pull/20211))** + +- **Mark test class as having invalid financials + ([20448](https://github.com/civicrm/civicrm-core/pull/20448))** + +- **Update eventcart test to only test payment form + ([20405](https://github.com/civicrm/civicrm-core/pull/20405))** + +- **Fix profile test teardown + ([20439](https://github.com/civicrm/civicrm-core/pull/20439))** + +- **Fix separate payment membership test to create valid financial transactions + ([20436](https://github.com/civicrm/civicrm-core/pull/20436))** + +- **fix missing parent tearDown + ([20261](https://github.com/civicrm/civicrm-core/pull/20261) and + [20262](https://github.com/civicrm/civicrm-core/pull/20262))** + +- **Fix v3 api payment test to validate on postAssert + ([20530](https://github.com/civicrm/civicrm-core/pull/20530))** + +- **Fix Financial item test to validate Financials + ([20532](https://github.com/civicrm/civicrm-core/pull/20532))** + +- **Mark DetailTest as having invalid financials + ([20552](https://github.com/civicrm/civicrm-core/pull/20552))** + +- **Fix form params for testEventPaymentForms + ([20330](https://github.com/civicrm/civicrm-core/pull/20330))** + +- **Update bulkSave test to use the api + ([20362](https://github.com/civicrm/civicrm-core/pull/20362))** + +- **Fix contribution page pledge tests to create valid contributions + ([20404](https://github.com/civicrm/civicrm-core/pull/20404))** + +- **Improve cleanup on contact test + ([20248](https://github.com/civicrm/civicrm-core/pull/20248))** + +- **Test fix up for AdditionalPaymentTest + ([20521](https://github.com/civicrm/civicrm-core/pull/20521))** + +- **Test fix - assertion fails when run with other tests (sometimes) + ([20250](https://github.com/civicrm/civicrm-core/pull/20250))** + +- **[Test] Improve cleanup of domain contacts + ([20253](https://github.com/civicrm/civicrm-core/pull/20253))** + +- **Test - fix contributionTest to validate contributions + ([20415](https://github.com/civicrm/civicrm-core/pull/20415))** + +- **Test fixes ([20426](https://github.com/civicrm/civicrm-core/pull/20426))** + +- **Tax fixes in unit test + ([20390](https://github.com/civicrm/civicrm-core/pull/20390))** + +- **[Test] Add test cover for contribution tokens in pdf letter + ([20217](https://github.com/civicrm/civicrm-core/pull/20217))** + +- **Unit test for #20342 + ([20361](https://github.com/civicrm/civicrm-core/pull/20361))** + +- **Add test for mixed Order data + ([20241](https://github.com/civicrm/civicrm-core/pull/20241))** + +- **Add unit test for #20144 + ([20320](https://github.com/civicrm/civicrm-core/pull/20320))** + +- **Superficial tidy up in test class + ([20359](https://github.com/civicrm/civicrm-core/pull/20359))** + +- **[NFC] Remove timecop function references from Cache Tiered Test + ([20343](https://github.com/civicrm/civicrm-core/pull/20343))** + +- **[NFC] Superficial code cleanup + ([20446](https://github.com/civicrm/civicrm-core/pull/20446))** + +- **[NFC] Cleanup in test class + ([20402](https://github.com/civicrm/civicrm-core/pull/20402))** + +- **[NFC] {test} code cleanup in test class + ([20389](https://github.com/civicrm/civicrm-core/pull/20389))** + +- **[NFC] Minor cleanup + ([20387](https://github.com/civicrm/civicrm-core/pull/20387))** + +- **[NFC] Minor code cleanup + ([20386](https://github.com/civicrm/civicrm-core/pull/20386))** + +- **[NFC] Fix PHPUnit8 Deprecation Warnings in api_v3 and Civi Test Suites + ([20380](https://github.com/civicrm/civicrm-core/pull/20380))** + +- **[NFC] [Test] Big cleanup in test class + ([20374](https://github.com/civicrm/civicrm-core/pull/20374))** + +- **[NFC] Fix PHPUnit8 Deprecation warnings in the api_v4 Test Suite + ([20381](https://github.com/civicrm/civicrm-core/pull/20381))** + +- **[NFC] Fix PHPUnit8 Warning notices in E2E And in some API unit tests + ([20379](https://github.com/civicrm/civicrm-core/pull/20379))** + +- **[NFC] Fix PHPUnit8 deprecation warnings in the CRM_AllTests suite + ([20377](https://github.com/civicrm/civicrm-core/pull/20377))** + +- **[NFC] Further cleanup in test class + ([20372](https://github.com/civicrm/civicrm-core/pull/20372))** + +- **[NFC] Add in more voids to unit tests to support PHPUnit8 + ([20369](https://github.com/civicrm/civicrm-core/pull/20369))** + +- **[NFC] [Test] Preliminary cleanup in test class + ([20371](https://github.com/civicrm/civicrm-core/pull/20371))** + +- **[NFC] Add in voids to various setUpBeforeClass and tearDownAfterClass + functions ([20365](https://github.com/civicrm/civicrm-core/pull/20365))** + +- **[NFC] Update PHPUnit config to not cache results in phpunit8 and add more + voids into PayflowProTest + ([20356](https://github.com/civicrm/civicrm-core/pull/20356))** + +- **[NFC] Add in unit tests of credit card validation rules + ([20352](https://github.com/civicrm/civicrm-core/pull/20352))** + +- **[NFC/TEST] - Add unit test enforcing automatic chaining for financial + type/account creation via api + ([20288](https://github.com/civicrm/civicrm-core/pull/20288))** + +- **[NFC] Test - Improve tearDown cleanup of domain contacts + ([20258](https://github.com/civicrm/civicrm-core/pull/20258))** + +- **[NFC] Test - fix to use v3 api on postAsserts + ([20257](https://github.com/civicrm/civicrm-core/pull/20257))** + +- **[NFC] Fix phpunit9 deprecation issues on using assertType instead of more + explicit assertIsArray or AssertIsInt + ([20567](https://github.com/civicrm/civicrm-core/pull/20567))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andrew Hunt; Agileware - Justin Freeman; +Christian Wach; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; +CiviCRM - Coleman Watts, Tim Otten; CompuCorp - Ahed Eid; Coop SymbioTIC - +Mathieu Lutfy, Samuel Vanhove; Dave D; iXiam - Vangelis Pantazis; JMA +Consulting - Monish Deb, Seamus Lee; Lemniscus - Noah Miller; Megaphone +Technology Consulting - Jon Goldberg; MJCO - Mikey O'Toole; MJW Consulting - +Matthew Wire; Nicol Wistreich; Progressive Technology Project - Jamie +McClelland; Richard van Oosterhout; Robert J. Lang; Squiffle Consulting - Aidan +Saunders; Wikimedia Foundation - Eileen McNaughton; Wildsight - Lars +Sanders-Green + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +Agileware - Justin Freeman; Business & Code - Alain Benbassat; CiviDesk - +Nicolas Ganivet, Yashodha Chaku; CompuCorp - Jamie Novick; Coop SymbioTIC - +Mathieu Lutfy, Samuel Vanhove; Dave D; Freeform Solutions - Herb van den Dool; +Fuzion - Jitendra Purohit; Semper IT - Karin Gerritsen; SYSTOPIA +Organisationsberatung - Björn Endres; Tadpole Collective - Kevin Cristiano + + +## <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 log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/settings/Search.setting.php b/civicrm/settings/Search.setting.php index 876eafa43b..9766a3c9f4 100644 --- a/civicrm/settings/Search.setting.php +++ b/civicrm/settings/Search.setting.php @@ -228,4 +228,24 @@ return [ 'description' => ts("Which fields can be searched on in the menubar quicksearch box? Don't see your custom field here? Make sure it is marked as Searchable."), 'help_text' => NULL, ], + 'default_pager_size' => [ + 'group_name' => 'Search Preferences', + 'group' => 'Search Preferences', + 'name' => 'default_pager_size', + 'type' => 'Integer', + 'quick_form_type' => 'Element', + 'html_type' => 'text', + 'html_attributes' => [ + 'size' => 2, + 'maxlength' => 3, + ], + 'default' => 50, + 'add' => '5.39', + 'title' => ts('Default Search Pager size'), + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => ts('What is the default number of records to show on a search'), + 'help_text' => NULL, + ], + ]; diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index 3fcfa26f5d..01ba7e1750 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -9,21 +9,9 @@ -- Generated from schema.tpl -- DO NOT EDIT. Generated by CRM_Core_CodeGen -- Schema for CiviCRM - --- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC. All rights reserved. | --- | | --- | This work is published under the GNU AGPLv3 license with some | --- | permitted exceptions and without any warranty. For full license | --- | and copyright information, see https://civicrm.org/licensing | --- +--------------------------------------------------------------------+ --- --- Generated from drop.tpl --- DO NOT EDIT. Generated by CRM_Core_CodeGen --- -- /******************************************************* -- * --- * Clean up the existing tables +-- * Clean up the existing tables - this section generated from drop.tpl -- * -- *******************************************************/ @@ -172,6 +160,7 @@ DROP TABLE IF EXISTS `civicrm_action_mapping`; DROP TABLE IF EXISTS `civicrm_prevnext_cache`; DROP TABLE IF EXISTS `civicrm_component`; DROP TABLE IF EXISTS `civicrm_worldregion`; +DROP TABLE IF EXISTS `civicrm_translation`; DROP TABLE IF EXISTS `civicrm_system_log`; DROP TABLE IF EXISTS `civicrm_preferences_date`; DROP TABLE IF EXISTS `civicrm_option_group`; @@ -195,16 +184,11 @@ SET FOREIGN_KEY_CHECKS=1; -- * -- *******************************************************/ CREATE TABLE `civicrm_address_format` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Address Format ID', - `format` text COMMENT 'The format of an address' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Address Format ID', + `format` text COMMENT 'The format of an address', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -212,28 +196,19 @@ CREATE TABLE `civicrm_address_format` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_extension` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Local Extension ID', - `type` varchar(8) NOT NULL , - `full_name` varchar(255) NOT NULL COMMENT 'Fully qualified extension name', - `name` varchar(255) COMMENT 'Short name', - `label` varchar(255) COMMENT 'Short, printable name', - `file` varchar(255) COMMENT 'Primary PHP file', - `schema_version` varchar(63) COMMENT 'Revision code of the database schema; the format is module-defined', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this extension active?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_extension_full_name`( - full_name - ) - , INDEX `UI_extension_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Local Extension ID', + `type` varchar(8) NOT NULL, + `full_name` varchar(255) NOT NULL COMMENT 'Fully qualified extension name', + `name` varchar(255) COMMENT 'Short name', + `label` varchar(255) COMMENT 'Short, printable name', + `file` varchar(255) COMMENT 'Primary PHP file', + `schema_version` varchar(63) COMMENT 'Revision code of the database schema; the format is module-defined', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this extension active?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_extension_full_name`(full_name), + INDEX `UI_extension_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -241,25 +216,18 @@ CREATE TABLE `civicrm_extension` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_location_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Location Type ID', - `name` varchar(64) COMMENT 'Location Type Name.', - `display_name` varchar(64) COMMENT 'Location Type Display Name.', - `vcard_name` varchar(64) COMMENT 'vCard Location Type Name.', - `description` varchar(255) COMMENT 'Location Type Description.', - `is_reserved` tinyint COMMENT 'Is this location type a predefined system location?', - `is_active` tinyint COMMENT 'Is this property active?', - `is_default` tinyint COMMENT 'Is this location type the default?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Location Type ID', + `name` varchar(64) COMMENT 'Location Type Name.', + `display_name` varchar(64) COMMENT 'Location Type Display Name.', + `vcard_name` varchar(64) COMMENT 'vCard Location Type Name.', + `description` varchar(255) COMMENT 'Location Type Description.', + `is_reserved` tinyint COMMENT 'Is this location type a predefined system location?', + `is_active` tinyint COMMENT 'Is this property active?', + `is_default` tinyint COMMENT 'Is this location type the default?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -269,28 +237,17 @@ CREATE TABLE `civicrm_location_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_managed` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Surrogate Key', - `module` varchar(127) NOT NULL COMMENT 'Name of the module which declared this object', - `name` varchar(127) COMMENT 'Symbolic name used by the module to identify the object', - `entity_type` varchar(64) NOT NULL COMMENT 'API entity type', - `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', - `cleanup` varchar(32) COMMENT 'Policy on when to cleanup entity (always, never, unused)' -, - PRIMARY KEY (`id`) - - , INDEX `UI_managed_module_name`( - module - , name - ) - , INDEX `UI_managed_entity`( - entity_type - , entity_id - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Surrogate Key', + `module` varchar(127) NOT NULL COMMENT 'Name of the module which declared this object', + `name` varchar(127) COMMENT 'Symbolic name used by the module to identify the object', + `entity_type` varchar(64) NOT NULL COMMENT 'API entity type', + `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', + `cleanup` varchar(32) COMMENT 'Policy on when to cleanup entity (always, never, unused)', + PRIMARY KEY (`id`), + INDEX `UI_managed_module_name`(module, name), + INDEX `UI_managed_entity`(entity_type, entity_id) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -300,21 +257,14 @@ CREATE TABLE `civicrm_managed` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mapping` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Mapping ID', - `name` varchar(64) COMMENT 'Name of Mapping', - `description` varchar(255) COMMENT 'Description of Mapping.', - `mapping_type_id` int unsigned COMMENT 'Mapping Type' -, - PRIMARY KEY (`id`) - - , INDEX `UI_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Mapping ID', + `name` varchar(64) COMMENT 'Name of Mapping', + `description` varchar(255) COMMENT 'Description of Mapping.', + `mapping_type_id` int unsigned COMMENT 'Mapping Type', + PRIMARY KEY (`id`), + INDEX `UI_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -324,26 +274,21 @@ CREATE TABLE `civicrm_mapping` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_msg_template` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Message Template ID', - `msg_title` varchar(255) COMMENT 'Descriptive title of message', - `msg_subject` text COMMENT 'Subject for email message.', - `msg_text` longtext COMMENT 'Text formatted message', - `msg_html` longtext COMMENT 'HTML formatted message', - `is_active` tinyint DEFAULT 1 , - `workflow_id` int unsigned COMMENT 'a pseudo-FK to civicrm_option_value', - `workflow_name` varchar(255) , - `is_default` tinyint DEFAULT 1 COMMENT 'is this the default message template for the workflow referenced by workflow_id?', - `is_reserved` tinyint COMMENT 'is this the reserved message template which we ship for the workflow referenced by workflow_id?', - `is_sms` tinyint DEFAULT 0 COMMENT 'Is this message template used for sms?', - `pdf_format_id` int unsigned COMMENT 'a pseudo-FK to civicrm_option_value containing PDF Page Format.' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Message Template ID', + `msg_title` varchar(255) COMMENT 'Descriptive title of message', + `msg_subject` text COMMENT 'Subject for email message.', + `msg_text` longtext COMMENT 'Text formatted message', + `msg_html` longtext COMMENT 'HTML formatted message', + `is_active` tinyint DEFAULT 1, + `workflow_id` int unsigned COMMENT 'a pseudo-FK to civicrm_option_value', + `workflow_name` varchar(255), + `is_default` tinyint DEFAULT 1 COMMENT 'is this the default message template for the workflow referenced by workflow_id?', + `is_reserved` tinyint COMMENT 'is this the reserved message template which we ship for the workflow referenced by workflow_id?', + `is_sms` tinyint DEFAULT 0 COMMENT 'Is this message template used for sms?', + `pdf_format_id` int unsigned COMMENT 'a pseudo-FK to civicrm_option_value containing PDF Page Format.', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -351,25 +296,18 @@ CREATE TABLE `civicrm_msg_template` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_option_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Option Group ID', - `name` varchar(64) NOT NULL COMMENT 'Option group name. Used as selection key by class properties which lookup options in civicrm_option_value.', - `title` varchar(255) COMMENT 'Option Group title.', - `description` varchar(255) COMMENT 'Option group description.', - `data_type` varchar(128) COMMENT 'Option group description.', - `is_reserved` tinyint NOT NULL DEFAULT 1 COMMENT 'Is this a predefined system option group (i.e. it can not be deleted)?', - `is_active` tinyint NOT NULL DEFAULT 1 COMMENT 'Is this option group active?', - `is_locked` tinyint NOT NULL DEFAULT 0 COMMENT 'A lock to remove the ability to add new options via the UI.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Option Group ID', + `name` varchar(64) NOT NULL COMMENT 'Option group name. Used as selection key by class properties which lookup options in civicrm_option_value.', + `title` varchar(255) COMMENT 'Option Group title.', + `description` varchar(255) COMMENT 'Option group description.', + `data_type` varchar(128) COMMENT 'Option group description.', + `is_reserved` tinyint NOT NULL DEFAULT 1 COMMENT 'Is this a predefined system option group (i.e. it can not be deleted)?', + `is_active` tinyint NOT NULL DEFAULT 1 COMMENT 'Is this option group active?', + `is_locked` tinyint NOT NULL DEFAULT 0 COMMENT 'A lock to remove the ability to add new options via the UI.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -379,24 +317,17 @@ CREATE TABLE `civicrm_option_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_preferences_date` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(64) NOT NULL COMMENT 'The meta name for this date (fixed in code)', - `description` varchar(255) COMMENT 'Description of this date type.', - `start` int NOT NULL COMMENT 'The start offset relative to current year', - `end` int NOT NULL COMMENT 'The end offset relative to current year, can be negative', - `date_format` varchar(64) COMMENT 'The date type', - `time_format` varchar(64) COMMENT 'time format' -, - PRIMARY KEY (`id`) - - , INDEX `index_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) NOT NULL COMMENT 'The meta name for this date (fixed in code)', + `description` varchar(255) COMMENT 'Description of this date type.', + `start` int NOT NULL COMMENT 'The start offset relative to current year', + `end` int NOT NULL COMMENT 'The end offset relative to current year, can be negative', + `date_format` varchar(64) COMMENT 'The date type', + `time_format` varchar(64) COMMENT 'time format', + PRIMARY KEY (`id`), + INDEX `index_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -404,21 +335,36 @@ CREATE TABLE `civicrm_preferences_date` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_system_log` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key ID', + `message` varchar(128) NOT NULL COMMENT 'Standardized message', + `context` longtext COMMENT 'JSON encoded data', + `level` varchar(9) DEFAULT 'info' COMMENT 'error level per PSR3', + `timestamp` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp of when event occurred.', + `contact_id` int unsigned COMMENT 'Optional Contact ID that created the log. Not an FK as we keep this regardless', + `hostname` varchar(128) COMMENT 'Optional Name of logging host', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key ID', - `message` varchar(128) NOT NULL COMMENT 'Standardized message', - `context` longtext COMMENT 'JSON encoded data', - `level` varchar(9) DEFAULT 'info' COMMENT 'error level per PSR3', - `timestamp` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp of when event occurred.', - `contact_id` int unsigned COMMENT 'Optional Contact ID that created the log. Not an FK as we keep this regardless', - `hostname` varchar(128) COMMENT 'Optional Name of logging host' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; +-- /******************************************************* +-- * +-- * civicrm_translation +-- * +-- * Each string record is an alternate translation of some displayable string in the database. +-- * +-- *******************************************************/ +CREATE TABLE `civicrm_translation` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique String ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Table where referenced item is stored', + `entity_field` varchar(64) NOT NULL COMMENT 'Field where referenced item is stored', + `entity_id` int NOT NULL COMMENT 'ID of the relevant entity.', + `language` varchar(5) NOT NULL COMMENT 'Relevant language', + `status_id` tinyint NOT NULL DEFAULT 1 COMMENT 'Specify whether the string is active, draft, etc', + `string` longtext NOT NULL COMMENT 'Translated string', + PRIMARY KEY (`id`), + INDEX `index_entity_lang`(entity_id, entity_table, language) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -426,16 +372,11 @@ CREATE TABLE `civicrm_system_log` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_worldregion` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Country ID', - `name` varchar(128) COMMENT 'Region name to be associated with countries' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Country ID', + `name` varchar(128) COMMENT 'Region name to be associated with countries', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -443,17 +384,12 @@ CREATE TABLE `civicrm_worldregion` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_component` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Component ID', - `name` varchar(64) NOT NULL COMMENT 'Name of the component.', - `namespace` varchar(128) COMMENT 'Path to components main directory in a form of a class namespace.' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Component ID', + `name` varchar(64) NOT NULL COMMENT 'Name of the component.', + `namespace` varchar(128) COMMENT 'Path to components main directory in a form of a class namespace.', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -463,28 +399,17 @@ CREATE TABLE `civicrm_component` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_prevnext_cache` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to discount, e.g. civicrm_event', - `entity_id1` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', - `entity_id2` int unsigned NULL COMMENT 'FK to entity table specified in entity_table column.', - `cachekey` varchar(255) COMMENT 'Unique path name for cache element of the searched item', - `data` longtext COMMENT 'cached snapshot of the serialized data', - `is_selected` tinyint DEFAULT 0 -, - PRIMARY KEY (`id`) - - , INDEX `index_all`( - cachekey - , entity_id1 - , entity_id2 - , entity_table - , is_selected - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to discount, e.g. civicrm_event', + `entity_id1` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', + `entity_id2` int unsigned NULL COMMENT 'FK to entity table specified in entity_table column.', + `cachekey` varchar(255) COMMENT 'Unique path name for cache element of the searched item', + `data` longtext COMMENT 'cached snapshot of the serialized data', + `is_selected` tinyint DEFAULT 0, + PRIMARY KEY (`id`), + INDEX `index_all`(cachekey, entity_id1, entity_id2, entity_table, is_selected) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -494,23 +419,18 @@ CREATE TABLE `civicrm_prevnext_cache` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_action_mapping` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `entity` varchar(64) COMMENT 'Entity for which the reminder is created', - `entity_value` varchar(64) COMMENT 'Entity value', - `entity_value_label` varchar(64) COMMENT 'Entity value label', - `entity_status` varchar(64) COMMENT 'Entity status', - `entity_status_label` varchar(64) COMMENT 'Entity status label', - `entity_date_start` varchar(64) COMMENT 'Entity date', - `entity_date_end` varchar(64) COMMENT 'Entity date', - `entity_recipient` varchar(64) COMMENT 'Entity recipient' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `entity` varchar(64) COMMENT 'Entity for which the reminder is created', + `entity_value` varchar(64) COMMENT 'Entity value', + `entity_value_label` varchar(64) COMMENT 'Entity value label', + `entity_status` varchar(64) COMMENT 'Entity status', + `entity_status_label` varchar(64) COMMENT 'Entity status label', + `entity_date_start` varchar(64) COMMENT 'Entity date', + `entity_date_end` varchar(64) COMMENT 'Entity date', + `entity_recipient` varchar(64) COMMENT 'Entity recipient', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -518,19 +438,14 @@ CREATE TABLE `civicrm_action_mapping` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_recurring_entity` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `parent_id` int unsigned NOT NULL COMMENT 'Recurring Entity Parent ID', - `entity_id` int unsigned COMMENT 'Recurring Entity Child ID', - `entity_table` varchar(64) NOT NULL COMMENT 'Physical tablename for entity, e.g. civicrm_event', - `mode` tinyint NOT NULL DEFAULT 1 COMMENT '1-this entity, 2-this and the following entities, 3-all the entities' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `parent_id` int unsigned NOT NULL COMMENT 'Recurring Entity Parent ID', + `entity_id` int unsigned COMMENT 'Recurring Entity Child ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Physical tablename for entity, e.g. civicrm_event', + `mode` tinyint NOT NULL DEFAULT 1 COMMENT '1-this entity, 2-this and the following entities, 3-all the entities', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -540,28 +455,21 @@ CREATE TABLE `civicrm_recurring_entity` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_acl` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `name` varchar(64) COMMENT 'ACL Name.', - `deny` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this ACL entry Allow (0) or Deny (1) ?', - `entity_table` varchar(64) NOT NULL COMMENT 'Table of the object possessing this ACL entry (Contact, Group, or ACL Group)', - `entity_id` int unsigned COMMENT 'ID of the object possessing this ACL', - `operation` varchar(8) NOT NULL COMMENT 'What operation does this ACL entry control?', - `object_table` varchar(64) COMMENT 'The table of the object controlled by this ACL entry', - `object_id` int unsigned COMMENT 'The ID of the object controlled by this ACL entry', - `acl_table` varchar(64) COMMENT 'If this is a grant/revoke entry, what table are we granting?', - `acl_id` int unsigned COMMENT 'ID of the ACL or ACL group being granted/revoked', - `is_active` tinyint COMMENT 'Is this property active?' -, - PRIMARY KEY (`id`) - - , INDEX `index_acl_id`( - acl_id - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `name` varchar(64) COMMENT 'ACL Name.', + `deny` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this ACL entry Allow (0) or Deny (1) ?', + `entity_table` varchar(64) NOT NULL COMMENT 'Table of the object possessing this ACL entry (Contact, Group, or ACL Group)', + `entity_id` int unsigned COMMENT 'ID of the object possessing this ACL', + `operation` varchar(8) NOT NULL COMMENT 'What operation does this ACL entry control?', + `object_table` varchar(64) COMMENT 'The table of the object controlled by this ACL entry', + `object_id` int unsigned COMMENT 'The ID of the object controlled by this ACL entry', + `acl_table` varchar(64) COMMENT 'If this is a grant/revoke entry, what table are we granting?', + `acl_id` int unsigned COMMENT 'ID of the ACL or ACL group being granted/revoked', + `is_active` tinyint COMMENT 'Is this property active?', + PRIMARY KEY (`id`), + INDEX `index_acl_id`(acl_id) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -571,27 +479,17 @@ CREATE TABLE `civicrm_acl` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_acl_cache` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `contact_id` int unsigned COMMENT 'Foreign Key to Contact', - `acl_id` int unsigned NOT NULL COMMENT 'Foreign Key to ACL', - `modified_date` timestamp NULL COMMENT 'When was this cache entry last modified' -, - PRIMARY KEY (`id`) - - , INDEX `index_contact_id`( - contact_id - ) - , INDEX `index_acl_id`( - acl_id - ) - , INDEX `index_modified_date`( - modified_date - ) - -, CONSTRAINT FK_civicrm_acl_cache_acl_id FOREIGN KEY (`acl_id`) REFERENCES `civicrm_acl`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `contact_id` int unsigned COMMENT 'Foreign Key to Contact', + `acl_id` int unsigned NOT NULL COMMENT 'Foreign Key to ACL', + `modified_date` timestamp NULL COMMENT 'When was this cache entry last modified', + PRIMARY KEY (`id`), + INDEX `index_contact_id`(contact_id), + INDEX `index_acl_id`(acl_id), + INDEX `index_modified_date`(modified_date), + CONSTRAINT FK_civicrm_acl_cache_acl_id FOREIGN KEY (`acl_id`) REFERENCES `civicrm_acl`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -601,26 +499,16 @@ CREATE TABLE `civicrm_acl_cache` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_acl_entity_role` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `acl_role_id` int unsigned NOT NULL COMMENT 'Foreign Key to ACL Role (which is an option value pair and hence an implicit FK)', - `entity_table` varchar(64) NOT NULL COMMENT 'Table of the object joined to the ACL Role (Contact or Group)', - `entity_id` int unsigned NOT NULL COMMENT 'ID of the group/contact object being joined', - `is_active` tinyint COMMENT 'Is this property active?' -, - PRIMARY KEY (`id`) - - , INDEX `index_role`( - acl_role_id - ) - , INDEX `index_entity`( - entity_table - , entity_id - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `acl_role_id` int unsigned NOT NULL COMMENT 'Foreign Key to ACL Role (which is an option value pair and hence an implicit FK)', + `entity_table` varchar(64) NOT NULL COMMENT 'Table of the object joined to the ACL Role (Contact or Group)', + `entity_id` int unsigned NOT NULL COMMENT 'ID of the group/contact object being joined', + `is_active` tinyint COMMENT 'Is this property active?', + PRIMARY KEY (`id`), + INDEX `index_role`(acl_role_id), + INDEX `index_entity`(entity_table, entity_id) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -630,125 +518,82 @@ CREATE TABLE `civicrm_acl_entity_role` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contact` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Contact ID', - `contact_type` varchar(64) COMMENT 'Type of Contact.', - `contact_sub_type` varchar(255) COMMENT 'May be used to over-ride contact view and edit templates.', - `do_not_email` tinyint DEFAULT 0 , - `do_not_phone` tinyint DEFAULT 0 , - `do_not_mail` tinyint DEFAULT 0 , - `do_not_sms` tinyint DEFAULT 0 , - `do_not_trade` tinyint DEFAULT 0 , - `is_opt_out` tinyint NOT NULL DEFAULT 0 COMMENT 'Has the contact opted out from receiving all bulk email from the organization or site domain?', - `legal_identifier` varchar(32) COMMENT 'May be used for SSN, EIN/TIN, Household ID (census) or other applicable unique legal/government ID.', - `external_identifier` varchar(64) COMMENT 'Unique trusted external ID (generally from a legacy app/datasource). Particularly useful for deduping operations.', - `sort_name` varchar(128) COMMENT 'Name used for sorting different contact types', - `display_name` varchar(128) COMMENT 'Formatted name representing preferred format for display/print/other output.', - `nick_name` varchar(128) COMMENT 'Nickname.', - `legal_name` varchar(128) COMMENT 'Legal Name.', - `image_URL` text COMMENT 'optional URL for preferred image (photo, logo, etc.) to display for this contact.', - `preferred_communication_method` varchar(255) COMMENT 'What is the preferred mode of communication.', - `preferred_language` varchar(5) COMMENT 'Which language is preferred for communication. FK to languages in civicrm_option_value.', - `preferred_mail_format` varchar(8) DEFAULT "Both" COMMENT 'What is the preferred mode of sending an email.', - `hash` varchar(32) COMMENT 'Key for validating requests related to this contact.', - `api_key` varchar(32) COMMENT 'API Key for validating requests related to this contact.', - `source` varchar(255) COMMENT 'where contact come from, e.g. import, donate module insert...', - `first_name` varchar(64) COMMENT 'First Name.', - `middle_name` varchar(64) COMMENT 'Middle Name.', - `last_name` varchar(64) COMMENT 'Last Name.', - `prefix_id` int unsigned COMMENT 'Prefix or Title for name (Ms, Mr...). FK to prefix ID', - `suffix_id` int unsigned COMMENT 'Suffix for name (Jr, Sr...). FK to suffix ID', - `formal_title` varchar(64) COMMENT 'Formal (academic or similar) title in front of name. (Prof., Dr. etc.)', - `communication_style_id` int unsigned COMMENT 'Communication style (e.g. formal vs. familiar) to use with this contact. FK to communication styles in civicrm_option_value.', - `email_greeting_id` int unsigned COMMENT 'FK to civicrm_option_value.id, that has to be valid registered Email Greeting.', - `email_greeting_custom` varchar(128) COMMENT 'Custom Email Greeting.', - `email_greeting_display` varchar(255) COMMENT 'Cache Email Greeting.', - `postal_greeting_id` int unsigned COMMENT 'FK to civicrm_option_value.id, that has to be valid registered Postal Greeting.', - `postal_greeting_custom` varchar(128) COMMENT 'Custom Postal greeting.', - `postal_greeting_display` varchar(255) COMMENT 'Cache Postal greeting.', - `addressee_id` int unsigned COMMENT 'FK to civicrm_option_value.id, that has to be valid registered Addressee.', - `addressee_custom` varchar(128) COMMENT 'Custom Addressee.', - `addressee_display` varchar(255) COMMENT 'Cache Addressee.', - `job_title` varchar(255) COMMENT 'Job Title', - `gender_id` int unsigned COMMENT 'FK to gender ID', - `birth_date` date COMMENT 'Date of birth', - `is_deceased` tinyint NOT NULL DEFAULT 0 , - `deceased_date` date COMMENT 'Date of deceased', - `household_name` varchar(128) COMMENT 'Household Name.', - `primary_contact_id` int unsigned COMMENT 'Optional FK to Primary Contact for this household.', - `organization_name` varchar(128) COMMENT 'Organization Name.', - `sic_code` varchar(8) COMMENT 'Standard Industry Classification Code.', - `user_unique_id` varchar(255) COMMENT 'the OpenID (or OpenID-style http://username.domain/) unique identifier for this contact mainly used for logging in to CiviCRM', - `employer_id` int unsigned COMMENT 'OPTIONAL FK to civicrm_contact record.', - `is_deleted` tinyint NOT NULL DEFAULT 0 , - `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the contact was created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the contact (or closely related entity) was created or modified or deleted.' -, - PRIMARY KEY (`id`) - - , INDEX `index_contact_type`( - contact_type - ) - , INDEX `index_contact_sub_type`( - contact_sub_type - ) - , UNIQUE INDEX `UI_external_identifier`( - external_identifier - ) - , INDEX `index_sort_name`( - sort_name - ) - , INDEX `index_preferred_communication_method`( - preferred_communication_method - ) - , INDEX `index_hash`( - hash - ) - , INDEX `index_api_key`( - api_key - ) - , INDEX `index_first_name`( - first_name - ) - , INDEX `index_last_name`( - last_name - ) - , INDEX `UI_prefix`( - prefix_id - ) - , INDEX `UI_suffix`( - suffix_id - ) - , INDEX `index_communication_style_id`( - communication_style_id - ) - , INDEX `UI_gender`( - gender_id - ) - , INDEX `index_is_deceased`( - is_deceased - ) - , INDEX `index_household_name`( - household_name - ) - , INDEX `index_organization_name`( - organization_name - ) - , INDEX `index_is_deleted_sort_name`( - is_deleted - , sort_name - , id - ) - , INDEX `index_created_date`( - created_date - ) - , INDEX `index_modified_date`( - modified_date - ) - -, CONSTRAINT FK_civicrm_contact_primary_contact_id FOREIGN KEY (`primary_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contact_employer_id FOREIGN KEY (`employer_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Contact ID', + `contact_type` varchar(64) COMMENT 'Type of Contact.', + `contact_sub_type` varchar(255) COMMENT 'May be used to over-ride contact view and edit templates.', + `do_not_email` tinyint DEFAULT 0, + `do_not_phone` tinyint DEFAULT 0, + `do_not_mail` tinyint DEFAULT 0, + `do_not_sms` tinyint DEFAULT 0, + `do_not_trade` tinyint DEFAULT 0, + `is_opt_out` tinyint NOT NULL DEFAULT 0 COMMENT 'Has the contact opted out from receiving all bulk email from the organization or site domain?', + `legal_identifier` varchar(32) COMMENT 'May be used for SSN, EIN/TIN, Household ID (census) or other applicable unique legal/government ID.', + `external_identifier` varchar(64) COMMENT 'Unique trusted external ID (generally from a legacy app/datasource). Particularly useful for deduping operations.', + `sort_name` varchar(128) COMMENT 'Name used for sorting different contact types', + `display_name` varchar(128) COMMENT 'Formatted name representing preferred format for display/print/other output.', + `nick_name` varchar(128) COMMENT 'Nickname.', + `legal_name` varchar(128) COMMENT 'Legal Name.', + `image_URL` text COMMENT 'optional URL for preferred image (photo, logo, etc.) to display for this contact.', + `preferred_communication_method` varchar(255) COMMENT 'What is the preferred mode of communication.', + `preferred_language` varchar(5) COMMENT 'Which language is preferred for communication. FK to languages in civicrm_option_value.', + `preferred_mail_format` varchar(8) DEFAULT "Both" COMMENT 'What is the preferred mode of sending an email.', + `hash` varchar(32) COMMENT 'Key for validating requests related to this contact.', + `api_key` varchar(32) COMMENT 'API Key for validating requests related to this contact.', + `source` varchar(255) COMMENT 'where contact come from, e.g. import, donate module insert...', + `first_name` varchar(64) COMMENT 'First Name.', + `middle_name` varchar(64) COMMENT 'Middle Name.', + `last_name` varchar(64) COMMENT 'Last Name.', + `prefix_id` int unsigned COMMENT 'Prefix or Title for name (Ms, Mr...). FK to prefix ID', + `suffix_id` int unsigned COMMENT 'Suffix for name (Jr, Sr...). FK to suffix ID', + `formal_title` varchar(64) COMMENT 'Formal (academic or similar) title in front of name. (Prof., Dr. etc.)', + `communication_style_id` int unsigned COMMENT 'Communication style (e.g. formal vs. familiar) to use with this contact. FK to communication styles in civicrm_option_value.', + `email_greeting_id` int unsigned COMMENT 'FK to civicrm_option_value.id, that has to be valid registered Email Greeting.', + `email_greeting_custom` varchar(128) COMMENT 'Custom Email Greeting.', + `email_greeting_display` varchar(255) COMMENT 'Cache Email Greeting.', + `postal_greeting_id` int unsigned COMMENT 'FK to civicrm_option_value.id, that has to be valid registered Postal Greeting.', + `postal_greeting_custom` varchar(128) COMMENT 'Custom Postal greeting.', + `postal_greeting_display` varchar(255) COMMENT 'Cache Postal greeting.', + `addressee_id` int unsigned COMMENT 'FK to civicrm_option_value.id, that has to be valid registered Addressee.', + `addressee_custom` varchar(128) COMMENT 'Custom Addressee.', + `addressee_display` varchar(255) COMMENT 'Cache Addressee.', + `job_title` varchar(255) COMMENT 'Job Title', + `gender_id` int unsigned COMMENT 'FK to gender ID', + `birth_date` date COMMENT 'Date of birth', + `is_deceased` tinyint NOT NULL DEFAULT 0, + `deceased_date` date COMMENT 'Date of deceased', + `household_name` varchar(128) COMMENT 'Household Name.', + `primary_contact_id` int unsigned COMMENT 'Optional FK to Primary Contact for this household.', + `organization_name` varchar(128) COMMENT 'Organization Name.', + `sic_code` varchar(8) COMMENT 'Standard Industry Classification Code.', + `user_unique_id` varchar(255) COMMENT 'the OpenID (or OpenID-style http://username.domain/) unique identifier for this contact mainly used for logging in to CiviCRM', + `employer_id` int unsigned COMMENT 'OPTIONAL FK to civicrm_contact record.', + `is_deleted` tinyint NOT NULL DEFAULT 0, + `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the contact was created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the contact (or closely related entity) was created or modified or deleted.', + PRIMARY KEY (`id`), + INDEX `index_contact_type`(contact_type), + INDEX `index_contact_sub_type`(contact_sub_type), + UNIQUE INDEX `UI_external_identifier`(external_identifier), + INDEX `index_sort_name`(sort_name), + INDEX `index_preferred_communication_method`(preferred_communication_method), + INDEX `index_hash`(hash), + INDEX `index_api_key`(api_key), + INDEX `index_first_name`(first_name), + INDEX `index_last_name`(last_name), + INDEX `UI_prefix`(prefix_id), + INDEX `UI_suffix`(suffix_id), + INDEX `index_communication_style_id`(communication_style_id), + INDEX `UI_gender`(gender_id), + INDEX `index_is_deceased`(is_deceased), + INDEX `index_household_name`(household_name), + INDEX `index_organization_name`(organization_name), + INDEX `index_is_deleted_sort_name`(is_deleted, sort_name, id), + INDEX `index_created_date`(created_date), + INDEX `index_modified_date`(modified_date), + CONSTRAINT FK_civicrm_contact_primary_contact_id FOREIGN KEY (`primary_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contact_employer_id FOREIGN KEY (`employer_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -758,23 +603,14 @@ CREATE TABLE `civicrm_contact` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_acl_contact_cache` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `user_id` int unsigned COMMENT 'FK to civicrm_contact (could be null for anon user)', - `contact_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contact', - `operation` varchar(8) NOT NULL COMMENT 'What operation does this user have permission on?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_user_contact_operation`( - user_id - , contact_id - , operation - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `user_id` int unsigned COMMENT 'FK to civicrm_contact (could be null for anon user)', + `contact_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contact', + `operation` varchar(8) NOT NULL COMMENT 'What operation does this user have permission on?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_user_contact_operation`(user_id, contact_id, operation) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -784,32 +620,23 @@ CREATE TABLE `civicrm_acl_contact_cache` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_relationship_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key', - `name_a_b` varchar(64) COMMENT 'name for relationship of contact_a to contact_b.', - `label_a_b` varchar(64) COMMENT 'label for relationship of contact_a to contact_b.', - `name_b_a` varchar(64) COMMENT 'Optional name for relationship of contact_b to contact_a.', - `label_b_a` varchar(64) COMMENT 'Optional label for relationship of contact_b to contact_a.', - `description` varchar(255) COMMENT 'Optional verbose description of the relationship type.', - `contact_type_a` varchar(12) COMMENT 'If defined, contact_a in a relationship of this type must be a specific contact_type.', - `contact_type_b` varchar(12) COMMENT 'If defined, contact_b in a relationship of this type must be a specific contact_type.', - `contact_sub_type_a` varchar(64) COMMENT 'If defined, contact_sub_type_a in a relationship of this type must be a specific contact_sub_type.', - `contact_sub_type_b` varchar(64) COMMENT 'If defined, contact_sub_type_b in a relationship of this type must be a specific contact_sub_type.', - `is_reserved` tinyint COMMENT 'Is this relationship type a predefined system type (can not be changed or de-activated)?', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this relationship type currently active (i.e. can be used when creating or editing relationships)?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name_a_b`( - name_a_b - ) - , UNIQUE INDEX `UI_name_b_a`( - name_b_a - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key', + `name_a_b` varchar(64) COMMENT 'name for relationship of contact_a to contact_b.', + `label_a_b` varchar(64) COMMENT 'label for relationship of contact_a to contact_b.', + `name_b_a` varchar(64) COMMENT 'Optional name for relationship of contact_b to contact_a.', + `label_b_a` varchar(64) COMMENT 'Optional label for relationship of contact_b to contact_a.', + `description` varchar(255) COMMENT 'Optional verbose description of the relationship type.', + `contact_type_a` varchar(12) COMMENT 'If defined, contact_a in a relationship of this type must be a specific contact_type.', + `contact_type_b` varchar(12) COMMENT 'If defined, contact_b in a relationship of this type must be a specific contact_type.', + `contact_sub_type_a` varchar(64) COMMENT 'If defined, contact_sub_type_a in a relationship of this type must be a specific contact_sub_type.', + `contact_sub_type_b` varchar(64) COMMENT 'If defined, contact_sub_type_b in a relationship of this type must be a specific contact_sub_type.', + `is_reserved` tinyint COMMENT 'Is this relationship type a predefined system type (can not be changed or de-activated)?', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this relationship type currently active (i.e. can be used when creating or editing relationships)?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name_a_b`(name_a_b), + UNIQUE INDEX `UI_name_b_a`(name_b_a) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -819,31 +646,27 @@ CREATE TABLE `civicrm_relationship_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_saved_search` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Saved Search ID', - `name` varchar(255) DEFAULT NULL COMMENT 'Unique name of saved search', - `label` varchar(255) DEFAULT NULL COMMENT 'Administrative label for search', - `form_values` text COMMENT 'Submitted form values for this search', - `mapping_id` int unsigned COMMENT 'Foreign key to civicrm_mapping used for saved search-builder searches.', - `search_custom_id` int unsigned COMMENT 'Foreign key to civicrm_option value table used for saved custom searches.', - `api_entity` varchar(255) COMMENT 'Entity name for API based search', - `api_params` text COMMENT 'Parameters for API based search', - `created_id` int unsigned COMMENT 'FK to contact table.', - `modified_id` int unsigned COMMENT 'FK to contact table.', - `expires_date` timestamp NULL COMMENT 'Optional date after which the search is not needed', - `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the search was created.', - `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the search was last modified.', - `description` text -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_saved_search_mapping_id FOREIGN KEY (`mapping_id`) REFERENCES `civicrm_mapping`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_saved_search_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_saved_search_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Saved Search ID', + `name` varchar(255) DEFAULT NULL COMMENT 'Unique name of saved search', + `label` varchar(255) DEFAULT NULL COMMENT 'Administrative label for search', + `form_values` text COMMENT 'Submitted form values for this search', + `mapping_id` int unsigned COMMENT 'Foreign key to civicrm_mapping used for saved search-builder searches.', + `search_custom_id` int unsigned COMMENT 'Foreign key to civicrm_option value table used for saved custom searches.', + `api_entity` varchar(255) COMMENT 'Entity name for API based search', + `api_params` text COMMENT 'Parameters for API based search', + `created_id` int unsigned COMMENT 'FK to contact table.', + `modified_id` int unsigned COMMENT 'FK to contact table.', + `expires_date` timestamp NULL COMMENT 'Optional date after which the search is not needed', + `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the search was created.', + `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the search was last modified.', + `description` text, + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_saved_search_mapping_id FOREIGN KEY (`mapping_id`) REFERENCES `civicrm_mapping`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_saved_search_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_saved_search_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -853,25 +676,19 @@ CREATE TABLE `civicrm_saved_search` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contact_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contact Type ID', - `name` varchar(64) NOT NULL COMMENT 'Internal name of Contact Type (or Subtype).', - `label` varchar(64) COMMENT 'localized Name of Contact Type.', - `description` text COMMENT 'localized Optional verbose description of the type.', - `image_URL` varchar(255) COMMENT 'URL of image if any.', - `parent_id` int unsigned COMMENT 'Optional FK to parent contact type.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this entry active?', - `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this contact type a predefined system type' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `contact_type`( - name - ) - -, CONSTRAINT FK_civicrm_contact_type_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_contact_type`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contact Type ID', + `name` varchar(64) NOT NULL COMMENT 'Internal name of Contact Type (or Subtype).', + `label` varchar(64) COMMENT 'localized Name of Contact Type.', + `description` text COMMENT 'localized Optional verbose description of the type.', + `image_URL` varchar(255) COMMENT 'URL of image if any.', + `parent_id` int unsigned COMMENT 'Optional FK to parent contact type.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this entry active?', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this contact type a predefined system type', + PRIMARY KEY (`id`), + UNIQUE INDEX `contact_type`(name), + CONSTRAINT FK_civicrm_contact_type_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_contact_type`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -881,34 +698,30 @@ CREATE TABLE `civicrm_contact_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_batch` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Address ID', - `name` varchar(64) COMMENT 'Variable name/programmatic handle for this batch.', - `title` varchar(255) COMMENT 'Friendly Name.', - `description` text COMMENT 'Description of this batch set.', - `created_id` int unsigned COMMENT 'FK to Contact ID', - `created_date` datetime COMMENT 'When was this item created', - `modified_id` int unsigned COMMENT 'FK to Contact ID', - `modified_date` datetime COMMENT 'When was this item modified', - `saved_search_id` int unsigned COMMENT 'FK to Saved Search ID', - `status_id` int unsigned NOT NULL COMMENT 'fk to Batch Status options in civicrm_option_values', - `type_id` int unsigned COMMENT 'fk to Batch Type options in civicrm_option_values', - `mode_id` int unsigned COMMENT 'fk to Batch mode options in civicrm_option_values', - `total` decimal(20,2) COMMENT 'Total amount for this batch.', - `item_count` int unsigned COMMENT 'Number of items in a batch.', - `payment_instrument_id` int unsigned COMMENT 'fk to Payment Instrument options in civicrm_option_values', - `exported_date` datetime , - `data` longtext COMMENT 'cache entered data' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_batch_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_batch_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_batch_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Address ID', + `name` varchar(64) COMMENT 'Variable name/programmatic handle for this batch.', + `title` varchar(255) COMMENT 'Friendly Name.', + `description` text COMMENT 'Description of this batch set.', + `created_id` int unsigned COMMENT 'FK to Contact ID', + `created_date` datetime COMMENT 'When was this item created', + `modified_id` int unsigned COMMENT 'FK to Contact ID', + `modified_date` datetime COMMENT 'When was this item modified', + `saved_search_id` int unsigned COMMENT 'FK to Saved Search ID', + `status_id` int unsigned NOT NULL COMMENT 'fk to Batch Status options in civicrm_option_values', + `type_id` int unsigned COMMENT 'fk to Batch Type options in civicrm_option_values', + `mode_id` int unsigned COMMENT 'fk to Batch mode options in civicrm_option_values', + `total` decimal(20,2) COMMENT 'Total amount for this batch.', + `item_count` int unsigned COMMENT 'Number of items in a batch.', + `payment_instrument_id` int unsigned COMMENT 'fk to Payment Instrument options in civicrm_option_values', + `exported_date` datetime, + `data` longtext COMMENT 'cache entered data', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_batch_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_batch_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_batch_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -918,27 +731,16 @@ CREATE TABLE `civicrm_batch` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_entity_batch` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to file, e.g. civicrm_contact', - `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', - `batch_id` int unsigned NOT NULL COMMENT 'FK to civicrm_batch' -, - PRIMARY KEY (`id`) - - , INDEX `index_entity`( - entity_table - , entity_id - ) - , UNIQUE INDEX `UI_batch_entity`( - batch_id - , entity_id - , entity_table - ) - -, CONSTRAINT FK_civicrm_entity_batch_batch_id FOREIGN KEY (`batch_id`) REFERENCES `civicrm_batch`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to file, e.g. civicrm_contact', + `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', + `batch_id` int unsigned NOT NULL COMMENT 'FK to civicrm_batch', + PRIMARY KEY (`id`), + INDEX `index_entity`(entity_table, entity_id), + UNIQUE INDEX `UI_batch_entity`(batch_id, entity_id, entity_table), + CONSTRAINT FK_civicrm_entity_batch_batch_id FOREIGN KEY (`batch_id`) REFERENCES `civicrm_batch`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -948,22 +750,17 @@ CREATE TABLE `civicrm_entity_batch` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_component` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(64) COMMENT 'The name of this component', - `component_type` varchar(12) COMMENT 'Type of Component.', - `subject` varchar(255) , - `body_html` text COMMENT 'Body of the component in html format.', - `body_text` text COMMENT 'Body of the component in text format.', - `is_default` tinyint DEFAULT 0 COMMENT 'Is this the default component for this component_type?', - `is_active` tinyint COMMENT 'Is this property active?' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COMMENT 'The name of this component', + `component_type` varchar(12) COMMENT 'Type of Component.', + `subject` varchar(255), + `body_html` text COMMENT 'Body of the component in html format.', + `body_text` text COMMENT 'Body of the component in text format.', + `is_default` tinyint DEFAULT 0 COMMENT 'Is this the default component for this component_type?', + `is_active` tinyint COMMENT 'Is this property active?', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -973,28 +770,24 @@ CREATE TABLE `civicrm_mailing_component` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_abtest` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(128) COMMENT 'Name of the A/B test', - `status` varchar(32) COMMENT 'Status', - `mailing_id_a` int unsigned COMMENT 'The first experimental mailing (\"A\" condition)', - `mailing_id_b` int unsigned COMMENT 'The second experimental mailing (\"B\" condition)', - `mailing_id_c` int unsigned COMMENT 'The final, general mailing (derived from A or B)', - `domain_id` int unsigned NOT NULL COMMENT 'Which site is this mailing for', - `testing_criteria` varchar(32) , - `winner_criteria` varchar(32) , - `specific_url` varchar(255) COMMENT 'What specific url to track', - `declare_winning_time` datetime COMMENT 'In how much time to declare winner', - `group_percentage` int unsigned , - `created_id` int unsigned COMMENT 'FK to Contact ID', - `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was this item created' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_abtest_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) COMMENT 'Name of the A/B test', + `status` varchar(32) COMMENT 'Status', + `mailing_id_a` int unsigned COMMENT 'The first experimental mailing (\"A\" condition)', + `mailing_id_b` int unsigned COMMENT 'The second experimental mailing (\"B\" condition)', + `mailing_id_c` int unsigned COMMENT 'The final, general mailing (derived from A or B)', + `domain_id` int unsigned NOT NULL COMMENT 'Which site is this mailing for', + `testing_criteria` varchar(32), + `winner_criteria` varchar(32), + `specific_url` varchar(255) COMMENT 'What specific url to track', + `declare_winning_time` datetime COMMENT 'In how much time to declare winner', + `group_percentage` int unsigned, + `created_id` int unsigned COMMENT 'FK to Contact ID', + `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was this item created', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_abtest_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1004,18 +797,13 @@ CREATE TABLE `civicrm_mailing_abtest` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_bounce_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(24) NOT NULL COMMENT 'Type of bounce', - `description` varchar(255) COMMENT 'A description of this bounce type', - `hold_threshold` int unsigned NOT NULL COMMENT 'Number of bounces of this type required before the email address is put on bounce hold' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(24) NOT NULL COMMENT 'Type of bounce', + `description` varchar(255) COMMENT 'A description of this bounce type', + `hold_threshold` int unsigned NOT NULL COMMENT 'Number of bounces of this type required before the email address is put on bounce hold', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1025,17 +813,13 @@ CREATE TABLE `civicrm_mailing_bounce_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_bounce_pattern` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `bounce_type_id` int unsigned NOT NULL COMMENT 'Type of bounce', - `pattern` varchar(255) COMMENT 'A regexp to match a message to a bounce type' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_bounce_pattern_bounce_type_id FOREIGN KEY (`bounce_type_id`) REFERENCES `civicrm_mailing_bounce_type`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `bounce_type_id` int unsigned NOT NULL COMMENT 'Type of bounce', + `pattern` varchar(255) COMMENT 'A regexp to match a message to a bounce type', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_bounce_pattern_bounce_type_id FOREIGN KEY (`bounce_type_id`) REFERENCES `civicrm_mailing_bounce_type`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1045,25 +829,20 @@ CREATE TABLE `civicrm_mailing_bounce_pattern` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_premiums` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `entity_table` varchar(64) NOT NULL COMMENT 'Joins these premium settings to another object. Always civicrm_contribution_page for now.', - `entity_id` int unsigned NOT NULL , - `premiums_active` tinyint NOT NULL DEFAULT 0 COMMENT 'Is the Premiums feature enabled for this page?', - `premiums_intro_title` varchar(255) COMMENT 'Title for Premiums section.', - `premiums_intro_text` text COMMENT 'Displayed in <div> at top of Premiums section of page. Text and HTML allowed.', - `premiums_contact_email` varchar(100) COMMENT 'This email address is included in receipts if it is populated and a premium has been selected.', - `premiums_contact_phone` varchar(50) COMMENT 'This phone number is included in receipts if it is populated and a premium has been selected.', - `premiums_display_min_contribution` tinyint NOT NULL COMMENT 'Boolean. Should we automatically display minimum contribution amount text after the premium descriptions.', - `premiums_nothankyou_label` varchar(255) COMMENT 'Label displayed for No Thank-you option in premiums block (e.g. No thank you)', - `premiums_nothankyou_position` int unsigned DEFAULT 1 -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `entity_table` varchar(64) NOT NULL COMMENT 'Joins these premium settings to another object. Always civicrm_contribution_page for now.', + `entity_id` int unsigned NOT NULL, + `premiums_active` tinyint NOT NULL DEFAULT 0 COMMENT 'Is the Premiums feature enabled for this page?', + `premiums_intro_title` varchar(255) COMMENT 'Title for Premiums section.', + `premiums_intro_text` text COMMENT 'Displayed in <div> at top of Premiums section of page. Text and HTML allowed.', + `premiums_contact_email` varchar(100) COMMENT 'This email address is included in receipts if it is populated and a premium has been selected.', + `premiums_contact_phone` varchar(50) COMMENT 'This phone number is included in receipts if it is populated and a premium has been selected.', + `premiums_display_min_contribution` tinyint NOT NULL COMMENT 'Boolean. Should we automatically display minimum contribution amount text after the premium descriptions.', + `premiums_nothankyou_label` varchar(255) COMMENT 'Label displayed for No Thank-you option in premiums block (e.g. No thank you)', + `premiums_nothankyou_position` int unsigned DEFAULT 1, + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1071,19 +850,14 @@ CREATE TABLE `civicrm_premiums` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_currency` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Currency ID', - `name` varchar(64) COMMENT 'Currency Name', - `symbol` varchar(8) COMMENT 'Currency Symbol', - `numeric_code` varchar(3) COMMENT 'Numeric currency code', - `full_name` varchar(64) COMMENT 'Full currency name' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Currency ID', + `name` varchar(64) COMMENT 'Currency Name', + `symbol` varchar(8) COMMENT 'Currency Symbol', + `numeric_code` varchar(3) COMMENT 'Numeric currency code', + `full_name` varchar(64) COMMENT 'Full currency name', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1091,32 +865,27 @@ CREATE TABLE `civicrm_currency` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_financial_account` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `name` varchar(255) NOT NULL COMMENT 'Financial Account Name.', - `contact_id` int unsigned COMMENT 'FK to Contact ID that is responsible for the funds in this account', - `financial_account_type_id` int unsigned NOT NULL DEFAULT 3 COMMENT 'pseudo FK into civicrm_option_value.', - `accounting_code` varchar(64) COMMENT 'Optional value for mapping monies owed and received to accounting system codes.', - `account_type_code` varchar(64) COMMENT 'Optional value for mapping account types to accounting system account categories (QuickBooks Account Type Codes for example).', - `description` varchar(255) COMMENT 'Financial Type Description.', - `parent_id` int unsigned COMMENT 'Parent ID in account hierarchy', - `is_header_account` tinyint DEFAULT 0 COMMENT 'Is this a header account which does not allow transactions to be posted against it directly, but only to its sub-accounts?', - `is_deductible` tinyint DEFAULT 1 COMMENT 'Is this account tax-deductible?', - `is_tax` tinyint DEFAULT 0 COMMENT 'Is this account for taxes?', - `tax_rate` decimal(10,8) COMMENT 'The percentage of the total_amount that is due for this tax.', - `is_reserved` tinyint COMMENT 'Is this a predefined system object?', - `is_active` tinyint COMMENT 'Is this property active?', - `is_default` tinyint COMMENT 'Is this account the default one (or default tax one) for its financial_account_type?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_financial_account_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_financial_account_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_financial_account`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', + `name` varchar(255) NOT NULL COMMENT 'Financial Account Name.', + `contact_id` int unsigned COMMENT 'FK to Contact ID that is responsible for the funds in this account', + `financial_account_type_id` int unsigned NOT NULL DEFAULT 3 COMMENT 'pseudo FK into civicrm_option_value.', + `accounting_code` varchar(64) COMMENT 'Optional value for mapping monies owed and received to accounting system codes.', + `account_type_code` varchar(64) COMMENT 'Optional value for mapping account types to accounting system account categories (QuickBooks Account Type Codes for example).', + `description` varchar(255) COMMENT 'Financial Type Description.', + `parent_id` int unsigned COMMENT 'Parent ID in account hierarchy', + `is_header_account` tinyint DEFAULT 0 COMMENT 'Is this a header account which does not allow transactions to be posted against it directly, but only to its sub-accounts?', + `is_deductible` tinyint DEFAULT 1 COMMENT 'Is this account tax-deductible?', + `is_tax` tinyint DEFAULT 0 COMMENT 'Is this account for taxes?', + `tax_rate` decimal(10,8) COMMENT 'The percentage of the total_amount that is due for this tax.', + `is_reserved` tinyint COMMENT 'Is this a predefined system object?', + `is_active` tinyint COMMENT 'Is this property active?', + `is_default` tinyint COMMENT 'Is this account the default one (or default tax one) for its financial_account_type?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_financial_account_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_financial_account_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_financial_account`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1124,40 +893,33 @@ CREATE TABLE `civicrm_financial_account` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_payment_processor_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Processor Type ID', - `name` varchar(64) NOT NULL COMMENT 'Payment Processor Type Name.', - `title` varchar(127) NOT NULL COMMENT 'Payment Processor Type Title.', - `description` varchar(255) COMMENT 'Payment Processor Description.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this processor active?', - `is_default` tinyint DEFAULT 0 COMMENT 'Is this processor the default?', - `user_name_label` varchar(255) , - `password_label` varchar(255) , - `signature_label` varchar(255) , - `subject_label` varchar(255) , - `class_name` varchar(255) NOT NULL , - `url_site_default` varchar(255) , - `url_api_default` varchar(255) , - `url_recur_default` varchar(255) , - `url_button_default` varchar(255) , - `url_site_test_default` varchar(255) , - `url_api_test_default` varchar(255) , - `url_recur_test_default` varchar(255) , - `url_button_test_default` varchar(255) , - `billing_mode` int unsigned NOT NULL COMMENT 'Billing Mode (deprecated)', - `is_recur` tinyint COMMENT 'Can process recurring contributions', - `payment_type` int unsigned DEFAULT 1 COMMENT 'Payment Type: Credit or Debit (deprecated)', - `payment_instrument_id` int unsigned DEFAULT 1 COMMENT 'Payment Instrument ID' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Processor Type ID', + `name` varchar(64) NOT NULL COMMENT 'Payment Processor Type Name.', + `title` varchar(127) NOT NULL COMMENT 'Payment Processor Type Title.', + `description` varchar(255) COMMENT 'Payment Processor Description.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this processor active?', + `is_default` tinyint DEFAULT 0 COMMENT 'Is this processor the default?', + `user_name_label` varchar(255), + `password_label` varchar(255), + `signature_label` varchar(255), + `subject_label` varchar(255), + `class_name` varchar(255) NOT NULL, + `url_site_default` varchar(255), + `url_api_default` varchar(255), + `url_recur_default` varchar(255), + `url_button_default` varchar(255), + `url_site_test_default` varchar(255), + `url_api_test_default` varchar(255), + `url_recur_test_default` varchar(255), + `url_button_test_default` varchar(255), + `billing_mode` int unsigned NOT NULL COMMENT 'Billing Mode (deprecated)', + `is_recur` tinyint COMMENT 'Can process recurring contributions', + `payment_type` int unsigned DEFAULT 1 COMMENT 'Payment Type: Credit or Debit (deprecated)', + `payment_instrument_id` int unsigned DEFAULT 1 COMMENT 'Payment Instrument ID', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1167,20 +929,15 @@ CREATE TABLE `civicrm_payment_processor_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_financial_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT 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', - `name` varchar(64) NOT NULL COMMENT 'Financial Type Name.', - `description` varchar(255) COMMENT 'Financial Type Description.', - `is_deductible` tinyint NOT NULL DEFAULT 0 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.', - `is_reserved` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this a predefined system object?', - `is_active` tinyint NOT NULL DEFAULT 1 COMMENT 'Is this property active?' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT 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', + `name` varchar(64) NOT NULL COMMENT 'Financial Type Name.', + `description` varchar(255) COMMENT 'Financial Type Description.', + `is_deductible` tinyint NOT NULL DEFAULT 0 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.', + `is_reserved` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this a predefined system object?', + `is_active` tinyint NOT NULL DEFAULT 1 COMMENT 'Is this property active?', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1190,24 +947,16 @@ CREATE TABLE `civicrm_financial_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_entity_financial_account` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `entity_table` varchar(64) NOT NULL COMMENT 'Links to an entity_table like civicrm_financial_type', - `entity_id` int unsigned NOT NULL COMMENT 'Links to an id in the entity_table, such as vid in civicrm_financial_type', - `account_relationship` int unsigned NOT NULL COMMENT 'FK to a new civicrm_option_value (account_relationship)', - `financial_account_id` int unsigned NOT NULL COMMENT 'FK to the financial_account_id' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `index_entity_id_entity_table_account_relationship`( - entity_id - , entity_table - , account_relationship - ) - -, CONSTRAINT FK_civicrm_entity_financial_account_financial_account_id FOREIGN KEY (`financial_account_id`) REFERENCES `civicrm_financial_account`(`id`) ON DELETE RESTRICT -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Links to an entity_table like civicrm_financial_type', + `entity_id` int unsigned NOT NULL COMMENT 'Links to an id in the entity_table, such as vid in civicrm_financial_type', + `account_relationship` int unsigned NOT NULL COMMENT 'FK to a new civicrm_option_value (account_relationship)', + `financial_account_id` int unsigned NOT NULL COMMENT 'FK to the financial_account_id', + PRIMARY KEY (`id`), + UNIQUE INDEX `index_entity_id_entity_table_account_relationship`(entity_id, entity_table, account_relationship), + CONSTRAINT FK_civicrm_entity_financial_account_financial_account_id FOREIGN KEY (`financial_account_id`) REFERENCES `civicrm_financial_account`(`id`) ON DELETE RESTRICT +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1217,35 +966,25 @@ CREATE TABLE `civicrm_entity_financial_account` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_financial_item` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time the item was created', - `transaction_date` datetime NOT NULL COMMENT 'Date and time of the source transaction', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID of contact the item is from', - `description` varchar(255) COMMENT 'Human readable description of this item, to ease display without lookup of source item.', - `amount` decimal(20,2) NOT NULL DEFAULT 0 COMMENT 'Total amount of this item', - `currency` varchar(3) COMMENT 'Currency for the amount', - `financial_account_id` int unsigned COMMENT 'FK to civicrm_financial_account', - `status_id` int unsigned COMMENT 'Payment status: test, paid, part_paid, unpaid (if empty assume unpaid)', - `entity_table` varchar(64) COMMENT 'The table providing the source of this item such as civicrm_line_item', - `entity_id` int unsigned COMMENT 'The specific source item that is responsible for the creation of this financial_item' -, - PRIMARY KEY (`id`) - - , INDEX `IX_created_date`( - created_date - ) - , INDEX `IX_transaction_date`( - transaction_date - ) - , INDEX `index_entity_id_entity_table`( - entity_id - , entity_table - ) - -, CONSTRAINT FK_civicrm_financial_item_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_financial_item_financial_account_id FOREIGN KEY (`financial_account_id`) REFERENCES `civicrm_financial_account`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time the item was created', + `transaction_date` datetime NOT NULL COMMENT 'Date and time of the source transaction', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID of contact the item is from', + `description` varchar(255) COMMENT 'Human readable description of this item, to ease display without lookup of source item.', + `amount` decimal(20,2) NOT NULL DEFAULT 0 COMMENT 'Total amount of this item', + `currency` varchar(3) COMMENT 'Currency for the amount', + `financial_account_id` int unsigned COMMENT 'FK to civicrm_financial_account', + `status_id` int unsigned COMMENT 'Payment status: test, paid, part_paid, unpaid (if empty assume unpaid)', + `entity_table` varchar(64) COMMENT 'May contain civicrm_line_item, civicrm_financial_trxn etc', + `entity_id` int unsigned COMMENT 'The specific source item that is responsible for the creation of this financial_item', + PRIMARY KEY (`id`), + INDEX `IX_created_date`(created_date), + INDEX `IX_transaction_date`(transaction_date), + INDEX `index_entity_id_entity_table`(entity_id, entity_table), + CONSTRAINT FK_civicrm_financial_item_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_financial_item_financial_account_id FOREIGN KEY (`financial_account_id`) REFERENCES `civicrm_financial_account`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1255,29 +994,24 @@ CREATE TABLE `civicrm_financial_item` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_membership_status` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', - `name` varchar(128) COMMENT 'Name for Membership Status', - `label` varchar(128) COMMENT 'Label for Membership Status', - `start_event` varchar(12) COMMENT 'Event when this status starts.', - `start_event_adjust_unit` varchar(8) COMMENT 'Unit used for adjusting from start_event.', - `start_event_adjust_interval` int COMMENT 'Status range begins this many units from start_event.', - `end_event` varchar(12) COMMENT 'Event after which this status ends.', - `end_event_adjust_unit` varchar(8) COMMENT 'Unit used for adjusting from the ending event.', - `end_event_adjust_interval` int COMMENT 'Status range ends this many units from end_event.', - `is_current_member` tinyint COMMENT 'Does this status aggregate to current members (e.g. New, Renewed, Grace might all be TRUE... while Unrenewed, Lapsed, Inactive would be FALSE).', - `is_admin` tinyint COMMENT 'Is this status for admin/manual assignment only.', - `weight` int , - `is_default` tinyint COMMENT 'Assign this status to a membership record if no other status match is found.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this membership_status enabled.', - `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this membership_status reserved.' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', + `name` varchar(128) COMMENT 'Name for Membership Status', + `label` varchar(128) COMMENT 'Label for Membership Status', + `start_event` varchar(12) COMMENT 'Event when this status starts.', + `start_event_adjust_unit` varchar(8) COMMENT 'Unit used for adjusting from start_event.', + `start_event_adjust_interval` int COMMENT 'Status range begins this many units from start_event.', + `end_event` varchar(12) COMMENT 'Event after which this status ends.', + `end_event_adjust_unit` varchar(8) COMMENT 'Unit used for adjusting from the ending event.', + `end_event_adjust_interval` int COMMENT 'Status range ends this many units from end_event.', + `is_current_member` tinyint COMMENT 'Does this status aggregate to current members (e.g. New, Renewed, Grace might all be TRUE... while Unrenewed, Lapsed, Inactive would be FALSE).', + `is_admin` tinyint COMMENT 'Is this status for admin/manual assignment only.', + `weight` int, + `is_default` tinyint COMMENT 'Assign this status to a membership record if no other status match is found.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this membership_status enabled.', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this membership_status reserved.', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1287,43 +1021,33 @@ CREATE TABLE `civicrm_membership_status` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_campaign` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Campaign ID.', - `name` varchar(255) NOT NULL COMMENT 'Name of the Campaign.', - `title` varchar(255) COMMENT 'Title of the Campaign.', - `description` text COMMENT 'Full description of Campaign.', - `start_date` datetime COMMENT 'Date and time that Campaign starts.', - `end_date` datetime COMMENT 'Date and time that Campaign ends.', - `campaign_type_id` int unsigned DEFAULT NULL COMMENT 'Campaign Type ID.Implicit FK to civicrm_option_value where option_group = campaign_type', - `status_id` int unsigned DEFAULT NULL COMMENT 'Campaign status ID.Implicit FK to civicrm_option_value where option_group = campaign_status', - `external_identifier` varchar(32) COMMENT 'Unique trusted external ID (generally from a legacy app/datasource). Particularly useful for deduping operations.', - `parent_id` int unsigned DEFAULT NULL COMMENT 'Optional parent id for this Campaign.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this Campaign enabled or disabled/cancelled?', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this Campaign.', - `created_date` datetime COMMENT 'Date and time that Campaign was created.', - `last_modified_id` int unsigned COMMENT 'FK to civicrm_contact, who recently edited this Campaign.', - `last_modified_date` datetime COMMENT 'Date and time that Campaign was edited last time.', - `goal_general` text COMMENT 'General goals for Campaign.', - `goal_revenue` decimal(20,2) COMMENT 'The target revenue for this campaign.' -, - PRIMARY KEY (`id`) - - , INDEX `UI_campaign_name`( - name - ) - , INDEX `UI_campaign_type_id`( - campaign_type_id - ) - , INDEX `UI_campaign_status_id`( - status_id - ) - , UNIQUE INDEX `UI_external_identifier`( - external_identifier - ) - -, CONSTRAINT FK_civicrm_campaign_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_campaign_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_campaign_last_modified_id FOREIGN KEY (`last_modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Campaign ID.', + `name` varchar(255) NOT NULL COMMENT 'Name of the Campaign.', + `title` varchar(255) COMMENT 'Title of the Campaign.', + `description` text COMMENT 'Full description of Campaign.', + `start_date` datetime COMMENT 'Date and time that Campaign starts.', + `end_date` datetime COMMENT 'Date and time that Campaign ends.', + `campaign_type_id` int unsigned DEFAULT NULL COMMENT 'Campaign Type ID.Implicit FK to civicrm_option_value where option_group = campaign_type', + `status_id` int unsigned DEFAULT NULL COMMENT 'Campaign status ID.Implicit FK to civicrm_option_value where option_group = campaign_status', + `external_identifier` varchar(32) COMMENT 'Unique trusted external ID (generally from a legacy app/datasource). Particularly useful for deduping operations.', + `parent_id` int unsigned DEFAULT NULL COMMENT 'Optional parent id for this Campaign.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this Campaign enabled or disabled/cancelled?', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this Campaign.', + `created_date` datetime COMMENT 'Date and time that Campaign was created.', + `last_modified_id` int unsigned COMMENT 'FK to civicrm_contact, who recently edited this Campaign.', + `last_modified_date` datetime COMMENT 'Date and time that Campaign was edited last time.', + `goal_general` text COMMENT 'General goals for Campaign.', + `goal_revenue` decimal(20,2) COMMENT 'The target revenue for this campaign.', + PRIMARY KEY (`id`), + INDEX `UI_campaign_name`(name), + INDEX `UI_campaign_type_id`(campaign_type_id), + INDEX `UI_campaign_status_id`(status_id), + UNIQUE INDEX `UI_external_identifier`(external_identifier), + CONSTRAINT FK_civicrm_campaign_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_campaign_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_campaign_last_modified_id FOREIGN KEY (`last_modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1333,19 +1057,15 @@ CREATE TABLE `civicrm_campaign` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_campaign_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Campaign Group id.', - `campaign_id` int unsigned NOT NULL COMMENT 'Foreign key to the activity Campaign.', - `group_type` varchar(8) DEFAULT NULL COMMENT 'Type of Group.', - `entity_table` varchar(64) DEFAULT NULL COMMENT 'Name of table where item being referenced is stored.', - `entity_id` int unsigned DEFAULT NULL COMMENT 'Entity id of referenced table.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_campaign_group_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Campaign Group id.', + `campaign_id` int unsigned NOT NULL COMMENT 'Foreign key to the activity Campaign.', + `group_type` varchar(8) DEFAULT NULL COMMENT 'Type of Group.', + `entity_table` varchar(64) DEFAULT NULL COMMENT 'Name of table where item being referenced is stored.', + `entity_id` int unsigned DEFAULT NULL COMMENT 'Entity id of referenced table.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_campaign_group_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1355,37 +1075,33 @@ CREATE TABLE `civicrm_campaign_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_survey` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Survey id.', - `title` varchar(255) NOT NULL COMMENT 'Title of the Survey.', - `campaign_id` int unsigned DEFAULT NULL COMMENT 'Foreign key to the Campaign.', - `activity_type_id` int unsigned DEFAULT NULL COMMENT 'Implicit FK to civicrm_option_value where option_group = activity_type', - `recontact_interval` text COMMENT 'Recontact intervals for each status.', - `instructions` text COMMENT 'Script instructions for volunteers to use for the survey.', - `release_frequency` int unsigned DEFAULT NULL COMMENT 'Number of days for recurrence of release.', - `max_number_of_contacts` int unsigned DEFAULT NULL COMMENT 'Maximum number of contacts to allow for survey.', - `default_number_of_contacts` int unsigned DEFAULT NULL COMMENT 'Default number of contacts to allow for survey.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this survey enabled or disabled/cancelled?', - `is_default` tinyint DEFAULT 0 COMMENT 'Is this default survey?', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this Survey.', - `created_date` datetime COMMENT 'Date and time that Survey was created.', - `last_modified_id` int unsigned COMMENT 'FK to civicrm_contact, who recently edited this Survey.', - `last_modified_date` datetime COMMENT 'Date and time that Survey was edited last time.', - `result_id` int unsigned DEFAULT NULL COMMENT 'Used to store option group id.', - `bypass_confirm` tinyint DEFAULT 0 COMMENT 'Bypass the email verification.', - `thankyou_title` varchar(255) COMMENT 'Title for Thank-you page (header title tag, and display at the top of the page).', - `thankyou_text` text COMMENT 'text and html allowed. displayed above result on success page', - `is_share` tinyint DEFAULT 1 COMMENT 'Can people share the petition through social media?' -, - PRIMARY KEY (`id`) - - , INDEX `UI_activity_type_id`( - activity_type_id - ) - -, CONSTRAINT FK_civicrm_survey_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_survey_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_survey_last_modified_id FOREIGN KEY (`last_modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Survey id.', + `title` varchar(255) NOT NULL COMMENT 'Title of the Survey.', + `campaign_id` int unsigned DEFAULT NULL COMMENT 'Foreign key to the Campaign.', + `activity_type_id` int unsigned DEFAULT NULL COMMENT 'Implicit FK to civicrm_option_value where option_group = activity_type', + `recontact_interval` text COMMENT 'Recontact intervals for each status.', + `instructions` text COMMENT 'Script instructions for volunteers to use for the survey.', + `release_frequency` int unsigned DEFAULT NULL COMMENT 'Number of days for recurrence of release.', + `max_number_of_contacts` int unsigned DEFAULT NULL COMMENT 'Maximum number of contacts to allow for survey.', + `default_number_of_contacts` int unsigned DEFAULT NULL COMMENT 'Default number of contacts to allow for survey.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this survey enabled or disabled/cancelled?', + `is_default` tinyint DEFAULT 0 COMMENT 'Is this default survey?', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this Survey.', + `created_date` datetime COMMENT 'Date and time that Survey was created.', + `last_modified_id` int unsigned COMMENT 'FK to civicrm_contact, who recently edited this Survey.', + `last_modified_date` datetime COMMENT 'Date and time that Survey was edited last time.', + `result_id` int unsigned DEFAULT NULL COMMENT 'Used to store option group id.', + `bypass_confirm` tinyint DEFAULT 0 COMMENT 'Bypass the email verification.', + `thankyou_title` varchar(255) COMMENT 'Title for Thank-you page (header title tag, and display at the top of the page).', + `thankyou_text` text COMMENT 'text and html allowed. displayed above result on success page', + `is_share` tinyint DEFAULT 1 COMMENT 'Can people share the petition through social media?', + PRIMARY KEY (`id`), + INDEX `UI_activity_type_id`(activity_type_id), + CONSTRAINT FK_civicrm_survey_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_survey_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_survey_last_modified_id FOREIGN KEY (`last_modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1395,23 +1111,18 @@ CREATE TABLE `civicrm_survey` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_participant_status_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'unique participant status type id', - `name` varchar(64) COMMENT 'non-localized name of the status type', - `label` varchar(255) COMMENT 'localized label for display of this status type', - `class` varchar(8) COMMENT 'the general group of status type this one belongs to', - `is_reserved` tinyint COMMENT 'whether this is a status type required by the system', - `is_active` tinyint DEFAULT 1 COMMENT 'whether this status type is active', - `is_counted` tinyint COMMENT 'whether this status type is counted against event size limit', - `weight` int unsigned NOT NULL COMMENT 'controls sort order', - `visibility_id` int unsigned COMMENT 'whether the status type is visible to the public, an implicit foreign key to option_value.value related to the `visibility` option_group' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'unique participant status type id', + `name` varchar(64) COMMENT 'non-localized name of the status type', + `label` varchar(255) COMMENT 'localized label for display of this status type', + `class` varchar(8) COMMENT 'the general group of status type this one belongs to', + `is_reserved` tinyint COMMENT 'whether this is a status type required by the system', + `is_active` tinyint DEFAULT 1 COMMENT 'whether this status type is active', + `is_counted` tinyint COMMENT 'whether this status type is counted against event size limit', + `weight` int unsigned NOT NULL COMMENT 'controls sort order', + `visibility_id` int unsigned COMMENT 'whether the status type is visible to the public, an implicit foreign key to option_value.value related to the `visibility` option_group', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1419,17 +1130,13 @@ CREATE TABLE `civicrm_participant_status_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_event_carts` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Cart ID', - `user_id` int unsigned COMMENT 'FK to civicrm_contact who created this cart', - `completed` tinyint DEFAULT 0 -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_event_carts_user_id FOREIGN KEY (`user_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Cart ID', + `user_id` int unsigned COMMENT 'FK to civicrm_contact who created this cart', + `completed` tinyint DEFAULT 0, + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_event_carts_user_id FOREIGN KEY (`user_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1439,21 +1146,16 @@ CREATE TABLE `civicrm_event_carts` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_dedupe_rule_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique dedupe rule group id', - `contact_type` varchar(12) COMMENT 'The type of contacts this group applies to', - `threshold` int NOT NULL COMMENT 'The weight threshold the sum of the rule weights has to cross to consider two contacts the same', - `used` varchar(12) NOT NULL COMMENT 'Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically)', - `name` varchar(64) COMMENT 'Name of the rule group', - `title` varchar(255) COMMENT 'Label of the rule group', - `is_reserved` tinyint COMMENT 'Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin' -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique dedupe rule group id', + `contact_type` varchar(12) COMMENT 'The type of contacts this group applies to', + `threshold` int NOT NULL COMMENT 'The weight threshold the sum of the rule weights has to cross to consider two contacts the same', + `used` varchar(12) NOT NULL COMMENT 'Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically)', + `name` varchar(64) COMMENT 'Name of the rule group', + `title` varchar(255) COMMENT 'Label of the rule group', + `is_reserved` tinyint COMMENT 'Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin', + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1463,20 +1165,16 @@ CREATE TABLE `civicrm_dedupe_rule_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_dedupe_rule` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique dedupe rule id', - `dedupe_rule_group_id` int unsigned NOT NULL COMMENT 'The id of the rule group this rule belongs to', - `rule_table` varchar(64) NOT NULL COMMENT 'The name of the table this rule is about', - `rule_field` varchar(64) NOT NULL COMMENT 'The name of the field of the table referenced in rule_table', - `rule_length` int unsigned COMMENT 'The length of the matching substring', - `rule_weight` int NOT NULL COMMENT 'The weight of the rule' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_dedupe_rule_dedupe_rule_group_id FOREIGN KEY (`dedupe_rule_group_id`) REFERENCES `civicrm_dedupe_rule_group`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique dedupe rule id', + `dedupe_rule_group_id` int unsigned NOT NULL COMMENT 'The id of the rule group this rule belongs to', + `rule_table` varchar(64) NOT NULL COMMENT 'The name of the table this rule is about', + `rule_field` varchar(64) NOT NULL COMMENT 'The name of the field of the table referenced in rule_table', + `rule_length` int unsigned COMMENT 'The length of the matching substring', + `rule_weight` int NOT NULL COMMENT 'The weight of the rule', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_dedupe_rule_dedupe_rule_group_id FOREIGN KEY (`dedupe_rule_group_id`) REFERENCES `civicrm_dedupe_rule_group`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1486,21 +1184,15 @@ CREATE TABLE `civicrm_dedupe_rule` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_dedupe_exception` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique dedupe exception id', - `contact_id1` int unsigned NOT NULL COMMENT 'FK to Contact ID', - `contact_id2` int unsigned NOT NULL COMMENT 'FK to Contact ID' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_contact_id1_contact_id2`( - contact_id1 - , contact_id2 - ) - -, CONSTRAINT FK_civicrm_dedupe_exception_contact_id1 FOREIGN KEY (`contact_id1`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_dedupe_exception_contact_id2 FOREIGN KEY (`contact_id2`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique dedupe exception id', + `contact_id1` int unsigned NOT NULL COMMENT 'FK to Contact ID', + `contact_id2` int unsigned NOT NULL COMMENT 'FK to Contact ID', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_contact_id1_contact_id2`(contact_id1, contact_id2), + CONSTRAINT FK_civicrm_dedupe_exception_contact_id1 FOREIGN KEY (`contact_id1`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_dedupe_exception_contact_id2 FOREIGN KEY (`contact_id2`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1510,25 +1202,18 @@ CREATE TABLE `civicrm_dedupe_exception` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_case_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Autoincremented type id', - `name` varchar(64) NOT NULL COMMENT 'Machine name for Case Type', - `title` varchar(64) NOT NULL COMMENT 'Natural language name for Case Type', - `description` varchar(255) COMMENT 'Description of the Case Type', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this case type enabled?', - `is_reserved` tinyint COMMENT 'Is this case type a predefined system type?', - `weight` int NOT NULL DEFAULT 1 COMMENT 'Ordering of the case types', - `definition` blob COMMENT 'xml definition of case type' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `case_type_name`( - name - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Autoincremented type id', + `name` varchar(64) NOT NULL COMMENT 'Machine name for Case Type', + `title` varchar(64) NOT NULL COMMENT 'Natural language name for Case Type', + `description` varchar(255) COMMENT 'Description of the Case Type', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this case type enabled?', + `is_reserved` tinyint COMMENT 'Is this case type a predefined system type?', + `weight` int NOT NULL DEFAULT 1 COMMENT 'Ordering of the case types', + `definition` blob COMMENT 'xml definition of case type', + PRIMARY KEY (`id`), + UNIQUE INDEX `case_type_name`(name) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1538,35 +1223,28 @@ CREATE TABLE `civicrm_case_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_grant` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Grant id', - `contact_id` int unsigned NOT NULL COMMENT 'Contact ID of contact record given grant belongs to.', - `application_received_date` date COMMENT 'Date on which grant application was received by donor.', - `decision_date` date COMMENT 'Date on which grant decision was made.', - `money_transfer_date` date COMMENT 'Date on which grant money transfer was made.', - `grant_due_date` date COMMENT 'Date on which grant report is due.', - `grant_report_received` tinyint COMMENT 'Yes/No field stating whether grant report was received by donor.', - `grant_type_id` int unsigned NOT NULL COMMENT 'Type of grant. Implicit FK to civicrm_option_value in grant_type option_group.', - `amount_total` decimal(20,2) NOT NULL COMMENT 'Requested grant amount, in default currency.', - `amount_requested` decimal(20,2) COMMENT 'Requested grant amount, in original currency (optional).', - `amount_granted` decimal(20,2) COMMENT 'Granted amount, in default currency.', - `currency` varchar(3) NOT NULL COMMENT '3 character string, value from config setting or input via user.', - `rationale` text COMMENT 'Grant rationale.', - `status_id` int unsigned NOT NULL COMMENT 'ID of Grant status.', - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.' -, - PRIMARY KEY (`id`) - - , INDEX `index_grant_type_id`( - grant_type_id - ) - , INDEX `index_status_id`( - status_id - ) - -, CONSTRAINT FK_civicrm_grant_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_grant_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Grant id', + `contact_id` int unsigned NOT NULL COMMENT 'Contact ID of contact record given grant belongs to.', + `application_received_date` date COMMENT 'Date on which grant application was received by donor.', + `decision_date` date COMMENT 'Date on which grant decision was made.', + `money_transfer_date` date COMMENT 'Date on which grant money transfer was made.', + `grant_due_date` date COMMENT 'Date on which grant report is due.', + `grant_report_received` tinyint COMMENT 'Yes/No field stating whether grant report was received by donor.', + `grant_type_id` int unsigned NOT NULL COMMENT 'Type of grant. Implicit FK to civicrm_option_value in grant_type option_group.', + `amount_total` decimal(20,2) NOT NULL COMMENT 'Requested grant amount, in default currency.', + `amount_requested` decimal(20,2) COMMENT 'Requested grant amount, in original currency (optional).', + `amount_granted` decimal(20,2) COMMENT 'Granted amount, in default currency.', + `currency` varchar(3) NOT NULL COMMENT '3 character string, value from config setting or input via user.', + `rationale` text COMMENT 'Grant rationale.', + `status_id` int unsigned NOT NULL COMMENT 'ID of Grant status.', + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', + PRIMARY KEY (`id`), + INDEX `index_grant_type_id`(grant_type_id), + INDEX `index_status_id`(status_id), + CONSTRAINT FK_civicrm_grant_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_grant_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1574,24 +1252,19 @@ CREATE TABLE `civicrm_grant` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_tell_friend` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Friend ID', - `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', - `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', - `title` varchar(255) , - `intro` text COMMENT 'Introductory message to contributor or participant displayed on the Tell a Friend form.', - `suggested_message` text COMMENT 'Suggested message to friends, provided as default on the Tell A Friend form.', - `general_link` varchar(255) COMMENT 'URL for general info about the organization - included in the email sent to friends.', - `thankyou_title` varchar(255) COMMENT 'Text for Tell a Friend thank you page header and HTML title.', - `thankyou_text` text COMMENT 'Thank you message displayed on success page.', - `is_active` tinyint -, - PRIMARY KEY (`id`) - - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Friend ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', + `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', + `title` varchar(255), + `intro` text COMMENT 'Introductory message to contributor or participant displayed on the Tell a Friend form.', + `suggested_message` text COMMENT 'Suggested message to friends, provided as default on the Tell A Friend form.', + `general_link` varchar(255) COMMENT 'URL for general info about the organization - included in the email sent to friends.', + `thankyou_title` varchar(255) COMMENT 'Text for Tell a Friend thank you page header and HTML title.', + `thankyou_text` text COMMENT 'Thank you message displayed on success page.', + `is_active` tinyint, + PRIMARY KEY (`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1599,29 +1272,21 @@ CREATE TABLE `civicrm_tell_friend` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_pledge_block` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Pledge ID', - `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to pledge, e.g. civicrm_contact', - `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', - `pledge_frequency_unit` varchar(128) COMMENT 'Delimited list of supported frequency units', - `is_pledge_interval` tinyint DEFAULT 0 COMMENT 'Is frequency interval exposed on the contribution form.', - `max_reminders` int unsigned DEFAULT 1 COMMENT 'The maximum number of payment reminders to send for any given payment.', - `initial_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send initial reminder this many days prior to the payment due date.', - `additional_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send additional reminder this many days after last one sent, up to maximum number of reminders.', - `pledge_start_date` varchar(64) COMMENT 'The date the first scheduled pledge occurs.', - `is_pledge_start_date_visible` tinyint NOT NULL DEFAULT 0 COMMENT 'If true - recurring start date is shown.', - `is_pledge_start_date_editable` tinyint NOT NULL DEFAULT 0 COMMENT 'If true - recurring start date is editable.' -, - PRIMARY KEY (`id`) - - , INDEX `index_entity`( - entity_table - , entity_id - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Pledge ID', + `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to pledge, e.g. civicrm_contact', + `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', + `pledge_frequency_unit` varchar(128) COMMENT 'Delimited list of supported frequency units', + `is_pledge_interval` tinyint DEFAULT 0 COMMENT 'Is frequency interval exposed on the contribution form.', + `max_reminders` int unsigned DEFAULT 1 COMMENT 'The maximum number of payment reminders to send for any given payment.', + `initial_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send initial reminder this many days prior to the payment due date.', + `additional_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send additional reminder this many days after last one sent, up to maximum number of reminders.', + `pledge_start_date` varchar(64) COMMENT 'The date the first scheduled pledge occurs.', + `is_pledge_start_date_visible` tinyint NOT NULL DEFAULT 0 COMMENT 'If true - recurring start date is shown.', + `is_pledge_start_date_editable` tinyint NOT NULL DEFAULT 0 COMMENT 'If true - recurring start date is editable.', + PRIMARY KEY (`id`), + INDEX `index_entity`(entity_table, entity_id) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1631,25 +1296,16 @@ CREATE TABLE `civicrm_pledge_block` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_queue_item` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `queue_name` varchar(64) NOT NULL COMMENT 'Name of the queue which includes this item', - `weight` int NOT NULL , - `submit_time` datetime NOT NULL COMMENT 'date on which this item was submitted to the queue', - `release_time` datetime COMMENT 'date on which this job becomes available; null if ASAP', - `data` longtext COMMENT 'Serialized queue data' -, - PRIMARY KEY (`id`) - - , INDEX `index_queueids`( - queue_name - , weight - , id - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `queue_name` varchar(64) NOT NULL COMMENT 'Name of the queue which includes this item', + `weight` int NOT NULL, + `submit_time` datetime NOT NULL COMMENT 'date on which this item was submitted to the queue', + `release_time` datetime COMMENT 'date on which this job becomes available; null if ASAP', + `data` longtext COMMENT 'Serialized queue data', + PRIMARY KEY (`id`), + INDEX `index_queueids`(queue_name, weight, id) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1657,30 +1313,26 @@ CREATE TABLE `civicrm_queue_item` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_pcp` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Personal Campaign Page ID', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', - `status_id` int unsigned NOT NULL , - `title` varchar(255) DEFAULT NULL , - `intro_text` text DEFAULT NULL , - `page_text` text DEFAULT NULL , - `donate_link_text` varchar(255) DEFAULT NULL , - `page_id` int unsigned NOT NULL COMMENT 'The Contribution or Event Page which triggered this pcp', - `page_type` varchar(64) DEFAULT 'contribute' COMMENT 'The type of PCP this is: contribute or event', - `pcp_block_id` int unsigned NOT NULL COMMENT 'The pcp block that this pcp page was created from', - `is_thermometer` int unsigned DEFAULT 0 , - `is_honor_roll` int unsigned DEFAULT 0 , - `goal_amount` decimal(20,2) COMMENT 'Goal amount of this Personal Campaign Page.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `is_active` tinyint DEFAULT 0 COMMENT 'Is Personal Campaign Page enabled/active?', - `is_notify` tinyint DEFAULT 0 COMMENT 'Notify owner via email when someone donates to page?' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_pcp_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Personal Campaign Page ID', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', + `status_id` int unsigned NOT NULL, + `title` varchar(255) DEFAULT NULL, + `intro_text` text DEFAULT NULL, + `page_text` text DEFAULT NULL, + `donate_link_text` varchar(255) DEFAULT NULL, + `page_id` int unsigned NOT NULL COMMENT 'The Contribution or Event Page which triggered this pcp', + `page_type` varchar(64) DEFAULT 'contribute' COMMENT 'The type of PCP this is: contribute or event', + `pcp_block_id` int unsigned NOT NULL COMMENT 'The pcp block that this pcp page was created from', + `is_thermometer` int unsigned DEFAULT 0, + `is_honor_roll` int unsigned DEFAULT 0, + `goal_amount` decimal(20,2) COMMENT 'Goal amount of this Personal Campaign Page.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `is_active` tinyint DEFAULT 0 COMMENT 'Is Personal Campaign Page enabled/active?', + `is_notify` tinyint DEFAULT 0 COMMENT 'Notify owner via email when someone donates to page?', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_pcp_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1688,31 +1340,22 @@ CREATE TABLE `civicrm_pcp` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_cxn` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Connection ID', - `app_guid` varchar(128) COMMENT 'Application GUID', - `app_meta` text COMMENT 'Application Metadata (JSON)', - `cxn_guid` varchar(128) COMMENT 'Connection GUID', - `secret` text COMMENT 'Shared secret', - `perm` text COMMENT 'Permissions approved for the service (JSON)', - `options` text COMMENT 'Options for the service (JSON)', - `is_active` tinyint DEFAULT 1 COMMENT 'Is connection currently enabled?', - `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the connection was created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the connection was created or modified.', - `fetched_date` timestamp NULL DEFAULT NULL COMMENT 'The last time the application metadata was fetched.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_appid`( - app_guid - ) - , UNIQUE INDEX `UI_keypair_cxnid`( - cxn_guid - ) - - -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Connection ID', + `app_guid` varchar(128) COMMENT 'Application GUID', + `app_meta` text COMMENT 'Application Metadata (JSON)', + `cxn_guid` varchar(128) COMMENT 'Connection GUID', + `secret` text COMMENT 'Shared secret', + `perm` text COMMENT 'Permissions approved for the service (JSON)', + `options` text COMMENT 'Options for the service (JSON)', + `is_active` tinyint DEFAULT 1 COMMENT 'Is connection currently enabled?', + `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the connection was created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the connection was created or modified.', + `fetched_date` timestamp NULL DEFAULT NULL COMMENT 'The last time the application metadata was fetched.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_appid`(app_guid), + UNIQUE INDEX `UI_keypair_cxnid`(cxn_guid) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1722,26 +1365,18 @@ CREATE TABLE `civicrm_cxn` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_cache` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `group_name` varchar(32) NOT NULL COMMENT 'group name for cache element, useful in cleaning cache elements', - `path` varchar(255) COMMENT 'Unique path name for cache element', - `data` longtext COMMENT 'data associated with this path', - `component_id` int unsigned COMMENT 'Component that this menu item belongs to', - `created_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the cache item created', - `expired_date` timestamp NULL DEFAULT NULL COMMENT 'When should the cache item expire' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_group_path_date`( - group_name - , path - , created_date - ) - -, CONSTRAINT FK_civicrm_cache_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `group_name` varchar(32) NOT NULL COMMENT 'group name for cache element, useful in cleaning cache elements', + `path` varchar(255) COMMENT 'Unique path name for cache element', + `data` longtext COMMENT 'data associated with this path', + `component_id` int unsigned COMMENT 'Component that this menu item belongs to', + `created_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the cache item created', + `expired_date` timestamp NULL DEFAULT NULL COMMENT 'When should the cache item expire', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_group_path_date`(group_name, path, created_date), + CONSTRAINT FK_civicrm_cache_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1749,28 +1384,22 @@ CREATE TABLE `civicrm_cache` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_country` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Country ID', - `name` varchar(64) COMMENT 'Country Name', - `iso_code` char(2) COMMENT 'ISO Code', - `country_code` varchar(4) COMMENT 'National prefix to be used when dialing TO this country.', - `address_format_id` int unsigned COMMENT 'Foreign key to civicrm_address_format.id.', - `idd_prefix` varchar(4) COMMENT 'International direct dialing prefix from within the country TO another country', - `ndd_prefix` varchar(4) COMMENT 'Access prefix to call within a country to a different area', - `region_id` int unsigned NOT NULL COMMENT 'Foreign key to civicrm_worldregion.id.', - `is_province_abbreviated` tinyint DEFAULT 0 COMMENT 'Should state/province be displayed as abbreviation for contacts from this country?', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this Country active?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name_iso_code`( - name - , iso_code - ) - -, CONSTRAINT FK_civicrm_country_address_format_id FOREIGN KEY (`address_format_id`) REFERENCES `civicrm_address_format`(`id`) , CONSTRAINT FK_civicrm_country_region_id FOREIGN KEY (`region_id`) REFERENCES `civicrm_worldregion`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Country ID', + `name` varchar(64) COMMENT 'Country Name', + `iso_code` char(2) COMMENT 'ISO Code', + `country_code` varchar(4) COMMENT 'National prefix to be used when dialing TO this country.', + `address_format_id` int unsigned COMMENT 'Foreign key to civicrm_address_format.id.', + `idd_prefix` varchar(4) COMMENT 'International direct dialing prefix from within the country TO another country', + `ndd_prefix` varchar(4) COMMENT 'Access prefix to call within a country to a different area', + `region_id` int unsigned NOT NULL COMMENT 'Foreign key to civicrm_worldregion.id.', + `is_province_abbreviated` tinyint DEFAULT 0 COMMENT 'Should state/province be displayed as abbreviation for contacts from this country?', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this Country active?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name_iso_code`(name, iso_code), + CONSTRAINT FK_civicrm_country_address_format_id FOREIGN KEY (`address_format_id`) REFERENCES `civicrm_address_format`(`id`), + CONSTRAINT FK_civicrm_country_region_id FOREIGN KEY (`region_id`) REFERENCES `civicrm_worldregion`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1781,44 +1410,34 @@ CREATE TABLE `civicrm_country` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_custom_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Custom Group ID', - `name` varchar(64) COMMENT 'Variable name/programmatic handle for this group.', - `title` varchar(64) NOT NULL COMMENT 'Friendly Name.', - `extends` varchar(255) DEFAULT 'Contact' COMMENT 'Type of object this group extends (can add other options later e.g. contact_address, etc.).', - `extends_entity_column_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_option_value.id (for option group custom_data_type.)', - `extends_entity_column_value` varchar(255) COMMENT 'linking custom group for dynamic object', - `style` varchar(15) COMMENT 'Visual relationship between this form and its parent.', - `collapse_display` tinyint DEFAULT 0 COMMENT 'Will this group be in collapsed or expanded mode on initial display ?', - `help_pre` text COMMENT 'Description and/or help text to display before fields in form.', - `help_post` text COMMENT 'Description and/or help text to display after fields in form.', - `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls display order when multiple extended property groups are setup for the same class.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this property active?', - `table_name` varchar(255) COMMENT 'Name of the table that holds the values for this group.', - `is_multiple` tinyint DEFAULT 0 COMMENT 'Does this group hold multiple values?', - `min_multiple` int unsigned COMMENT 'minimum number of multiple records (typically 0?)', - `max_multiple` int unsigned COMMENT 'maximum number of multiple records, if 0 - no max', - `collapse_adv_display` tinyint DEFAULT 0 COMMENT 'Will this group be in collapsed or expanded mode on advanced search display ?', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this custom group', - `created_date` datetime COMMENT 'Date and time this custom group was created.', - `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a reserved Custom Group?', - `is_public` tinyint DEFAULT 1 COMMENT 'Is this property public?', - `icon` varchar(255) DEFAULT NULL COMMENT 'crm-i icon class' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_title_extends`( - title - , extends - ) - , UNIQUE INDEX `UI_name_extends`( - name - , extends - ) - -, CONSTRAINT FK_civicrm_custom_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Custom Group ID', + `name` varchar(64) COMMENT 'Variable name/programmatic handle for this group.', + `title` varchar(64) NOT NULL COMMENT 'Friendly Name.', + `extends` varchar(255) DEFAULT 'Contact' COMMENT 'Type of object this group extends (can add other options later e.g. contact_address, etc.).', + `extends_entity_column_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_option_value.id (for option group custom_data_type.)', + `extends_entity_column_value` varchar(255) COMMENT 'linking custom group for dynamic object', + `style` varchar(15) COMMENT 'Visual relationship between this form and its parent.', + `collapse_display` tinyint DEFAULT 0 COMMENT 'Will this group be in collapsed or expanded mode on initial display ?', + `help_pre` text COMMENT 'Description and/or help text to display before fields in form.', + `help_post` text COMMENT 'Description and/or help text to display after fields in form.', + `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls display order when multiple extended property groups are setup for the same class.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this property active?', + `table_name` varchar(255) COMMENT 'Name of the table that holds the values for this group.', + `is_multiple` tinyint DEFAULT 0 COMMENT 'Does this group hold multiple values?', + `min_multiple` int unsigned COMMENT 'minimum number of multiple records (typically 0?)', + `max_multiple` int unsigned COMMENT 'maximum number of multiple records, if 0 - no max', + `collapse_adv_display` tinyint DEFAULT 0 COMMENT 'Will this group be in collapsed or expanded mode on advanced search display ?', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this custom group', + `created_date` datetime COMMENT 'Date and time this custom group was created.', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a reserved Custom Group?', + `is_public` tinyint DEFAULT 1 COMMENT 'Is this property public?', + `icon` varchar(255) DEFAULT NULL COMMENT 'crm-i icon class', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_title_extends`(title, extends), + UNIQUE INDEX `UI_name_extends`(name, extends), + CONSTRAINT FK_civicrm_custom_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1828,53 +1447,44 @@ CREATE TABLE `civicrm_custom_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_custom_field` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Custom Field ID', - `custom_group_id` int unsigned NOT NULL COMMENT 'FK to civicrm_custom_group.', - `name` varchar(64) COMMENT 'Variable name/programmatic handle for this group.', - `label` varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this custom property).', - `data_type` varchar(16) NOT NULL COMMENT 'Controls location of data storage in extended_data table.', - `html_type` varchar(32) NOT NULL COMMENT 'HTML types plus several built-in extended types.', - `default_value` varchar(255) COMMENT 'Use form_options.is_default for field_types which use options.', - `is_required` tinyint DEFAULT 0 COMMENT 'Is a value required for this property.', - `is_searchable` tinyint DEFAULT 0 COMMENT 'Is this property searchable.', - `is_search_range` tinyint DEFAULT 0 COMMENT 'Is this property range searchable.', - `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls field display order within an extended property group.', - `help_pre` text COMMENT 'Description and/or help text to display before this field.', - `help_post` text COMMENT 'Description and/or help text to display after this field.', - `mask` varchar(64) COMMENT 'Optional format instructions for specific field types, like date types.', - `attributes` varchar(255) COMMENT 'Store collection of type-appropriate attributes, e.g. textarea needs rows/cols attributes', - `javascript` varchar(255) COMMENT 'Optional scripting attributes for field.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this property active?', - `is_view` tinyint DEFAULT 0 COMMENT 'Is this property set by PHP Code? A code field is viewable but not editable', - `options_per_line` int unsigned COMMENT 'number of options per line for checkbox and radio', - `text_length` int unsigned COMMENT 'field length if alphanumeric', - `start_date_years` int COMMENT 'Date may be up to start_date_years years prior to the current date.', - `end_date_years` int COMMENT 'Date may be up to end_date_years years after the current date.', - `date_format` varchar(64) COMMENT 'date format for custom date', - `time_format` int unsigned COMMENT 'time format for custom date', - `note_columns` int unsigned COMMENT 'Number of columns in Note Field', - `note_rows` int unsigned COMMENT 'Number of rows in Note Field', - `column_name` varchar(255) COMMENT 'Name of the column that holds the values for this field.', - `option_group_id` int unsigned COMMENT 'For elements with options, the option group id that is used', - `serialize` int unsigned NOT NULL DEFAULT 0 COMMENT 'Serialization method - a non-zero value indicates a multi-valued field.', - `filter` varchar(255) COMMENT 'Stores Contact Get API params contact reference custom fields. May be used for other filters in the future.', - `in_selector` tinyint DEFAULT 0 COMMENT 'Should the multi-record custom field values be displayed in tab table listing' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_label_custom_group_id`( - label - , custom_group_id - ) - , UNIQUE INDEX `UI_name_custom_group_id`( - name - , custom_group_id - ) - -, CONSTRAINT FK_civicrm_custom_field_custom_group_id FOREIGN KEY (`custom_group_id`) REFERENCES `civicrm_custom_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_custom_field_option_group_id FOREIGN KEY (`option_group_id`) REFERENCES `civicrm_option_group`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Custom Field ID', + `custom_group_id` int unsigned NOT NULL COMMENT 'FK to civicrm_custom_group.', + `name` varchar(64) COMMENT 'Variable name/programmatic handle for this field.', + `label` varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this custom property).', + `data_type` varchar(16) NOT NULL COMMENT 'Controls location of data storage in extended_data table.', + `html_type` varchar(32) NOT NULL COMMENT 'HTML types plus several built-in extended types.', + `default_value` varchar(255) COMMENT 'Use form_options.is_default for field_types which use options.', + `is_required` tinyint DEFAULT 0 COMMENT 'Is a value required for this property.', + `is_searchable` tinyint DEFAULT 0 COMMENT 'Is this property searchable.', + `is_search_range` tinyint DEFAULT 0 COMMENT 'Is this property range searchable.', + `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls field display order within an extended property group.', + `help_pre` text COMMENT 'Description and/or help text to display before this field.', + `help_post` text COMMENT 'Description and/or help text to display after this field.', + `mask` varchar(64) COMMENT 'Optional format instructions for specific field types, like date types.', + `attributes` varchar(255) COMMENT 'Store collection of type-appropriate attributes, e.g. textarea needs rows/cols attributes', + `javascript` varchar(255) COMMENT 'Optional scripting attributes for field.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this property active?', + `is_view` tinyint DEFAULT 0 COMMENT 'Is this property set by PHP Code? A code field is viewable but not editable', + `options_per_line` int unsigned COMMENT 'number of options per line for checkbox and radio', + `text_length` int unsigned COMMENT 'field length if alphanumeric', + `start_date_years` int COMMENT 'Date may be up to start_date_years years prior to the current date.', + `end_date_years` int COMMENT 'Date may be up to end_date_years years after the current date.', + `date_format` varchar(64) COMMENT 'date format for custom date', + `time_format` int unsigned COMMENT 'time format for custom date', + `note_columns` int unsigned COMMENT 'Number of columns in Note Field', + `note_rows` int unsigned COMMENT 'Number of rows in Note Field', + `column_name` varchar(255) COMMENT 'Name of the column that holds the values for this field.', + `option_group_id` int unsigned COMMENT 'For elements with options, the option group id that is used', + `serialize` int unsigned NOT NULL DEFAULT 0 COMMENT 'Serialization method - a non-zero value indicates a multi-valued field.', + `filter` varchar(255) COMMENT 'Stores Contact Get API params contact reference custom fields. May be used for other filters in the future.', + `in_selector` tinyint DEFAULT 0 COMMENT 'Should the multi-record custom field values be displayed in tab table listing', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_label_custom_group_id`(label, custom_group_id), + UNIQUE INDEX `UI_name_custom_group_id`(name, custom_group_id), + CONSTRAINT FK_civicrm_custom_field_custom_group_id FOREIGN KEY (`custom_group_id`) REFERENCES `civicrm_custom_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_custom_field_option_group_id FOREIGN KEY (`option_group_id`) REFERENCES `civicrm_option_group`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1884,24 +1494,18 @@ CREATE TABLE `civicrm_custom_field` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_domain` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Domain ID', - `name` varchar(64) COMMENT 'Name of Domain / Organization', - `description` varchar(255) COMMENT 'Description of Domain.', - `version` varchar(32) COMMENT 'The civicrm version this instance is running', - `contact_id` int unsigned COMMENT 'FK to Contact ID. This is specifically not an FK to avoid circular constraints', - `locales` text COMMENT 'list of locales supported by the current db state (NULL for single-lang install)', - `locale_custom_strings` text COMMENT 'Locale specific string overrides' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_domain_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Domain ID', + `name` varchar(64) COMMENT 'Name of Domain / Organization', + `description` varchar(255) COMMENT 'Description of Domain.', + `version` varchar(32) COMMENT 'The civicrm version this instance is running', + `contact_id` int unsigned COMMENT 'FK to Contact ID. This is specifically not an FK to avoid circular constraints', + `locales` text COMMENT 'list of locales supported by the current db state (NULL for single-lang install)', + `locale_custom_strings` text COMMENT 'Locale specific string overrides', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_domain_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1911,38 +1515,26 @@ CREATE TABLE `civicrm_domain` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_email` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Email ID', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', - `email` varchar(254) COMMENT 'Email address', - `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary email address', - `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?', - `on_hold` int unsigned NOT NULL DEFAULT 0 COMMENT 'Implicit FK to civicrm_option_value where option_group = email_on_hold.', - `is_bulkmail` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this address for bulk mail ?', - `hold_date` datetime COMMENT 'When the address went on bounce hold', - `reset_date` datetime COMMENT 'When the address bounce status was last reset', - `signature_text` text DEFAULT NULL COMMENT 'Text formatted signature for the email.', - `signature_html` text DEFAULT NULL COMMENT 'HTML formatted signature for the email.' -, - PRIMARY KEY (`id`) - - , INDEX `index_location_type`( - location_type_id - ) - , INDEX `UI_email`( - email - ) - , INDEX `index_is_primary`( - is_primary - ) - , INDEX `index_is_billing`( - is_billing - ) - -, CONSTRAINT FK_civicrm_email_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Email ID', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', + `email` varchar(254) COMMENT 'Email address', + `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary email address', + `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?', + `on_hold` int unsigned NOT NULL DEFAULT 0 COMMENT 'Implicit FK to civicrm_option_value where option_group = email_on_hold.', + `is_bulkmail` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this address for bulk mail ?', + `hold_date` datetime COMMENT 'When the address went on bounce hold', + `reset_date` datetime COMMENT 'When the address bounce status was last reset', + `signature_text` text DEFAULT NULL COMMENT 'Text formatted signature for the email.', + `signature_html` text DEFAULT NULL COMMENT 'HTML formatted signature for the email.', + PRIMARY KEY (`id`), + INDEX `index_location_type`(location_type_id), + INDEX `UI_email`(email), + INDEX `index_is_primary`(is_primary), + INDEX `index_is_billing`(is_billing), + CONSTRAINT FK_civicrm_email_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1952,22 +1544,18 @@ CREATE TABLE `civicrm_email` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_file` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID', - `file_type_id` int unsigned COMMENT 'Type of file (e.g. Transcript, Income Tax Return, etc). FK to civicrm_option_value.', - `mime_type` varchar(255) COMMENT 'mime type of the document', - `uri` varchar(255) COMMENT 'uri of the file on disk', - `document` mediumblob COMMENT 'contents of the document', - `description` varchar(255) COMMENT 'Additional descriptive text regarding this attachment (optional).', - `upload_date` datetime COMMENT 'Date and time that this attachment was uploaded or written to server.', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who uploaded this file' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_file_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID', + `file_type_id` int unsigned COMMENT 'Type of file (e.g. Transcript, Income Tax Return, etc). FK to civicrm_option_value.', + `mime_type` varchar(255) COMMENT 'mime type of the document', + `uri` varchar(255) COMMENT 'uri of the file on disk', + `document` mediumblob COMMENT 'contents of the document', + `description` varchar(255) COMMENT 'Additional descriptive text regarding this attachment (optional).', + `upload_date` datetime COMMENT 'Date and time that this attachment was uploaded or written to server.', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who uploaded this file', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_file_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -1977,33 +1565,21 @@ CREATE TABLE `civicrm_file` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_im` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique IM ID', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', - `name` varchar(64) COMMENT 'IM screen name', - `provider_id` int unsigned COMMENT 'Which IM Provider does this screen name belong to.', - `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary IM for this contact and location.', - `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?' -, - PRIMARY KEY (`id`) - - , INDEX `index_location_type`( - location_type_id - ) - , INDEX `UI_provider_id`( - provider_id - ) - , INDEX `index_is_primary`( - is_primary - ) - , INDEX `index_is_billing`( - is_billing - ) - -, CONSTRAINT FK_civicrm_im_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique IM ID', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', + `name` varchar(64) COMMENT 'IM screen name', + `provider_id` int unsigned COMMENT 'Which IM Provider does this screen name belong to.', + `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary IM for this contact and location.', + `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?', + PRIMARY KEY (`id`), + INDEX `index_location_type`(location_type_id), + INDEX `UI_provider_id`(provider_id), + INDEX `index_is_primary`(is_primary), + INDEX `index_is_billing`(is_billing), + CONSTRAINT FK_civicrm_im_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2013,25 +1589,21 @@ CREATE TABLE `civicrm_im` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_job` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Job ID', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this scheduled job for', - `run_frequency` varchar(8) DEFAULT "Daily" COMMENT 'Scheduled job run frequency.', - `last_run` timestamp NULL DEFAULT NULL COMMENT 'When was this cron entry last run', - `scheduled_run_date` timestamp NULL DEFAULT NULL COMMENT 'When is this cron entry scheduled to run', - `name` varchar(255) COMMENT 'Title of the job', - `description` varchar(255) COMMENT 'Description of the job', - `api_entity` varchar(255) COMMENT 'Entity of the job api call', - `api_action` varchar(255) COMMENT 'Action of the job api call', - `parameters` text COMMENT 'List of parameters to the command.', - `is_active` tinyint COMMENT 'Is this job active?' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_job_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Job ID', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this scheduled job for', + `run_frequency` varchar(8) DEFAULT "Daily" COMMENT 'Scheduled job run frequency.', + `last_run` timestamp NULL DEFAULT NULL COMMENT 'When was this cron entry last run', + `scheduled_run_date` timestamp NULL DEFAULT NULL COMMENT 'When is this cron entry scheduled to run', + `name` varchar(255) COMMENT 'Title of the job', + `description` varchar(255) COMMENT 'Description of the job', + `api_entity` varchar(255) COMMENT 'Entity of the job api call', + `api_action` varchar(255) COMMENT 'Action of the job api call', + `parameters` text COMMENT 'List of parameters to the command.', + `is_active` tinyint COMMENT 'Is this job active?', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_job_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2041,22 +1613,18 @@ CREATE TABLE `civicrm_job` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_job_log` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Job log entry ID', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this scheduled job for', - `run_time` timestamp COMMENT 'Log entry date', - `job_id` int unsigned COMMENT 'Pointer to job id - not a FK though, just for logging purposes', - `name` varchar(255) COMMENT 'Title of the job', - `command` varchar(255) COMMENT 'Full path to file containing job script', - `description` varchar(255) COMMENT 'Title line of log entry', - `data` text COMMENT 'Potential extended data for specific job run (e.g. tracebacks).' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_job_log_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Job log entry ID', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this scheduled job for', + `run_time` timestamp COMMENT 'Log entry date', + `job_id` int unsigned COMMENT 'Pointer to job id - not a FK though, just for logging purposes', + `name` varchar(255) COMMENT 'Title of the job', + `command` varchar(255) COMMENT 'Full path to file containing job script', + `description` varchar(255) COMMENT 'Title line of log entry', + `data` text COMMENT 'Potential extended data for specific job run (e.g. tracebacks).', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_job_log_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2066,24 +1634,17 @@ CREATE TABLE `civicrm_job_log` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_log` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Log ID', - `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', - `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', - `data` text COMMENT 'Updates does to this object if any.', - `modified_id` int unsigned COMMENT 'FK to Contact ID of person under whose credentials this data modification was made.', - `modified_date` datetime COMMENT 'When was the referenced entity created or modified or deleted.' -, - PRIMARY KEY (`id`) - - , INDEX `index_entity`( - entity_table - , entity_id - ) - -, CONSTRAINT FK_civicrm_log_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Log ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', + `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', + `data` text COMMENT 'Updates does to this object if any.', + `modified_id` int unsigned COMMENT 'FK to Contact ID of person under whose credentials this data modification was made.', + `modified_date` datetime COMMENT 'When was the referenced entity created or modified or deleted.', + PRIMARY KEY (`id`), + INDEX `index_entity`(entity_table, entity_id), + CONSTRAINT FK_civicrm_log_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2093,31 +1654,27 @@ CREATE TABLE `civicrm_log` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mail_settings` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', - `name` varchar(255) COMMENT 'name of this group of settings', - `is_default` tinyint COMMENT 'whether this is the default set of settings for this domain', - `domain` varchar(255) COMMENT 'email address domain (the part after @)', - `localpart` varchar(255) COMMENT 'optional local part (like civimail+ for addresses like civimail+s.1.2@example.com)', - `return_path` varchar(255) COMMENT 'contents of the Return-Path header', - `protocol` varchar(255) COMMENT 'name of the protocol to use for polling (like IMAP, POP3 or Maildir)', - `server` varchar(255) COMMENT 'server to use when polling', - `port` int unsigned COMMENT 'port to use when polling', - `username` varchar(255) COMMENT 'username to use when polling', - `password` varchar(255) COMMENT 'password to use when polling', - `is_ssl` tinyint COMMENT 'whether to use SSL or not', - `source` varchar(255) COMMENT 'folder to poll from when using IMAP, path to poll from when using Maildir, etc.', - `activity_status` varchar(255) COMMENT 'Name of status to use when creating email to activity.', - `is_non_case_email_skipped` tinyint DEFAULT 0 COMMENT 'Enabling this option will have CiviCRM skip any emails that do not have the Case ID or Case Hash so that the system will only process emails that can be placed on case records. Any emails that are not processed will be moved to the ignored folder.', - `is_contact_creation_disabled_if_no_match` tinyint DEFAULT 0 -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mail_settings_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', + `name` varchar(255) COMMENT 'name of this group of settings', + `is_default` tinyint COMMENT 'whether this is the default set of settings for this domain', + `domain` varchar(255) COMMENT 'email address domain (the part after @)', + `localpart` varchar(255) COMMENT 'optional local part (like civimail+ for addresses like civimail+s.1.2@example.com)', + `return_path` varchar(255) COMMENT 'contents of the Return-Path header', + `protocol` varchar(255) COMMENT 'name of the protocol to use for polling (like IMAP, POP3 or Maildir)', + `server` varchar(255) COMMENT 'server to use when polling', + `port` int unsigned COMMENT 'port to use when polling', + `username` varchar(255) COMMENT 'username to use when polling', + `password` varchar(255) COMMENT 'password to use when polling', + `is_ssl` tinyint COMMENT 'whether to use SSL or not', + `source` varchar(255) COMMENT 'folder to poll from when using IMAP, path to poll from when using Maildir, etc.', + `activity_status` varchar(255) COMMENT 'Name of status to use when creating email to activity.', + `is_non_case_email_skipped` tinyint DEFAULT 0 COMMENT 'Enabling this option will have CiviCRM skip any emails that do not have the Case ID or Case Hash so that the system will only process emails that can be placed on case records. Any emails that are not processed will be moved to the ignored folder.', + `is_contact_creation_disabled_if_no_match` tinyint DEFAULT 0, + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mail_settings_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2127,28 +1684,26 @@ CREATE TABLE `civicrm_mail_settings` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mapping_field` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Mapping Field ID', - `mapping_id` int unsigned NOT NULL COMMENT 'Mapping to which this field belongs', - `name` varchar(255) COMMENT 'Mapping field key', - `contact_type` varchar(64) COMMENT 'Contact Type in mapping', - `column_number` int unsigned NOT NULL COMMENT 'Column number for mapping set', - `location_type_id` int unsigned COMMENT 'Location type of this mapping, if required', - `phone_type_id` int unsigned COMMENT 'Which type of phone does this number belongs.', - `im_provider_id` int unsigned COMMENT 'Which type of IM Provider does this name belong.', - `website_type_id` int unsigned COMMENT 'Which type of website does this site belong', - `relationship_type_id` int unsigned COMMENT 'Relationship type, if required', - `relationship_direction` varchar(6) , - `grouping` int unsigned DEFAULT 1 COMMENT 'Used to group mapping_field records into related sets (e.g. for criteria sets in search builder\n mappings).', - `operator` varchar(16) COMMENT 'SQL WHERE operator for search-builder mapping fields (search criteria).', - `value` varchar(255) COMMENT 'SQL WHERE value for search-builder mapping fields.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mapping_field_mapping_id FOREIGN KEY (`mapping_id`) REFERENCES `civicrm_mapping`(`id`) , CONSTRAINT FK_civicrm_mapping_field_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`) , CONSTRAINT FK_civicrm_mapping_field_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Mapping Field ID', + `mapping_id` int unsigned NOT NULL COMMENT 'Mapping to which this field belongs', + `name` varchar(255) COMMENT 'Mapping field key', + `contact_type` varchar(64) COMMENT 'Contact Type in mapping', + `column_number` int unsigned NOT NULL COMMENT 'Column number for mapping set', + `location_type_id` int unsigned COMMENT 'Location type of this mapping, if required', + `phone_type_id` int unsigned COMMENT 'Which type of phone does this number belongs.', + `im_provider_id` int unsigned COMMENT 'Which type of IM Provider does this name belong.', + `website_type_id` int unsigned COMMENT 'Which type of website does this site belong', + `relationship_type_id` int unsigned COMMENT 'Relationship type, if required', + `relationship_direction` varchar(6), + `grouping` int unsigned DEFAULT 1 COMMENT 'Used to group mapping_field records into related sets (e.g. for criteria sets in search builder\n mappings).', + `operator` varchar(16) COMMENT 'SQL WHERE operator for search-builder mapping fields (search criteria).', + `value` varchar(255) COMMENT 'SQL WHERE value for search-builder mapping fields.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mapping_field_mapping_id FOREIGN KEY (`mapping_id`) REFERENCES `civicrm_mapping`(`id`), + CONSTRAINT FK_civicrm_mapping_field_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`), + CONSTRAINT FK_civicrm_mapping_field_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2158,40 +1713,34 @@ CREATE TABLE `civicrm_mapping_field` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_menu` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this menu item for', - `path` varchar(255) COMMENT 'Path Name', - `path_arguments` text COMMENT 'Arguments to pass to the url', - `title` varchar(255) , - `access_callback` varchar(255) COMMENT 'Function to call to check access permissions', - `access_arguments` text COMMENT 'Arguments to pass to access callback', - `page_callback` varchar(255) COMMENT 'function to call for this url', - `page_arguments` text COMMENT 'Arguments to pass to page callback', - `breadcrumb` text COMMENT 'Breadcrumb for the path.', - `return_url` varchar(255) COMMENT 'Url where a page should redirected to, if next url not known.', - `return_url_args` varchar(255) COMMENT 'Arguments to pass to return_url', - `component_id` int unsigned COMMENT 'Component that this menu item belongs to', - `is_active` tinyint COMMENT 'Is this menu item active?', - `is_public` tinyint COMMENT 'Is this menu accessible to the public?', - `is_exposed` tinyint COMMENT 'Is this menu exposed to the navigation system?', - `is_ssl` tinyint COMMENT 'Should this menu be exposed via SSL if enabled?', - `weight` int NOT NULL DEFAULT 1 COMMENT 'Ordering of the menu items in various blocks.', - `type` int NOT NULL DEFAULT 1 COMMENT 'Drupal menu type.', - `page_type` int NOT NULL DEFAULT 1 COMMENT 'CiviCRM menu type.', - `skipBreadcrumb` tinyint COMMENT 'skip this url being exposed to breadcrumb', - `module_data` text COMMENT 'All other menu metadata not stored in other fields' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_path_domain_id`( - path - , domain_id - ) - -, CONSTRAINT FK_civicrm_menu_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_menu_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this menu item for', + `path` varchar(255) COMMENT 'Path Name', + `path_arguments` text COMMENT 'Arguments to pass to the url', + `title` varchar(255), + `access_callback` varchar(255) COMMENT 'Function to call to check access permissions', + `access_arguments` text COMMENT 'Arguments to pass to access callback', + `page_callback` varchar(255) COMMENT 'function to call for this url', + `page_arguments` text COMMENT 'Arguments to pass to page callback', + `breadcrumb` text COMMENT 'Breadcrumb for the path.', + `return_url` varchar(255) COMMENT 'Url where a page should redirected to, if next url not known.', + `return_url_args` varchar(255) COMMENT 'Arguments to pass to return_url', + `component_id` int unsigned COMMENT 'Component that this menu item belongs to', + `is_active` tinyint COMMENT 'Is this menu item active?', + `is_public` tinyint COMMENT 'Is this menu accessible to the public?', + `is_exposed` tinyint COMMENT 'Is this menu exposed to the navigation system?', + `is_ssl` tinyint COMMENT 'Should this menu be exposed via SSL if enabled?', + `weight` int NOT NULL DEFAULT 1 COMMENT 'Ordering of the menu items in various blocks.', + `type` int NOT NULL DEFAULT 1 COMMENT 'Drupal menu type.', + `page_type` int NOT NULL DEFAULT 1 COMMENT 'CiviCRM menu type.', + `skipBreadcrumb` tinyint COMMENT 'skip this url being exposed to breadcrumb', + `module_data` text COMMENT 'All other menu metadata not stored in other fields', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_path_domain_id`(path, domain_id), + CONSTRAINT FK_civicrm_menu_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_menu_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2201,26 +1750,23 @@ CREATE TABLE `civicrm_menu` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_navigation` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this navigation item for', - `label` varchar(255) COMMENT 'Navigation Title', - `name` varchar(255) COMMENT 'Internal Name', - `url` varchar(255) COMMENT 'url in case of custom navigation link', - `icon` varchar(255) NULL DEFAULT NULL COMMENT 'CSS class name for an icon', - `permission` varchar(255) COMMENT 'Permission for menu item', - `permission_operator` varchar(3) COMMENT 'Permission Operator', - `parent_id` int unsigned COMMENT 'Parent navigation item, used for grouping', - `is_active` tinyint COMMENT 'Is this navigation item active?', - `has_separator` tinyint DEFAULT 0 COMMENT 'Place a separator either before or after this menu item.', - `weight` int COMMENT 'Ordering of the navigation items in various blocks.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_navigation_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_navigation_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_navigation`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this navigation item for', + `label` varchar(255) COMMENT 'Navigation Title', + `name` varchar(255) COMMENT 'Internal Name', + `url` varchar(255) COMMENT 'url in case of custom navigation link', + `icon` varchar(255) NULL DEFAULT NULL COMMENT 'CSS class name for an icon', + `permission` varchar(255) COMMENT 'Permission for menu item', + `permission_operator` varchar(3) COMMENT 'Permission Operator', + `parent_id` int unsigned COMMENT 'Parent navigation item, used for grouping', + `is_active` tinyint COMMENT 'Is this navigation item active?', + `has_separator` tinyint DEFAULT 0 COMMENT 'Place a separator either before or after this menu item.', + `weight` int COMMENT 'Ordering of the navigation items in various blocks.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_navigation_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_navigation_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_navigation`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2230,28 +1776,21 @@ CREATE TABLE `civicrm_navigation` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_note` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Note ID', - `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', - `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', - `note` text COMMENT 'Note and/or Comment.', - `contact_id` int unsigned COMMENT 'FK to Contact ID creator', - `note_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Date attached to the note', - `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the note was created.', - `modified_date` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was this note last modified/edited', - `subject` varchar(255) COMMENT 'subject of note description', - `privacy` varchar(255) COMMENT 'Foreign Key to Note Privacy Level (which is an option value pair and hence an implicit FK)' -, - PRIMARY KEY (`id`) - - , INDEX `index_entity`( - entity_table - , entity_id - ) - -, CONSTRAINT FK_civicrm_note_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Note ID', + `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', + `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', + `note` text COMMENT 'Note and/or Comment.', + `contact_id` int unsigned COMMENT 'FK to Contact ID creator', + `note_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Date attached to the note', + `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the note was created.', + `modified_date` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was this note last modified/edited', + `subject` varchar(255) COMMENT 'subject of note description', + `privacy` varchar(255) COMMENT 'Foreign Key to Note Privacy Level (which is an option value pair and hence an implicit FK)', + PRIMARY KEY (`id`), + INDEX `index_entity`(entity_table, entity_id), + CONSTRAINT FK_civicrm_note_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2259,40 +1798,32 @@ CREATE TABLE `civicrm_note` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_option_value` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Option ID', - `option_group_id` int unsigned NOT NULL COMMENT 'Group which this option belongs to.', - `label` varchar(512) NOT NULL COMMENT 'Option string as displayed to users - e.g. the label in an HTML OPTION tag.', - `value` varchar(512) NOT NULL 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.', - `name` varchar(255) 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.', - `grouping` varchar(255) 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.', - `filter` int unsigned DEFAULT 0 COMMENT 'Bitwise logic can be used to create subsets of options within an option_group for different uses.', - `is_default` tinyint DEFAULT 0 COMMENT 'Is this the default option for the group?', - `weight` int unsigned NOT NULL COMMENT 'Controls display sort order.', - `description` text COMMENT 'Optional description.', - `is_optgroup` tinyint DEFAULT 0 COMMENT 'Is this row simply a display header? Expected usage is to render these as OPTGROUP tags within a SELECT field list of options?', - `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a predefined system object?', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this option active?', - `component_id` int unsigned COMMENT 'Component that this option value belongs/caters to.', - `domain_id` int unsigned COMMENT 'Which Domain is this option value for', - `visibility_id` int unsigned DEFAULT NULL , - `icon` varchar(255) DEFAULT NULL COMMENT 'crm-i icon class', - `color` varchar(255) DEFAULT NULL COMMENT 'Hex color value e.g. #ffffff' -, - PRIMARY KEY (`id`) - - , INDEX `index_option_group_id_value`( - value(128) - , option_group_id - ) - , INDEX `index_option_group_id_name`( - name(128) - , option_group_id - ) - -, CONSTRAINT FK_civicrm_option_value_option_group_id FOREIGN KEY (`option_group_id`) REFERENCES `civicrm_option_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_option_value_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`) , CONSTRAINT FK_civicrm_option_value_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Option ID', + `option_group_id` int unsigned NOT NULL COMMENT 'Group which this option belongs to.', + `label` varchar(512) NOT NULL COMMENT 'Option string as displayed to users - e.g. the label in an HTML OPTION tag.', + `value` varchar(512) NOT NULL 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.', + `name` varchar(255) 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.', + `grouping` varchar(255) 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.', + `filter` int unsigned DEFAULT 0 COMMENT 'Bitwise logic can be used to create subsets of options within an option_group for different uses.', + `is_default` tinyint DEFAULT 0 COMMENT 'Is this the default option for the group?', + `weight` int unsigned NOT NULL COMMENT 'Controls display sort order.', + `description` text COMMENT 'Optional description.', + `is_optgroup` tinyint DEFAULT 0 COMMENT 'Is this row simply a display header? Expected usage is to render these as OPTGROUP tags within a SELECT field list of options?', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a predefined system object?', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this option active?', + `component_id` int unsigned COMMENT 'Component that this option value belongs/caters to.', + `domain_id` int unsigned COMMENT 'Which Domain is this option value for', + `visibility_id` int unsigned DEFAULT NULL, + `icon` varchar(255) DEFAULT NULL COMMENT 'crm-i icon class', + `color` varchar(255) DEFAULT NULL COMMENT 'Hex color value e.g. #ffffff', + PRIMARY KEY (`id`), + INDEX `index_option_group_id_value`(value(128), option_group_id), + INDEX `index_option_group_id_name`(name(128), option_group_id), + CONSTRAINT FK_civicrm_option_value_option_group_id FOREIGN KEY (`option_group_id`) REFERENCES `civicrm_option_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_option_value_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`), + CONSTRAINT FK_civicrm_option_value_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2302,39 +1833,25 @@ CREATE TABLE `civicrm_option_value` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_phone` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Phone ID', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `location_type_id` int unsigned COMMENT 'Which Location does this phone belong to.', - `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary phone for this contact and location.', - `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?', - `mobile_provider_id` int unsigned COMMENT 'Which Mobile Provider does this phone belong to.', - `phone` varchar(32) COMMENT 'Complete phone number.', - `phone_ext` varchar(16) COMMENT 'Optional extension for a phone number.', - `phone_numeric` varchar(32) COMMENT 'Phone number stripped of all whitespace, letters, and punctuation.', - `phone_type_id` int unsigned COMMENT 'Which type of phone does this number belongs.' -, - PRIMARY KEY (`id`) - - , INDEX `index_location_type`( - location_type_id - ) - , INDEX `index_is_primary`( - is_primary - ) - , INDEX `index_is_billing`( - is_billing - ) - , INDEX `UI_mobile_provider_id`( - mobile_provider_id - ) - , INDEX `index_phone_numeric`( - phone_numeric - ) - -, CONSTRAINT FK_civicrm_phone_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Phone ID', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `location_type_id` int unsigned COMMENT 'Which Location does this phone belong to.', + `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary phone for this contact and location.', + `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?', + `mobile_provider_id` int unsigned COMMENT 'Which Mobile Provider does this phone belong to.', + `phone` varchar(32) COMMENT 'Complete phone number.', + `phone_ext` varchar(16) COMMENT 'Optional extension for a phone number.', + `phone_numeric` varchar(32) COMMENT 'Phone number stripped of all whitespace, letters, and punctuation.', + `phone_type_id` int unsigned COMMENT 'Which type of phone does this number belongs.', + PRIMARY KEY (`id`), + INDEX `index_location_type`(location_type_id), + INDEX `index_is_primary`(is_primary), + INDEX `index_is_billing`(is_billing), + INDEX `UI_mobile_provider_id`(mobile_provider_id), + INDEX `index_phone_numeric`(phone_numeric), + CONSTRAINT FK_civicrm_phone_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2342,23 +1859,16 @@ CREATE TABLE `civicrm_phone` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_state_province` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'State/Province ID', - `name` varchar(64) COMMENT 'Name of State/Province', - `abbreviation` varchar(4) COMMENT '2-4 Character Abbreviation of State/Province', - `country_id` int unsigned NOT NULL COMMENT 'ID of Country that State/Province belong', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this StateProvince active?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name_country_id`( - name - , country_id - ) - -, CONSTRAINT FK_civicrm_state_province_country_id FOREIGN KEY (`country_id`) REFERENCES `civicrm_country`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'State/Province ID', + `name` varchar(64) COMMENT 'Name of State/Province', + `abbreviation` varchar(4) COMMENT '2-4 Character Abbreviation of State/Province', + `country_id` int unsigned NOT NULL COMMENT 'ID of Country that State/Province belong', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this StateProvince active?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name_country_id`(name, country_id), + CONSTRAINT FK_civicrm_state_province_country_id FOREIGN KEY (`country_id`) REFERENCES `civicrm_country`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2368,28 +1878,23 @@ CREATE TABLE `civicrm_state_province` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_tag` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Tag ID', - `name` varchar(64) NOT NULL COMMENT 'Name of Tag.', - `description` varchar(255) COMMENT 'Optional verbose description of the tag.', - `parent_id` int unsigned DEFAULT NULL COMMENT 'Optional parent id for this tag.', - `is_selectable` tinyint DEFAULT 1 COMMENT 'Is this tag selectable / displayed', - `is_reserved` tinyint DEFAULT 0 , - `is_tagset` tinyint DEFAULT 0 , - `used_for` varchar(64) DEFAULT NULL , - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this tag', - `color` varchar(255) DEFAULT NULL COMMENT 'Hex color value e.g. #ffffff', - `created_date` datetime COMMENT 'Date and time that tag was created.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_tag_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_tag`(`id`) , CONSTRAINT FK_civicrm_tag_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Tag ID', + `name` varchar(64) NOT NULL COMMENT 'Name of Tag.', + `description` varchar(255) COMMENT 'Optional verbose description of the tag.', + `parent_id` int unsigned DEFAULT NULL COMMENT 'Optional parent id for this tag.', + `is_selectable` tinyint DEFAULT 1 COMMENT 'Is this tag selectable / displayed', + `is_reserved` tinyint DEFAULT 0, + `is_tagset` tinyint DEFAULT 0, + `used_for` varchar(64) DEFAULT NULL, + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this tag', + `color` varchar(255) DEFAULT NULL COMMENT 'Hex color value e.g. #ffffff', + `created_date` datetime COMMENT 'Date and time that tag was created.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_tag_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_tag`(`id`), + CONSTRAINT FK_civicrm_tag_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2399,31 +1904,20 @@ CREATE TABLE `civicrm_tag` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_uf_match` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'System generated ID.', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', - `uf_id` int unsigned NOT NULL COMMENT 'UF ID', - `uf_name` varchar(128) COMMENT 'UF Name', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `language` varchar(5) COMMENT 'UI language preferred by the given user/contact' -, - PRIMARY KEY (`id`) - - , INDEX `I_civicrm_uf_match_uf_id`( - uf_id - ) - , UNIQUE INDEX `UI_uf_name_domain_id`( - uf_name - , domain_id - ) - , UNIQUE INDEX `UI_contact_domain_id`( - contact_id - , domain_id - ) - -, CONSTRAINT FK_civicrm_uf_match_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_uf_match_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'System generated ID.', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', + `uf_id` int unsigned NOT NULL COMMENT 'UF ID', + `uf_name` varchar(128) COMMENT 'UF Name', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `language` varchar(5) COMMENT 'UI language preferred by the given user/contact', + PRIMARY KEY (`id`), + INDEX `I_civicrm_uf_match_uf_id`(uf_id), + UNIQUE INDEX `UI_uf_name_domain_id`(uf_name, domain_id), + UNIQUE INDEX `UI_contact_domain_id`(contact_id, domain_id), + CONSTRAINT FK_civicrm_uf_match_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_uf_match_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2431,20 +1925,16 @@ CREATE TABLE `civicrm_uf_match` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_timezone` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Timezone ID', - `name` varchar(64) COMMENT 'Timezone full name', - `abbreviation` char(3) COMMENT 'ISO Code for timezone abbreviation', - `gmt` varchar(64) COMMENT 'GMT name of the timezone', - `offset` int , - `country_id` int unsigned NOT NULL COMMENT 'Country ID' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_timezone_country_id FOREIGN KEY (`country_id`) REFERENCES `civicrm_country`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Timezone ID', + `name` varchar(64) COMMENT 'Timezone full name', + `abbreviation` char(3) COMMENT 'ISO Code for timezone abbreviation', + `gmt` varchar(64) COMMENT 'GMT name of the timezone', + `offset` int, + `country_id` int unsigned NOT NULL COMMENT 'Country ID', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_timezone_country_id FOREIGN KEY (`country_id`) REFERENCES `civicrm_country`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2454,26 +1944,18 @@ CREATE TABLE `civicrm_timezone` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_openid` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique OpenID ID', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', - `openid` varchar(255) COMMENT 'the OpenID (or OpenID-style http://username.domain/) unique identifier for this contact mainly used for logging in to CiviCRM', - `allowed_to_login` tinyint NOT NULL DEFAULT 0 COMMENT 'Whether or not this user is allowed to login', - `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary email for this contact and location.' -, - PRIMARY KEY (`id`) - - , INDEX `index_location_type`( - location_type_id - ) - , UNIQUE INDEX `UI_openid`( - openid - ) - -, CONSTRAINT FK_civicrm_openid_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique OpenID ID', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', + `openid` varchar(255) COMMENT 'the OpenID (or OpenID-style http://username.domain/) unique identifier for this contact mainly used for logging in to CiviCRM', + `allowed_to_login` tinyint NOT NULL DEFAULT 0 COMMENT 'Whether or not this user is allowed to login', + `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary email for this contact and location.', + PRIMARY KEY (`id`), + INDEX `index_location_type`(location_type_id), + UNIQUE INDEX `UI_openid`(openid), + CONSTRAINT FK_civicrm_openid_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2483,21 +1965,15 @@ CREATE TABLE `civicrm_openid` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_website` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Website ID', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `url` varchar(128) COMMENT 'Website', - `website_type_id` int unsigned COMMENT 'Which Website type does this website belong to.' -, - PRIMARY KEY (`id`) - - , INDEX `UI_website_type_id`( - website_type_id - ) - -, CONSTRAINT FK_civicrm_website_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Website ID', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `url` varchar(128) COMMENT 'Website', + `website_type_id` int unsigned COMMENT 'Which Website type does this website belong to.', + PRIMARY KEY (`id`), + INDEX `UI_website_type_id`(website_type_id), + CONSTRAINT FK_civicrm_website_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2507,28 +1983,23 @@ CREATE TABLE `civicrm_website` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_setting` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(255) COMMENT 'Unique name for setting', - `value` text COMMENT 'data associated with this group / name combo', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this menu item for', - `contact_id` int unsigned COMMENT 'FK to Contact ID if the setting is localized to a contact', - `is_domain` tinyint COMMENT 'Is this setting a contact specific or site wide setting?', - `component_id` int unsigned COMMENT 'Component that this menu item belongs to', - `created_date` datetime COMMENT 'When was the setting created', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this setting' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `index_domain_contact_name`( - domain_id - , contact_id - , name - ) - -, CONSTRAINT FK_civicrm_setting_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_setting_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_setting_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`) , CONSTRAINT FK_civicrm_setting_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) COMMENT 'Unique name for setting', + `value` text COMMENT 'data associated with this group / name combo', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this menu item for', + `contact_id` int unsigned COMMENT 'FK to Contact ID if the setting is localized to a contact', + `is_domain` tinyint COMMENT 'Is this setting a contact specific or site wide setting?', + `component_id` int unsigned COMMENT 'Component that this menu item belongs to', + `created_date` datetime COMMENT 'When was the setting created', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this setting', + PRIMARY KEY (`id`), + UNIQUE INDEX `index_domain_contact_name`(domain_id, contact_id, name), + CONSTRAINT FK_civicrm_setting_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_setting_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_setting_component_id FOREIGN KEY (`component_id`) REFERENCES `civicrm_component`(`id`), + CONSTRAINT FK_civicrm_setting_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2538,25 +2009,21 @@ CREATE TABLE `civicrm_setting` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_print_label` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `title` varchar(255) COMMENT 'User title for this label layout', - `name` varchar(255) COMMENT 'variable name/programmatic handle for this field.', - `description` text COMMENT 'Description of this label layout', - `label_format_name` varchar(255) COMMENT 'This refers to name column of civicrm_option_value row in name_badge option group', - `label_type_id` int unsigned COMMENT 'Implicit FK to civicrm_option_value row in NEW label_type option group', - `data` longtext COMMENT 'contains json encode configurations options', - `is_default` tinyint DEFAULT 1 COMMENT 'Is this default?', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this option active?', - `is_reserved` tinyint DEFAULT 1 COMMENT 'Is this reserved label?', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this label layout' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_print_label_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) COMMENT 'User title for this label layout', + `name` varchar(255) COMMENT 'variable name/programmatic handle for this field.', + `description` text COMMENT 'Description of this label layout', + `label_format_name` varchar(255) COMMENT 'This refers to name column of civicrm_option_value row in name_badge option group', + `label_type_id` int unsigned COMMENT 'Implicit FK to civicrm_option_value row in NEW label_type option group', + `data` longtext COMMENT 'contains json encode configurations options', + `is_default` tinyint DEFAULT 1 COMMENT 'Is this default?', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this option active?', + `is_reserved` tinyint DEFAULT 1 COMMENT 'Is this reserved label?', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this label layout', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_print_label_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2566,24 +2033,17 @@ CREATE TABLE `civicrm_print_label` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_word_replacement` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Word replacement ID', - `find_word` varchar(255) COLLATE utf8_bin COMMENT 'Word which need to be replaced', - `replace_word` varchar(255) COLLATE utf8_bin COMMENT 'Word which will replace the word in find', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this entry active?', - `match_type` varchar(16) DEFAULT "wildcardMatch" , - `domain_id` int unsigned COMMENT 'FK to Domain ID. This is for Domain specific word replacement' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_domain_find`( - domain_id - , find_word - ) - -, CONSTRAINT FK_civicrm_word_replacement_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Word replacement ID', + `find_word` varchar(255) COLLATE utf8_bin COMMENT 'Word which need to be replaced', + `replace_word` varchar(255) COLLATE utf8_bin COMMENT 'Word which will replace the word in find', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this entry active?', + `match_type` varchar(16) DEFAULT "wildcardMatch", + `domain_id` int unsigned COMMENT 'FK to Domain ID. This is for Domain specific word replacement', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_domain_find`(domain_id, find_word), + CONSTRAINT FK_civicrm_word_replacement_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2593,25 +2053,19 @@ CREATE TABLE `civicrm_word_replacement` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_status_pref` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Status Preference ID', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this Status Preference for', - `name` varchar(255) NOT NULL COMMENT 'Name of the status check this preference references.', - `hush_until` date DEFAULT NULL COMMENT 'expires ignore_severity. NULL never hushes.', - `ignore_severity` int unsigned DEFAULT 1 COMMENT 'Hush messages up to and including this severity.', - `prefs` varchar(255) COMMENT 'These settings are per-check, and can\'t be compared across checks.', - `check_info` varchar(255) COMMENT 'These values are per-check, and can\'t be compared across checks.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this status check active?' -, - PRIMARY KEY (`id`) - - , INDEX `UI_status_pref_name`( - name - ) - -, CONSTRAINT FK_civicrm_status_pref_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Status Preference ID', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this Status Preference for', + `name` varchar(255) NOT NULL COMMENT 'Name of the status check this preference references.', + `hush_until` date DEFAULT NULL COMMENT 'expires ignore_severity. NULL never hushes.', + `ignore_severity` int unsigned DEFAULT 1 COMMENT 'Hush messages up to and including this severity.', + `prefs` varchar(255) COMMENT 'These settings are per-check, and can\'t be compared across checks.', + `check_info` varchar(255) COMMENT 'These values are per-check, and can\'t be compared across checks.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this status check active?', + PRIMARY KEY (`id`), + INDEX `UI_status_pref_name`(name), + CONSTRAINT FK_civicrm_status_pref_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2621,48 +2075,38 @@ CREATE TABLE `civicrm_status_pref` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Group ID', - `name` varchar(64) COMMENT 'Internal name of Group.', - `title` varchar(255) COMMENT 'Name of Group.', - `description` text COMMENT 'Optional verbose description of the group.', - `source` varchar(64) COMMENT 'Module or process which created this group.', - `saved_search_id` int unsigned COMMENT 'FK to saved search table.', - `is_active` tinyint COMMENT 'Is this entry active?', - `visibility` varchar(24) DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is this field visible.', - `where_clause` text COMMENT 'the sql where clause if a saved search acl', - `select_tables` text COMMENT 'the tables to be included in a select data', - `where_tables` text COMMENT 'the tables to be included in the count statement', - `group_type` varchar(128) COMMENT 'FK to group type', - `cache_date` timestamp NULL COMMENT 'Date when we created the cache for a smart group', - `refresh_date` timestamp NULL COMMENT 'Date and time when we need to refresh the cache next.', - `parents` text COMMENT 'IDs of the parent(s)', - `children` text COMMENT 'IDs of the child(ren)', - `is_hidden` tinyint DEFAULT 0 COMMENT 'Is this group hidden?', - `is_reserved` tinyint DEFAULT 0 , - `created_id` int unsigned COMMENT 'FK to contact table.', - `modified_id` int unsigned COMMENT 'FK to contact table.', - `frontend_title` varchar(255) DEFAULT NULL COMMENT 'Alternative public title for this Group.', - `frontend_description` text DEFAULT NULL COMMENT 'Alternative public description of the group.' -, - PRIMARY KEY (`id`) - - , INDEX `UI_cache_date`( - cache_date - ) - , INDEX `index_group_type`( - group_type - ) - , UNIQUE INDEX `UI_title`( - title - ) - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_group_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_group_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Group ID', + `name` varchar(64) COMMENT 'Internal name of Group.', + `title` varchar(255) COMMENT 'Name of Group.', + `description` text COMMENT 'Optional verbose description of the group.', + `source` varchar(64) COMMENT 'Module or process which created this group.', + `saved_search_id` int unsigned COMMENT 'FK to saved search table.', + `is_active` tinyint COMMENT 'Is this entry active?', + `visibility` varchar(24) DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is this field visible.', + `where_clause` text COMMENT 'the sql where clause if a saved search acl', + `select_tables` text COMMENT 'the tables to be included in a select data', + `where_tables` text COMMENT 'the tables to be included in the count statement', + `group_type` varchar(128) COMMENT 'FK to group type', + `cache_date` timestamp NULL COMMENT 'Date when we created the cache for a smart group', + `refresh_date` timestamp NULL COMMENT 'Date and time when we need to refresh the cache next.', + `parents` text COMMENT 'IDs of the parent(s)', + `children` text COMMENT 'IDs of the child(ren)', + `is_hidden` tinyint DEFAULT 0 COMMENT 'Is this group hidden?', + `is_reserved` tinyint DEFAULT 0, + `created_id` int unsigned COMMENT 'FK to contact table.', + `modified_id` int unsigned COMMENT 'FK to contact table.', + `frontend_title` varchar(255) DEFAULT NULL COMMENT 'Alternative public title for this Group.', + `frontend_description` text DEFAULT NULL COMMENT 'Alternative public description of the group.', + PRIMARY KEY (`id`), + INDEX `UI_cache_date`(cache_date), + INDEX `index_group_type`(group_type), + UNIQUE INDEX `UI_title`(title), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_group_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_group_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2672,21 +2116,18 @@ CREATE TABLE `civicrm_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_subscription_history` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Internal ID', - `contact_id` int unsigned NOT NULL COMMENT 'Contact ID', - `group_id` int unsigned COMMENT 'Group ID', - `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date of the (un)subscription', - `method` varchar(8) COMMENT 'How the (un)subscription was triggered', - `status` varchar(8) COMMENT 'The state of the contact within the group', - `tracking` varchar(255) COMMENT 'IP address or other tracking info' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_subscription_history_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_subscription_history_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Internal ID', + `contact_id` int unsigned NOT NULL COMMENT 'Contact ID', + `group_id` int unsigned COMMENT 'Group ID', + `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date of the (un)subscription', + `method` varchar(8) COMMENT 'How the (un)subscription was triggered', + `status` varchar(8) COMMENT 'The state of the contact within the group', + `tracking` varchar(255) COMMENT 'IP address or other tracking info', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_subscription_history_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_subscription_history_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2696,21 +2137,15 @@ CREATE TABLE `civicrm_subscription_history` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_group_contact_cache` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `group_id` int unsigned NOT NULL COMMENT 'FK to civicrm_group', - `contact_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contact' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_contact_group`( - contact_id - , group_id - ) - -, CONSTRAINT FK_civicrm_group_contact_cache_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_contact_cache_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `group_id` int unsigned NOT NULL COMMENT 'FK to civicrm_group', + `contact_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contact', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_contact_group`(contact_id, group_id), + CONSTRAINT FK_civicrm_group_contact_cache_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_group_contact_cache_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2720,17 +2155,14 @@ CREATE TABLE `civicrm_group_contact_cache` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_group_nesting` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship ID', - `child_group_id` int unsigned NOT NULL COMMENT 'ID of the child group', - `parent_group_id` int unsigned NOT NULL COMMENT 'ID of the parent group' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_group_nesting_child_group_id FOREIGN KEY (`child_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_nesting_parent_group_id FOREIGN KEY (`parent_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship ID', + `child_group_id` int unsigned NOT NULL COMMENT 'ID of the child group', + `parent_group_id` int unsigned NOT NULL COMMENT 'ID of the parent group', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_group_nesting_child_group_id FOREIGN KEY (`child_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_group_nesting_parent_group_id FOREIGN KEY (`parent_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2740,21 +2172,15 @@ CREATE TABLE `civicrm_group_nesting` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_group_organization` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship ID', - `group_id` int unsigned NOT NULL COMMENT 'ID of the group', - `organization_id` int unsigned NOT NULL COMMENT 'ID of the Organization Contact' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_group_organization`( - group_id - , organization_id - ) - -, CONSTRAINT FK_civicrm_group_organization_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_organization_organization_id FOREIGN KEY (`organization_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship ID', + `group_id` int unsigned NOT NULL COMMENT 'ID of the group', + `organization_id` int unsigned NOT NULL COMMENT 'ID of the Organization Contact', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_group_organization`(group_id, organization_id), + CONSTRAINT FK_civicrm_group_organization_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_group_organization_organization_id FOREIGN KEY (`organization_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2764,19 +2190,16 @@ CREATE TABLE `civicrm_group_organization` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_subscribe` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `group_id` int unsigned NOT NULL COMMENT 'FK to Group', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact', - `hash` varchar(255) NOT NULL COMMENT 'Security hash', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this subscription event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_subscribe_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_event_subscribe_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `group_id` int unsigned NOT NULL COMMENT 'FK to Group', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact', + `hash` varchar(255) NOT NULL COMMENT 'Security hash', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this subscription event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_subscribe_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_event_subscribe_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2786,17 +2209,13 @@ CREATE TABLE `civicrm_mailing_event_subscribe` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_confirm` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_subscribe_id` int unsigned NOT NULL COMMENT 'FK to civicrm_mailing_event_subscribe', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this confirmation event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_confirm_event_subscribe_id FOREIGN KEY (`event_subscribe_id`) REFERENCES `civicrm_mailing_event_subscribe`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_subscribe_id` int unsigned NOT NULL COMMENT 'FK to civicrm_mailing_event_subscribe', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this confirmation event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_confirm_event_subscribe_id FOREIGN KEY (`event_subscribe_id`) REFERENCES `civicrm_mailing_event_subscribe`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2806,60 +2225,58 @@ CREATE TABLE `civicrm_mailing_event_confirm` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contribution_page` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', - `title` varchar(255) COMMENT 'Contribution Page title. For top of page display', - `intro_text` text COMMENT 'Text and html allowed. Displayed below title.', - `financial_type_id` int unsigned COMMENT 'default financial type assigned to contributions submitted via this page, e.g. Contribution, Campaign Contribution', - `payment_processor` varchar(128) COMMENT 'Payment Processors configured for this contribution Page', - `is_credit_card_only` tinyint DEFAULT 0 COMMENT 'if true - processing logic must reject transaction at confirmation stage if pay method != credit card', - `is_monetary` tinyint DEFAULT 1 COMMENT 'if true - allows real-time monetary transactions otherwise non-monetary transactions', - `is_recur` tinyint DEFAULT 0 COMMENT 'if true - allows recurring contributions, valid only for PayPal_Standard', - `is_confirm_enabled` tinyint DEFAULT 1 COMMENT 'if false, the confirm page in contribution pages gets skipped', - `recur_frequency_unit` varchar(128) COMMENT 'Supported recurring frequency units.', - `is_recur_interval` tinyint DEFAULT 0 COMMENT 'if true - supports recurring intervals', - `is_recur_installments` tinyint DEFAULT 0 COMMENT 'if true - asks user for recurring installments', - `adjust_recur_start_date` tinyint DEFAULT 0 COMMENT 'if true - user is able to adjust payment start date', - `is_pay_later` tinyint DEFAULT 0 COMMENT 'if true - allows the user to send payment directly to the org later', - `pay_later_text` text COMMENT 'The text displayed to the user in the main form', - `pay_later_receipt` text COMMENT 'The receipt sent to the user instead of the normal receipt text', - `is_partial_payment` tinyint DEFAULT 0 COMMENT 'is partial payment enabled for this online contribution page', - `initial_amount_label` varchar(255) COMMENT 'Initial amount label for partial payment', - `initial_amount_help_text` text COMMENT 'Initial amount help text for partial payment', - `min_initial_amount` decimal(20,2) COMMENT 'Minimum initial amount for partial payment', - `is_allow_other_amount` tinyint DEFAULT 0 COMMENT 'if true, page will include an input text field where user can enter their own amount', - `default_amount_id` int unsigned COMMENT 'FK to civicrm_option_value.', - `min_amount` decimal(20,2) COMMENT 'if other amounts allowed, user can configure minimum allowed.', - `max_amount` decimal(20,2) COMMENT 'if other amounts allowed, user can configure maximum allowed.', - `goal_amount` decimal(20,2) COMMENT 'The target goal for this page, allows people to build a goal meter', - `thankyou_title` varchar(255) COMMENT 'Title for Thank-you page (header title tag, and display at the top of the page).', - `thankyou_text` text COMMENT 'text and html allowed. displayed above result on success page', - `thankyou_footer` text 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.', - `is_email_receipt` tinyint DEFAULT 0 COMMENT 'if true, receipt is automatically emailed to contact on success', - `receipt_from_name` varchar(255) COMMENT 'FROM email name used for receipts generated by contributions to this contribution page.', - `receipt_from_email` varchar(255) COMMENT 'FROM email address used for receipts generated by contributions to this contribution page.', - `cc_receipt` varchar(255) COMMENT 'comma-separated list of email addresses to cc each time a receipt is sent', - `bcc_receipt` varchar(255) COMMENT 'comma-separated list of email addresses to bcc each time a receipt is sent', - `receipt_text` text COMMENT 'text to include above standard receipt info on receipt email. emails are text-only, so do not allow html for now', - `is_active` tinyint COMMENT 'Is this property active?', - `footer_text` text COMMENT 'Text and html allowed. Displayed at the bottom of the first page of the contribution wizard.', - `amount_block_is_active` tinyint DEFAULT 1 COMMENT 'Is this property active?', - `start_date` datetime COMMENT 'Date and time that this page starts.', - `end_date` datetime COMMENT 'Date and time that this page ends. May be NULL if no defined end date/time', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this contribution page', - `created_date` datetime COMMENT 'Date and time that contribution page was created.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `campaign_id` int unsigned COMMENT 'The campaign for which we are collecting contributions with this page.', - `is_share` tinyint DEFAULT 1 COMMENT 'Can people share the contribution page through social media?', - `is_billing_required` tinyint DEFAULT 0 COMMENT 'if true - billing block is required for online contribution page', - `frontend_title` varchar(255) DEFAULT NULL COMMENT 'Contribution Page Public title' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_contribution_page_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) , CONSTRAINT FK_civicrm_contribution_page_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_page_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', + `title` varchar(255) COMMENT 'Contribution Page title. For top of page display', + `intro_text` text COMMENT 'Text and html allowed. Displayed below title.', + `financial_type_id` int unsigned COMMENT 'default financial type assigned to contributions submitted via this page, e.g. Contribution, Campaign Contribution', + `payment_processor` varchar(128) COMMENT 'Payment Processors configured for this contribution Page', + `is_credit_card_only` tinyint DEFAULT 0 COMMENT 'if true - processing logic must reject transaction at confirmation stage if pay method != credit card', + `is_monetary` tinyint DEFAULT 1 COMMENT 'if true - allows real-time monetary transactions otherwise non-monetary transactions', + `is_recur` tinyint DEFAULT 0 COMMENT 'if true - allows recurring contributions, valid only for PayPal_Standard', + `is_confirm_enabled` tinyint DEFAULT 1 COMMENT 'if false, the confirm page in contribution pages gets skipped', + `recur_frequency_unit` varchar(128) COMMENT 'Supported recurring frequency units.', + `is_recur_interval` tinyint DEFAULT 0 COMMENT 'if true - supports recurring intervals', + `is_recur_installments` tinyint DEFAULT 0 COMMENT 'if true - asks user for recurring installments', + `adjust_recur_start_date` tinyint DEFAULT 0 COMMENT 'if true - user is able to adjust payment start date', + `is_pay_later` tinyint DEFAULT 0 COMMENT 'if true - allows the user to send payment directly to the org later', + `pay_later_text` text COMMENT 'The text displayed to the user in the main form', + `pay_later_receipt` text COMMENT 'The receipt sent to the user instead of the normal receipt text', + `is_partial_payment` tinyint DEFAULT 0 COMMENT 'is partial payment enabled for this online contribution page', + `initial_amount_label` varchar(255) COMMENT 'Initial amount label for partial payment', + `initial_amount_help_text` text COMMENT 'Initial amount help text for partial payment', + `min_initial_amount` decimal(20,2) COMMENT 'Minimum initial amount for partial payment', + `is_allow_other_amount` tinyint DEFAULT 0 COMMENT 'if true, page will include an input text field where user can enter their own amount', + `default_amount_id` int unsigned COMMENT 'FK to civicrm_option_value.', + `min_amount` decimal(20,2) COMMENT 'if other amounts allowed, user can configure minimum allowed.', + `max_amount` decimal(20,2) COMMENT 'if other amounts allowed, user can configure maximum allowed.', + `goal_amount` decimal(20,2) COMMENT 'The target goal for this page, allows people to build a goal meter', + `thankyou_title` varchar(255) COMMENT 'Title for Thank-you page (header title tag, and display at the top of the page).', + `thankyou_text` text COMMENT 'text and html allowed. displayed above result on success page', + `thankyou_footer` text 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.', + `is_email_receipt` tinyint DEFAULT 0 COMMENT 'if true, receipt is automatically emailed to contact on success', + `receipt_from_name` varchar(255) COMMENT 'FROM email name used for receipts generated by contributions to this contribution page.', + `receipt_from_email` varchar(255) COMMENT 'FROM email address used for receipts generated by contributions to this contribution page.', + `cc_receipt` varchar(255) COMMENT 'comma-separated list of email addresses to cc each time a receipt is sent', + `bcc_receipt` varchar(255) COMMENT 'comma-separated list of email addresses to bcc each time a receipt is sent', + `receipt_text` text COMMENT 'text to include above standard receipt info on receipt email. emails are text-only, so do not allow html for now', + `is_active` tinyint COMMENT 'Is this property active?', + `footer_text` text COMMENT 'Text and html allowed. Displayed at the bottom of the first page of the contribution wizard.', + `amount_block_is_active` tinyint DEFAULT 1 COMMENT 'Is this property active?', + `start_date` datetime COMMENT 'Date and time that this page starts.', + `end_date` datetime COMMENT 'Date and time that this page ends. May be NULL if no defined end date/time', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this contribution page', + `created_date` datetime COMMENT 'Date and time that contribution page was created.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `campaign_id` int unsigned COMMENT 'The campaign for which we are collecting contributions with this page.', + `is_share` tinyint DEFAULT 1 COMMENT 'Can people share the contribution page through social media?', + `is_billing_required` tinyint DEFAULT 0 COMMENT 'if true - billing block is required for online contribution page', + `frontend_title` varchar(255) DEFAULT NULL COMMENT 'Contribution Page Public title', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_contribution_page_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`), + CONSTRAINT FK_civicrm_contribution_page_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_page_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2869,33 +2286,29 @@ CREATE TABLE `civicrm_contribution_page` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_product` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(255) NOT NULL COMMENT 'Required product/premium name', - `description` text COMMENT 'Optional description of the product/premium.', - `sku` varchar(50) COMMENT 'Optional product sku or code.', - `options` text COMMENT 'Store comma-delimited list of color, size, etc. options for the product.', - `image` varchar(255) COMMENT 'Full or relative URL to uploaded image - fullsize.', - `thumbnail` varchar(255) COMMENT 'Full or relative URL to image thumbnail.', - `price` decimal(20,2) COMMENT 'Sell price or market value for premiums. For tax-deductible contributions, this will be stored as non_deductible_amount in the contribution record.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', - `min_contribution` decimal(20,2) COMMENT 'Minimum contribution required to be eligible to select this premium.', - `cost` decimal(20,2) COMMENT 'Actual cost of this product. Useful to determine net return from sale or using this as an incentive.', - `is_active` tinyint NOT NULL COMMENT 'Disabling premium removes it from the premiums_premium join table below.', - `period_type` varchar(8) DEFAULT 'rolling' COMMENT 'Rolling means we set start/end based on current day, fixed means we set start/end for current year or month\n (e.g. 1 year + fixed -> we would set start/end for 1/1/06 thru 12/31/06 for any premium chosen in 2006) ', - `fixed_period_start_day` int DEFAULT 0101 COMMENT 'Month and day (MMDD) that fixed period type subscription or membership starts.', - `duration_unit` varchar(8) DEFAULT 'year' , - `duration_interval` int COMMENT 'Number of units for total duration of subscription, service, membership (e.g. 12 Months).', - `frequency_unit` varchar(8) DEFAULT 'month' COMMENT 'Frequency unit and interval allow option to store actual delivery frequency for a subscription or service.', - `frequency_interval` int COMMENT 'Number of units for delivery frequency of subscription, service, membership (e.g. every 3 Months).' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_product_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL COMMENT 'Required product/premium name', + `description` text COMMENT 'Optional description of the product/premium.', + `sku` varchar(50) COMMENT 'Optional product sku or code.', + `options` text COMMENT 'Store comma-delimited list of color, size, etc. options for the product.', + `image` varchar(255) COMMENT 'Full or relative URL to uploaded image - fullsize.', + `thumbnail` varchar(255) COMMENT 'Full or relative URL to image thumbnail.', + `price` decimal(20,2) COMMENT 'Sell price or market value for premiums. For tax-deductible contributions, this will be stored as non_deductible_amount in the contribution record.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', + `min_contribution` decimal(20,2) COMMENT 'Minimum contribution required to be eligible to select this premium.', + `cost` decimal(20,2) COMMENT 'Actual cost of this product. Useful to determine net return from sale or using this as an incentive.', + `is_active` tinyint NOT NULL COMMENT 'Disabling premium removes it from the premiums_premium join table below.', + `period_type` varchar(8) DEFAULT 'rolling' COMMENT 'Rolling means we set start/end based on current day, fixed means we set start/end for current year or month\n (e.g. 1 year + fixed -> we would set start/end for 1/1/06 thru 12/31/06 for any premium chosen in 2006) ', + `fixed_period_start_day` int DEFAULT 0101 COMMENT 'Month and day (MMDD) that fixed period type subscription or membership starts.', + `duration_unit` varchar(8) DEFAULT 'year', + `duration_interval` int COMMENT 'Number of units for total duration of subscription, service, membership (e.g. 12 Months).', + `frequency_unit` varchar(8) DEFAULT 'month' COMMENT 'Frequency unit and interval allow option to store actual delivery frequency for a subscription or service.', + `frequency_interval` int COMMENT 'Number of units for delivery frequency of subscription, service, membership (e.g. every 3 Months).', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_product_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2905,19 +2318,17 @@ CREATE TABLE `civicrm_product` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_premiums_product` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', - `premiums_id` int unsigned NOT NULL COMMENT 'Foreign key to premiums settings record.', - `product_id` int unsigned NOT NULL COMMENT 'Foreign key to each product object.', - `weight` int unsigned NOT NULL , - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_premiums_product_premiums_id FOREIGN KEY (`premiums_id`) REFERENCES `civicrm_premiums`(`id`) , CONSTRAINT FK_civicrm_premiums_product_product_id FOREIGN KEY (`product_id`) REFERENCES `civicrm_product`(`id`) , CONSTRAINT FK_civicrm_premiums_product_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', + `premiums_id` int unsigned NOT NULL COMMENT 'Foreign key to premiums settings record.', + `product_id` int unsigned NOT NULL COMMENT 'Foreign key to each product object.', + `weight` int unsigned NOT NULL, + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_premiums_product_premiums_id FOREIGN KEY (`premiums_id`) REFERENCES `civicrm_premiums`(`id`), + CONSTRAINT FK_civicrm_premiums_product_product_id FOREIGN KEY (`product_id`) REFERENCES `civicrm_product`(`id`), + CONSTRAINT FK_civicrm_premiums_product_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2927,31 +2338,27 @@ CREATE TABLE `civicrm_premiums_product` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contribution_widget` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', - `contribution_page_id` int unsigned COMMENT 'The Contribution Page which triggered this contribution', - `is_active` tinyint COMMENT 'Is this property active?', - `title` varchar(255) COMMENT 'Widget title.', - `url_logo` varchar(255) COMMENT 'URL to Widget logo', - `button_title` varchar(255) COMMENT 'Button title.', - `about` text COMMENT 'About description.', - `url_homepage` varchar(255) COMMENT 'URL to Homepage.', - `color_title` varchar(10) , - `color_button` varchar(10) , - `color_bar` varchar(10) , - `color_main_text` varchar(10) , - `color_main` varchar(10) , - `color_main_bg` varchar(10) , - `color_bg` varchar(10) , - `color_about_link` varchar(10) , - `color_homepage_link` varchar(10) -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_contribution_widget_contribution_page_id FOREIGN KEY (`contribution_page_id`) REFERENCES `civicrm_contribution_page`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', + `contribution_page_id` int unsigned COMMENT 'The Contribution Page which triggered this contribution', + `is_active` tinyint COMMENT 'Is this property active?', + `title` varchar(255) COMMENT 'Widget title.', + `url_logo` varchar(255) COMMENT 'URL to Widget logo', + `button_title` varchar(255) COMMENT 'Button title.', + `about` text COMMENT 'About description.', + `url_homepage` varchar(255) COMMENT 'URL to Homepage.', + `color_title` varchar(10), + `color_button` varchar(10), + `color_bar` varchar(10), + `color_main_text` varchar(10), + `color_main` varchar(10), + `color_main_bg` varchar(10), + `color_bg` varchar(10), + `color_about_link` varchar(10), + `color_homepage_link` varchar(10), + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_contribution_widget_contribution_page_id FOREIGN KEY (`contribution_page_id`) REFERENCES `civicrm_contribution_page`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -2959,42 +2366,35 @@ CREATE TABLE `civicrm_contribution_widget` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_payment_processor` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Processor ID', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', - `name` varchar(64) COMMENT 'Payment Processor Name.', - `title` varchar(127) COMMENT 'Payment Processor Descriptive Name.', - `description` varchar(255) COMMENT 'Payment Processor Description.', - `payment_processor_type_id` int unsigned NOT NULL , - `is_active` tinyint DEFAULT 1 COMMENT 'Is this processor active?', - `is_default` tinyint DEFAULT 0 COMMENT 'Is this processor the default?', - `is_test` tinyint DEFAULT 0 COMMENT 'Is this processor for a test site?', - `user_name` varchar(255) , - `password` varchar(255) , - `signature` text , - `url_site` varchar(255) , - `url_api` varchar(255) , - `url_recur` varchar(255) , - `url_button` varchar(255) , - `subject` varchar(255) , - `class_name` varchar(255) , - `billing_mode` int unsigned NOT NULL COMMENT 'Billing Mode (deprecated)', - `is_recur` tinyint COMMENT 'Can process recurring contributions', - `payment_type` int unsigned DEFAULT 1 COMMENT 'Payment Type: Credit or Debit (deprecated)', - `payment_instrument_id` int unsigned DEFAULT 1 COMMENT 'Payment Instrument ID', - `accepted_credit_cards` text DEFAULT NULL COMMENT 'array of accepted credit card types' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name_test_domain_id`( - name - , is_test - , domain_id - ) - -, CONSTRAINT FK_civicrm_payment_processor_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_payment_processor_payment_processor_type_id FOREIGN KEY (`payment_processor_type_id`) REFERENCES `civicrm_payment_processor_type`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Processor ID', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', + `name` varchar(64) COMMENT 'Payment Processor Name.', + `title` varchar(127) COMMENT 'Payment Processor Descriptive Name.', + `description` varchar(255) COMMENT 'Payment Processor Description.', + `payment_processor_type_id` int unsigned NOT NULL, + `is_active` tinyint DEFAULT 1 COMMENT 'Is this processor active?', + `is_default` tinyint DEFAULT 0 COMMENT 'Is this processor the default?', + `is_test` tinyint DEFAULT 0 COMMENT 'Is this processor for a test site?', + `user_name` varchar(255), + `password` varchar(255), + `signature` text, + `url_site` varchar(255), + `url_api` varchar(255), + `url_recur` varchar(255), + `url_button` varchar(255), + `subject` varchar(255), + `class_name` varchar(255), + `billing_mode` int unsigned NOT NULL COMMENT 'Billing Mode (deprecated)', + `is_recur` tinyint COMMENT 'Can process recurring contributions', + `payment_type` int unsigned DEFAULT 1 COMMENT 'Payment Type: Credit or Debit (deprecated)', + `payment_instrument_id` int unsigned DEFAULT 1 COMMENT 'Payment Instrument ID', + `accepted_credit_cards` text DEFAULT NULL COMMENT 'array of accepted credit card types', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name_test_domain_id`(name, is_test, domain_id), + CONSTRAINT FK_civicrm_payment_processor_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_payment_processor_payment_processor_type_id FOREIGN KEY (`payment_processor_type_id`) REFERENCES `civicrm_payment_processor_type`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3004,27 +2404,25 @@ CREATE TABLE `civicrm_payment_processor` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_payment_token` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Token ID', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID for the owner of the token', - `payment_processor_id` int unsigned NOT NULL , - `token` varchar(255) NOT NULL COMMENT 'Externally provided token string', - `created_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Date created', - `created_id` int unsigned COMMENT 'Contact ID of token creator', - `expiry_date` datetime COMMENT 'Date this token expires', - `email` varchar(255) COMMENT 'Email at the time of token creation. Useful for fraud forensics', - `billing_first_name` varchar(255) COMMENT 'Billing first name at the time of token creation. Useful for fraud forensics', - `billing_middle_name` varchar(255) COMMENT 'Billing middle name at the time of token creation. Useful for fraud forensics', - `billing_last_name` varchar(255) COMMENT 'Billing last name at the time of token creation. Useful for fraud forensics', - `masked_account_number` varchar(255) COMMENT 'Holds the part of the card number or account details that may be retained or displayed', - `ip_address` varchar(255) COMMENT 'IP used when creating the token. Useful for fraud forensics' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_payment_token_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_payment_token_payment_processor_id FOREIGN KEY (`payment_processor_id`) REFERENCES `civicrm_payment_processor`(`id`) ON DELETE RESTRICT, CONSTRAINT FK_civicrm_payment_token_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Token ID', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID for the owner of the token', + `payment_processor_id` int unsigned NOT NULL, + `token` varchar(255) NOT NULL COMMENT 'Externally provided token string', + `created_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Date created', + `created_id` int unsigned COMMENT 'Contact ID of token creator', + `expiry_date` datetime COMMENT 'Date this token expires', + `email` varchar(255) COMMENT 'Email at the time of token creation. Useful for fraud forensics', + `billing_first_name` varchar(255) COMMENT 'Billing first name at the time of token creation. Useful for fraud forensics', + `billing_middle_name` varchar(255) COMMENT 'Billing middle name at the time of token creation. Useful for fraud forensics', + `billing_last_name` varchar(255) COMMENT 'Billing last name at the time of token creation. Useful for fraud forensics', + `masked_account_number` varchar(255) COMMENT 'Holds the part of the card number or account details that may be retained or displayed', + `ip_address` varchar(255) COMMENT 'IP used when creating the token. Useful for fraud forensics', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_payment_token_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_payment_token_payment_processor_id FOREIGN KEY (`payment_processor_id`) REFERENCES `civicrm_payment_processor`(`id`) ON DELETE RESTRICT, + CONSTRAINT FK_civicrm_payment_token_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3034,25 +2432,21 @@ CREATE TABLE `civicrm_payment_token` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_sms_provider` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'SMS Provider ID', - `name` varchar(64) COMMENT 'Provider internal name points to option_value of option_group sms_provider_name', - `title` varchar(64) COMMENT 'Provider name visible to user', - `username` varchar(255) , - `password` varchar(255) , - `api_type` int unsigned NOT NULL COMMENT 'points to value in civicrm_option_value for group sms_api_type', - `api_url` varchar(128) , - `api_params` text COMMENT 'the api params in xml, http or smtp format', - `is_default` tinyint DEFAULT 0 , - `is_active` tinyint DEFAULT 0 , - `domain_id` int unsigned COMMENT 'Which Domain is this sms provider for' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_sms_provider_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'SMS Provider ID', + `name` varchar(64) COMMENT 'Provider internal name points to option_value of option_group sms_provider_name', + `title` varchar(64) COMMENT 'Provider name visible to user', + `username` varchar(255), + `password` varchar(255), + `api_type` int unsigned NOT NULL COMMENT 'points to value in civicrm_option_value for group sms_api_type', + `api_url` varchar(128), + `api_params` text COMMENT 'the api params in xml, http or smtp format', + `is_default` tinyint DEFAULT 0, + `is_active` tinyint DEFAULT 0, + `domain_id` int unsigned COMMENT 'Which Domain is this sms provider for', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_sms_provider_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3062,38 +2456,34 @@ CREATE TABLE `civicrm_sms_provider` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_membership_type` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', - `name` varchar(128) NOT NULL COMMENT 'Name of Membership Type', - `description` varchar(255) COMMENT 'Description of Membership Type', - `member_of_contact_id` int unsigned NOT NULL COMMENT 'Owner organization for this membership type. FK to Contact ID', - `financial_type_id` int unsigned NOT NULL COMMENT 'If membership is paid by a contribution - what financial type should be used. FK to civicrm_financial_type.id', - `minimum_fee` decimal(18,9) DEFAULT 0 COMMENT 'Minimum fee for this membership (0 for free/complimentary memberships).', - `duration_unit` varchar(8) COMMENT 'Unit in which membership period is expressed.', - `duration_interval` int COMMENT 'Number of duration units in membership period (e.g. 1 year, 12 months).', - `period_type` varchar(8) NOT NULL COMMENT 'Rolling membership period starts on signup date. Fixed membership periods start on fixed_period_start_day.', - `fixed_period_start_day` int COMMENT 'For fixed period memberships, month and day (mmdd) on which subscription/membership will start. Period start is back-dated unless after rollover day.', - `fixed_period_rollover_day` int COMMENT 'For fixed period memberships, signups after this day (mmdd) rollover to next period.', - `relationship_type_id` varchar(64) COMMENT 'FK to Relationship Type ID', - `relationship_direction` varchar(128) , - `max_related` int COMMENT 'Maximum number of related memberships.', - `visibility` varchar(64) , - `weight` int , - `receipt_text_signup` varchar(255) COMMENT 'Receipt Text for membership signup', - `receipt_text_renewal` varchar(255) COMMENT 'Receipt Text for membership renewal', - `auto_renew` tinyint DEFAULT 0 COMMENT '0 = No auto-renew option; 1 = Give option, but not required; 2 = Auto-renew required;', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this membership_type enabled' -, - PRIMARY KEY (`id`) - - , INDEX `index_relationship_type_id`( - relationship_type_id - ) - -, CONSTRAINT FK_civicrm_membership_type_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_membership_type_member_of_contact_id FOREIGN KEY (`member_of_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE RESTRICT, CONSTRAINT FK_civicrm_membership_type_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this match entry for', + `name` varchar(128) NOT NULL COMMENT 'Name of Membership Type', + `description` varchar(255) COMMENT 'Description of Membership Type', + `member_of_contact_id` int unsigned NOT NULL COMMENT 'Owner organization for this membership type. FK to Contact ID', + `financial_type_id` int unsigned NOT NULL COMMENT 'If membership is paid by a contribution - what financial type should be used. FK to civicrm_financial_type.id', + `minimum_fee` decimal(18,9) DEFAULT 0 COMMENT 'Minimum fee for this membership (0 for free/complimentary memberships).', + `duration_unit` varchar(8) COMMENT 'Unit in which membership period is expressed.', + `duration_interval` int COMMENT 'Number of duration units in membership period (e.g. 1 year, 12 months).', + `period_type` varchar(8) NOT NULL COMMENT 'Rolling membership period starts on signup date. Fixed membership periods start on fixed_period_start_day.', + `fixed_period_start_day` int COMMENT 'For fixed period memberships, month and day (mmdd) on which subscription/membership will start. Period start is back-dated unless after rollover day.', + `fixed_period_rollover_day` int COMMENT 'For fixed period memberships, signups after this day (mmdd) rollover to next period.', + `relationship_type_id` varchar(64) COMMENT 'FK to Relationship Type ID', + `relationship_direction` varchar(128), + `max_related` int COMMENT 'Maximum number of related memberships.', + `visibility` varchar(64), + `weight` int, + `receipt_text_signup` varchar(255) COMMENT 'Receipt Text for membership signup', + `receipt_text_renewal` varchar(255) COMMENT 'Receipt Text for membership renewal', + `auto_renew` tinyint DEFAULT 0 COMMENT '0 = No auto-renew option; 1 = Give option, but not required; 2 = Auto-renew required;', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this membership_type enabled', + PRIMARY KEY (`id`), + INDEX `index_relationship_type_id`(relationship_type_id), + CONSTRAINT FK_civicrm_membership_type_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_membership_type_member_of_contact_id FOREIGN KEY (`member_of_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE RESTRICT, + CONSTRAINT FK_civicrm_membership_type_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3103,27 +2493,24 @@ CREATE TABLE `civicrm_membership_type` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_membership_block` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', - `entity_table` varchar(64) COMMENT 'Name for Membership Status', - `entity_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contribution_page.id', - `membership_types` varchar(1024) COMMENT 'Membership types to be exposed by this block', - `membership_type_default` int unsigned COMMENT 'Optional foreign key to membership_type', - `display_min_fee` tinyint DEFAULT 1 COMMENT 'Display minimum membership fee', - `is_separate_payment` tinyint DEFAULT 1 COMMENT 'Should membership transactions be processed separately', - `new_title` varchar(255) COMMENT 'Title to display at top of block', - `new_text` text COMMENT 'Text to display below title', - `renewal_title` varchar(255) COMMENT 'Title for renewal', - `renewal_text` text COMMENT 'Text to display for member renewal', - `is_required` tinyint DEFAULT 0 COMMENT 'Is membership sign up optional', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this membership_block enabled' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_membership_block_entity_id FOREIGN KEY (`entity_id`) REFERENCES `civicrm_contribution_page`(`id`) , CONSTRAINT FK_civicrm_membership_block_membership_type_default FOREIGN KEY (`membership_type_default`) REFERENCES `civicrm_membership_type`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', + `entity_table` varchar(64) COMMENT 'Name for Membership Status', + `entity_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contribution_page.id', + `membership_types` varchar(1024) COMMENT 'Membership types to be exposed by this block', + `membership_type_default` int unsigned COMMENT 'Optional foreign key to membership_type', + `display_min_fee` tinyint DEFAULT 1 COMMENT 'Display minimum membership fee', + `is_separate_payment` tinyint DEFAULT 1 COMMENT 'Should membership transactions be processed separately', + `new_title` varchar(255) COMMENT 'Title to display at top of block', + `new_text` text COMMENT 'Text to display below title', + `renewal_title` varchar(255) COMMENT 'Title for renewal', + `renewal_text` text COMMENT 'Text to display for member renewal', + `is_required` tinyint DEFAULT 0 COMMENT 'Is membership sign up optional', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this membership_block enabled', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_membership_block_entity_id FOREIGN KEY (`entity_id`) REFERENCES `civicrm_contribution_page`(`id`), + CONSTRAINT FK_civicrm_membership_block_membership_type_default FOREIGN KEY (`membership_type_default`) REFERENCES `civicrm_membership_type`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3133,30 +2520,22 @@ CREATE TABLE `civicrm_membership_block` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_case` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Case ID', - `case_type_id` int unsigned NOT NULL COMMENT 'FK to civicrm_case_type.id', - `subject` varchar(128) COMMENT 'Short name of the case.', - `start_date` date COMMENT 'Date on which given case starts.', - `end_date` date COMMENT 'Date on which given case ends.', - `details` text COMMENT 'Details populated from Open Case. Only used in the CiviCase extension.', - `status_id` int unsigned NOT NULL COMMENT 'ID of case status.', - `is_deleted` tinyint DEFAULT 0 , - `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the case was created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the case (or closely related entity) was created or modified or deleted.' -, - PRIMARY KEY (`id`) - - , INDEX `index_case_type_id`( - case_type_id - ) - , INDEX `index_is_deleted`( - is_deleted - ) - -, CONSTRAINT FK_civicrm_case_case_type_id FOREIGN KEY (`case_type_id`) REFERENCES `civicrm_case_type`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Case ID', + `case_type_id` int unsigned NOT NULL COMMENT 'FK to civicrm_case_type.id', + `subject` varchar(128) COMMENT 'Short name of the case.', + `start_date` date COMMENT 'Date on which given case starts.', + `end_date` date COMMENT 'Date on which given case ends.', + `details` text COMMENT 'Details populated from Open Case. Only used in the CiviCase extension.', + `status_id` int unsigned NOT NULL COMMENT 'ID of case status.', + `is_deleted` tinyint DEFAULT 0, + `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the case was created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the case (or closely related entity) was created or modified or deleted.', + PRIMARY KEY (`id`), + INDEX `index_case_type_id`(case_type_id), + INDEX `index_is_deleted`(is_deleted), + CONSTRAINT FK_civicrm_case_case_type_id FOREIGN KEY (`case_type_id`) REFERENCES `civicrm_case_type`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3166,21 +2545,15 @@ CREATE TABLE `civicrm_case` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_case_contact` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique case-contact association id', - `case_id` int unsigned NOT NULL COMMENT 'Case ID of case-contact association.', - `contact_id` int unsigned NOT NULL COMMENT 'Contact ID of contact record given case belongs to.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_case_contact_id`( - case_id - , contact_id - ) - -, CONSTRAINT FK_civicrm_case_contact_case_id FOREIGN KEY (`case_id`) REFERENCES `civicrm_case`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_case_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique case-contact association id', + `case_id` int unsigned NOT NULL COMMENT 'Case ID of case-contact association.', + `contact_id` int unsigned NOT NULL COMMENT 'Contact ID of contact record given case belongs to.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_case_contact_id`(case_id, contact_id), + CONSTRAINT FK_civicrm_case_contact_case_id FOREIGN KEY (`case_id`) REFERENCES `civicrm_case`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_case_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3188,40 +2561,37 @@ CREATE TABLE `civicrm_case_contact` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_pledge` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Pledge ID', - `contact_id` int unsigned NOT NULL COMMENT 'Foreign key to civicrm_contact.id .', - `financial_type_id` int unsigned COMMENT 'FK to Financial Type', - `contribution_page_id` int unsigned COMMENT 'The Contribution Page which triggered this contribution', - `amount` decimal(20,2) NOT NULL COMMENT 'Total pledged amount.', - `original_installment_amount` decimal(20,2) NOT NULL COMMENT 'Original amount for each of the installments.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `frequency_unit` varchar(8) NOT NULL DEFAULT 'month' COMMENT 'Time units for recurrence of pledge payments.', - `frequency_interval` int unsigned NOT NULL DEFAULT 1 COMMENT 'Number of time units for recurrence of pledge payments.', - `frequency_day` int unsigned NOT NULL DEFAULT 3 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.', - `installments` int unsigned NOT NULL DEFAULT 1 COMMENT 'Total number of payments to be made.', - `start_date` datetime NOT NULL COMMENT 'The date the first scheduled pledge occurs.', - `create_date` datetime NOT NULL COMMENT 'When this pledge record was created.', - `acknowledge_date` datetime COMMENT 'When a pledge acknowledgement message was sent to the contributor.', - `modified_date` datetime COMMENT 'Last updated date for this pledge record.', - `cancel_date` datetime COMMENT 'Date this pledge was cancelled by contributor.', - `end_date` datetime COMMENT 'Date this pledge finished successfully (total pledge payments equal to or greater than pledged amount).', - `max_reminders` int unsigned DEFAULT 1 COMMENT 'The maximum number of payment reminders to send for any given payment.', - `initial_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send initial reminder this many days prior to the payment due date.', - `additional_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send additional reminder this many days after last one sent, up to maximum number of reminders.', - `status_id` int unsigned NOT NULL COMMENT 'Implicit foreign key to civicrm_option_values in the pledge_status option group.', - `is_test` tinyint NOT NULL DEFAULT 0 , - `campaign_id` int unsigned COMMENT 'The campaign for which this pledge has been initiated.' -, - PRIMARY KEY (`id`) - - , INDEX `index_status`( - status_id - ) - -, CONSTRAINT FK_civicrm_pledge_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_pledge_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) , CONSTRAINT FK_civicrm_pledge_contribution_page_id FOREIGN KEY (`contribution_page_id`) REFERENCES `civicrm_contribution_page`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_pledge_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Pledge ID', + `contact_id` int unsigned NOT NULL COMMENT 'Foreign key to civicrm_contact.id .', + `financial_type_id` int unsigned COMMENT 'FK to Financial Type', + `contribution_page_id` int unsigned COMMENT 'The Contribution Page which triggered this contribution', + `amount` decimal(20,2) NOT NULL COMMENT 'Total pledged amount.', + `original_installment_amount` decimal(20,2) NOT NULL COMMENT 'Original amount for each of the installments.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `frequency_unit` varchar(8) NOT NULL DEFAULT 'month' COMMENT 'Time units for recurrence of pledge payments.', + `frequency_interval` int unsigned NOT NULL DEFAULT 1 COMMENT 'Number of time units for recurrence of pledge payments.', + `frequency_day` int unsigned NOT NULL DEFAULT 3 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.', + `installments` int unsigned NOT NULL DEFAULT 1 COMMENT 'Total number of payments to be made.', + `start_date` datetime NOT NULL COMMENT 'The date the first scheduled pledge occurs.', + `create_date` datetime NOT NULL COMMENT 'When this pledge record was created.', + `acknowledge_date` datetime COMMENT 'When a pledge acknowledgement message was sent to the contributor.', + `modified_date` datetime COMMENT 'Last updated date for this pledge record.', + `cancel_date` datetime COMMENT 'Date this pledge was cancelled by contributor.', + `end_date` datetime COMMENT 'Date this pledge finished successfully (total pledge payments equal to or greater than pledged amount).', + `max_reminders` int unsigned DEFAULT 1 COMMENT 'The maximum number of payment reminders to send for any given payment.', + `initial_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send initial reminder this many days prior to the payment due date.', + `additional_reminder_day` int unsigned DEFAULT 5 COMMENT 'Send additional reminder this many days after last one sent, up to maximum number of reminders.', + `status_id` int unsigned NOT NULL COMMENT 'Implicit foreign key to civicrm_option_values in the pledge_status option group.', + `is_test` tinyint NOT NULL DEFAULT 0, + `campaign_id` int unsigned COMMENT 'The campaign for which this pledge has been initiated.', + PRIMARY KEY (`id`), + INDEX `index_status`(status_id), + CONSTRAINT FK_civicrm_pledge_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_pledge_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`), + CONSTRAINT FK_civicrm_pledge_contribution_page_id FOREIGN KEY (`contribution_page_id`) REFERENCES `civicrm_contribution_page`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_pledge_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3231,35 +2601,35 @@ CREATE TABLE `civicrm_pledge` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_report_instance` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Report Instance ID', - `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this instance for', - `title` varchar(255) COMMENT 'Report Instance Title.', - `report_id` varchar(512) NOT NULL COMMENT 'FK to civicrm_option_value for the report template', - `name` varchar(255) COMMENT 'when combined with report_id/template uniquely identifies the instance', - `args` varchar(255) COMMENT 'arguments that are passed in the url when invoking the instance', - `description` varchar(255) COMMENT 'Report Instance description.', - `permission` varchar(255) COMMENT 'permission required to be able to run this instance', - `grouprole` varchar(1024) COMMENT 'role required to be able to run this instance', - `form_values` longtext COMMENT 'Submitted form values for this report', - `is_active` tinyint COMMENT 'Is this entry active?', - `created_id` int unsigned COMMENT 'FK to contact table.', - `owner_id` int unsigned COMMENT 'FK to contact table.', - `email_subject` varchar(255) COMMENT 'Subject of email', - `email_to` text COMMENT 'comma-separated list of email addresses to send the report to', - `email_cc` text COMMENT 'comma-separated list of email addresses to send the report to', - `header` text COMMENT 'comma-separated list of email addresses to send the report to', - `footer` text COMMENT 'comma-separated list of email addresses to send the report to', - `navigation_id` int unsigned COMMENT 'FK to navigation ID', - `drilldown_id` int unsigned COMMENT 'FK to instance ID drilldown to', - `is_reserved` tinyint DEFAULT 0 -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_report_instance_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_report_instance_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_report_instance_owner_id FOREIGN KEY (`owner_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_report_instance_navigation_id FOREIGN KEY (`navigation_id`) REFERENCES `civicrm_navigation`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_report_instance_drilldown_id FOREIGN KEY (`drilldown_id`) REFERENCES `civicrm_report_instance`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Report Instance ID', + `domain_id` int unsigned NOT NULL COMMENT 'Which Domain is this instance for', + `title` varchar(255) COMMENT 'Report Instance Title.', + `report_id` varchar(512) NOT NULL COMMENT 'FK to civicrm_option_value for the report template', + `name` varchar(255) COMMENT 'when combined with report_id/template uniquely identifies the instance', + `args` varchar(255) COMMENT 'arguments that are passed in the url when invoking the instance', + `description` varchar(255) COMMENT 'Report Instance description.', + `permission` varchar(255) COMMENT 'permission required to be able to run this instance', + `grouprole` varchar(1024) COMMENT 'role required to be able to run this instance', + `form_values` longtext COMMENT 'Submitted form values for this report', + `is_active` tinyint COMMENT 'Is this entry active?', + `created_id` int unsigned COMMENT 'FK to contact table.', + `owner_id` int unsigned COMMENT 'FK to contact table.', + `email_subject` varchar(255) COMMENT 'Subject of email', + `email_to` text COMMENT 'comma-separated list of email addresses to send the report to', + `email_cc` text COMMENT 'comma-separated list of email addresses to send the report to', + `header` text COMMENT 'comma-separated list of email addresses to send the report to', + `footer` text COMMENT 'comma-separated list of email addresses to send the report to', + `navigation_id` int unsigned COMMENT 'FK to navigation ID', + `drilldown_id` int unsigned COMMENT 'FK to instance ID drilldown to', + `is_reserved` tinyint DEFAULT 0, + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_report_instance_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_report_instance_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_report_instance_owner_id FOREIGN KEY (`owner_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_report_instance_navigation_id FOREIGN KEY (`navigation_id`) REFERENCES `civicrm_navigation`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_report_instance_drilldown_id FOREIGN KEY (`drilldown_id`) REFERENCES `civicrm_report_instance`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3267,30 +2637,25 @@ CREATE TABLE `civicrm_report_instance` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_price_set` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Set', - `domain_id` int unsigned COMMENT 'Which Domain is this price-set for', - `name` varchar(255) NOT NULL COMMENT 'Variable name/programmatic handle for this set of price fields.', - `title` varchar(255) NOT NULL COMMENT 'Displayed title for the Price Set.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this price set active', - `help_pre` text COMMENT 'Description and/or help text to display before fields in form.', - `help_post` text COMMENT 'Description and/or help text to display after fields in form.', - `javascript` varchar(64) COMMENT 'Optional Javascript script function(s) included on the form with this price_set. Can be used for conditional', - `extends` varchar(255) NOT NULL COMMENT 'What components are using this price set?', - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type(for membership price sets only).', - `is_quick_config` tinyint DEFAULT 0 COMMENT 'Is set if edited on Contribution or Event Page rather than through Manage Price Sets', - `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a predefined system price set (i.e. it can not be deleted, edited)?', - `min_amount` decimal(20,2) DEFAULT 0.0 COMMENT 'Minimum Amount required for this set.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_price_set_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) , CONSTRAINT FK_civicrm_price_set_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Set', + `domain_id` int unsigned COMMENT 'Which Domain is this price-set for', + `name` varchar(255) NOT NULL COMMENT 'Variable name/programmatic handle for this set of price fields.', + `title` varchar(255) NOT NULL COMMENT 'Displayed title for the Price Set.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this price set active', + `help_pre` text COMMENT 'Description and/or help text to display before fields in form.', + `help_post` text COMMENT 'Description and/or help text to display after fields in form.', + `javascript` varchar(64) COMMENT 'Optional Javascript script function(s) included on the form with this price_set. Can be used for conditional', + `extends` varchar(255) NOT NULL COMMENT 'What components are using this price set?', + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type(for membership price sets only).', + `is_quick_config` tinyint DEFAULT 0 COMMENT 'Is set if edited on Contribution or Event Page rather than through Manage Price Sets', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a predefined system price set (i.e. it can not be deleted, edited)?', + `min_amount` decimal(20,2) DEFAULT 0.0 COMMENT 'Minimum Amount required for this set.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_price_set_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`), + CONSTRAINT FK_civicrm_price_set_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3298,22 +2663,15 @@ CREATE TABLE `civicrm_price_set` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_price_set_entity` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Set Entity', - `entity_table` varchar(64) NOT NULL COMMENT 'Table which uses this price set', - `entity_id` int unsigned NOT NULL COMMENT 'Item in table', - `price_set_id` int unsigned NOT NULL COMMENT 'price set being used' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_entity`( - entity_table - , entity_id - ) - -, CONSTRAINT FK_civicrm_price_set_entity_price_set_id FOREIGN KEY (`price_set_id`) REFERENCES `civicrm_price_set`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Set Entity', + `entity_table` varchar(64) NOT NULL COMMENT 'Table which uses this price set', + `entity_id` int unsigned NOT NULL COMMENT 'Item in table', + `price_set_id` int unsigned NOT NULL COMMENT 'price set being used', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_entity`(entity_table, entity_id), + CONSTRAINT FK_civicrm_price_set_entity_price_set_id FOREIGN KEY (`price_set_id`) REFERENCES `civicrm_price_set`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3321,23 +2679,16 @@ CREATE TABLE `civicrm_price_set_entity` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_county` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'County ID', - `name` varchar(64) COMMENT 'Name of County', - `abbreviation` varchar(4) COMMENT '2-4 Character Abbreviation of County', - `state_province_id` int unsigned NOT NULL COMMENT 'ID of State/Province that County belongs', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this County active?' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name_state_id`( - name - , state_province_id - ) - -, CONSTRAINT FK_civicrm_county_state_province_id FOREIGN KEY (`state_province_id`) REFERENCES `civicrm_state_province`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'County ID', + `name` varchar(64) COMMENT 'Name of County', + `abbreviation` varchar(4) COMMENT '2-4 Character Abbreviation of County', + `state_province_id` int unsigned NOT NULL COMMENT 'ID of State/Province that County belongs', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this County active?', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name_state_id`(name, state_province_id), + CONSTRAINT FK_civicrm_county_state_province_id FOREIGN KEY (`state_province_id`) REFERENCES `civicrm_state_province`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3347,26 +2698,22 @@ CREATE TABLE `civicrm_county` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_dashboard` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `domain_id` int unsigned NOT NULL COMMENT 'Domain for dashboard', - `name` varchar(64) COMMENT 'Internal name of dashlet.', - `label` varchar(255) COMMENT 'dashlet title', - `url` varchar(255) COMMENT 'url in case of external dashlet', - `permission` varchar(255) COMMENT 'Permission for the dashlet', - `permission_operator` varchar(3) COMMENT 'Permission Operator', - `fullscreen_url` varchar(255) COMMENT 'fullscreen url for dashlet', - `is_active` tinyint DEFAULT 0 COMMENT 'Is this dashlet active?', - `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this dashlet reserved?', - `cache_minutes` int unsigned NOT NULL DEFAULT 60 COMMENT 'Number of minutes to cache dashlet content in browser localStorage.', - `directive` varchar(255) COMMENT 'Element name of angular directive to invoke (lowercase hyphenated format)' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_dashboard_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `domain_id` int unsigned NOT NULL COMMENT 'Domain for dashboard', + `name` varchar(64) COMMENT 'Internal name of dashlet.', + `label` varchar(255) COMMENT 'dashlet title', + `url` varchar(255) COMMENT 'url in case of external dashlet', + `permission` varchar(255) COMMENT 'Permission for the dashlet', + `permission_operator` varchar(3) COMMENT 'Permission Operator', + `fullscreen_url` varchar(255) COMMENT 'fullscreen url for dashlet', + `is_active` tinyint DEFAULT 0 COMMENT 'Is this dashlet active?', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this dashlet reserved?', + `cache_minutes` int unsigned NOT NULL DEFAULT 60 COMMENT 'Number of minutes to cache dashlet content in browser localStorage.', + `directive` varchar(255) COMMENT 'Element name of angular directive to invoke (lowercase hyphenated format)', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_dashboard_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3376,29 +2723,18 @@ CREATE TABLE `civicrm_dashboard` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_discount` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to discount, e.g. civicrm_event', - `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', - `price_set_id` int unsigned NOT NULL COMMENT 'FK to civicrm_price_set', - `start_date` date COMMENT 'Date when discount starts.', - `end_date` date COMMENT 'Date when discount ends.' -, - PRIMARY KEY (`id`) - - , INDEX `index_entity`( - entity_table - , entity_id - ) - , INDEX `index_entity_option_id`( - entity_table - , entity_id - , price_set_id - ) - -, CONSTRAINT FK_civicrm_discount_price_set_id FOREIGN KEY (`price_set_id`) REFERENCES `civicrm_price_set`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to discount, e.g. civicrm_event', + `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', + `price_set_id` int unsigned NOT NULL COMMENT 'FK to civicrm_price_set', + `start_date` date COMMENT 'Date when discount starts.', + `end_date` date COMMENT 'Date when discount ends.', + PRIMARY KEY (`id`), + INDEX `index_entity`(entity_table, entity_id), + INDEX `index_entity_option_id`(entity_table, entity_id, price_set_id), + CONSTRAINT FK_civicrm_discount_price_set_id FOREIGN KEY (`price_set_id`) REFERENCES `civicrm_price_set`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3408,23 +2744,15 @@ CREATE TABLE `civicrm_discount` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_entity_file` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to file, e.g. civicrm_contact', - `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', - `file_id` int unsigned NOT NULL COMMENT 'FK to civicrm_file' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_entity_id_entity_table_file_id`( - entity_id - , entity_table - , file_id - ) - -, CONSTRAINT FK_civicrm_entity_file_file_id FOREIGN KEY (`file_id`) REFERENCES `civicrm_file`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to file, e.g. civicrm_contact', + `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', + `file_id` int unsigned NOT NULL COMMENT 'FK to civicrm_file', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_entity_id_entity_table_file_id`(entity_id, entity_table, file_id), + CONSTRAINT FK_civicrm_entity_file_file_id FOREIGN KEY (`file_id`) REFERENCES `civicrm_file`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3434,23 +2762,15 @@ CREATE TABLE `civicrm_entity_file` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_entity_tag` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to file, e.g. civicrm_contact', - `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', - `tag_id` int unsigned NOT NULL COMMENT 'FK to civicrm_tag' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_entity_id_entity_table_tag_id`( - entity_id - , entity_table - , tag_id - ) - -, CONSTRAINT FK_civicrm_entity_tag_tag_id FOREIGN KEY (`tag_id`) REFERENCES `civicrm_tag`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `entity_table` varchar(64) COMMENT 'physical tablename for entity being joined to file, e.g. civicrm_contact', + `entity_id` int unsigned NOT NULL COMMENT 'FK to entity table specified in entity_table column.', + `tag_id` int unsigned NOT NULL COMMENT 'FK to civicrm_tag', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_entity_id_entity_table_tag_id`(entity_id, entity_table, tag_id), + CONSTRAINT FK_civicrm_entity_tag_tag_id FOREIGN KEY (`tag_id`) REFERENCES `civicrm_tag`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3460,44 +2780,40 @@ CREATE TABLE `civicrm_entity_tag` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_uf_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this form currently active? If false, hide all related fields for all sharing contexts.', - `group_type` varchar(255) COMMENT 'Comma separated list of the type(s) of profile fields.', - `title` varchar(64) NOT NULL COMMENT 'Form title.', - `frontend_title` varchar(64) COMMENT 'Profile Form Public title', - `description` text COMMENT 'Optional verbose description of the profile.', - `help_pre` text COMMENT 'Description and/or help text to display before fields in form.', - `help_post` text COMMENT 'Description and/or help text to display after fields in form.', - `limit_listings_group_id` int unsigned COMMENT 'Group id, foreign key from civicrm_group', - `post_URL` varchar(255) COMMENT 'Redirect to URL.', - `add_to_group_id` int unsigned COMMENT 'foreign key to civicrm_group_id', - `add_captcha` tinyint DEFAULT 0 COMMENT 'Should a CAPTCHA widget be included this Profile form.', - `is_map` tinyint DEFAULT 0 COMMENT 'Do we want to map results from this profile.', - `is_edit_link` tinyint DEFAULT 0 COMMENT 'Should edit link display in profile selector', - `is_uf_link` tinyint DEFAULT 0 COMMENT 'Should we display a link to the website profile in profile selector', - `is_update_dupe` tinyint DEFAULT 0 COMMENT 'Should we update the contact record if we find a duplicate', - `cancel_URL` varchar(255) COMMENT 'Redirect to URL when Cancle button clik .', - `is_cms_user` tinyint DEFAULT 0 COMMENT 'Should we create a cms user for this profile ', - `notify` text , - `is_reserved` tinyint COMMENT 'Is this group reserved for use by some other CiviCRM functionality?', - `name` varchar(64) COMMENT 'Name of the UF group for directly addressing it in the codebase', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this UF group', - `created_date` datetime COMMENT 'Date and time this UF group was created.', - `is_proximity_search` tinyint DEFAULT 0 COMMENT 'Should we include proximity search feature in this profile search form?', - `cancel_button_text` varchar(64) DEFAULT NULL COMMENT 'Custom Text to display on the Cancel button when used in create or edit mode', - `submit_button_text` varchar(64) DEFAULT NULL COMMENT 'Custom Text to display on the submit button on profile edit/create screens', - `add_cancel_button` tinyint DEFAULT 1 COMMENT 'Should a Cancel button be included in this Profile form.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_name`( - name - ) - -, CONSTRAINT FK_civicrm_uf_group_limit_listings_group_id FOREIGN KEY (`limit_listings_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_uf_group_add_to_group_id FOREIGN KEY (`add_to_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_uf_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this form currently active? If false, hide all related fields for all sharing contexts.', + `group_type` varchar(255) COMMENT 'Comma separated list of the type(s) of profile fields.', + `title` varchar(64) NOT NULL COMMENT 'Form title.', + `frontend_title` varchar(64) COMMENT 'Profile Form Public title', + `description` text COMMENT 'Optional verbose description of the profile.', + `help_pre` text COMMENT 'Description and/or help text to display before fields in form.', + `help_post` text COMMENT 'Description and/or help text to display after fields in form.', + `limit_listings_group_id` int unsigned COMMENT 'Group id, foreign key from civicrm_group', + `post_URL` varchar(255) COMMENT 'Redirect to URL.', + `add_to_group_id` int unsigned COMMENT 'foreign key to civicrm_group_id', + `add_captcha` tinyint DEFAULT 0 COMMENT 'Should a CAPTCHA widget be included this Profile form.', + `is_map` tinyint DEFAULT 0 COMMENT 'Do we want to map results from this profile.', + `is_edit_link` tinyint DEFAULT 0 COMMENT 'Should edit link display in profile selector', + `is_uf_link` tinyint DEFAULT 0 COMMENT 'Should we display a link to the website profile in profile selector', + `is_update_dupe` tinyint DEFAULT 0 COMMENT 'Should we update the contact record if we find a duplicate', + `cancel_URL` varchar(255) COMMENT 'Redirect to URL when Cancle button clik .', + `is_cms_user` tinyint DEFAULT 0 COMMENT 'Should we create a cms user for this profile ', + `notify` text, + `is_reserved` tinyint COMMENT 'Is this group reserved for use by some other CiviCRM functionality?', + `name` varchar(64) COMMENT 'Name of the UF group for directly addressing it in the codebase', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this UF group', + `created_date` datetime COMMENT 'Date and time this UF group was created.', + `is_proximity_search` tinyint DEFAULT 0 COMMENT 'Should we include proximity search feature in this profile search form?', + `cancel_button_text` varchar(64) DEFAULT NULL COMMENT 'Custom Text to display on the Cancel button when used in create or edit mode', + `submit_button_text` varchar(64) DEFAULT NULL COMMENT 'Custom Text to display on the submit button on profile edit/create screens', + `add_cancel_button` tinyint DEFAULT 1 COMMENT 'Should a Cancel button be included in this Profile form.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_uf_group_limit_listings_group_id FOREIGN KEY (`limit_listings_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_uf_group_add_to_group_id FOREIGN KEY (`add_to_group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_uf_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3507,36 +2823,31 @@ CREATE TABLE `civicrm_uf_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_uf_field` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `uf_group_id` int unsigned NOT NULL COMMENT 'Which form does this field belong to.', - `field_name` varchar(64) NOT NULL COMMENT 'Name for CiviCRM field which is being exposed for sharing.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this field currently shareable? If false, hide the field for all sharing contexts.', - `is_view` tinyint DEFAULT 0 COMMENT 'the field is view only and not editable in user forms.', - `is_required` tinyint DEFAULT 0 COMMENT 'Is this field required when included in a user or registration form?', - `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls field display order when user framework fields are displayed in registration and account editing forms.', - `help_post` text COMMENT 'Description and/or help text to display after this field.', - `help_pre` text COMMENT 'Description and/or help text to display before this field.', - `visibility` varchar(32) DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is this field visible.', - `in_selector` tinyint DEFAULT 0 COMMENT 'Is this field included as a column in the selector table?', - `is_searchable` tinyint DEFAULT 0 COMMENT 'Is this field included search form of profile?', - `location_type_id` int unsigned COMMENT 'Location type of this mapping, if required', - `phone_type_id` int unsigned COMMENT 'Phone Type ID, if required', - `website_type_id` int unsigned COMMENT 'Website Type ID, if required', - `label` varchar(255) NOT NULL COMMENT 'To save label for fields.', - `field_type` varchar(255) COMMENT 'This field saves field type (ie individual,household.. field etc).', - `is_reserved` tinyint COMMENT 'Is this field reserved for use by some other CiviCRM functionality?', - `is_multi_summary` tinyint DEFAULT 0 COMMENT 'Include in multi-record listing?' -, - PRIMARY KEY (`id`) - - , INDEX `IX_website_type_id`( - website_type_id - ) - -, CONSTRAINT FK_civicrm_uf_field_uf_group_id FOREIGN KEY (`uf_group_id`) REFERENCES `civicrm_uf_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_uf_field_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `uf_group_id` int unsigned NOT NULL COMMENT 'Which form does this field belong to.', + `field_name` varchar(64) NOT NULL COMMENT 'Name for CiviCRM field which is being exposed for sharing.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this field currently shareable? If false, hide the field for all sharing contexts.', + `is_view` tinyint DEFAULT 0 COMMENT 'the field is view only and not editable in user forms.', + `is_required` tinyint DEFAULT 0 COMMENT 'Is this field required when included in a user or registration form?', + `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls field display order when user framework fields are displayed in registration and account editing forms.', + `help_post` text COMMENT 'Description and/or help text to display after this field.', + `help_pre` text COMMENT 'Description and/or help text to display before this field.', + `visibility` varchar(32) DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is this field visible.', + `in_selector` tinyint DEFAULT 0 COMMENT 'Is this field included as a column in the selector table?', + `is_searchable` tinyint DEFAULT 0 COMMENT 'Is this field included search form of profile?', + `location_type_id` int unsigned COMMENT 'Location type of this mapping, if required', + `phone_type_id` int unsigned COMMENT 'Phone Type ID, if required', + `website_type_id` int unsigned COMMENT 'Website Type ID, if required', + `label` varchar(255) NOT NULL COMMENT 'To save label for fields.', + `field_type` varchar(255) COMMENT 'This field saves field type (ie individual,household.. field etc).', + `is_reserved` tinyint COMMENT 'Is this field reserved for use by some other CiviCRM functionality?', + `is_multi_summary` tinyint DEFAULT 0 COMMENT 'Include in multi-record listing?', + PRIMARY KEY (`id`), + INDEX `IX_website_type_id`(website_type_id), + CONSTRAINT FK_civicrm_uf_field_uf_group_id FOREIGN KEY (`uf_group_id`) REFERENCES `civicrm_uf_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_uf_field_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3546,26 +2857,19 @@ CREATE TABLE `civicrm_uf_field` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_uf_join` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this join currently active?', - `module` varchar(64) NOT NULL COMMENT 'Module which owns this uf_join instance, e.g. User Registration, CiviDonate, etc.', - `entity_table` varchar(64) 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.', - `entity_id` int unsigned COMMENT 'Foreign key to the referenced item.', - `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls display order when multiple user framework groups are setup for concurrent display.', - `uf_group_id` int unsigned NOT NULL COMMENT 'Which form does this field belong to.', - `module_data` longtext COMMENT 'Json serialized array of data used by the ufjoin.module' -, - PRIMARY KEY (`id`) - - , INDEX `index_entity`( - entity_table - , entity_id - ) - -, CONSTRAINT FK_civicrm_uf_join_uf_group_id FOREIGN KEY (`uf_group_id`) REFERENCES `civicrm_uf_group`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique table ID', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this join currently active?', + `module` varchar(64) NOT NULL COMMENT 'Module which owns this uf_join instance, e.g. User Registration, CiviDonate, etc.', + `entity_table` varchar(64) 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.', + `entity_id` int unsigned COMMENT 'Foreign key to the referenced item.', + `weight` int NOT NULL DEFAULT 1 COMMENT 'Controls display order when multiple user framework groups are setup for concurrent display.', + `uf_group_id` int unsigned NOT NULL COMMENT 'Which form does this field belong to.', + `module_data` longtext COMMENT 'Json serialized array of data used by the ufjoin.module', + PRIMARY KEY (`id`), + INDEX `index_entity`(entity_table, entity_id), + CONSTRAINT FK_civicrm_uf_join_uf_group_id FOREIGN KEY (`uf_group_id`) REFERENCES `civicrm_uf_group`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3575,56 +2879,55 @@ CREATE TABLE `civicrm_uf_join` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_action_schedule` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `name` varchar(64) COMMENT 'Name of the action(reminder)', - `title` varchar(64) COMMENT 'Title of the action(reminder)', - `recipient` varchar(64) COMMENT 'Recipient', - `limit_to` tinyint COMMENT 'Is this the recipient criteria limited to OR in addition to?', - `entity_value` varchar(255) COMMENT 'Entity value', - `entity_status` varchar(64) COMMENT 'Entity status', - `start_action_offset` int unsigned DEFAULT 0 COMMENT 'Reminder Interval.', - `start_action_unit` varchar(8) COMMENT 'Time units for reminder.', - `start_action_condition` varchar(64) COMMENT 'Reminder Action', - `start_action_date` varchar(64) COMMENT 'Entity date', - `is_repeat` tinyint DEFAULT 0 , - `repetition_frequency_unit` varchar(8) COMMENT 'Time units for repetition of reminder.', - `repetition_frequency_interval` int unsigned DEFAULT 0 COMMENT 'Time interval for repeating the reminder.', - `end_frequency_unit` varchar(8) COMMENT 'Time units till repetition of reminder.', - `end_frequency_interval` int unsigned DEFAULT 0 COMMENT 'Time interval till repeating the reminder.', - `end_action` varchar(32) COMMENT 'Reminder Action till repeating the reminder.', - `end_date` varchar(64) COMMENT 'Entity end date', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this option active?', - `recipient_manual` varchar(128) COMMENT 'Contact IDs to which reminder should be sent.', - `recipient_listing` varchar(128) COMMENT 'listing based on recipient field.', - `body_text` longtext COMMENT 'Body of the mailing in text format.', - `body_html` longtext COMMENT 'Body of the mailing in html format.', - `sms_body_text` longtext COMMENT 'Content of the SMS text.', - `subject` varchar(128) COMMENT 'Subject of mailing', - `record_activity` tinyint DEFAULT NULL COMMENT 'Record Activity for this reminder?', - `mapping_id` varchar(64) COMMENT 'Name/ID of the mapping to use on this table', - `group_id` int unsigned COMMENT 'FK to Group', - `msg_template_id` int unsigned COMMENT 'FK to the message template.', - `sms_template_id` int unsigned COMMENT 'FK to the message template.', - `absolute_date` date COMMENT 'Date on which the reminder be sent.', - `from_name` varchar(255) COMMENT 'Name in \"from\" field', - `from_email` varchar(255) COMMENT 'Email address in \"from\" field', - `mode` varchar(128) DEFAULT "Email" COMMENT 'Send the message as email or sms or both.', - `sms_provider_id` int unsigned , - `used_for` varchar(64) COMMENT 'Used for repeating entity', - `filter_contact_language` varchar(128) COMMENT 'Used for multilingual installation', - `communication_language` varchar(8) COMMENT 'Used for multilingual installation', - `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the scheduled reminder created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the reminder was created or modified.', - `effective_start_date` timestamp NULL COMMENT 'Earliest date to consider start events from.', - `effective_end_date` timestamp NULL COMMENT 'Latest date to consider end events from.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_action_schedule_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_action_schedule_msg_template_id FOREIGN KEY (`msg_template_id`) REFERENCES `civicrm_msg_template`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_action_schedule_sms_template_id FOREIGN KEY (`sms_template_id`) REFERENCES `civicrm_msg_template`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_action_schedule_sms_provider_id FOREIGN KEY (`sms_provider_id`) REFERENCES `civicrm_sms_provider`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COMMENT 'Name of the action(reminder)', + `title` varchar(64) COMMENT 'Title of the action(reminder)', + `recipient` varchar(64) COMMENT 'Recipient', + `limit_to` tinyint COMMENT 'Is this the recipient criteria limited to OR in addition to?', + `entity_value` varchar(255) COMMENT 'Entity value', + `entity_status` varchar(64) COMMENT 'Entity status', + `start_action_offset` int unsigned DEFAULT 0 COMMENT 'Reminder Interval.', + `start_action_unit` varchar(8) COMMENT 'Time units for reminder.', + `start_action_condition` varchar(64) COMMENT 'Reminder Action', + `start_action_date` varchar(64) COMMENT 'Entity date', + `is_repeat` tinyint DEFAULT 0, + `repetition_frequency_unit` varchar(8) COMMENT 'Time units for repetition of reminder.', + `repetition_frequency_interval` int unsigned DEFAULT 0 COMMENT 'Time interval for repeating the reminder.', + `end_frequency_unit` varchar(8) COMMENT 'Time units till repetition of reminder.', + `end_frequency_interval` int unsigned DEFAULT 0 COMMENT 'Time interval till repeating the reminder.', + `end_action` varchar(32) COMMENT 'Reminder Action till repeating the reminder.', + `end_date` varchar(64) COMMENT 'Entity end date', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this option active?', + `recipient_manual` varchar(128) COMMENT 'Contact IDs to which reminder should be sent.', + `recipient_listing` varchar(128) COMMENT 'listing based on recipient field.', + `body_text` longtext COMMENT 'Body of the mailing in text format.', + `body_html` longtext COMMENT 'Body of the mailing in html format.', + `sms_body_text` longtext COMMENT 'Content of the SMS text.', + `subject` varchar(128) COMMENT 'Subject of mailing', + `record_activity` tinyint DEFAULT NULL COMMENT 'Record Activity for this reminder?', + `mapping_id` varchar(64) COMMENT 'Name/ID of the mapping to use on this table', + `group_id` int unsigned COMMENT 'FK to Group', + `msg_template_id` int unsigned COMMENT 'FK to the message template.', + `sms_template_id` int unsigned COMMENT 'FK to the message template.', + `absolute_date` date COMMENT 'Date on which the reminder be sent.', + `from_name` varchar(255) COMMENT 'Name in \"from\" field', + `from_email` varchar(255) COMMENT 'Email address in \"from\" field', + `mode` varchar(128) DEFAULT "Email" COMMENT 'Send the message as email or sms or both.', + `sms_provider_id` int unsigned, + `used_for` varchar(64) COMMENT 'Used for repeating entity', + `filter_contact_language` varchar(128) COMMENT 'Used for multilingual installation', + `communication_language` varchar(8) COMMENT 'Used for multilingual installation', + `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the scheduled reminder created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the reminder was created or modified.', + `effective_start_date` timestamp NULL COMMENT 'Earliest date to consider start events from.', + `effective_end_date` timestamp NULL COMMENT 'Latest date to consider end events from.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_action_schedule_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_action_schedule_msg_template_id FOREIGN KEY (`msg_template_id`) REFERENCES `civicrm_msg_template`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_action_schedule_sms_template_id FOREIGN KEY (`sms_template_id`) REFERENCES `civicrm_msg_template`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_action_schedule_sms_provider_id FOREIGN KEY (`sms_provider_id`) REFERENCES `civicrm_sms_provider`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3634,24 +2937,21 @@ CREATE TABLE `civicrm_action_schedule` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_action_log` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `entity_id` int unsigned NOT NULL COMMENT 'FK to id of the entity that the action was performed on. Pseudo - FK.', - `entity_table` varchar(255) COMMENT 'name of the entity table for the above id, e.g. civicrm_activity, civicrm_participant', - `action_schedule_id` int unsigned NOT NULL COMMENT 'FK to the action schedule that this action originated from.', - `action_date_time` datetime COMMENT 'date time that the action was performed on.', - `is_error` tinyint DEFAULT 0 COMMENT 'Was there any error sending the reminder?', - `message` text COMMENT 'Description / text in case there was an error encountered.', - `repetition_number` int unsigned COMMENT 'Keeps track of the sequence number of this repetition.', - `reference_date` datetime DEFAULT NULL COMMENT 'Stores the date from the entity which triggered this reminder action (e.g. membership.end_date for most membership renewal reminders)' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_action_log_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_action_log_action_schedule_id FOREIGN KEY (`action_schedule_id`) REFERENCES `civicrm_action_schedule`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `entity_id` int unsigned NOT NULL COMMENT 'FK to id of the entity that the action was performed on. Pseudo - FK.', + `entity_table` varchar(255) COMMENT 'name of the entity table for the above id, e.g. civicrm_activity, civicrm_participant', + `action_schedule_id` int unsigned NOT NULL COMMENT 'FK to the action schedule that this action originated from.', + `action_date_time` datetime COMMENT 'date time that the action was performed on.', + `is_error` tinyint DEFAULT 0 COMMENT 'Was there any error sending the reminder?', + `message` text COMMENT 'Description / text in case there was an error encountered.', + `repetition_number` int unsigned COMMENT 'Keeps track of the sequence number of this repetition.', + `reference_date` datetime DEFAULT NULL COMMENT 'Stores the date from the entity which triggered this reminder action (e.g. membership.end_date for most membership renewal reminders)', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_action_log_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_action_log_action_schedule_id FOREIGN KEY (`action_schedule_id`) REFERENCES `civicrm_action_schedule`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3661,24 +2961,18 @@ CREATE TABLE `civicrm_action_log` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_dashboard_contact` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `dashboard_id` int unsigned NOT NULL COMMENT 'Dashboard ID', - `contact_id` int unsigned NOT NULL COMMENT 'Contact ID', - `column_no` int DEFAULT 0 COMMENT 'column no for this widget', - `is_active` tinyint DEFAULT 0 COMMENT 'Is this widget active?', - `weight` int DEFAULT 0 COMMENT 'Ordering of the widgets.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `index_dashboard_id_contact_id`( - dashboard_id - , contact_id - ) - -, CONSTRAINT FK_civicrm_dashboard_contact_dashboard_id FOREIGN KEY (`dashboard_id`) REFERENCES `civicrm_dashboard`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_dashboard_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `dashboard_id` int unsigned NOT NULL COMMENT 'Dashboard ID', + `contact_id` int unsigned NOT NULL COMMENT 'Contact ID', + `column_no` int DEFAULT 0 COMMENT 'column no for this widget', + `is_active` tinyint DEFAULT 0 COMMENT 'Is this widget active?', + `weight` int DEFAULT 0 COMMENT 'Ordering of the widgets.', + PRIMARY KEY (`id`), + UNIQUE INDEX `index_dashboard_id_contact_id`(dashboard_id, contact_id), + CONSTRAINT FK_civicrm_dashboard_contact_dashboard_id FOREIGN KEY (`dashboard_id`) REFERENCES `civicrm_dashboard`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_dashboard_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3688,25 +2982,24 @@ CREATE TABLE `civicrm_dashboard_contact` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_relationship` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship ID', - `contact_id_a` int unsigned NOT NULL COMMENT 'id of the first contact', - `contact_id_b` int unsigned NOT NULL COMMENT 'id of the second contact', - `relationship_type_id` int unsigned NOT NULL COMMENT 'Type of relationship', - `start_date` date COMMENT 'date when the relationship started', - `end_date` date COMMENT 'date when the relationship ended', - `is_active` tinyint DEFAULT 1 COMMENT 'is the relationship active ?', - `description` varchar(255) COMMENT 'Optional verbose description for the relationship.', - `is_permission_a_b` int unsigned NOT NULL DEFAULT 0 COMMENT 'Permission that Contact A has to view/update Contact B', - `is_permission_b_a` int unsigned NOT NULL DEFAULT 0 COMMENT 'Permission that Contact B has to view/update Contact A', - `case_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_case' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_relationship_contact_id_a FOREIGN KEY (`contact_id_a`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_contact_id_b FOREIGN KEY (`contact_id_b`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_case_id FOREIGN KEY (`case_id`) REFERENCES `civicrm_case`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship ID', + `contact_id_a` int unsigned NOT NULL COMMENT 'id of the first contact', + `contact_id_b` int unsigned NOT NULL COMMENT 'id of the second contact', + `relationship_type_id` int unsigned NOT NULL COMMENT 'Type of relationship', + `start_date` date COMMENT 'date when the relationship started', + `end_date` date COMMENT 'date when the relationship ended', + `is_active` tinyint DEFAULT 1 COMMENT 'is the relationship active ?', + `description` varchar(255) COMMENT 'Optional verbose description for the relationship.', + `is_permission_a_b` int unsigned NOT NULL DEFAULT 0 COMMENT 'Permission that Contact A has to view/update Contact B', + `is_permission_b_a` int unsigned NOT NULL DEFAULT 0 COMMENT 'Permission that Contact B has to view/update Contact A', + `case_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_case', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_relationship_contact_id_a FOREIGN KEY (`contact_id_a`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_relationship_contact_id_b FOREIGN KEY (`contact_id_b`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_relationship_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_relationship_case_id FOREIGN KEY (`case_id`) REFERENCES `civicrm_case`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3716,40 +3009,28 @@ CREATE TABLE `civicrm_relationship` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_relationship_cache` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship Cache ID', - `relationship_id` int unsigned NOT NULL COMMENT 'id of the relationship (FK to civicrm_relationship.id)', - `relationship_type_id` int unsigned NOT NULL COMMENT 'id of the relationship type', - `orientation` char(3) NOT NULL COMMENT 'The cache record is a permutation of the original relationship record. The orientation indicates whether it is forward (a_b) or reverse (b_a) relationship.', - `near_contact_id` int unsigned NOT NULL COMMENT 'id of the first contact', - `near_relation` varchar(64) COMMENT 'name for relationship of near_contact to far_contact.', - `far_contact_id` int unsigned NOT NULL COMMENT 'id of the second contact', - `far_relation` varchar(64) COMMENT 'name for relationship of far_contact to near_contact.', - `is_active` tinyint DEFAULT 1 COMMENT 'is the relationship active ?', - `start_date` date COMMENT 'date when the relationship started', - `end_date` date COMMENT 'date when the relationship ended' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_relationship`( - relationship_id - , orientation - ) - , INDEX `index_nearid_nearrelation`( - near_contact_id - , near_relation - ) - , INDEX `index_nearid_farrelation`( - near_contact_id - , far_relation - ) - , INDEX `index_near_relation`( - near_relation - ) - -, CONSTRAINT FK_civicrm_relationship_cache_relationship_id FOREIGN KEY (`relationship_id`) REFERENCES `civicrm_relationship`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_cache_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_cache_near_contact_id FOREIGN KEY (`near_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_cache_far_contact_id FOREIGN KEY (`far_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Relationship Cache ID', + `relationship_id` int unsigned NOT NULL COMMENT 'id of the relationship (FK to civicrm_relationship.id)', + `relationship_type_id` int unsigned NOT NULL COMMENT 'id of the relationship type', + `orientation` char(3) NOT NULL COMMENT 'The cache record is a permutation of the original relationship record. The orientation indicates whether it is forward (a_b) or reverse (b_a) relationship.', + `near_contact_id` int unsigned NOT NULL COMMENT 'id of the first contact', + `near_relation` varchar(64) COMMENT 'name for relationship of near_contact to far_contact.', + `far_contact_id` int unsigned NOT NULL COMMENT 'id of the second contact', + `far_relation` varchar(64) COMMENT 'name for relationship of far_contact to near_contact.', + `is_active` tinyint DEFAULT 1 COMMENT 'is the relationship active ?', + `start_date` date COMMENT 'date when the relationship started', + `end_date` date COMMENT 'date when the relationship ended', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_relationship`(relationship_id, orientation), + INDEX `index_nearid_nearrelation`(near_contact_id, near_relation), + INDEX `index_nearid_farrelation`(near_contact_id, far_relation), + INDEX `index_near_relation`(near_relation), + CONSTRAINT FK_civicrm_relationship_cache_relationship_id FOREIGN KEY (`relationship_id`) REFERENCES `civicrm_relationship`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_relationship_cache_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_relationship_cache_near_contact_id FOREIGN KEY (`near_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_relationship_cache_far_contact_id FOREIGN KEY (`far_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3759,60 +3040,66 @@ CREATE TABLE `civicrm_relationship_cache` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `domain_id` int unsigned COMMENT 'Which site is this mailing for', - `header_id` int unsigned COMMENT 'FK to the header component.', - `footer_id` int unsigned COMMENT 'FK to the footer component.', - `reply_id` int unsigned COMMENT 'FK to the auto-responder component.', - `unsubscribe_id` int unsigned COMMENT 'FK to the unsubscribe component.', - `resubscribe_id` int unsigned , - `optout_id` int unsigned COMMENT 'FK to the opt-out component.', - `name` varchar(128) COMMENT 'Mailing Name.', - `mailing_type` varchar(32) COMMENT 'differentiate between standalone mailings, A/B tests, and A/B final-winner', - `from_name` varchar(128) COMMENT 'From Header of mailing', - `from_email` varchar(128) COMMENT 'From Email of mailing', - `replyto_email` varchar(128) COMMENT 'Reply-To Email of mailing', - `template_type` varchar(64) NOT NULL DEFAULT 'traditional' COMMENT 'The language/processing system used for email templates.', - `template_options` longtext COMMENT 'Advanced options used by the email templating system. (JSON encoded)', - `subject` varchar(128) COMMENT 'Subject of mailing', - `body_text` longtext COMMENT 'Body of the mailing in text format.', - `body_html` longtext COMMENT 'Body of the mailing in html format.', - `url_tracking` tinyint COMMENT 'Should we track URL click-throughs for this mailing?', - `forward_replies` tinyint COMMENT 'Should we forward replies back to the author?', - `auto_responder` tinyint COMMENT 'Should we enable the auto-responder?', - `open_tracking` tinyint COMMENT 'Should we track when recipients open/read this mailing?', - `is_completed` tinyint COMMENT 'Has at least one job associated with this mailing finished?', - `msg_template_id` int unsigned COMMENT 'FK to the message template.', - `override_verp` tinyint DEFAULT 0 COMMENT 'Overwrite the VERP address in Reply-To', - `created_id` int unsigned COMMENT 'FK to Contact ID who first created this mailing', - `created_date` timestamp NULL DEFAULT NULL COMMENT 'Date and time this mailing was created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the mailing (or closely related entity) was created or modified or deleted.', - `scheduled_id` int unsigned COMMENT 'FK to Contact ID who scheduled this mailing', - `scheduled_date` timestamp NULL DEFAULT NULL COMMENT 'Date and time this mailing was scheduled.', - `approver_id` int unsigned COMMENT 'FK to Contact ID who approved this mailing', - `approval_date` timestamp NULL DEFAULT NULL COMMENT 'Date and time this mailing was approved.', - `approval_status_id` int unsigned COMMENT 'The status of this mailing. Values: none, approved, rejected', - `approval_note` longtext COMMENT 'Note behind the decision.', - `is_archived` tinyint DEFAULT 0 COMMENT 'Is this mailing archived?', - `visibility` varchar(40) DEFAULT 'Public Pages' COMMENT 'In what context(s) is the mailing contents visible (online viewing)', - `campaign_id` int unsigned COMMENT 'The campaign for which this mailing has been initiated.', - `dedupe_email` tinyint DEFAULT 0 COMMENT 'Remove duplicate emails?', - `sms_provider_id` int unsigned , - `hash` varchar(16) COMMENT 'Key for validating requests related to this mailing.', - `location_type_id` int unsigned COMMENT 'With email_selection_method, determines which email address to use', - `email_selection_method` varchar(20) DEFAULT 'automatic' COMMENT 'With location_type_id, determine how to choose the email address to use.', - `language` varchar(5) COMMENT 'Language of the content of the mailing. Useful for tokens.' -, - PRIMARY KEY (`id`) - - , INDEX `index_hash`( - hash - ) - -, CONSTRAINT FK_civicrm_mailing_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_header_id FOREIGN KEY (`header_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_footer_id FOREIGN KEY (`footer_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_reply_id FOREIGN KEY (`reply_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_unsubscribe_id FOREIGN KEY (`unsubscribe_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_optout_id FOREIGN KEY (`optout_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_msg_template_id FOREIGN KEY (`msg_template_id`) REFERENCES `civicrm_msg_template`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_scheduled_id FOREIGN KEY (`scheduled_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_approver_id FOREIGN KEY (`approver_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_sms_provider_id FOREIGN KEY (`sms_provider_id`) REFERENCES `civicrm_sms_provider`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `domain_id` int unsigned COMMENT 'Which site is this mailing for', + `header_id` int unsigned COMMENT 'FK to the header component.', + `footer_id` int unsigned COMMENT 'FK to the footer component.', + `reply_id` int unsigned COMMENT 'FK to the auto-responder component.', + `unsubscribe_id` int unsigned COMMENT 'FK to the unsubscribe component.', + `resubscribe_id` int unsigned, + `optout_id` int unsigned COMMENT 'FK to the opt-out component.', + `name` varchar(128) COMMENT 'Mailing Name.', + `mailing_type` varchar(32) COMMENT 'differentiate between standalone mailings, A/B tests, and A/B final-winner', + `from_name` varchar(128) COMMENT 'From Header of mailing', + `from_email` varchar(128) COMMENT 'From Email of mailing', + `replyto_email` varchar(128) COMMENT 'Reply-To Email of mailing', + `template_type` varchar(64) NOT NULL DEFAULT 'traditional' COMMENT 'The language/processing system used for email templates.', + `template_options` longtext COMMENT 'Advanced options used by the email templating system. (JSON encoded)', + `subject` varchar(128) COMMENT 'Subject of mailing', + `body_text` longtext COMMENT 'Body of the mailing in text format.', + `body_html` longtext COMMENT 'Body of the mailing in html format.', + `url_tracking` tinyint COMMENT 'Should we track URL click-throughs for this mailing?', + `forward_replies` tinyint COMMENT 'Should we forward replies back to the author?', + `auto_responder` tinyint COMMENT 'Should we enable the auto-responder?', + `open_tracking` tinyint COMMENT 'Should we track when recipients open/read this mailing?', + `is_completed` tinyint COMMENT 'Has at least one job associated with this mailing finished?', + `msg_template_id` int unsigned COMMENT 'FK to the message template.', + `override_verp` tinyint DEFAULT 0 COMMENT 'Overwrite the VERP address in Reply-To', + `created_id` int unsigned COMMENT 'FK to Contact ID who first created this mailing', + `created_date` timestamp NULL DEFAULT NULL COMMENT 'Date and time this mailing was created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When the mailing (or closely related entity) was created or modified or deleted.', + `scheduled_id` int unsigned COMMENT 'FK to Contact ID who scheduled this mailing', + `scheduled_date` timestamp NULL DEFAULT NULL COMMENT 'Date and time this mailing was scheduled.', + `approver_id` int unsigned COMMENT 'FK to Contact ID who approved this mailing', + `approval_date` timestamp NULL DEFAULT NULL COMMENT 'Date and time this mailing was approved.', + `approval_status_id` int unsigned COMMENT 'The status of this mailing. Values: none, approved, rejected', + `approval_note` longtext COMMENT 'Note behind the decision.', + `is_archived` tinyint DEFAULT 0 COMMENT 'Is this mailing archived?', + `visibility` varchar(40) DEFAULT 'Public Pages' COMMENT 'In what context(s) is the mailing contents visible (online viewing)', + `campaign_id` int unsigned COMMENT 'The campaign for which this mailing has been initiated.', + `dedupe_email` tinyint DEFAULT 0 COMMENT 'Remove duplicate emails?', + `sms_provider_id` int unsigned, + `hash` varchar(16) COMMENT 'Key for validating requests related to this mailing.', + `location_type_id` int unsigned COMMENT 'With email_selection_method, determines which email address to use', + `email_selection_method` varchar(20) DEFAULT 'automatic' COMMENT 'With location_type_id, determine how to choose the email address to use.', + `language` varchar(5) COMMENT 'Language of the content of the mailing. Useful for tokens.', + PRIMARY KEY (`id`), + INDEX `index_hash`(hash), + CONSTRAINT FK_civicrm_mailing_domain_id FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_header_id FOREIGN KEY (`header_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_footer_id FOREIGN KEY (`footer_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_reply_id FOREIGN KEY (`reply_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_unsubscribe_id FOREIGN KEY (`unsubscribe_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_optout_id FOREIGN KEY (`optout_id`) REFERENCES `civicrm_mailing_component`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_msg_template_id FOREIGN KEY (`msg_template_id`) REFERENCES `civicrm_msg_template`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_scheduled_id FOREIGN KEY (`scheduled_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_approver_id FOREIGN KEY (`approver_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_sms_provider_id FOREIGN KEY (`sms_provider_id`) REFERENCES `civicrm_sms_provider`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3822,21 +3109,17 @@ CREATE TABLE `civicrm_mailing` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_group` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `mailing_id` int unsigned NOT NULL COMMENT 'The ID of a previous mailing to include/exclude recipients.', - `group_type` varchar(8) COMMENT 'Are the members of the group included or excluded?.', - `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', - `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', - `search_id` int COMMENT 'The filtering search. custom search id or -1 for civicrm api search', - `search_args` text COMMENT 'The arguments to be sent to the search function' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_group_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `mailing_id` int unsigned NOT NULL COMMENT 'The ID of a previous mailing to include/exclude recipients.', + `group_type` varchar(8) COMMENT 'Are the members of the group included or excluded?.', + `entity_table` varchar(64) NOT NULL COMMENT 'Name of table where item being referenced is stored.', + `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', + `search_id` int COMMENT 'The filtering search. custom search id or -1 for civicrm api search', + `search_args` text COMMENT 'The arguments to be sent to the search function', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_group_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3846,17 +3129,13 @@ CREATE TABLE `civicrm_mailing_group` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_trackable_url` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `url` text NOT NULL COMMENT 'The URL to be tracked.', - `mailing_id` int unsigned NOT NULL COMMENT 'FK to the mailing' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_trackable_url_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `url` text NOT NULL COMMENT 'The URL to be tracked.', + `mailing_id` int unsigned NOT NULL COMMENT 'FK to the mailing', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_trackable_url_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3866,25 +3145,22 @@ CREATE TABLE `civicrm_mailing_trackable_url` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_job` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `mailing_id` int unsigned NOT NULL COMMENT 'The ID of the mailing this Job will send.', - `scheduled_date` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was scheduled.', - `start_date` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was started.', - `end_date` timestamp NULL DEFAULT NULL COMMENT 'date on which this job ended.', - `status` varchar(12) COMMENT 'The state of this job', - `is_test` tinyint DEFAULT 0 COMMENT 'Is this job for a test mail?', - `job_type` varchar(255) COMMENT 'Type of mailling job: null | child ', - `parent_id` int unsigned DEFAULT NULL COMMENT 'Parent job id', - `job_offset` int DEFAULT 0 COMMENT 'Offset of the child job', - `job_limit` int DEFAULT 0 COMMENT 'Queue size limit for each child job' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_job_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_job_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_mailing_job`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `mailing_id` int unsigned NOT NULL COMMENT 'The ID of the mailing this Job will send.', + `scheduled_date` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was scheduled.', + `start_date` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was started.', + `end_date` timestamp NULL DEFAULT NULL COMMENT 'date on which this job ended.', + `status` varchar(12) COMMENT 'The state of this job', + `is_test` tinyint DEFAULT 0 COMMENT 'Is this job for a test mail?', + `job_type` varchar(255) COMMENT 'Type of mailling job: null | child ', + `parent_id` int unsigned DEFAULT NULL COMMENT 'Parent job id', + `job_offset` int DEFAULT 0 COMMENT 'Offset of the child job', + `job_limit` int DEFAULT 0 COMMENT 'Queue size limit for each child job', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_job_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_job_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_mailing_job`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3894,19 +3170,18 @@ CREATE TABLE `civicrm_mailing_job` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_recipients` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `mailing_id` int unsigned NOT NULL COMMENT 'The ID of the mailing this Job will send.', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact', - `email_id` int unsigned DEFAULT NULL COMMENT 'FK to Email', - `phone_id` int unsigned DEFAULT NULL COMMENT 'FK to Phone' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_recipients_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_recipients_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_recipients_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_recipients_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `mailing_id` int unsigned NOT NULL COMMENT 'The ID of the mailing this Job will send.', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact', + `email_id` int unsigned DEFAULT NULL COMMENT 'FK to Email', + `phone_id` int unsigned DEFAULT NULL COMMENT 'FK to Phone', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_recipients_mailing_id FOREIGN KEY (`mailing_id`) REFERENCES `civicrm_mailing`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_recipients_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_recipients_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_recipients_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3916,21 +3191,17 @@ CREATE TABLE `civicrm_mailing_recipients` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_spool` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `job_id` int unsigned NOT NULL COMMENT 'The ID of the Job .', - `recipient_email` text COMMENT 'The email of the recipients this mail is to be sent.', - `headers` text COMMENT 'The header information of this mailing .', - `body` text COMMENT 'The body of this mailing.', - `added_at` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was added.', - `removed_at` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was removed.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_spool_job_id FOREIGN KEY (`job_id`) REFERENCES `civicrm_mailing_job`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `job_id` int unsigned NOT NULL COMMENT 'The ID of the Job .', + `recipient_email` text COMMENT 'The email of the recipients this mail is to be sent.', + `headers` text COMMENT 'The header information of this mailing .', + `body` text COMMENT 'The body of this mailing.', + `added_at` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was added.', + `removed_at` timestamp NULL DEFAULT NULL COMMENT 'date on which this job was removed.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_spool_job_id FOREIGN KEY (`job_id`) REFERENCES `civicrm_mailing_job`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3940,23 +3211,20 @@ CREATE TABLE `civicrm_mailing_spool` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_queue` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `job_id` int unsigned NOT NULL COMMENT 'FK to Job', - `email_id` int unsigned DEFAULT NULL COMMENT 'FK to Email', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact', - `hash` varchar(255) NOT NULL COMMENT 'Security hash', - `phone_id` int unsigned DEFAULT NULL COMMENT 'FK to Phone' -, - PRIMARY KEY (`id`) - - , INDEX `index_hash`( - hash - ) - -, CONSTRAINT FK_civicrm_mailing_event_queue_job_id FOREIGN KEY (`job_id`) REFERENCES `civicrm_mailing_job`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_event_queue_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_mailing_event_queue_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_event_queue_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `job_id` int unsigned NOT NULL COMMENT 'FK to Job', + `email_id` int unsigned DEFAULT NULL COMMENT 'FK to Email', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact', + `hash` varchar(255) NOT NULL COMMENT 'Security hash', + `phone_id` int unsigned DEFAULT NULL COMMENT 'FK to Phone', + PRIMARY KEY (`id`), + INDEX `index_hash`(hash), + CONSTRAINT FK_civicrm_mailing_event_queue_job_id FOREIGN KEY (`job_id`) REFERENCES `civicrm_mailing_job`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_event_queue_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_mailing_event_queue_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_event_queue_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3966,19 +3234,15 @@ CREATE TABLE `civicrm_mailing_event_queue` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_bounce` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `bounce_type_id` int unsigned COMMENT 'What type of bounce was it?', - `bounce_reason` varchar(255) COMMENT 'The reason the email bounced.', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this bounce event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_bounce_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `bounce_type_id` int unsigned COMMENT 'What type of bounce was it?', + `bounce_reason` varchar(255) COMMENT 'The reason the email bounced.', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this bounce event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_bounce_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -3988,17 +3252,13 @@ CREATE TABLE `civicrm_mailing_event_bounce` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_delivered` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this delivery event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_delivered_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this delivery event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_delivered_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4008,18 +3268,15 @@ CREATE TABLE `civicrm_mailing_event_delivered` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_forward` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `dest_queue_id` int unsigned COMMENT 'FK to EventQueue for destination', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this forward event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_forward_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_event_forward_dest_queue_id FOREIGN KEY (`dest_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `dest_queue_id` int unsigned COMMENT 'FK to EventQueue for destination', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this forward event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_forward_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_event_forward_dest_queue_id FOREIGN KEY (`dest_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4029,17 +3286,13 @@ CREATE TABLE `civicrm_mailing_event_forward` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_opened` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this open event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_opened_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this open event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_opened_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4049,17 +3302,13 @@ CREATE TABLE `civicrm_mailing_event_opened` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_reply` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this reply event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_reply_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this reply event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_reply_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4069,18 +3318,15 @@ CREATE TABLE `civicrm_mailing_event_reply` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_trackable_url_open` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `trackable_url_id` int unsigned NOT NULL COMMENT 'FK to TrackableURL', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this trackable URL open occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_trackable_url_open_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mailing_event_trackable_url_open_trackable_url_id FOREIGN KEY (`trackable_url_id`) REFERENCES `civicrm_mailing_trackable_url`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `trackable_url_id` int unsigned NOT NULL COMMENT 'FK to TrackableURL', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this trackable URL open occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_trackable_url_open_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_mailing_event_trackable_url_open_trackable_url_id FOREIGN KEY (`trackable_url_id`) REFERENCES `civicrm_mailing_trackable_url`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4090,18 +3336,14 @@ CREATE TABLE `civicrm_mailing_event_trackable_url_open` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_mailing_event_unsubscribe` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', - `org_unsubscribe` tinyint NOT NULL COMMENT 'Unsubscribe at org- or group-level', - `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this delivery event occurred.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_mailing_event_unsubscribe_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `event_queue_id` int unsigned NOT NULL COMMENT 'FK to EventQueue', + `org_unsubscribe` tinyint NOT NULL COMMENT 'Unsubscribe at org- or group-level', + `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this delivery event occurred.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_mailing_event_unsubscribe_event_queue_id FOREIGN KEY (`event_queue_id`) REFERENCES `civicrm_mailing_event_queue`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4109,55 +3351,47 @@ CREATE TABLE `civicrm_mailing_event_unsubscribe` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contribution_recur` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution Recur ID', - `contact_id` int unsigned NOT NULL COMMENT 'Foreign key to civicrm_contact.id.', - `amount` decimal(20,2) NOT NULL COMMENT 'Amount to be collected (including any sales tax) by payment processor each recurrence.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `frequency_unit` varchar(8) DEFAULT 'month' COMMENT 'Time units for recurrence of payment.', - `frequency_interval` int unsigned NOT NULL DEFAULT 1 COMMENT 'Number of time units for recurrence of payment.', - `installments` int unsigned 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.', - `start_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The date the first scheduled recurring contribution occurs.', - `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this recurring contribution record was created.', - `modified_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received', - `cancel_date` datetime COMMENT 'Date this recurring contribution was cancelled by contributor- if we can get access to it', - `cancel_reason` text COMMENT 'Free text field for a reason for cancelling', - `end_date` datetime COMMENT 'Date this recurring contribution finished successfully', - `processor_id` varchar(255) COMMENT 'Possibly needed to store a unique identifier for this recurring payment order - if this is available from the processor??', - `payment_token_id` int unsigned COMMENT 'Optionally used to store a link to a payment token used for this recurring contribution.', - `trxn_id` varchar(255) COMMENT 'unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method', - `invoice_id` varchar(255) COMMENT 'unique invoice id, system generated or passed in', - `contribution_status_id` int unsigned DEFAULT 2 , - `is_test` tinyint DEFAULT 0 , - `cycle_day` int unsigned NOT NULL DEFAULT 1 COMMENT 'Day in the period when the payment should be charged e.g. 1st of month, 15th etc.', - `next_sched_contribution_date` datetime COMMENT 'Next scheduled date', - `failure_count` int unsigned DEFAULT 0 COMMENT 'Number of failed charge attempts since last success. Business rule could be set to deactivate on more than x failures.', - `failure_retry_date` datetime COMMENT 'Date to retry failed attempt', - `auto_renew` tinyint NOT NULL DEFAULT 0 COMMENT 'Some systems allow contributor to set a number of installments - but then auto-renew the subscription or commitment if they do not cancel.', - `payment_processor_id` int unsigned COMMENT 'Foreign key to civicrm_payment_processor.id', - `financial_type_id` int unsigned COMMENT 'FK to Financial Type', - `payment_instrument_id` int unsigned COMMENT 'FK to Payment Instrument', - `campaign_id` int unsigned COMMENT 'The campaign for which this contribution has been triggered.', - `is_email_receipt` tinyint DEFAULT 1 COMMENT 'if true, receipt is automatically emailed to contact on each successful payment' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_contrib_trxn_id`( - trxn_id - ) - , UNIQUE INDEX `UI_contrib_invoice_id`( - invoice_id - ) - , INDEX `index_contribution_status`( - contribution_status_id - ) - , INDEX `UI_contribution_recur_payment_instrument_id`( - payment_instrument_id - ) - -, CONSTRAINT FK_civicrm_contribution_recur_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_contribution_recur_payment_token_id FOREIGN KEY (`payment_token_id`) REFERENCES `civicrm_payment_token`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_recur_payment_processor_id FOREIGN KEY (`payment_processor_id`) REFERENCES `civicrm_payment_processor`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_recur_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_recur_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution Recur ID', + `contact_id` int unsigned NOT NULL COMMENT 'Foreign key to civicrm_contact.id.', + `amount` decimal(20,2) NOT NULL COMMENT 'Amount to be collected (including any sales tax) by payment processor each recurrence.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `frequency_unit` varchar(8) DEFAULT 'month' COMMENT 'Time units for recurrence of payment.', + `frequency_interval` int unsigned NOT NULL DEFAULT 1 COMMENT 'Number of time units for recurrence of payment.', + `installments` int unsigned 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.', + `start_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The date the first scheduled recurring contribution occurs.', + `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this recurring contribution record was created.', + `modified_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received', + `cancel_date` datetime COMMENT 'Date this recurring contribution was cancelled by contributor- if we can get access to it', + `cancel_reason` text COMMENT 'Free text field for a reason for cancelling', + `end_date` datetime COMMENT 'Date this recurring contribution finished successfully', + `processor_id` varchar(255) COMMENT 'Possibly needed to store a unique identifier for this recurring payment order - if this is available from the processor??', + `payment_token_id` int unsigned COMMENT 'Optionally used to store a link to a payment token used for this recurring contribution.', + `trxn_id` varchar(255) COMMENT 'unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method', + `invoice_id` varchar(255) COMMENT 'unique invoice id, system generated or passed in', + `contribution_status_id` int unsigned DEFAULT 2, + `is_test` tinyint DEFAULT 0, + `cycle_day` int unsigned NOT NULL DEFAULT 1 COMMENT 'Day in the period when the payment should be charged e.g. 1st of month, 15th etc.', + `next_sched_contribution_date` datetime COMMENT 'Next scheduled date', + `failure_count` int unsigned DEFAULT 0 COMMENT 'Number of failed charge attempts since last success. Business rule could be set to deactivate on more than x failures.', + `failure_retry_date` datetime COMMENT 'Date to retry failed attempt', + `auto_renew` tinyint NOT NULL DEFAULT 0 COMMENT 'Some systems allow contributor to set a number of installments - but then auto-renew the subscription or commitment if they do not cancel.', + `payment_processor_id` int unsigned COMMENT 'Foreign key to civicrm_payment_processor.id', + `financial_type_id` int unsigned COMMENT 'FK to Financial Type', + `payment_instrument_id` int unsigned COMMENT 'FK to Payment Instrument', + `campaign_id` int unsigned COMMENT 'The campaign for which this contribution has been triggered.', + `is_email_receipt` tinyint DEFAULT 1 COMMENT 'if true, receipt is automatically emailed to contact on each successful payment', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_contrib_trxn_id`(trxn_id), + UNIQUE INDEX `UI_contrib_invoice_id`(invoice_id), + INDEX `index_contribution_status`(contribution_status_id), + INDEX `UI_contribution_recur_payment_instrument_id`(payment_instrument_id), + CONSTRAINT FK_civicrm_contribution_recur_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_contribution_recur_payment_token_id FOREIGN KEY (`payment_token_id`) REFERENCES `civicrm_payment_token`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_recur_payment_processor_id FOREIGN KEY (`payment_processor_id`) REFERENCES `civicrm_payment_processor`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_recur_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_recur_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4165,41 +3399,33 @@ CREATE TABLE `civicrm_contribution_recur` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_financial_trxn` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `from_financial_account_id` int unsigned COMMENT 'FK to financial_account table.', - `to_financial_account_id` int unsigned COMMENT 'FK to financial_financial_account table.', - `trxn_date` datetime DEFAULT NULL COMMENT 'date transaction occurred', - `total_amount` decimal(20,2) NOT NULL COMMENT 'amount of transaction', - `fee_amount` decimal(20,2) COMMENT 'actual processor fee if known - may be 0.', - `net_amount` decimal(20,2) COMMENT 'actual funds transfer amount. total less fees. if processor does not report actual fee during transaction, this is set to total_amount.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `is_payment` tinyint DEFAULT 0 COMMENT 'Is this entry either a payment or a reversal of a payment?', - `trxn_id` varchar(255) COMMENT 'Transaction id supplied by external processor. This may not be unique.', - `trxn_result_code` varchar(255) COMMENT 'processor result code', - `status_id` int unsigned COMMENT 'pseudo FK to civicrm_option_value of contribution_status_id option_group', - `payment_processor_id` int unsigned COMMENT 'Payment Processor for this financial transaction', - `payment_instrument_id` int unsigned COMMENT 'FK to payment_instrument option group values', - `card_type_id` int unsigned COMMENT 'FK to accept_creditcard option group values', - `check_number` varchar(255) COMMENT 'Check number', - `pan_truncation` varchar(4) COMMENT 'Last 4 digits of credit card', - `order_reference` varchar(255) COMMENT 'Payment Processor external order reference' -, - PRIMARY KEY (`id`) - - , INDEX `UI_ftrxn_trxn_id`( - trxn_id - ) - , INDEX `UI_ftrxn_payment_instrument_id`( - payment_instrument_id - ) - , INDEX `UI_ftrxn_check_number`( - check_number - ) - -, CONSTRAINT FK_civicrm_financial_trxn_from_financial_account_id FOREIGN KEY (`from_financial_account_id`) REFERENCES `civicrm_financial_account`(`id`) , CONSTRAINT FK_civicrm_financial_trxn_to_financial_account_id FOREIGN KEY (`to_financial_account_id`) REFERENCES `civicrm_financial_account`(`id`) , CONSTRAINT FK_civicrm_financial_trxn_payment_processor_id FOREIGN KEY (`payment_processor_id`) REFERENCES `civicrm_payment_processor`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `from_financial_account_id` int unsigned COMMENT 'FK to financial_account table.', + `to_financial_account_id` int unsigned COMMENT 'FK to financial_financial_account table.', + `trxn_date` datetime DEFAULT NULL COMMENT 'date transaction occurred', + `total_amount` decimal(20,2) NOT NULL COMMENT 'amount of transaction', + `fee_amount` decimal(20,2) COMMENT 'actual processor fee if known - may be 0.', + `net_amount` decimal(20,2) COMMENT 'actual funds transfer amount. total less fees. if processor does not report actual fee during transaction, this is set to total_amount.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `is_payment` tinyint DEFAULT 0 COMMENT 'Is this entry either a payment or a reversal of a payment?', + `trxn_id` varchar(255) COMMENT 'Transaction id supplied by external processor. This may not be unique.', + `trxn_result_code` varchar(255) COMMENT 'processor result code', + `status_id` int unsigned COMMENT 'pseudo FK to civicrm_option_value of contribution_status_id option_group', + `payment_processor_id` int unsigned COMMENT 'Payment Processor for this financial transaction', + `payment_instrument_id` int unsigned COMMENT 'FK to payment_instrument option group values', + `card_type_id` int unsigned COMMENT 'FK to accept_creditcard option group values', + `check_number` varchar(255) COMMENT 'Check number', + `pan_truncation` varchar(4) COMMENT 'Last 4 digits of credit card', + `order_reference` varchar(255) COMMENT 'Payment Processor external order reference', + PRIMARY KEY (`id`), + INDEX `UI_ftrxn_trxn_id`(trxn_id), + INDEX `UI_ftrxn_payment_instrument_id`(payment_instrument_id), + INDEX `UI_ftrxn_check_number`(check_number), + CONSTRAINT FK_civicrm_financial_trxn_from_financial_account_id FOREIGN KEY (`from_financial_account_id`) REFERENCES `civicrm_financial_account`(`id`), + CONSTRAINT FK_civicrm_financial_trxn_to_financial_account_id FOREIGN KEY (`to_financial_account_id`) REFERENCES `civicrm_financial_account`(`id`), + CONSTRAINT FK_civicrm_financial_trxn_payment_processor_id FOREIGN KEY (`payment_processor_id`) REFERENCES `civicrm_payment_processor`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4209,33 +3435,32 @@ CREATE TABLE `civicrm_financial_trxn` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_membership` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', - `membership_type_id` int unsigned NOT NULL COMMENT 'FK to Membership Type', - `join_date` date COMMENT 'Beginning of initial membership period (member since...).', - `start_date` date COMMENT 'Beginning of current uninterrupted membership period.', - `end_date` date COMMENT 'Current membership period expire date.', - `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 , - `is_pay_later` tinyint DEFAULT 0 , - `contribution_recur_id` int unsigned 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.', - `campaign_id` int unsigned COMMENT 'The campaign for which this membership is attached.' -, - PRIMARY KEY (`id`) - - , INDEX `index_owner_membership_id`( - owner_membership_id - ) - -, CONSTRAINT FK_civicrm_membership_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_membership_membership_type_id FOREIGN KEY (`membership_type_id`) REFERENCES `civicrm_membership_type`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_membership_status_id FOREIGN KEY (`status_id`) REFERENCES `civicrm_membership_status`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_membership_owner_membership_id FOREIGN KEY (`owner_membership_id`) REFERENCES `civicrm_membership`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_membership_contribution_recur_id FOREIGN KEY (`contribution_recur_id`) REFERENCES `civicrm_contribution_recur`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_membership_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Membership ID', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', + `membership_type_id` int unsigned NOT NULL COMMENT 'FK to Membership Type', + `join_date` date COMMENT 'Beginning of initial membership period (member since...).', + `start_date` date COMMENT 'Beginning of current uninterrupted membership period.', + `end_date` date COMMENT 'Current membership period expire date.', + `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, + `is_pay_later` tinyint DEFAULT 0, + `contribution_recur_id` int unsigned 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.', + `campaign_id` int unsigned COMMENT 'The campaign for which this membership is attached.', + PRIMARY KEY (`id`), + INDEX `index_owner_membership_id`(owner_membership_id), + CONSTRAINT FK_civicrm_membership_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_membership_membership_type_id FOREIGN KEY (`membership_type_id`) REFERENCES `civicrm_membership_type`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_membership_status_id FOREIGN KEY (`status_id`) REFERENCES `civicrm_membership_status`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_membership_owner_membership_id FOREIGN KEY (`owner_membership_id`) REFERENCES `civicrm_membership`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_membership_contribution_recur_id FOREIGN KEY (`contribution_recur_id`) REFERENCES `civicrm_contribution_recur`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_membership_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4245,23 +3470,22 @@ CREATE TABLE `civicrm_membership` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_membership_log` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `membership_id` int unsigned NOT NULL COMMENT 'FK to Membership table', - `status_id` int unsigned NOT NULL COMMENT 'New status assigned to membership by this action. FK to Membership Status', - `start_date` date COMMENT 'New membership period start date', - `end_date` date COMMENT 'New membership period expiration date.', - `modified_id` int unsigned COMMENT 'FK to Contact ID of person under whose credentials this data modification was made.', - `modified_date` date COMMENT 'Date this membership modification action was logged.', - `membership_type_id` int unsigned COMMENT 'FK to Membership Type.', - `max_related` int COMMENT 'Maximum number of related memberships.' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_membership_log_membership_id FOREIGN KEY (`membership_id`) REFERENCES `civicrm_membership`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_membership_log_status_id FOREIGN KEY (`status_id`) REFERENCES `civicrm_membership_status`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_membership_log_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_membership_log_membership_type_id FOREIGN KEY (`membership_type_id`) REFERENCES `civicrm_membership_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `membership_id` int unsigned NOT NULL COMMENT 'FK to Membership table', + `status_id` int unsigned NOT NULL COMMENT 'New status assigned to membership by this action. FK to Membership Status', + `start_date` date COMMENT 'New membership period start date', + `end_date` date COMMENT 'New membership period expiration date.', + `modified_id` int unsigned COMMENT 'FK to Contact ID of person under whose credentials this data modification was made.', + `modified_date` date COMMENT 'Date this membership modification action was logged.', + `membership_type_id` int unsigned COMMENT 'FK to Membership Type.', + `max_related` int COMMENT 'Maximum number of related memberships.', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_membership_log_membership_id FOREIGN KEY (`membership_id`) REFERENCES `civicrm_membership`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_membership_log_status_id FOREIGN KEY (`status_id`) REFERENCES `civicrm_membership_status`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_membership_log_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_membership_log_membership_type_id FOREIGN KEY (`membership_type_id`) REFERENCES `civicrm_membership_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4271,59 +3495,47 @@ CREATE TABLE `civicrm_membership_log` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_activity` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Other Activity ID', - `source_record_id` int unsigned 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.', - `activity_type_id` int unsigned NOT NULL DEFAULT 1 COMMENT 'FK to civicrm_option_value.id, that has to be valid, registered activity type.', - `subject` varchar(255) COMMENT 'The subject/purpose/short description of the activity.', - `activity_date_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.', - `duration` int unsigned COMMENT 'Planned or actual duration of activity expressed in minutes. Conglomerate of former duration_hours and duration_minutes.', - `location` varchar(255) COMMENT 'Location of the activity (optional, open text).', - `phone_id` int unsigned COMMENT 'Phone ID of the number called (optional - used if an existing phone number is selected).', - `phone_number` varchar(64) COMMENT 'Phone number in case the number does not exist in the civicrm_phone table.', - `details` longtext COMMENT 'Details about the activity (agenda, notes, etc).', - `status_id` int unsigned COMMENT 'ID of the status this activity is currently in. Foreign key to civicrm_option_value.', - `priority_id` int unsigned COMMENT 'ID of the priority given to this activity. Foreign key to civicrm_option_value.', - `parent_id` int unsigned COMMENT 'Parent meeting ID (if this is a follow-up item). This is not currently implemented', - `is_test` tinyint DEFAULT 0 , - `medium_id` int unsigned DEFAULT NULL COMMENT 'Activity Medium, Implicit FK to civicrm_option_value where option_group = encounter_medium.', - `is_auto` tinyint DEFAULT 0 , - `relationship_id` int unsigned DEFAULT NULL COMMENT 'FK to Relationship ID', - `is_current_revision` tinyint DEFAULT 1 , - `original_id` int unsigned COMMENT 'Activity ID of the first activity record in versioning chain.', - `result` varchar(255) COMMENT 'Currently being used to store result id for survey activity, FK to option value.', - `is_deleted` tinyint DEFAULT 0 , - `campaign_id` int unsigned COMMENT 'The campaign for which this activity has been triggered.', - `engagement_level` int unsigned COMMENT 'Assign a specific level of engagement to this activity. Used for tracking constituents in ladder of engagement.', - `weight` int , - `is_star` tinyint DEFAULT 0 COMMENT 'Activity marked as favorite.', - `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the activity was created.', - `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the activity (or closely related entity) was created or modified or deleted.' -, - PRIMARY KEY (`id`) - - , INDEX `UI_source_record_id`( - source_record_id - ) - , INDEX `UI_activity_type_id`( - activity_type_id - ) - , INDEX `index_activity_date_time`( - activity_date_time - ) - , INDEX `index_status_id`( - status_id - ) - , INDEX `index_is_current_revision`( - is_current_revision - ) - , INDEX `index_is_deleted`( - is_deleted - ) - -, CONSTRAINT FK_civicrm_activity_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_activity_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_activity_relationship_id FOREIGN KEY (`relationship_id`) REFERENCES `civicrm_relationship`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_activity_original_id FOREIGN KEY (`original_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_activity_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Other Activity ID', + `source_record_id` int unsigned 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.', + `activity_type_id` int unsigned NOT NULL DEFAULT 1 COMMENT 'FK to civicrm_option_value.id, that has to be valid, registered activity type.', + `subject` varchar(255) COMMENT 'The subject/purpose/short description of the activity.', + `activity_date_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.', + `duration` int unsigned COMMENT 'Planned or actual duration of activity expressed in minutes. Conglomerate of former duration_hours and duration_minutes.', + `location` varchar(255) COMMENT 'Location of the activity (optional, open text).', + `phone_id` int unsigned COMMENT 'Phone ID of the number called (optional - used if an existing phone number is selected).', + `phone_number` varchar(64) COMMENT 'Phone number in case the number does not exist in the civicrm_phone table.', + `details` longtext COMMENT 'Details about the activity (agenda, notes, etc).', + `status_id` int unsigned COMMENT 'ID of the status this activity is currently in. Foreign key to civicrm_option_value.', + `priority_id` int unsigned COMMENT 'ID of the priority given to this activity. Foreign key to civicrm_option_value.', + `parent_id` int unsigned COMMENT 'Parent meeting ID (if this is a follow-up item). This is not currently implemented', + `is_test` tinyint DEFAULT 0, + `medium_id` int unsigned DEFAULT NULL COMMENT 'Activity Medium, Implicit FK to civicrm_option_value where option_group = encounter_medium.', + `is_auto` tinyint DEFAULT 0, + `relationship_id` int unsigned DEFAULT NULL COMMENT 'FK to Relationship ID', + `is_current_revision` tinyint DEFAULT 1, + `original_id` int unsigned COMMENT 'Activity ID of the first activity record in versioning chain.', + `result` varchar(255) COMMENT 'Currently being used to store result id for survey activity, FK to option value.', + `is_deleted` tinyint DEFAULT 0, + `campaign_id` int unsigned COMMENT 'The campaign for which this activity has been triggered.', + `engagement_level` int unsigned COMMENT 'Assign a specific level of engagement to this activity. Used for tracking constituents in ladder of engagement.', + `weight` int, + `is_star` tinyint DEFAULT 0 COMMENT 'Activity marked as favorite.', + `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the activity was created.', + `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the activity (or closely related entity) was created or modified or deleted.', + PRIMARY KEY (`id`), + INDEX `UI_source_record_id`(source_record_id), + INDEX `UI_activity_type_id`(activity_type_id), + INDEX `index_activity_date_time`(activity_date_time), + INDEX `index_status_id`(status_id), + INDEX `index_is_current_revision`(is_current_revision), + INDEX `index_is_deleted`(is_deleted), + CONSTRAINT FK_civicrm_activity_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_activity_parent_id FOREIGN KEY (`parent_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_activity_relationship_id FOREIGN KEY (`relationship_id`) REFERENCES `civicrm_relationship`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_activity_original_id FOREIGN KEY (`original_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_activity_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4333,27 +3545,17 @@ CREATE TABLE `civicrm_activity` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_activity_contact` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Activity contact id', - `activity_id` int unsigned NOT NULL COMMENT 'Foreign key to the activity for this record.', - `contact_id` int unsigned NOT NULL COMMENT 'Foreign key to the contact for this record.', - `record_type_id` int unsigned COMMENT 'Determines the contact\'s role in the activity (source, target, or assignee).' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_activity_contact`( - contact_id - , activity_id - , record_type_id - ) - , INDEX `index_record_type`( - activity_id - , record_type_id - ) - -, CONSTRAINT FK_civicrm_activity_contact_activity_id FOREIGN KEY (`activity_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_activity_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Activity contact id', + `activity_id` int unsigned NOT NULL COMMENT 'Foreign key to the activity for this record.', + `contact_id` int unsigned NOT NULL COMMENT 'Foreign key to the contact for this record.', + `record_type_id` int unsigned COMMENT 'Determines the contact\'s role in the activity (source, target, or assignee).', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_activity_contact`(contact_id, activity_id, record_type_id), + INDEX `index_record_type`(activity_id, record_type_id), + CONSTRAINT FK_civicrm_activity_contact_activity_id FOREIGN KEY (`activity_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_activity_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4363,21 +3565,15 @@ CREATE TABLE `civicrm_activity_contact` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_case_activity` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique case-activity association id', - `case_id` int unsigned NOT NULL COMMENT 'Case ID of case-activity association.', - `activity_id` int unsigned NOT NULL COMMENT 'Activity ID of case-activity association.' -, - PRIMARY KEY (`id`) - - , INDEX `UI_case_activity_id`( - case_id - , activity_id - ) - -, CONSTRAINT FK_civicrm_case_activity_case_id FOREIGN KEY (`case_id`) REFERENCES `civicrm_case`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_case_activity_activity_id FOREIGN KEY (`activity_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique case-activity association id', + `case_id` int unsigned NOT NULL COMMENT 'Case ID of case-activity association.', + `activity_id` int unsigned NOT NULL COMMENT 'Activity ID of case-activity association.', + PRIMARY KEY (`id`), + INDEX `UI_case_activity_id`(case_id, activity_id), + CONSTRAINT FK_civicrm_case_activity_case_id FOREIGN KEY (`case_id`) REFERENCES `civicrm_case`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_case_activity_activity_id FOREIGN KEY (`activity_id`) REFERENCES `civicrm_activity`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4385,34 +3581,28 @@ CREATE TABLE `civicrm_case_activity` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_price_field` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Field', - `price_set_id` int unsigned NOT NULL COMMENT 'FK to civicrm_price_set', - `name` varchar(255) NOT NULL COMMENT 'Variable name/programmatic handle for this field.', - `label` varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this field).', - `html_type` varchar(12) NOT NULL , - `is_enter_qty` tinyint DEFAULT 0 COMMENT 'Enter a quantity for this field?', - `help_pre` text COMMENT 'Description and/or help text to display before this field.', - `help_post` text COMMENT 'Description and/or help text to display after this field.', - `weight` int DEFAULT 1 COMMENT 'Order in which the fields should appear', - `is_display_amounts` tinyint DEFAULT 1 COMMENT 'Should the price be displayed next to the label for each option?', - `options_per_line` int unsigned DEFAULT 1 COMMENT 'number of options per line for checkbox and radio', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this price field active', - `is_required` tinyint DEFAULT 1 COMMENT 'Is this price field required (value must be > 1)', - `active_on` datetime DEFAULT NULL COMMENT 'If non-zero, do not show this field before the date specified', - `expire_on` datetime DEFAULT NULL COMMENT 'If non-zero, do not show this field after the date specified', - `javascript` varchar(255) COMMENT 'Optional scripting attributes for field', - `visibility_id` int unsigned DEFAULT 1 COMMENT 'Implicit FK to civicrm_option_group with name = \'visibility\'' -, - PRIMARY KEY (`id`) - - , INDEX `index_name`( - name - ) - -, CONSTRAINT FK_civicrm_price_field_price_set_id FOREIGN KEY (`price_set_id`) REFERENCES `civicrm_price_set`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Field', + `price_set_id` int unsigned NOT NULL COMMENT 'FK to civicrm_price_set', + `name` varchar(255) NOT NULL COMMENT 'Variable name/programmatic handle for this field.', + `label` varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this field).', + `html_type` varchar(12) NOT NULL, + `is_enter_qty` tinyint DEFAULT 0 COMMENT 'Enter a quantity for this field?', + `help_pre` text COMMENT 'Description and/or help text to display before this field.', + `help_post` text COMMENT 'Description and/or help text to display after this field.', + `weight` int DEFAULT 1 COMMENT 'Order in which the fields should appear', + `is_display_amounts` tinyint DEFAULT 1 COMMENT 'Should the price be displayed next to the label for each option?', + `options_per_line` int unsigned DEFAULT 1 COMMENT 'number of options per line for checkbox and radio', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this price field active', + `is_required` tinyint DEFAULT 1 COMMENT 'Is this price field required (value must be > 1)', + `active_on` datetime DEFAULT NULL COMMENT 'If non-zero, do not show this field before the date specified', + `expire_on` datetime DEFAULT NULL COMMENT 'If non-zero, do not show this field after the date specified', + `javascript` varchar(255) COMMENT 'Optional scripting attributes for field', + `visibility_id` int unsigned DEFAULT 1 COMMENT 'Implicit FK to civicrm_option_group with name = \'visibility\'', + PRIMARY KEY (`id`), + INDEX `index_name`(name), + CONSTRAINT FK_civicrm_price_field_price_set_id FOREIGN KEY (`price_set_id`) REFERENCES `civicrm_price_set`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4420,32 +3610,30 @@ CREATE TABLE `civicrm_price_field` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_price_field_value` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Field Value', - `price_field_id` int unsigned NOT NULL COMMENT 'FK to civicrm_price_field', - `name` varchar(255) DEFAULT NULL COMMENT 'Price field option name', - `label` varchar(255) DEFAULT NULL COMMENT 'Price field option label', - `description` text DEFAULT NULL COMMENT 'Price field option description.', - `help_pre` text DEFAULT NULL COMMENT 'Price field option pre help text.', - `help_post` text DEFAULT NULL COMMENT 'Price field option post field help.', - `amount` decimal(18,9) NOT NULL COMMENT 'Price field option amount', - `count` int unsigned DEFAULT NULL COMMENT 'Number of participants per field option', - `max_value` int unsigned DEFAULT NULL COMMENT 'Max number of participants per field options', - `weight` int DEFAULT 1 COMMENT 'Order in which the field options should appear', - `membership_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Membership Type', - `membership_num_terms` int unsigned DEFAULT NULL COMMENT 'Number of terms for this membership', - `is_default` tinyint DEFAULT 0 COMMENT 'Is this default price field option', - `is_active` tinyint DEFAULT 1 COMMENT 'Is this price field value active', - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', - `non_deductible_amount` decimal(20,2) NOT NULL DEFAULT 0.0 COMMENT 'Portion of total amount which is NOT tax deductible.', - `visibility_id` int unsigned DEFAULT 1 COMMENT 'Implicit FK to civicrm_option_group with name = \'visibility\'' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_price_field_value_price_field_id FOREIGN KEY (`price_field_id`) REFERENCES `civicrm_price_field`(`id`) , CONSTRAINT FK_civicrm_price_field_value_membership_type_id FOREIGN KEY (`membership_type_id`) REFERENCES `civicrm_membership_type`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_price_field_value_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Price Field Value', + `price_field_id` int unsigned NOT NULL COMMENT 'FK to civicrm_price_field', + `name` varchar(255) DEFAULT NULL COMMENT 'Price field option name', + `label` varchar(255) DEFAULT NULL COMMENT 'Price field option label', + `description` text DEFAULT NULL COMMENT 'Price field option description.', + `help_pre` text DEFAULT NULL COMMENT 'Price field option pre help text.', + `help_post` text DEFAULT NULL COMMENT 'Price field option post field help.', + `amount` decimal(18,9) NOT NULL COMMENT 'Price field option amount', + `count` int unsigned DEFAULT NULL COMMENT 'Number of participants per field option', + `max_value` int unsigned DEFAULT NULL COMMENT 'Max number of participants per field options', + `weight` int DEFAULT 1 COMMENT 'Order in which the field options should appear', + `membership_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Membership Type', + `membership_num_terms` int unsigned DEFAULT NULL COMMENT 'Number of terms for this membership', + `is_default` tinyint DEFAULT 0 COMMENT 'Is this default price field option', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this price field value active', + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', + `non_deductible_amount` decimal(20,2) NOT NULL DEFAULT 0.0 COMMENT 'Portion of total amount which is NOT tax deductible.', + `visibility_id` int unsigned DEFAULT 1 COMMENT 'Implicit FK to civicrm_option_group with name = \'visibility\'', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_price_field_value_price_field_id FOREIGN KEY (`price_field_id`) REFERENCES `civicrm_price_field`(`id`), + CONSTRAINT FK_civicrm_price_field_value_membership_type_id FOREIGN KEY (`membership_type_id`) REFERENCES `civicrm_membership_type`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_price_field_value_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4455,27 +3643,23 @@ CREATE TABLE `civicrm_price_field_value` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_pcp_block` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'PCP block ID', - `entity_table` varchar(64) , - `entity_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contribution_page.id OR civicrm_event.id', - `target_entity_type` varchar(255) NOT NULL DEFAULT 'contribute' COMMENT 'The type of entity that this pcp targets', - `target_entity_id` int unsigned NOT NULL COMMENT 'The entity that this pcp targets', - `supporter_profile_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_uf_group.id. Does Personal Campaign Page require manual activation by administrator? (is inactive by default after setup)?', - `owner_notify_id` int unsigned DEFAULT 0 COMMENT 'FK to civicrm_option_group with name = PCP owner notifications', - `is_approval_needed` tinyint DEFAULT NULL COMMENT 'Does Personal Campaign Page require manual activation by administrator? (is inactive by default after setup)?', - `is_tellfriend_enabled` tinyint DEFAULT NULL COMMENT 'Does Personal Campaign Page allow using tell a friend?', - `tellfriend_limit` int unsigned DEFAULT NULL COMMENT 'Maximum recipient fields allowed in tell a friend', - `link_text` varchar(255) DEFAULT NULL COMMENT 'Link text for PCP.', - `is_active` tinyint DEFAULT 1 COMMENT 'Is Personal Campaign Page Block enabled/active?', - `notify_email` varchar(255) DEFAULT NULL COMMENT 'If set, notification is automatically emailed to this email-address on create/update Personal Campaign Page' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_pcp_block_supporter_profile_id FOREIGN KEY (`supporter_profile_id`) REFERENCES `civicrm_uf_group`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'PCP block ID', + `entity_table` varchar(64), + `entity_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contribution_page.id OR civicrm_event.id', + `target_entity_type` varchar(255) NOT NULL DEFAULT 'contribute' COMMENT 'The type of entity that this pcp targets', + `target_entity_id` int unsigned NOT NULL COMMENT 'The entity that this pcp targets', + `supporter_profile_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_uf_group.id. Does Personal Campaign Page require manual activation by administrator? (is inactive by default after setup)?', + `owner_notify_id` int unsigned DEFAULT 0 COMMENT 'FK to civicrm_option_group with name = PCP owner notifications', + `is_approval_needed` tinyint DEFAULT NULL COMMENT 'Does Personal Campaign Page require manual activation by administrator? (is inactive by default after setup)?', + `is_tellfriend_enabled` tinyint DEFAULT NULL COMMENT 'Does Personal Campaign Page allow using tell a friend?', + `tellfriend_limit` int unsigned DEFAULT NULL COMMENT 'Maximum recipient fields allowed in tell a friend', + `link_text` varchar(255) DEFAULT NULL COMMENT 'Link text for PCP.', + `is_active` tinyint DEFAULT 1 COMMENT 'Is Personal Campaign Page Block enabled/active?', + `notify_email` varchar(255) DEFAULT NULL COMMENT 'If set, notification is automatically emailed to this email-address on create/update Personal Campaign Page', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_pcp_block_supporter_profile_id FOREIGN KEY (`supporter_profile_id`) REFERENCES `civicrm_uf_group`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4485,62 +3669,49 @@ CREATE TABLE `civicrm_pcp_block` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_address` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Address ID', - `contact_id` int unsigned COMMENT 'FK to Contact ID', - `location_type_id` int unsigned COMMENT 'Which Location does this address belong to.', - `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary address.', - `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing address.', - `street_address` varchar(96) COMMENT 'Concatenation of all routable street address components (prefix, street number, street name, suffix, unit\n number OR P.O. Box). Apps should be able to determine physical location with this data (for mapping, mail\n delivery, etc.).', - `street_number` int COMMENT 'Numeric portion of address number on the street, e.g. For 112A Main St, the street_number = 112.', - `street_number_suffix` varchar(8) COMMENT 'Non-numeric portion of address number on the street, e.g. For 112A Main St, the street_number_suffix = A', - `street_number_predirectional` varchar(8) COMMENT 'Directional prefix, e.g. SE Main St, SE is the prefix.', - `street_name` varchar(64) COMMENT 'Actual street name, excluding St, Dr, Rd, Ave, e.g. For 112 Main St, the street_name = Main.', - `street_type` varchar(8) COMMENT 'St, Rd, Dr, etc.', - `street_number_postdirectional` varchar(8) COMMENT 'Directional prefix, e.g. Main St S, S is the suffix.', - `street_unit` varchar(16) COMMENT 'Secondary unit designator, e.g. Apt 3 or Unit # 14, or Bldg 1200', - `supplemental_address_1` varchar(96) COMMENT 'Supplemental Address Information, Line 1', - `supplemental_address_2` varchar(96) COMMENT 'Supplemental Address Information, Line 2', - `supplemental_address_3` varchar(96) COMMENT 'Supplemental Address Information, Line 3', - `city` varchar(64) COMMENT 'City, Town or Village Name.', - `county_id` int unsigned COMMENT 'Which County does this address belong to.', - `state_province_id` int unsigned COMMENT 'Which State_Province does this address belong to.', - `postal_code_suffix` varchar(12) COMMENT 'Store the suffix, like the +4 part in the USPS system.', - `postal_code` varchar(64) COMMENT 'Store both US (zip5) AND international postal codes. App is responsible for country/region appropriate validation.', - `usps_adc` varchar(32) COMMENT 'USPS Bulk mailing code.', - `country_id` int unsigned COMMENT 'Which Country does this address belong to.', - `geo_code_1` double COMMENT 'Latitude', - `geo_code_2` double COMMENT 'Longitude', - `manual_geo_code` tinyint DEFAULT 0 COMMENT 'Is this a manually entered geo code', - `timezone` varchar(8) COMMENT 'Timezone expressed as a UTC offset - e.g. United States CST would be written as \"UTC-6\".', - `name` varchar(255) , - `master_id` int unsigned COMMENT 'FK to Address ID' -, - PRIMARY KEY (`id`) - - , INDEX `index_location_type`( - location_type_id - ) - , INDEX `index_is_primary`( - is_primary - ) - , INDEX `index_is_billing`( - is_billing - ) - , INDEX `index_street_name`( - street_name - ) - , INDEX `index_city`( - city - ) - , INDEX `index_geo_code_1_geo_code_2`( - geo_code_1 - , geo_code_2 - ) - -, CONSTRAINT FK_civicrm_address_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_address_county_id FOREIGN KEY (`county_id`) REFERENCES `civicrm_county`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_address_state_province_id FOREIGN KEY (`state_province_id`) REFERENCES `civicrm_state_province`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_address_country_id FOREIGN KEY (`country_id`) REFERENCES `civicrm_country`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_address_master_id FOREIGN KEY (`master_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Address ID', + `contact_id` int unsigned COMMENT 'FK to Contact ID', + `location_type_id` int unsigned COMMENT 'Which Location does this address belong to.', + `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary address.', + `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing address.', + `street_address` varchar(96) COMMENT 'Concatenation of all routable street address components (prefix, street number, street name, suffix, unit\n number OR P.O. Box). Apps should be able to determine physical location with this data (for mapping, mail\n delivery, etc.).', + `street_number` int COMMENT 'Numeric portion of address number on the street, e.g. For 112A Main St, the street_number = 112.', + `street_number_suffix` varchar(8) COMMENT 'Non-numeric portion of address number on the street, e.g. For 112A Main St, the street_number_suffix = A', + `street_number_predirectional` varchar(8) COMMENT 'Directional prefix, e.g. SE Main St, SE is the prefix.', + `street_name` varchar(64) COMMENT 'Actual street name, excluding St, Dr, Rd, Ave, e.g. For 112 Main St, the street_name = Main.', + `street_type` varchar(8) COMMENT 'St, Rd, Dr, etc.', + `street_number_postdirectional` varchar(8) COMMENT 'Directional prefix, e.g. Main St S, S is the suffix.', + `street_unit` varchar(16) COMMENT 'Secondary unit designator, e.g. Apt 3 or Unit # 14, or Bldg 1200', + `supplemental_address_1` varchar(96) COMMENT 'Supplemental Address Information, Line 1', + `supplemental_address_2` varchar(96) COMMENT 'Supplemental Address Information, Line 2', + `supplemental_address_3` varchar(96) COMMENT 'Supplemental Address Information, Line 3', + `city` varchar(64) COMMENT 'City, Town or Village Name.', + `county_id` int unsigned COMMENT 'Which County does this address belong to.', + `state_province_id` int unsigned COMMENT 'Which State_Province does this address belong to.', + `postal_code_suffix` varchar(12) COMMENT 'Store the suffix, like the +4 part in the USPS system.', + `postal_code` varchar(64) COMMENT 'Store both US (zip5) AND international postal codes. App is responsible for country/region appropriate validation.', + `usps_adc` varchar(32) COMMENT 'USPS Bulk mailing code.', + `country_id` int unsigned COMMENT 'Which Country does this address belong to.', + `geo_code_1` double COMMENT 'Latitude', + `geo_code_2` double COMMENT 'Longitude', + `manual_geo_code` tinyint DEFAULT 0 COMMENT 'Is this a manually entered geo code', + `timezone` varchar(8) COMMENT 'Timezone expressed as a UTC offset - e.g. United States CST would be written as \"UTC-6\".', + `name` varchar(255), + `master_id` int unsigned COMMENT 'FK to Address ID', + PRIMARY KEY (`id`), + INDEX `index_location_type`(location_type_id), + INDEX `index_is_primary`(is_primary), + INDEX `index_is_billing`(is_billing), + INDEX `index_street_name`(street_name), + INDEX `index_city`(city), + INDEX `index_geo_code_1_geo_code_2`(geo_code_1, geo_code_2), + CONSTRAINT FK_civicrm_address_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_address_county_id FOREIGN KEY (`county_id`) REFERENCES `civicrm_county`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_address_state_province_id FOREIGN KEY (`state_province_id`) REFERENCES `civicrm_state_province`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_address_country_id FOREIGN KEY (`country_id`) REFERENCES `civicrm_country`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_address_master_id FOREIGN KEY (`master_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4550,23 +3721,26 @@ CREATE TABLE `civicrm_address` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_loc_block` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID', - `address_id` int unsigned , - `email_id` int unsigned , - `phone_id` int unsigned , - `im_id` int unsigned , - `address_2_id` int unsigned , - `email_2_id` int unsigned , - `phone_2_id` int unsigned , - `im_2_id` int unsigned -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_loc_block_address_id FOREIGN KEY (`address_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_im_id FOREIGN KEY (`im_id`) REFERENCES `civicrm_im`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_address_2_id FOREIGN KEY (`address_2_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_email_2_id FOREIGN KEY (`email_2_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_phone_2_id FOREIGN KEY (`phone_2_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_loc_block_im_2_id FOREIGN KEY (`im_2_id`) REFERENCES `civicrm_im`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID', + `address_id` int unsigned, + `email_id` int unsigned, + `phone_id` int unsigned, + `im_id` int unsigned, + `address_2_id` int unsigned, + `email_2_id` int unsigned, + `phone_2_id` int unsigned, + `im_2_id` int unsigned, + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_loc_block_address_id FOREIGN KEY (`address_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_phone_id FOREIGN KEY (`phone_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_im_id FOREIGN KEY (`im_id`) REFERENCES `civicrm_im`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_address_2_id FOREIGN KEY (`address_2_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_email_2_id FOREIGN KEY (`email_2_id`) REFERENCES `civicrm_email`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_phone_2_id FOREIGN KEY (`phone_2_id`) REFERENCES `civicrm_phone`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_loc_block_im_2_id FOREIGN KEY (`im_2_id`) REFERENCES `civicrm_im`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4576,24 +3750,20 @@ CREATE TABLE `civicrm_loc_block` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_group_contact` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', - `group_id` int unsigned NOT NULL COMMENT 'FK to civicrm_group', - `contact_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contact', - `status` varchar(8) COMMENT 'status of contact relative to membership in group', - `location_id` int unsigned COMMENT 'Optional location to associate with this membership', - `email_id` int unsigned COMMENT 'Optional email to associate with this membership' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_contact_group`( - contact_id - , group_id - ) - -, CONSTRAINT FK_civicrm_group_contact_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_contact_location_id FOREIGN KEY (`location_id`) REFERENCES `civicrm_loc_block`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_group_contact_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', + `group_id` int unsigned NOT NULL COMMENT 'FK to civicrm_group', + `contact_id` int unsigned NOT NULL COMMENT 'FK to civicrm_contact', + `status` varchar(8) COMMENT 'status of contact relative to membership in group', + `location_id` int unsigned COMMENT 'Optional location to associate with this membership', + `email_id` int unsigned COMMENT 'Optional email to associate with this membership', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_contact_group`(contact_id, group_id), + CONSTRAINT FK_civicrm_group_contact_group_id FOREIGN KEY (`group_id`) REFERENCES `civicrm_group`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_group_contact_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_group_contact_location_id FOREIGN KEY (`location_id`) REFERENCES `civicrm_loc_block`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_group_contact_email_id FOREIGN KEY (`email_id`) REFERENCES `civicrm_email`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4601,73 +3771,55 @@ CREATE TABLE `civicrm_group_contact` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contribution` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', - `financial_type_id` int unsigned COMMENT 'FK to Financial Type for (total_amount - non_deductible_amount).', - `contribution_page_id` int unsigned COMMENT 'The Contribution Page which triggered this contribution', - `payment_instrument_id` int unsigned COMMENT 'FK to Payment Instrument', - `receive_date` datetime COMMENT 'Date contribution was received - not necessarily the creation date of the record', - `non_deductible_amount` decimal(20,2) DEFAULT 0 COMMENT 'Portion of total amount which is NOT tax deductible. Equal to total_amount for non-deductible financial types.', - `total_amount` decimal(20,2) NOT NULL COMMENT 'Total amount of this contribution. Use market value for non-monetary gifts.', - `fee_amount` decimal(20,2) COMMENT 'actual processor fee if known - may be 0.', - `net_amount` decimal(20,2) COMMENT 'actual funds transfer amount. total less fees. if processor does not report actual fee during transaction, this is set to total_amount.', - `trxn_id` varchar(255) COMMENT 'unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method', - `invoice_id` varchar(255) COMMENT 'unique invoice id, system generated or passed in', - `invoice_number` varchar(255) COMMENT 'Human readable invoice number', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `cancel_date` datetime COMMENT 'when was gift cancelled', - `cancel_reason` text , - `receipt_date` datetime COMMENT 'when (if) receipt was sent. populated automatically for online donations w/ automatic receipting', - `thankyou_date` datetime COMMENT 'when (if) was donor thanked', - `source` varchar(255) COMMENT 'Origin of this Contribution.', - `amount_level` text , - `contribution_recur_id` int unsigned 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.', - `is_test` tinyint DEFAULT 0 , - `is_pay_later` tinyint DEFAULT 0 , - `contribution_status_id` int unsigned DEFAULT 1 , - `address_id` int unsigned 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.', - `check_number` varchar(255) , - `campaign_id` int unsigned COMMENT 'The campaign for which this contribution has been triggered.', - `creditnote_id` varchar(255) COMMENT 'unique credit note id, system generated or passed in', - `tax_amount` decimal(20,2) COMMENT 'Total tax amount of this contribution.', - `revenue_recognition_date` datetime COMMENT 'Stores the date when revenue should be recognized.', - `is_template` tinyint DEFAULT 0 COMMENT 'Shows this is a template for recurring contributions.' -, - PRIMARY KEY (`id`) - - , INDEX `UI_contrib_payment_instrument_id`( - payment_instrument_id - ) - , INDEX `index_total_amount_receive_date`( - total_amount - , receive_date - ) - , INDEX `index_source`( - source - ) - , UNIQUE INDEX `UI_contrib_trxn_id`( - trxn_id - ) - , UNIQUE INDEX `UI_contrib_invoice_id`( - invoice_id - ) - , INDEX `index_contribution_status`( - contribution_status_id - ) - , INDEX `received_date`( - receive_date - ) - , INDEX `check_number`( - check_number - ) - , INDEX `index_creditnote_id`( - creditnote_id - ) - -, CONSTRAINT FK_civicrm_contribution_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_contribution_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) , CONSTRAINT FK_civicrm_contribution_contribution_page_id FOREIGN KEY (`contribution_page_id`) REFERENCES `civicrm_contribution_page`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_contribution_recur_id FOREIGN KEY (`contribution_recur_id`) REFERENCES `civicrm_contribution_recur`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_address_id FOREIGN KEY (`address_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_contribution_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contribution ID', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', + `financial_type_id` int unsigned COMMENT 'FK to Financial Type for (total_amount - non_deductible_amount).', + `contribution_page_id` int unsigned COMMENT 'The Contribution Page which triggered this contribution', + `payment_instrument_id` int unsigned COMMENT 'FK to Payment Instrument', + `receive_date` datetime COMMENT 'Date contribution was received - not necessarily the creation date of the record', + `non_deductible_amount` decimal(20,2) DEFAULT 0 COMMENT 'Portion of total amount which is NOT tax deductible. Equal to total_amount for non-deductible financial types.', + `total_amount` decimal(20,2) NOT NULL COMMENT 'Total amount of this contribution. Use market value for non-monetary gifts.', + `fee_amount` decimal(20,2) COMMENT 'actual processor fee if known - may be 0.', + `net_amount` decimal(20,2) COMMENT 'actual funds transfer amount. total less fees. if processor does not report actual fee during transaction, this is set to total_amount.', + `trxn_id` varchar(255) COMMENT 'unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method', + `invoice_id` varchar(255) COMMENT 'unique invoice id, system generated or passed in', + `invoice_number` varchar(255) COMMENT 'Human readable invoice number', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `cancel_date` datetime COMMENT 'when was gift cancelled', + `cancel_reason` text, + `receipt_date` datetime COMMENT 'when (if) receipt was sent. populated automatically for online donations w/ automatic receipting', + `thankyou_date` datetime COMMENT 'when (if) was donor thanked', + `source` varchar(255) COMMENT 'Origin of this Contribution.', + `amount_level` text, + `contribution_recur_id` int unsigned 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.', + `is_test` tinyint DEFAULT 0, + `is_pay_later` tinyint DEFAULT 0, + `contribution_status_id` int unsigned DEFAULT 1, + `address_id` int unsigned 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.', + `check_number` varchar(255), + `campaign_id` int unsigned COMMENT 'The campaign for which this contribution has been triggered.', + `creditnote_id` varchar(255) COMMENT 'unique credit note id, system generated or passed in', + `tax_amount` decimal(20,2) COMMENT 'Total tax amount of this contribution.', + `revenue_recognition_date` datetime COMMENT 'Stores the date when revenue should be recognized.', + `is_template` tinyint DEFAULT 0 COMMENT 'Shows this is a template for recurring contributions.', + PRIMARY KEY (`id`), + INDEX `UI_contrib_payment_instrument_id`(payment_instrument_id), + INDEX `index_total_amount_receive_date`(total_amount, receive_date), + INDEX `index_source`(source), + UNIQUE INDEX `UI_contrib_trxn_id`(trxn_id), + UNIQUE INDEX `UI_contrib_invoice_id`(invoice_id), + INDEX `index_contribution_status`(contribution_status_id), + INDEX `received_date`(receive_date), + INDEX `check_number`(check_number), + INDEX `index_creditnote_id`(creditnote_id), + CONSTRAINT FK_civicrm_contribution_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_contribution_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`), + CONSTRAINT FK_civicrm_contribution_contribution_page_id FOREIGN KEY (`contribution_page_id`) REFERENCES `civicrm_contribution_page`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_contribution_recur_id FOREIGN KEY (`contribution_recur_id`) REFERENCES `civicrm_contribution_recur`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_address_id FOREIGN KEY (`address_id`) REFERENCES `civicrm_address`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_contribution_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4675,24 +3827,21 @@ CREATE TABLE `civicrm_contribution` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contribution_product` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `product_id` int unsigned NOT NULL , - `contribution_id` int unsigned NOT NULL , - `product_option` varchar(255) COMMENT 'Option value selected if applicable - e.g. color, size etc.', - `quantity` int , - `fulfilled_date` date COMMENT 'Optional. Can be used to record the date this product was fulfilled or shipped.', - `start_date` date COMMENT 'Actual start date for a time-delimited premium (subscription, service or membership)', - `end_date` date COMMENT 'Actual end date for a time-delimited premium (subscription, service or membership)', - `comment` text , - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type(for membership price sets only).' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_contribution_product_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_contribution_product_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `product_id` int unsigned NOT NULL, + `contribution_id` int unsigned NOT NULL, + `product_option` varchar(255) COMMENT 'Option value selected if applicable - e.g. color, size etc.', + `quantity` int, + `fulfilled_date` date COMMENT 'Optional. Can be used to record the date this product was fulfilled or shipped.', + `start_date` date COMMENT 'Actual start date for a time-delimited premium (subscription, service or membership)', + `end_date` date COMMENT 'Actual end date for a time-delimited premium (subscription, service or membership)', + `comment` text, + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type(for membership price sets only).', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_contribution_product_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_contribution_product_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4700,27 +3849,23 @@ CREATE TABLE `civicrm_contribution_product` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_contribution_soft` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Soft Credit ID', - `contribution_id` int unsigned NOT NULL COMMENT 'FK to contribution table.', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', - `amount` decimal(20,2) NOT NULL COMMENT 'Amount of this soft credit.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `pcp_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_pcp.id', - `pcp_display_in_roll` tinyint DEFAULT 0 , - `pcp_roll_nickname` varchar(255) DEFAULT NULL , - `pcp_personal_note` varchar(255) DEFAULT NULL , - `soft_credit_type_id` int unsigned DEFAULT NULL COMMENT 'Soft Credit Type ID.Implicit FK to civicrm_option_value where option_group = soft_credit_type.' -, - PRIMARY KEY (`id`) - - , INDEX `index_id`( - pcp_id - ) - -, CONSTRAINT FK_civicrm_contribution_soft_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_contribution_soft_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_contribution_soft_pcp_id FOREIGN KEY (`pcp_id`) REFERENCES `civicrm_pcp`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Soft Credit ID', + `contribution_id` int unsigned NOT NULL COMMENT 'FK to contribution table.', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', + `amount` decimal(20,2) NOT NULL COMMENT 'Amount of this soft credit.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `pcp_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_pcp.id', + `pcp_display_in_roll` tinyint DEFAULT 0, + `pcp_roll_nickname` varchar(255) DEFAULT NULL, + `pcp_personal_note` varchar(255) DEFAULT NULL, + `soft_credit_type_id` int unsigned DEFAULT NULL COMMENT 'Soft Credit Type ID.Implicit FK to civicrm_option_value where option_group = soft_credit_type.', + PRIMARY KEY (`id`), + INDEX `index_id`(pcp_id), + CONSTRAINT FK_civicrm_contribution_soft_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_contribution_soft_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_contribution_soft_pcp_id FOREIGN KEY (`pcp_id`) REFERENCES `civicrm_pcp`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4728,25 +3873,17 @@ CREATE TABLE `civicrm_contribution_soft` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_entity_financial_trxn` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `entity_table` varchar(64) NOT NULL COMMENT 'May contain civicrm_financial_item, civicrm_contribution, civicrm_financial_trxn, civicrm_grant, etc', - `entity_id` int unsigned NOT NULL , - `financial_trxn_id` int unsigned , - `amount` decimal(20,2) NOT NULL COMMENT 'allocated amount of transaction to this entity' -, - PRIMARY KEY (`id`) - - , INDEX `UI_entity_financial_trxn_entity_table`( - entity_table - ) - , INDEX `UI_entity_financial_trxn_entity_id`( - entity_id - ) - -, CONSTRAINT FK_civicrm_entity_financial_trxn_financial_trxn_id FOREIGN KEY (`financial_trxn_id`) REFERENCES `civicrm_financial_trxn`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', + `entity_table` varchar(64) NOT NULL COMMENT 'May contain civicrm_financial_item, civicrm_contribution, civicrm_financial_trxn, civicrm_grant, etc', + `entity_id` int unsigned NOT NULL, + `financial_trxn_id` int unsigned, + `amount` decimal(20,2) NOT NULL COMMENT 'allocated amount of transaction to this entity', + PRIMARY KEY (`id`), + INDEX `UI_entity_financial_trxn_entity_table`(entity_table), + INDEX `UI_entity_financial_trxn_entity_id`(entity_id), + CONSTRAINT FK_civicrm_entity_financial_trxn_financial_trxn_id FOREIGN KEY (`financial_trxn_id`) REFERENCES `civicrm_financial_trxn`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4756,21 +3893,15 @@ CREATE TABLE `civicrm_entity_financial_trxn` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_membership_payment` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `membership_id` int unsigned NOT NULL COMMENT 'FK to Membership table', - `contribution_id` int unsigned COMMENT 'FK to contribution table.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_contribution_membership`( - contribution_id - , membership_id - ) - -, CONSTRAINT FK_civicrm_membership_payment_membership_id FOREIGN KEY (`membership_id`) REFERENCES `civicrm_membership`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_membership_payment_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `membership_id` int unsigned NOT NULL COMMENT 'FK to Membership table', + `contribution_id` int unsigned COMMENT 'FK to contribution table.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_contribution_membership`(contribution_id, membership_id), + CONSTRAINT FK_civicrm_membership_payment_membership_id FOREIGN KEY (`membership_id`) REFERENCES `civicrm_membership`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_membership_payment_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4778,92 +3909,85 @@ CREATE TABLE `civicrm_membership_payment` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_event` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Event', - `title` varchar(255) COMMENT 'Event Title (e.g. Fall Fundraiser Dinner)', - `summary` text 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.', - `description` text COMMENT 'Full description of event. Text and html allowed. Displayed on built-in Event Information screens.', - `event_type_id` int unsigned DEFAULT 0 COMMENT 'Event Type ID.Implicit FK to civicrm_option_value where option_group = event_type.', - `participant_listing_id` int unsigned DEFAULT NULL COMMENT 'Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.', - `is_public` tinyint DEFAULT 1 COMMENT 'Public events will be included in the iCal feeds. Access to private event information may be limited using ACLs.', - `start_date` datetime COMMENT 'Date and time that event starts.', - `end_date` datetime COMMENT 'Date and time that event ends. May be NULL if no defined end date/time', - `is_online_registration` tinyint DEFAULT 0 COMMENT 'If true, include registration link on Event Info page.', - `registration_link_text` varchar(255) COMMENT 'Text for link to Event Registration form which is displayed on Event Information screen when is_online_registration is true.', - `registration_start_date` datetime COMMENT 'Date and time that online registration starts.', - `registration_end_date` datetime COMMENT 'Date and time that online registration ends.', - `max_participants` int unsigned DEFAULT NULL 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.', - `event_full_text` text 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.', - `is_monetary` tinyint DEFAULT 0 COMMENT 'If true, one or more fee amounts must be set and a Payment Processor must be configured for Online Event Registration.', - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'Financial type assigned to paid event registrations for this event. Required if is_monetary is true.', - `payment_processor` varchar(128) COMMENT 'Payment Processors configured for this Event (if is_monetary is true)', - `is_map` tinyint DEFAULT 0 COMMENT 'Include a map block on the Event Information page when geocode info is available and a mapping provider has been specified?', - `is_active` tinyint DEFAULT 0 COMMENT 'Is this Event enabled or disabled/cancelled?', - `fee_label` varchar(255) , - `is_show_location` tinyint DEFAULT 1 COMMENT 'If true, show event location.', - `loc_block_id` int unsigned COMMENT 'FK to Location Block ID', - `default_role_id` int unsigned DEFAULT 1 COMMENT 'Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.', - `intro_text` text COMMENT 'Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.', - `footer_text` text COMMENT 'Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.', - `confirm_title` varchar(255) DEFAULT NULL COMMENT 'Title for Confirmation page.', - `confirm_text` text COMMENT 'Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.', - `confirm_footer_text` text COMMENT 'Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.', - `is_email_confirm` tinyint DEFAULT 0 COMMENT 'If true, confirmation is automatically emailed to contact on successful registration.', - `confirm_email_text` text COMMENT 'text to include above standard event info on confirmation email. emails are text-only, so do not allow html for now', - `confirm_from_name` varchar(255) COMMENT 'FROM email name used for confirmation emails.', - `confirm_from_email` varchar(255) COMMENT 'FROM email address used for confirmation emails.', - `cc_confirm` varchar(255) COMMENT 'comma-separated list of email addresses to cc each time a confirmation is sent', - `bcc_confirm` varchar(255) COMMENT 'comma-separated list of email addresses to bcc each time a confirmation is sent', - `default_fee_id` int unsigned COMMENT 'FK to civicrm_option_value.', - `default_discount_fee_id` int unsigned COMMENT 'FK to civicrm_option_value.', - `thankyou_title` varchar(255) DEFAULT NULL COMMENT 'Title for ThankYou page.', - `thankyou_text` text COMMENT 'ThankYou Text.', - `thankyou_footer_text` text COMMENT 'Footer message.', - `is_pay_later` tinyint DEFAULT 0 COMMENT 'if true - allows the user to send payment directly to the org later', - `pay_later_text` text COMMENT 'The text displayed to the user in the main form', - `pay_later_receipt` text COMMENT 'The receipt sent to the user instead of the normal receipt text', - `is_partial_payment` tinyint DEFAULT 0 COMMENT 'is partial payment enabled for this event', - `initial_amount_label` varchar(255) COMMENT 'Initial amount label for partial payment', - `initial_amount_help_text` text COMMENT 'Initial amount help text for partial payment', - `min_initial_amount` decimal(20,2) COMMENT 'Minimum initial amount for partial payment', - `is_multiple_registrations` tinyint DEFAULT 0 COMMENT 'if true - allows the user to register multiple participants for event', - `max_additional_participants` int unsigned DEFAULT 0 COMMENT 'Maximum number of additional participants that can be registered on a single booking', - `allow_same_participant_emails` tinyint DEFAULT 0 COMMENT 'if true - allows the user to register multiple registrations from same email address.', - `has_waitlist` tinyint COMMENT 'Whether the event has waitlist support.', - `requires_approval` tinyint COMMENT 'Whether participants require approval before they can finish registering.', - `expiration_time` int unsigned COMMENT 'Expire pending but unconfirmed registrations after this many hours.', - `allow_selfcancelxfer` tinyint DEFAULT 0 COMMENT 'Allow self service cancellation or transfer for event?', - `selfcancelxfer_time` int DEFAULT 0 COMMENT 'Number of hours prior to event start date to allow self-service cancellation or transfer.', - `waitlist_text` text COMMENT 'Text to display when the event is full, but participants can signup for a waitlist.', - `approval_req_text` text COMMENT 'Text to display when the approval is required to complete registration for an event.', - `is_template` tinyint NOT NULL DEFAULT 0 COMMENT 'whether the event has template', - `template_title` varchar(255) COMMENT 'Event Template Title', - `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this event', - `created_date` datetime COMMENT 'Date and time that event was created.', - `currency` varchar(3) COMMENT '3 character string, value from config setting or input via user.', - `campaign_id` int unsigned COMMENT 'The campaign for which this event has been created.', - `is_share` tinyint DEFAULT 1 COMMENT 'Can people share the event through social media?', - `is_confirm_enabled` tinyint DEFAULT 1 COMMENT 'If false, the event booking confirmation screen gets skipped', - `parent_event_id` int unsigned DEFAULT NULL COMMENT 'Implicit FK to civicrm_event: parent event', - `slot_label_id` int unsigned DEFAULT NULL COMMENT 'Subevent slot label. Implicit FK to civicrm_option_value where option_group = conference_slot.', - `dedupe_rule_group_id` int unsigned DEFAULT NULL COMMENT 'Rule to use when matching registrations for this event', - `is_billing_required` tinyint DEFAULT 0 COMMENT 'if true than billing block is required this event' -, - PRIMARY KEY (`id`) - - , INDEX `index_event_type_id`( - event_type_id - ) - , INDEX `index_participant_listing_id`( - participant_listing_id - ) - , INDEX `index_parent_event_id`( - parent_event_id - ) - -, CONSTRAINT FK_civicrm_event_loc_block_id FOREIGN KEY (`loc_block_id`) REFERENCES `civicrm_loc_block`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_event_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_event_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_event_dedupe_rule_group_id FOREIGN KEY (`dedupe_rule_group_id`) REFERENCES `civicrm_dedupe_rule_group`(`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Event', + `title` varchar(255) COMMENT 'Event Title (e.g. Fall Fundraiser Dinner)', + `summary` text 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.', + `description` text COMMENT 'Full description of event. Text and html allowed. Displayed on built-in Event Information screens.', + `event_type_id` int unsigned DEFAULT 0 COMMENT 'Event Type ID.Implicit FK to civicrm_option_value where option_group = event_type.', + `participant_listing_id` int unsigned DEFAULT NULL COMMENT 'Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.', + `is_public` tinyint DEFAULT 1 COMMENT 'Public events will be included in the iCal feeds. Access to private event information may be limited using ACLs.', + `start_date` datetime COMMENT 'Date and time that event starts.', + `end_date` datetime COMMENT 'Date and time that event ends. May be NULL if no defined end date/time', + `is_online_registration` tinyint DEFAULT 0 COMMENT 'If true, include registration link on Event Info page.', + `registration_link_text` varchar(255) COMMENT 'Text for link to Event Registration form which is displayed on Event Information screen when is_online_registration is true.', + `registration_start_date` datetime COMMENT 'Date and time that online registration starts.', + `registration_end_date` datetime COMMENT 'Date and time that online registration ends.', + `max_participants` int unsigned DEFAULT NULL 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.', + `event_full_text` text 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.', + `is_monetary` tinyint DEFAULT 0 COMMENT 'If true, one or more fee amounts must be set and a Payment Processor must be configured for Online Event Registration.', + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'Financial type assigned to paid event registrations for this event. Required if is_monetary is true.', + `payment_processor` varchar(128) COMMENT 'Payment Processors configured for this Event (if is_monetary is true)', + `is_map` tinyint DEFAULT 0 COMMENT 'Include a map block on the Event Information page when geocode info is available and a mapping provider has been specified?', + `is_active` tinyint DEFAULT 0 COMMENT 'Is this Event enabled or disabled/cancelled?', + `fee_label` varchar(255), + `is_show_location` tinyint DEFAULT 1 COMMENT 'If true, show event location.', + `loc_block_id` int unsigned COMMENT 'FK to Location Block ID', + `default_role_id` int unsigned DEFAULT 1 COMMENT 'Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.', + `intro_text` text COMMENT 'Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.', + `footer_text` text COMMENT 'Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.', + `confirm_title` varchar(255) DEFAULT NULL COMMENT 'Title for Confirmation page.', + `confirm_text` text COMMENT 'Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.', + `confirm_footer_text` text COMMENT 'Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.', + `is_email_confirm` tinyint DEFAULT 0 COMMENT 'If true, confirmation is automatically emailed to contact on successful registration.', + `confirm_email_text` text COMMENT 'text to include above standard event info on confirmation email. emails are text-only, so do not allow html for now', + `confirm_from_name` varchar(255) COMMENT 'FROM email name used for confirmation emails.', + `confirm_from_email` varchar(255) COMMENT 'FROM email address used for confirmation emails.', + `cc_confirm` varchar(255) COMMENT 'comma-separated list of email addresses to cc each time a confirmation is sent', + `bcc_confirm` varchar(255) COMMENT 'comma-separated list of email addresses to bcc each time a confirmation is sent', + `default_fee_id` int unsigned COMMENT 'FK to civicrm_option_value.', + `default_discount_fee_id` int unsigned COMMENT 'FK to civicrm_option_value.', + `thankyou_title` varchar(255) DEFAULT NULL COMMENT 'Title for ThankYou page.', + `thankyou_text` text COMMENT 'ThankYou Text.', + `thankyou_footer_text` text COMMENT 'Footer message.', + `is_pay_later` tinyint DEFAULT 0 COMMENT 'if true - allows the user to send payment directly to the org later', + `pay_later_text` text COMMENT 'The text displayed to the user in the main form', + `pay_later_receipt` text COMMENT 'The receipt sent to the user instead of the normal receipt text', + `is_partial_payment` tinyint DEFAULT 0 COMMENT 'is partial payment enabled for this event', + `initial_amount_label` varchar(255) COMMENT 'Initial amount label for partial payment', + `initial_amount_help_text` text COMMENT 'Initial amount help text for partial payment', + `min_initial_amount` decimal(20,2) COMMENT 'Minimum initial amount for partial payment', + `is_multiple_registrations` tinyint DEFAULT 0 COMMENT 'if true - allows the user to register multiple participants for event', + `max_additional_participants` int unsigned DEFAULT 0 COMMENT 'Maximum number of additional participants that can be registered on a single booking', + `allow_same_participant_emails` tinyint DEFAULT 0 COMMENT 'if true - allows the user to register multiple registrations from same email address.', + `has_waitlist` tinyint COMMENT 'Whether the event has waitlist support.', + `requires_approval` tinyint COMMENT 'Whether participants require approval before they can finish registering.', + `expiration_time` int unsigned COMMENT 'Expire pending but unconfirmed registrations after this many hours.', + `allow_selfcancelxfer` tinyint DEFAULT 0 COMMENT 'Allow self service cancellation or transfer for event?', + `selfcancelxfer_time` int DEFAULT 0 COMMENT 'Number of hours prior to event start date to allow self-service cancellation or transfer.', + `waitlist_text` text COMMENT 'Text to display when the event is full, but participants can signup for a waitlist.', + `approval_req_text` text COMMENT 'Text to display when the approval is required to complete registration for an event.', + `is_template` tinyint NOT NULL DEFAULT 0 COMMENT 'whether the event has template', + `template_title` varchar(255) COMMENT 'Event Template Title', + `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this event', + `created_date` datetime COMMENT 'Date and time that event was created.', + `currency` varchar(3) COMMENT '3 character string, value from config setting or input via user.', + `campaign_id` int unsigned COMMENT 'The campaign for which this event has been created.', + `is_share` tinyint DEFAULT 1 COMMENT 'Can people share the event through social media?', + `is_confirm_enabled` tinyint DEFAULT 1 COMMENT 'If false, the event booking confirmation screen gets skipped', + `parent_event_id` int unsigned DEFAULT NULL COMMENT 'Implicit FK to civicrm_event: parent event', + `slot_label_id` int unsigned DEFAULT NULL COMMENT 'Subevent slot label. Implicit FK to civicrm_option_value where option_group = conference_slot.', + `dedupe_rule_group_id` int unsigned DEFAULT NULL COMMENT 'Rule to use when matching registrations for this event', + `is_billing_required` tinyint DEFAULT 0 COMMENT 'if true than billing block is required this event', + PRIMARY KEY (`id`), + INDEX `index_event_type_id`(event_type_id), + INDEX `index_participant_listing_id`(participant_listing_id), + INDEX `index_parent_event_id`(parent_event_id), + CONSTRAINT FK_civicrm_event_loc_block_id FOREIGN KEY (`loc_block_id`) REFERENCES `civicrm_loc_block`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_event_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_event_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_event_dedupe_rule_group_id FOREIGN KEY (`dedupe_rule_group_id`) REFERENCES `civicrm_dedupe_rule_group`(`id`) +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4871,39 +3995,38 @@ CREATE TABLE `civicrm_event` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_participant` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Participant ID', - `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', - `event_id` int unsigned NOT NULL COMMENT 'FK to Event ID', - `status_id` int unsigned NOT NULL DEFAULT 1 COMMENT 'Participant status ID. FK to civicrm_participant_status_type. Default of 1 should map to status = Registered.', - `role_id` varchar(128) DEFAULT NULL COMMENT 'Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.', - `register_date` datetime COMMENT 'When did contact register for event?', - `source` varchar(128) COMMENT 'Source of this event registration.', - `fee_level` text COMMENT 'Populate with the label (text) associated with a fee level for paid events with multiple levels. Note that\n we store the label value and not the key', - `is_test` tinyint DEFAULT 0 , - `is_pay_later` tinyint DEFAULT 0 , - `fee_amount` decimal(20,2) COMMENT 'actual processor fee if known - may be 0.', - `registered_by_id` int unsigned DEFAULT NULL COMMENT 'FK to Participant ID', - `discount_id` int unsigned DEFAULT NULL COMMENT 'FK to Discount ID', - `fee_currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value derived from config setting.', - `campaign_id` int unsigned COMMENT 'The campaign for which this participant has been registered.', - `discount_amount` int unsigned COMMENT 'Discount Amount', - `cart_id` int unsigned COMMENT 'FK to civicrm_event_carts', - `must_wait` int COMMENT 'On Waiting List', - `transferred_to_contact_id` int unsigned DEFAULT NULL COMMENT 'FK to Contact ID' -, - PRIMARY KEY (`id`) - - , INDEX `index_status_id`( - status_id - ) - , INDEX `index_role_id`( - role_id - ) - -, CONSTRAINT FK_civicrm_participant_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_participant_event_id FOREIGN KEY (`event_id`) REFERENCES `civicrm_event`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_participant_status_id FOREIGN KEY (`status_id`) REFERENCES `civicrm_participant_status_type`(`id`) , CONSTRAINT FK_civicrm_participant_registered_by_id FOREIGN KEY (`registered_by_id`) REFERENCES `civicrm_participant`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_participant_discount_id FOREIGN KEY (`discount_id`) REFERENCES `civicrm_discount`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_participant_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_participant_cart_id FOREIGN KEY (`cart_id`) REFERENCES `civicrm_event_carts`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_participant_transferred_to_contact_id FOREIGN KEY (`transferred_to_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Participant ID', + `contact_id` int unsigned NOT NULL COMMENT 'FK to Contact ID', + `event_id` int unsigned NOT NULL COMMENT 'FK to Event ID', + `status_id` int unsigned NOT NULL DEFAULT 1 COMMENT 'Participant status ID. FK to civicrm_participant_status_type. Default of 1 should map to status = Registered.', + `role_id` varchar(128) DEFAULT NULL COMMENT 'Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.', + `register_date` datetime COMMENT 'When did contact register for event?', + `source` varchar(128) COMMENT 'Source of this event registration.', + `fee_level` text COMMENT 'Populate with the label (text) associated with a fee level for paid events with multiple levels. Note that\n we store the label value and not the key', + `is_test` tinyint DEFAULT 0, + `is_pay_later` tinyint DEFAULT 0, + `fee_amount` decimal(20,2) COMMENT 'actual processor fee if known - may be 0.', + `registered_by_id` int unsigned DEFAULT NULL COMMENT 'FK to Participant ID', + `discount_id` int unsigned DEFAULT NULL COMMENT 'FK to Discount ID', + `fee_currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value derived from config setting.', + `campaign_id` int unsigned COMMENT 'The campaign for which this participant has been registered.', + `discount_amount` int unsigned COMMENT 'Discount Amount', + `cart_id` int unsigned COMMENT 'FK to civicrm_event_carts', + `must_wait` int COMMENT 'On Waiting List', + `transferred_to_contact_id` int unsigned DEFAULT NULL COMMENT 'FK to Contact ID', + PRIMARY KEY (`id`), + INDEX `index_status_id`(status_id), + INDEX `index_role_id`(role_id), + CONSTRAINT FK_civicrm_participant_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_participant_event_id FOREIGN KEY (`event_id`) REFERENCES `civicrm_event`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_participant_status_id FOREIGN KEY (`status_id`) REFERENCES `civicrm_participant_status_type`(`id`), + CONSTRAINT FK_civicrm_participant_registered_by_id FOREIGN KEY (`registered_by_id`) REFERENCES `civicrm_participant`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_participant_discount_id FOREIGN KEY (`discount_id`) REFERENCES `civicrm_discount`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_participant_campaign_id FOREIGN KEY (`campaign_id`) REFERENCES `civicrm_campaign`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_participant_cart_id FOREIGN KEY (`cart_id`) REFERENCES `civicrm_event_carts`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_participant_transferred_to_contact_id FOREIGN KEY (`transferred_to_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4911,21 +4034,15 @@ CREATE TABLE `civicrm_participant` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_participant_payment` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Participant Payment ID', - `participant_id` int unsigned NOT NULL COMMENT 'Participant ID (FK)', - `contribution_id` int unsigned NOT NULL COMMENT 'FK to contribution table.' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_contribution_participant`( - contribution_id - , participant_id - ) - -, CONSTRAINT FK_civicrm_participant_payment_participant_id FOREIGN KEY (`participant_id`) REFERENCES `civicrm_participant`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_participant_payment_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Participant Payment ID', + `participant_id` int unsigned NOT NULL COMMENT 'Participant ID (FK)', + `contribution_id` int unsigned NOT NULL COMMENT 'FK to contribution table.', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_contribution_participant`(contribution_id, participant_id), + CONSTRAINT FK_civicrm_participant_payment_participant_id FOREIGN KEY (`participant_id`) REFERENCES `civicrm_participant`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_participant_payment_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4933,17 +4050,14 @@ CREATE TABLE `civicrm_participant_payment` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_events_in_carts` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Event In Cart ID', - `event_id` int unsigned COMMENT 'FK to Event ID', - `event_cart_id` int unsigned COMMENT 'FK to Event Cart ID' -, - PRIMARY KEY (`id`) - - -, CONSTRAINT FK_civicrm_events_in_carts_event_id FOREIGN KEY (`event_id`) REFERENCES `civicrm_event`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_events_in_carts_event_cart_id FOREIGN KEY (`event_cart_id`) REFERENCES `civicrm_event_carts`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Event In Cart ID', + `event_id` int unsigned COMMENT 'FK to Event ID', + `event_cart_id` int unsigned COMMENT 'FK to Event Cart ID', + PRIMARY KEY (`id`), + CONSTRAINT FK_civicrm_events_in_carts_event_id FOREIGN KEY (`event_id`) REFERENCES `civicrm_event`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_events_in_carts_event_cart_id FOREIGN KEY (`event_cart_id`) REFERENCES `civicrm_event_carts`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4953,31 +4067,23 @@ CREATE TABLE `civicrm_events_in_carts` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_pledge_payment` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT , - `pledge_id` int unsigned NOT NULL COMMENT 'FK to Pledge table', - `contribution_id` int unsigned COMMENT 'FK to contribution table.', - `scheduled_amount` decimal(20,2) NOT NULL COMMENT 'Pledged amount for this payment (the actual contribution amount might be different).', - `actual_amount` decimal(20,2) COMMENT 'Actual amount that is paid as the Pledged installment amount.', - `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', - `scheduled_date` datetime NOT NULL COMMENT 'The date the pledge payment is supposed to happen.', - `reminder_date` datetime COMMENT 'The date that the most recent payment reminder was sent.', - `reminder_count` int unsigned DEFAULT 0 COMMENT 'The number of payment reminders sent.', - `status_id` int unsigned -, - PRIMARY KEY (`id`) - - , INDEX `index_contribution_pledge`( - contribution_id - , pledge_id - ) - , INDEX `index_status`( - status_id - ) - -, CONSTRAINT FK_civicrm_pledge_payment_pledge_id FOREIGN KEY (`pledge_id`) REFERENCES `civicrm_pledge`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_pledge_payment_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; + `id` int unsigned NOT NULL AUTO_INCREMENT, + `pledge_id` int unsigned NOT NULL COMMENT 'FK to Pledge table', + `contribution_id` int unsigned COMMENT 'FK to contribution table.', + `scheduled_amount` decimal(20,2) NOT NULL COMMENT 'Pledged amount for this payment (the actual contribution amount might be different).', + `actual_amount` decimal(20,2) COMMENT 'Actual amount that is paid as the Pledged installment amount.', + `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', + `scheduled_date` datetime NOT NULL COMMENT 'The date the pledge payment is supposed to happen.', + `reminder_date` datetime COMMENT 'The date that the most recent payment reminder was sent.', + `reminder_count` int unsigned DEFAULT 0 COMMENT 'The number of payment reminders sent.', + `status_id` int unsigned, + PRIMARY KEY (`id`), + INDEX `index_contribution_pledge`(contribution_id, pledge_id), + INDEX `index_status`(status_id), + CONSTRAINT FK_civicrm_pledge_payment_pledge_id FOREIGN KEY (`pledge_id`) REFERENCES `civicrm_pledge`(`id`) ON DELETE CASCADE, + CONSTRAINT FK_civicrm_pledge_payment_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE CASCADE +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- /******************************************************* -- * @@ -4985,34 +4091,25 @@ CREATE TABLE `civicrm_pledge_payment` ( -- * -- *******************************************************/ CREATE TABLE `civicrm_line_item` ( - - - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Line Item', - `entity_table` varchar(64) NOT NULL COMMENT 'table which has the transaction', - `entity_id` int unsigned NOT NULL COMMENT 'entry in table', - `contribution_id` int unsigned COMMENT 'FK to civicrm_contribution', - `price_field_id` int unsigned COMMENT 'FK to civicrm_price_field', - `label` varchar(255) DEFAULT NULL COMMENT 'descriptive label for item - from price_field_value.label', - `qty` decimal(20,2) NOT NULL COMMENT 'How many items ordered', - `unit_price` decimal(20,2) NOT NULL COMMENT 'price of each item', - `line_total` decimal(20,2) NOT NULL COMMENT 'qty * unit_price', - `participant_count` int unsigned DEFAULT NULL COMMENT 'Participant count for field', - `price_field_value_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_price_field_value', - `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', - `non_deductible_amount` decimal(20,2) NOT NULL DEFAULT 0.0 COMMENT 'Portion of total amount which is NOT tax deductible.', - `tax_amount` decimal(20,2) COMMENT 'tax of each item' -, - PRIMARY KEY (`id`) - - , UNIQUE INDEX `UI_line_item_value`( - entity_id - , entity_table - , contribution_id - , price_field_value_id - , price_field_id - ) - -, CONSTRAINT FK_civicrm_line_item_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_line_item_price_field_id FOREIGN KEY (`price_field_id`) REFERENCES `civicrm_price_field`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_line_item_price_field_value_id FOREIGN KEY (`price_field_value_id`) REFERENCES `civicrm_price_field_value`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_line_item_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; - - + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Line Item', + `entity_table` varchar(64) NOT NULL COMMENT 'May contain civicrm_contribution, civicrm_participant or civicrm_membership', + `entity_id` int unsigned NOT NULL COMMENT 'entry in table', + `contribution_id` int unsigned COMMENT 'FK to civicrm_contribution', + `price_field_id` int unsigned COMMENT 'FK to civicrm_price_field', + `label` varchar(255) DEFAULT NULL COMMENT 'descriptive label for item - from price_field_value.label', + `qty` decimal(20,2) NOT NULL COMMENT 'How many items ordered', + `unit_price` decimal(20,2) NOT NULL COMMENT 'price of each item', + `line_total` decimal(20,2) NOT NULL COMMENT 'qty * unit_price', + `participant_count` int unsigned DEFAULT NULL COMMENT 'Participant count for field', + `price_field_value_id` int unsigned DEFAULT NULL COMMENT 'FK to civicrm_price_field_value', + `financial_type_id` int unsigned DEFAULT NULL COMMENT 'FK to Financial Type.', + `non_deductible_amount` decimal(20,2) NOT NULL DEFAULT 0.0 COMMENT 'Portion of total amount which is NOT tax deductible.', + `tax_amount` decimal(20,2) COMMENT 'tax of each item', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_line_item_value`(entity_id, entity_table, contribution_id, price_field_value_id, price_field_id), + CONSTRAINT FK_civicrm_line_item_contribution_id FOREIGN KEY (`contribution_id`) REFERENCES `civicrm_contribution`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_line_item_price_field_id FOREIGN KEY (`price_field_id`) REFERENCES `civicrm_price_field`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_line_item_price_field_value_id FOREIGN KEY (`price_field_value_id`) REFERENCES `civicrm_price_field_value`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_line_item_financial_type_id FOREIGN KEY (`financial_type_id`) REFERENCES `civicrm_financial_type`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index dc7be68219..ed14e98a65 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -6529,11 +6529,11 @@ INSERT INTO civicrm_msg_template - ('Cases - Send Copy of an Activity', '{if $idHash}[case #{$idHash}]{/if} {$activitySubject} + ('Cases - Send Copy of an Activity', '{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject} ', '=========================================================== {ts}Activity Summary{/ts} - {$activityTypeName} =========================================================== -{if $isCaseActivity} +{if !empty($isCaseActivity)} {ts}Your Case Role(s){/ts} : {$contact.role} {if $manageCaseURL} {ts}Manage Case{/ts} : {$manageCaseURL} @@ -6549,9 +6549,9 @@ INSERT INTO civicrm_msg_template {foreach from=$activity.fields item=field} {if $field.type eq \'Date\'} -{$field.label}{if $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} +{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} {else} -{$field.label}{if $field.category}({$field.category}){/if} : {$field.value} +{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value} {/if} {/foreach} @@ -6597,7 +6597,7 @@ INSERT INTO civicrm_msg_template {ts}Activity Summary{/ts} - {$activityTypeName} </th> </tr> - {if $isCaseActivity} + {if !empty($isCaseActivity)} <tr> <td {$labelStyle}> {ts}Your Case Role(s){/ts} @@ -6631,7 +6631,7 @@ INSERT INTO civicrm_msg_template {foreach from=$activity.fields item=field} <tr> <td {$labelStyle}> - {$field.label}{if $field.category}({$field.category}){/if} + {$field.label}{if !empty($field.category)}({$field.category}){/if} </td> <td {$valueStyle}> {if $field.type eq \'Date\'} @@ -6673,11 +6673,11 @@ INSERT INTO civicrm_msg_template </body> </html> ', 'case_activity', @tpl_ovid_case_activity, 1, 0), - ('Cases - Send Copy of an Activity', '{if $idHash}[case #{$idHash}]{/if} {$activitySubject} + ('Cases - Send Copy of an Activity', '{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject} ', '=========================================================== {ts}Activity Summary{/ts} - {$activityTypeName} =========================================================== -{if $isCaseActivity} +{if !empty($isCaseActivity)} {ts}Your Case Role(s){/ts} : {$contact.role} {if $manageCaseURL} {ts}Manage Case{/ts} : {$manageCaseURL} @@ -6693,9 +6693,9 @@ INSERT INTO civicrm_msg_template {foreach from=$activity.fields item=field} {if $field.type eq \'Date\'} -{$field.label}{if $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} +{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} {else} -{$field.label}{if $field.category}({$field.category}){/if} : {$field.value} +{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value} {/if} {/foreach} @@ -6741,7 +6741,7 @@ INSERT INTO civicrm_msg_template {ts}Activity Summary{/ts} - {$activityTypeName} </th> </tr> - {if $isCaseActivity} + {if !empty($isCaseActivity)} <tr> <td {$labelStyle}> {ts}Your Case Role(s){/ts} @@ -6775,7 +6775,7 @@ INSERT INTO civicrm_msg_template {foreach from=$activity.fields item=field} <tr> <td {$labelStyle}> - {$field.label}{if $field.category}({$field.category}){/if} + {$field.label}{if !empty($field.category)}({$field.category}){/if} </td> <td {$valueStyle}> {if $field.type eq \'Date\'} @@ -7034,7 +7034,7 @@ INSERT INTO civicrm_msg_template ('Contributions - Receipt (off-line)', '{ts}Contribution Receipt{/ts} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $formValues.receipt_text} +{if !empty($formValues.receipt_text)} {$formValues.receipt_text} {else}{ts}Below you will find a receipt for this contribution.{/ts}{/if} @@ -7043,35 +7043,37 @@ INSERT INTO civicrm_msg_template =========================================================== {ts}Contributor{/ts}: {contact.display_name} +{if !empty($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_qty}{ts}Qty{/ts}{/capture} {capture assign=ts_each}{ts}Each{/ts}{/capture} -{if $getTaxDetails} +{if !empty($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"} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($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"} +{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 !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($getTaxDetails) && !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}% : {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency} {/if} {/foreach} {/if} @@ -7080,23 +7082,23 @@ INSERT INTO civicrm_msg_template {ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency} {/if} {ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency} -{if $receive_date} +{if !empty($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} +{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)} {ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} +{if !empty($formValues.check_number)} {ts}Check Number{/ts}: {$formValues.check_number} {/if} {/if} -{if $formValues.trxn_id} +{if !empty($formValues.trxn_id)} {ts}Transaction ID{/ts}: {$formValues.trxn_id} {/if} -{if $ccContribution} +{if !empty($ccContribution)} =========================================================== {ts}Billing Name and Address{/ts} @@ -7112,7 +7114,7 @@ INSERT INTO civicrm_msg_template {$credit_card_number} {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate} {/if} -{if $customGroup} +{if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} =========================================================== {$customName} @@ -7123,7 +7125,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $softCreditTypes and $softCredits} +{if !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} =========================================================== {$softCreditType} @@ -7134,7 +7136,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $formValues.product_name} +{if !empty($formValues.product_name)} =========================================================== {ts}Premium Information{/ts} @@ -7174,7 +7176,7 @@ INSERT INTO civicrm_msg_template <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $formValues.receipt_text} + {if !empty($formValues.receipt_text)} <p>{$formValues.receipt_text|htmlize}</p> {else} <p>{ts}Below you will find a receipt for this contribution.{/ts}</p> @@ -7198,15 +7200,17 @@ INSERT INTO civicrm_msg_template </td> </tr> <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$formValues.contributionType_name} - </td> + {if !empty($formValues.contributionType_name)} + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$formValues.contributionType_name} + </td> + {/if} </tr> - {if $lineItem and !$is_quick_config} + {if !empty($lineItem) and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -7215,7 +7219,7 @@ INSERT INTO civicrm_msg_template <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <th>{ts}Subtotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -7233,11 +7237,11 @@ INSERT INTO civicrm_msg_template <td> {$line.unit_price|crmMoney:$currency} </td> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <td> {$line.unit_price*$line.qty|crmMoney:$currency} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -7259,7 +7263,7 @@ INSERT INTO civicrm_msg_template </tr> {/foreach} {/if} - {if $getTaxDetails && $dataArray} + {if !empty($getTaxDetails) && !empty($dataArray)} <tr> <td {$labelStyle}> {ts} Amount before Tax : {/ts} @@ -7272,10 +7276,10 @@ INSERT INTO civicrm_msg_template {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0 || $value != \'\'} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -7302,7 +7306,7 @@ INSERT INTO civicrm_msg_template </td> </tr> - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date Received{/ts} @@ -7324,7 +7328,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $formValues.paidBy and !$formValues.hidden_CreditCard} + {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -7333,7 +7337,7 @@ INSERT INTO civicrm_msg_template {$formValues.paidBy} </td> </tr> - {if $formValues.check_number} + {if !empty($formValues.check_number)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -7345,7 +7349,7 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $formValues.trxn_id} + {if !empty($formValues.trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction ID{/ts} @@ -7356,7 +7360,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $ccContribution} + {if !empty($ccContribution)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -7382,7 +7386,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $softCreditTypes and $softCredits} + {if !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} <tr> <th {$headerStyle}> @@ -7402,7 +7406,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customGroup} + {if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} <tr> <th {$headerStyle}> @@ -7422,7 +7426,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $formValues.product_name} + {if !empty($formValues.product_name)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -7478,7 +7482,7 @@ INSERT INTO civicrm_msg_template ('Contributions - Receipt (off-line)', '{ts}Contribution Receipt{/ts} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $formValues.receipt_text} +{if !empty($formValues.receipt_text)} {$formValues.receipt_text} {else}{ts}Below you will find a receipt for this contribution.{/ts}{/if} @@ -7487,35 +7491,37 @@ INSERT INTO civicrm_msg_template =========================================================== {ts}Contributor{/ts}: {contact.display_name} +{if !empty($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_qty}{ts}Qty{/ts}{/capture} {capture assign=ts_each}{ts}Each{/ts}{/capture} -{if $getTaxDetails} +{if !empty($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"} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($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"} +{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 !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($getTaxDetails) && !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}% : {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency} {/if} {/foreach} {/if} @@ -7524,23 +7530,23 @@ INSERT INTO civicrm_msg_template {ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency} {/if} {ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency} -{if $receive_date} +{if !empty($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} +{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)} {ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} +{if !empty($formValues.check_number)} {ts}Check Number{/ts}: {$formValues.check_number} {/if} {/if} -{if $formValues.trxn_id} +{if !empty($formValues.trxn_id)} {ts}Transaction ID{/ts}: {$formValues.trxn_id} {/if} -{if $ccContribution} +{if !empty($ccContribution)} =========================================================== {ts}Billing Name and Address{/ts} @@ -7556,7 +7562,7 @@ INSERT INTO civicrm_msg_template {$credit_card_number} {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate} {/if} -{if $customGroup} +{if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} =========================================================== {$customName} @@ -7567,7 +7573,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $softCreditTypes and $softCredits} +{if !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} =========================================================== {$softCreditType} @@ -7578,7 +7584,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $formValues.product_name} +{if !empty($formValues.product_name)} =========================================================== {ts}Premium Information{/ts} @@ -7618,7 +7624,7 @@ INSERT INTO civicrm_msg_template <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $formValues.receipt_text} + {if !empty($formValues.receipt_text)} <p>{$formValues.receipt_text|htmlize}</p> {else} <p>{ts}Below you will find a receipt for this contribution.{/ts}</p> @@ -7642,15 +7648,17 @@ INSERT INTO civicrm_msg_template </td> </tr> <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$formValues.contributionType_name} - </td> + {if !empty($formValues.contributionType_name)} + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$formValues.contributionType_name} + </td> + {/if} </tr> - {if $lineItem and !$is_quick_config} + {if !empty($lineItem) and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -7659,7 +7667,7 @@ INSERT INTO civicrm_msg_template <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <th>{ts}Subtotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -7677,11 +7685,11 @@ INSERT INTO civicrm_msg_template <td> {$line.unit_price|crmMoney:$currency} </td> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <td> {$line.unit_price*$line.qty|crmMoney:$currency} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -7703,7 +7711,7 @@ INSERT INTO civicrm_msg_template </tr> {/foreach} {/if} - {if $getTaxDetails && $dataArray} + {if !empty($getTaxDetails) && !empty($dataArray)} <tr> <td {$labelStyle}> {ts} Amount before Tax : {/ts} @@ -7716,10 +7724,10 @@ INSERT INTO civicrm_msg_template {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0 || $value != \'\'} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -7746,7 +7754,7 @@ INSERT INTO civicrm_msg_template </td> </tr> - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date Received{/ts} @@ -7768,7 +7776,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $formValues.paidBy and !$formValues.hidden_CreditCard} + {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -7777,7 +7785,7 @@ INSERT INTO civicrm_msg_template {$formValues.paidBy} </td> </tr> - {if $formValues.check_number} + {if !empty($formValues.check_number)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -7789,7 +7797,7 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $formValues.trxn_id} + {if !empty($formValues.trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction ID{/ts} @@ -7800,7 +7808,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $ccContribution} + {if !empty($ccContribution)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -7826,7 +7834,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $softCreditTypes and $softCredits} + {if !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} <tr> <th {$headerStyle}> @@ -7846,7 +7854,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customGroup} + {if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} <tr> <th {$headerStyle}> @@ -7866,7 +7874,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $formValues.product_name} + {if !empty($formValues.product_name)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -7923,13 +7931,13 @@ INSERT INTO civicrm_msg_template ('Contributions - Receipt (on-line)', '{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $receipt_text} +{if !empty($receipt_text)} {$receipt_text} {/if} {if $is_pay_later} =========================================================== -{$pay_later_receipt} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} =========================================================== {/if} @@ -7938,55 +7946,55 @@ INSERT INTO civicrm_msg_template {ts}Contribution Information{/ts} =========================================================== -{if $lineItem and $priceSetID and !$is_quick_config} +{if $lineItem and $priceSetID and empty($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} +{if !empty($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"} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($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} +{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if} {/if} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Date{/ts}: {$receive_date|crmDate} {/if} -{if $is_monetary and $trxn_id} +{if !empty($is_monetary) and !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $is_recur} +{if !empty($is_recur)} {ts}This is a recurring contribution.{/ts} {if $cancelSubscriptionUrl} @@ -8018,7 +8026,7 @@ INSERT INTO civicrm_msg_template {foreach from=$honoreeProfile item=value key=label} {$label}: {$value} {/foreach} -{elseif $softCreditTypes and $softCredits} +{elseif !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} =========================================================== {$softCreditType} @@ -8028,7 +8036,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/foreach} {/if} -{if $pcpBlock} +{if !empty($pcpBlock)} =========================================================== {ts}Personal Campaign Page{/ts} @@ -8040,7 +8048,7 @@ INSERT INTO civicrm_msg_template {if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} {/if} -{if $onBehalfProfile} +{if !empty($onBehalfProfile)} =========================================================== {ts}On Behalf Of{/ts} @@ -8050,7 +8058,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $billingName} +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -8059,14 +8067,14 @@ INSERT INTO civicrm_msg_template {$address} {$email} -{elseif $email} +{elseif !empty($email)} =========================================================== {ts}Registered Email{/ts} =========================================================== {$email} {/if} {* End billingName or Email*} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -8077,7 +8085,7 @@ INSERT INTO civicrm_msg_template {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate} {/if} -{if $selectPremium } +{if !empty($selectPremium )} =========================================================== {ts}Premium Information{/ts} @@ -8095,42 +8103,42 @@ INSERT INTO civicrm_msg_template {if $end_date} {ts}End Date{/ts}: {$end_date|crmDate} {/if} -{if $contact_email OR $contact_phone} +{if !empty($contact_email) OR !empty($contact_phone)} {ts}For information about this premium, contact:{/ts} -{if $contact_email} +{if !empty($contact_email)} {$contact_email} {/if} -{if $contact_phone} +{if !empty($contact_phone)} {$contact_phone} {/if} {/if} -{if $is_deductible AND $price} +{if !empty($is_deductible) AND !empty($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} +{if !empty($customPre)} =========================================================== {$customPre_grouptitle} =========================================================== {foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} =========================================================== {$customPost_grouptitle} =========================================================== {foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} @@ -8159,12 +8167,12 @@ INSERT INTO civicrm_msg_template <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $receipt_text} + {if !empty($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 *} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -8181,7 +8189,7 @@ INSERT INTO civicrm_msg_template </th> </tr> - {if $lineItem and $priceSetID and !$is_quick_config} + {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> @@ -8191,7 +8199,7 @@ INSERT INTO civicrm_msg_template <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}Subtotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -8209,11 +8217,11 @@ INSERT INTO civicrm_msg_template <td> {$line.unit_price|crmMoney:$currency} </td> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <td> {$line.unit_price*$line.qty|crmMoney:$currency} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -8234,7 +8242,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} <tr> <td {$labelStyle}> {ts} Amount before Tax : {/ts} @@ -8247,17 +8255,17 @@ INSERT INTO civicrm_msg_template {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax{/ts} @@ -8278,7 +8286,7 @@ INSERT INTO civicrm_msg_template {else} - {if $totalTaxAmount} + {if !empty($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -8293,7 +8301,7 @@ INSERT INTO civicrm_msg_template {ts}Amount{/ts} </td> <td {$valueStyle}> - {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if} + {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if} </td> </tr> @@ -8302,7 +8310,7 @@ INSERT INTO civicrm_msg_template {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date{/ts} @@ -8313,7 +8321,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $is_monetary and $trxn_id} + {if !empty($is_monetary) and !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -8324,7 +8332,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $is_recur} + {if !empty($is_recur)} <tr> <td colspan="2" {$labelStyle}> {ts}This is a recurring contribution.{/ts} @@ -8365,7 +8373,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/foreach} - {elseif $softCreditTypes and $softCredits} + {elseif !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} <tr> <th {$headerStyle}> @@ -8385,7 +8393,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $pcpBlock} + {if !empty($pcpBlock)} <tr> <th {$headerStyle}> {ts}Personal Campaign Page{/ts} @@ -8421,7 +8429,7 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $onBehalfProfile} + {if !empty($onBehalfProfile)} <tr> <th {$headerStyle}> {$onBehalfProfile_grouptitle} @@ -8439,7 +8447,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $isShare} + {if !empty($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} @@ -8448,7 +8456,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -8461,7 +8469,7 @@ INSERT INTO civicrm_msg_template {$email} </td> </tr> - {elseif $email} + {elseif !empty($email)} <tr> <th {$headerStyle}> {ts}Registered Email{/ts} @@ -8474,7 +8482,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -8489,7 +8497,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $selectPremium} + {if !empty($selectPremium)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -8540,20 +8548,20 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $contact_email OR $contact_phone} + {if !empty($contact_email) OR !empty($contact_phone)} <tr> <td colspan="2" {$valueStyle}> <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} + {if !empty($contact_email)} <p>{$contact_email}</p> {/if} - {if $contact_phone} + {if !empty($contact_phone)} <p>{$contact_phone}</p> {/if} </td> </tr> {/if} - {if $is_deductible AND $price} + {if !empty($is_deductible) AND !empty($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> @@ -8562,14 +8570,14 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -8582,14 +8590,14 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -8610,13 +8618,13 @@ INSERT INTO civicrm_msg_template ', 'contribution_online_receipt', @tpl_ovid_contribution_online_receipt, 1, 0), ('Contributions - Receipt (on-line)', '{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $receipt_text} +{if !empty($receipt_text)} {$receipt_text} {/if} {if $is_pay_later} =========================================================== -{$pay_later_receipt} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} =========================================================== {/if} @@ -8625,55 +8633,55 @@ INSERT INTO civicrm_msg_template {ts}Contribution Information{/ts} =========================================================== -{if $lineItem and $priceSetID and !$is_quick_config} +{if $lineItem and $priceSetID and empty($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} +{if !empty($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"} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($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} +{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if} {/if} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Date{/ts}: {$receive_date|crmDate} {/if} -{if $is_monetary and $trxn_id} +{if !empty($is_monetary) and !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $is_recur} +{if !empty($is_recur)} {ts}This is a recurring contribution.{/ts} {if $cancelSubscriptionUrl} @@ -8705,7 +8713,7 @@ INSERT INTO civicrm_msg_template {foreach from=$honoreeProfile item=value key=label} {$label}: {$value} {/foreach} -{elseif $softCreditTypes and $softCredits} +{elseif !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} =========================================================== {$softCreditType} @@ -8715,7 +8723,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/foreach} {/if} -{if $pcpBlock} +{if !empty($pcpBlock)} =========================================================== {ts}Personal Campaign Page{/ts} @@ -8727,7 +8735,7 @@ INSERT INTO civicrm_msg_template {if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} {/if} -{if $onBehalfProfile} +{if !empty($onBehalfProfile)} =========================================================== {ts}On Behalf Of{/ts} @@ -8737,7 +8745,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $billingName} +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -8746,14 +8754,14 @@ INSERT INTO civicrm_msg_template {$address} {$email} -{elseif $email} +{elseif !empty($email)} =========================================================== {ts}Registered Email{/ts} =========================================================== {$email} {/if} {* End billingName or Email*} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -8764,7 +8772,7 @@ INSERT INTO civicrm_msg_template {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate} {/if} -{if $selectPremium } +{if !empty($selectPremium )} =========================================================== {ts}Premium Information{/ts} @@ -8782,42 +8790,42 @@ INSERT INTO civicrm_msg_template {if $end_date} {ts}End Date{/ts}: {$end_date|crmDate} {/if} -{if $contact_email OR $contact_phone} +{if !empty($contact_email) OR !empty($contact_phone)} {ts}For information about this premium, contact:{/ts} -{if $contact_email} +{if !empty($contact_email)} {$contact_email} {/if} -{if $contact_phone} +{if !empty($contact_phone)} {$contact_phone} {/if} {/if} -{if $is_deductible AND $price} +{if !empty($is_deductible) AND !empty($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} +{if !empty($customPre)} =========================================================== {$customPre_grouptitle} =========================================================== {foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} =========================================================== {$customPost_grouptitle} =========================================================== {foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} @@ -8846,12 +8854,12 @@ INSERT INTO civicrm_msg_template <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $receipt_text} + {if !empty($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 *} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -8868,7 +8876,7 @@ INSERT INTO civicrm_msg_template </th> </tr> - {if $lineItem and $priceSetID and !$is_quick_config} + {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> @@ -8878,7 +8886,7 @@ INSERT INTO civicrm_msg_template <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}Subtotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -8896,11 +8904,11 @@ INSERT INTO civicrm_msg_template <td> {$line.unit_price|crmMoney:$currency} </td> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <td> {$line.unit_price*$line.qty|crmMoney:$currency} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -8921,7 +8929,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} <tr> <td {$labelStyle}> {ts} Amount before Tax : {/ts} @@ -8934,17 +8942,17 @@ INSERT INTO civicrm_msg_template {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax{/ts} @@ -8965,7 +8973,7 @@ INSERT INTO civicrm_msg_template {else} - {if $totalTaxAmount} + {if !empty($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -8980,7 +8988,7 @@ INSERT INTO civicrm_msg_template {ts}Amount{/ts} </td> <td {$valueStyle}> - {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if} + {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if} </td> </tr> @@ -8989,7 +8997,7 @@ INSERT INTO civicrm_msg_template {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date{/ts} @@ -9000,7 +9008,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $is_monetary and $trxn_id} + {if !empty($is_monetary) and !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -9011,7 +9019,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $is_recur} + {if !empty($is_recur)} <tr> <td colspan="2" {$labelStyle}> {ts}This is a recurring contribution.{/ts} @@ -9052,7 +9060,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/foreach} - {elseif $softCreditTypes and $softCredits} + {elseif !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} <tr> <th {$headerStyle}> @@ -9072,7 +9080,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $pcpBlock} + {if !empty($pcpBlock)} <tr> <th {$headerStyle}> {ts}Personal Campaign Page{/ts} @@ -9108,7 +9116,7 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $onBehalfProfile} + {if !empty($onBehalfProfile)} <tr> <th {$headerStyle}> {$onBehalfProfile_grouptitle} @@ -9126,7 +9134,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $isShare} + {if !empty($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} @@ -9135,7 +9143,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -9148,7 +9156,7 @@ INSERT INTO civicrm_msg_template {$email} </td> </tr> - {elseif $email} + {elseif !empty($email)} <tr> <th {$headerStyle}> {ts}Registered Email{/ts} @@ -9161,7 +9169,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -9176,7 +9184,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $selectPremium} + {if !empty($selectPremium)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -9227,20 +9235,20 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $contact_email OR $contact_phone} + {if !empty($contact_email) OR !empty($contact_phone)} <tr> <td colspan="2" {$valueStyle}> <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} + {if !empty($contact_email)} <p>{$contact_email}</p> {/if} - {if $contact_phone} + {if !empty($contact_phone)} <p>{$contact_phone}</p> {/if} </td> </tr> {/if} - {if $is_deductible AND $price} + {if !empty($is_deductible) AND !empty($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> @@ -9249,14 +9257,14 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -9269,14 +9277,14 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -9372,7 +9380,7 @@ INSERT INTO civicrm_msg_template </tr> <tr> <td><font size="1" align="right"> {$country}</font></td> - <td><font size="1" align="right">{$source}</font></td> + <td><font size="1" align="right">{if !empty($source)}{$source}{/if}</font></td> <td valign="top" style="white-space: nowrap"><font size="1" align="right">{if $domain_email}{$domain_email}{/if}</font> </td> </tr> <tr> @@ -9387,7 +9395,7 @@ INSERT INTO civicrm_msg_template <th style="text-align:left;font-weight:bold;width:100%"><font size="1">{ts}Description{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Quantity{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{$taxTerm}</font></th> + <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{if isset($taxTerm)}{$taxTerm}{/if}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=taxpricevalue} @@ -9409,9 +9417,9 @@ INSERT INTO civicrm_msg_template <td style="text-align:right;"><font size="1">{$value.qty}</font></td> <td style="text-align:right;"><font size="1">{$value.unit_price|crmMoney:$currency}</font></td> {if $value.tax_amount != \'\'} - <td style="text-align:right;"><font size="1">{$value.tax_rate}%</font></td> + <td style="text-align:right;"><font size="1">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td> {else} - <td style="text-align:right;"><font size="1">{ts 1=$taxTerm}-{/ts}</font></td> + <td style="text-align:right;"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td> {/if} <td style="text-align:right;"><font size="1">{$value.subTotal|crmMoney:$currency}</font></td> </tr> @@ -9421,18 +9429,20 @@ INSERT INTO civicrm_msg_template <td style="text-align:right;"><font size="1">{ts}Sub Total{/ts}</font></td> <td style="text-align:right;"><font size="1">{$subTotal|crmMoney:$currency}</font></td> </tr> + {if !empty($dataArray)} {foreach from=$dataArray item=value key=priceset} <tr> <td colspan="3"></td> {if $priceset} - <td style="text-align:right;white-space: nowrap"><font size="1">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td> + <td style="text-align:right;white-space: nowrap"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td> <td style="text-align:right"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> {elseif $priceset == 0} - <td style="text-align:right;white-space: nowrap"><font size="1">{ts 1=$taxTerm}TOTAL %1{/ts}</font></td> + <td style="text-align:right;white-space: nowrap"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td> <td style="text-align:right"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> + {/if} </tr> - {/if} {/foreach} + {/if} <tr> <td colspan="3"></td> <td style="text-align:right;white-space: nowrap"><b><font size="1">{ts 1=$currency}TOTAL %1{/ts}</font></b></td> @@ -9613,7 +9623,7 @@ INSERT INTO civicrm_msg_template <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">{if isset($taxTerm)}{$taxTerm}{/if}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=pricevalue} @@ -9638,9 +9648,9 @@ INSERT INTO civicrm_msg_template <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> + <td style="padding-left:28px;text-align:right;"><font size="1">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td> {else} - <td style="padding-left:28px;text-align:right"><font size="1">{ts 1=$taxTerm}No %1{/ts}</font></td> + <td style="padding-left:28px;text-align:right"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td> {/if} <td style="padding-left:28px;text-align:right;"><font size="1">{$value.subTotal|crmMoney:$currency}</font></td> </tr> @@ -9651,18 +9661,20 @@ INSERT INTO civicrm_msg_template <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> + {if !empty($dataArray)} {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">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</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">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td> <td style="padding-left:28px;text-align:right;"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> + {/if} </tr> - {/if} {/foreach} + {/if} <tr> <td colspan="3"></td> <td colspan="2"><hr></hr></td> @@ -9815,7 +9827,7 @@ INSERT INTO civicrm_msg_template </tr> <tr> <td><font size="1" align="right"> {$country}</font></td> - <td><font size="1" align="right">{$source}</font></td> + <td><font size="1" align="right">{if !empty($source)}{$source}{/if}</font></td> <td valign="top" style="white-space: nowrap"><font size="1" align="right">{if $domain_email}{$domain_email}{/if}</font> </td> </tr> <tr> @@ -9830,7 +9842,7 @@ INSERT INTO civicrm_msg_template <th style="text-align:left;font-weight:bold;width:100%"><font size="1">{ts}Description{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Quantity{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{$taxTerm}</font></th> + <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{if isset($taxTerm)}{$taxTerm}{/if}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=taxpricevalue} @@ -9852,9 +9864,9 @@ INSERT INTO civicrm_msg_template <td style="text-align:right;"><font size="1">{$value.qty}</font></td> <td style="text-align:right;"><font size="1">{$value.unit_price|crmMoney:$currency}</font></td> {if $value.tax_amount != \'\'} - <td style="text-align:right;"><font size="1">{$value.tax_rate}%</font></td> + <td style="text-align:right;"><font size="1">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td> {else} - <td style="text-align:right;"><font size="1">{ts 1=$taxTerm}-{/ts}</font></td> + <td style="text-align:right;"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td> {/if} <td style="text-align:right;"><font size="1">{$value.subTotal|crmMoney:$currency}</font></td> </tr> @@ -9864,18 +9876,20 @@ INSERT INTO civicrm_msg_template <td style="text-align:right;"><font size="1">{ts}Sub Total{/ts}</font></td> <td style="text-align:right;"><font size="1">{$subTotal|crmMoney:$currency}</font></td> </tr> + {if !empty($dataArray)} {foreach from=$dataArray item=value key=priceset} <tr> <td colspan="3"></td> {if $priceset} - <td style="text-align:right;white-space: nowrap"><font size="1">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td> + <td style="text-align:right;white-space: nowrap"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td> <td style="text-align:right"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> {elseif $priceset == 0} - <td style="text-align:right;white-space: nowrap"><font size="1">{ts 1=$taxTerm}TOTAL %1{/ts}</font></td> + <td style="text-align:right;white-space: nowrap"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td> <td style="text-align:right"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> + {/if} </tr> - {/if} {/foreach} + {/if} <tr> <td colspan="3"></td> <td style="text-align:right;white-space: nowrap"><b><font size="1">{ts 1=$currency}TOTAL %1{/ts}</font></b></td> @@ -10056,7 +10070,7 @@ INSERT INTO civicrm_msg_template <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">{if isset($taxTerm)}{$taxTerm}{/if}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=pricevalue} @@ -10081,9 +10095,9 @@ INSERT INTO civicrm_msg_template <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> + <td style="padding-left:28px;text-align:right;"><font size="1">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td> {else} - <td style="padding-left:28px;text-align:right"><font size="1">{ts 1=$taxTerm}No %1{/ts}</font></td> + <td style="padding-left:28px;text-align:right"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td> {/if} <td style="padding-left:28px;text-align:right;"><font size="1">{$value.subTotal|crmMoney:$currency}</font></td> </tr> @@ -10094,18 +10108,20 @@ INSERT INTO civicrm_msg_template <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> + {if !empty($dataArray)} {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">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</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">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td> <td style="padding-left:28px;text-align:right;"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> + {/if} </tr> - {/if} {/foreach} + {/if} <tr> <td colspan="3"></td> <td colspan="2"><hr></hr></td> @@ -11851,13 +11867,13 @@ INSERT INTO civicrm_msg_template {if $receive_date} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} @@ -11866,24 +11882,33 @@ INSERT INTO civicrm_msg_template {ts}Contribution Details{/ts} =============================================================================== +{if isset($totalAmount)} {ts}Total Fee{/ts}: {$totalAmount|crmMoney} +{/if} +{if isset($totalPaid)} {ts}Total Paid{/ts}: {$totalPaid|crmMoney} +{/if} +{if isset($amountOwed)} {ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *} +{/if} -{if $billingName || $address} +{if !empty($billingName) || !empty($address)} =============================================================================== {ts}Billing Name and Address{/ts} =============================================================================== - +{if !empty($billingName)} {$billingName} +{/if} +{if !empty($address)} {$address} {/if} +{/if} -{if $credit_card_number} +{if !empty($credit_card_number)} =========================================================== {ts}Credit Card Information{/ts} @@ -11903,15 +11928,15 @@ INSERT INTO civicrm_msg_template {$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} +{if !empty($event.participant_role)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -11998,7 +12023,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -12008,7 +12033,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -12018,7 +12043,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -12032,6 +12057,7 @@ INSERT INTO civicrm_msg_template <tr> <th {$headerStyle}>{ts}Contribution Details{/ts}</th> </tr> + {if isset($totalAmount)} <tr> <td {$labelStyle}> {ts}Total Fee{/ts} @@ -12040,6 +12066,8 @@ INSERT INTO civicrm_msg_template {$totalAmount|crmMoney} </td> </tr> + {/if} + {if isset($totalPaid)} <tr> <td {$labelStyle}> {ts}Total Paid{/ts} @@ -12048,6 +12076,8 @@ INSERT INTO civicrm_msg_template {$totalPaid|crmMoney} </td> </tr> + {/if} + {if isset($amountOwed)} <tr> <td {$labelStyle}> {ts}Balance Owed{/ts} @@ -12056,6 +12086,7 @@ INSERT INTO civicrm_msg_template {$amountOwed|crmMoney} </td> {* This will be zero after final payment. *} </tr> + {/if} </table> </td> @@ -12063,7 +12094,7 @@ INSERT INTO civicrm_msg_template <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $billingName || $address} + {if !empty($billingName) || !empty($address)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -12071,12 +12102,12 @@ INSERT INTO civicrm_msg_template </tr> <tr> <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} + {if !empty($billingName)}{$billingName}{/if}<br /> + {if !empty($address)}{$address|nl2br}{/if} </td> </tr> {/if} - {if $credit_card_number} + {if !empty($credit_card_number)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -12103,7 +12134,7 @@ INSERT INTO civicrm_msg_template </td> </tr> - {if $event.participant_role} + {if !empty($event.participant_role)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -12114,7 +12145,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -12122,7 +12153,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -12202,13 +12233,13 @@ INSERT INTO civicrm_msg_template {if $receive_date} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} @@ -12217,24 +12248,33 @@ INSERT INTO civicrm_msg_template {ts}Contribution Details{/ts} =============================================================================== +{if isset($totalAmount)} {ts}Total Fee{/ts}: {$totalAmount|crmMoney} +{/if} +{if isset($totalPaid)} {ts}Total Paid{/ts}: {$totalPaid|crmMoney} +{/if} +{if isset($amountOwed)} {ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *} +{/if} -{if $billingName || $address} +{if !empty($billingName) || !empty($address)} =============================================================================== {ts}Billing Name and Address{/ts} =============================================================================== - +{if !empty($billingName)} {$billingName} +{/if} +{if !empty($address)} {$address} {/if} +{/if} -{if $credit_card_number} +{if !empty($credit_card_number)} =========================================================== {ts}Credit Card Information{/ts} @@ -12254,15 +12294,15 @@ INSERT INTO civicrm_msg_template {$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} +{if !empty($event.participant_role)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -12349,7 +12389,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -12359,7 +12399,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -12369,7 +12409,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -12383,6 +12423,7 @@ INSERT INTO civicrm_msg_template <tr> <th {$headerStyle}>{ts}Contribution Details{/ts}</th> </tr> + {if isset($totalAmount)} <tr> <td {$labelStyle}> {ts}Total Fee{/ts} @@ -12391,6 +12432,8 @@ INSERT INTO civicrm_msg_template {$totalAmount|crmMoney} </td> </tr> + {/if} + {if isset($totalPaid)} <tr> <td {$labelStyle}> {ts}Total Paid{/ts} @@ -12399,6 +12442,8 @@ INSERT INTO civicrm_msg_template {$totalPaid|crmMoney} </td> </tr> + {/if} + {if isset($amountOwed)} <tr> <td {$labelStyle}> {ts}Balance Owed{/ts} @@ -12407,6 +12452,7 @@ INSERT INTO civicrm_msg_template {$amountOwed|crmMoney} </td> {* This will be zero after final payment. *} </tr> + {/if} </table> </td> @@ -12414,7 +12460,7 @@ INSERT INTO civicrm_msg_template <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $billingName || $address} + {if !empty($billingName) || !empty($address)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -12422,12 +12468,12 @@ INSERT INTO civicrm_msg_template </tr> <tr> <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} + {if !empty($billingName)}{$billingName}{/if}<br /> + {if !empty($address)}{$address|nl2br}{/if} </td> </tr> {/if} - {if $credit_card_number} + {if !empty($credit_card_number)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -12454,7 +12500,7 @@ INSERT INTO civicrm_msg_template </td> </tr> - {if $event.participant_role} + {if !empty($event.participant_role)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -12465,7 +12511,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -12473,7 +12519,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -12523,60 +12569,60 @@ INSERT INTO civicrm_msg_template ('Events - Registration Confirmation and Receipt (off-line)', '{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} {$event.confirm_email_text} {/if} -{if $isOnWaitlist} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($isOnWaitlist)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}You have been added to the WAIT LIST for this event.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} +{elseif !empty($isRequireApproval)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Your registration has been submitted.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{elseif $is_pay_later} +{elseif !empty($is_pay_later)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {/if} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Event Information and Location{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($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} +{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -12590,88 +12636,90 @@ INSERT INTO civicrm_msg_template {ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} {/if} -{if $event.is_public} +{if !empty($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 !empty($email)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Registered Email{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$email} {/if} -{if $event.is_monetary} {* This section for Paid events only.*} +{if !empty($event.is_monetary)} {* This section for Paid events only.*} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($event.fee_label)}{$event.fee_label}{/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{if $lineItem}{foreach from=$lineItem item=value key=priceset} +{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} -{if $isPrimary} +{if !empty($isPrimary)} {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} {ts 1=$priceset+1}Participant %1{/ts} {/if} {/if} ----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +---------------------------------------------------------{if !empty($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} +{if !empty($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} +{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($dataArray)} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:"%10s"}{/if} +----------------------------------------------------------{if !empty($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"} +{if !empty($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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:"%10s"}{/if} {/foreach} {/if} {/foreach} -{if $dataArray} +{if !empty($dataArray)} +{if isset($totalAmount) and isset($totalTaxAmount)} {ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} +{/if} {foreach from=$dataArray item=value key=priceset} {if $priceset || $priceset == 0} -{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} {/if} -{if $amount && !$lineItem} +{if !empty($amount) && !$lineItem} {foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{if $isPrimary} +{if !empty($isPrimary)} -{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} +{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} -{if $balanceAmount} +{if !empty($balanceAmount)} {ts}Balance{/ts}: {$balanceAmount|crmMoney} {/if} -{if $pricesetFieldsCount } +{if !empty($pricesetFieldsCount) } {assign var="count" value= 0} {foreach from=$lineItem item=pcount} {assign var="lineItemCount" value=0} @@ -12689,12 +12737,12 @@ INSERT INTO civicrm_msg_template {ts}Total Participants{/ts}: {$count} {/if} -{if $is_pay_later } +{if !empty($is_pay_later) } -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {/if} @@ -12704,35 +12752,35 @@ INSERT INTO civicrm_msg_template {if $receive_date} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $financialTypeName} +{if !empty($financialTypeName)} {ts}Financial Type{/ts}: {$financialTypeName} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} -{if $billingName} +{if !empty($billingName)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Billing Name and Address{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$billingName} {$address} {/if} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$credit_card_type} {$credit_card_number} @@ -12741,53 +12789,53 @@ INSERT INTO civicrm_msg_template {/if} {/if} {* End of conditional section for Paid events *} -{if $customPre} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($customPre)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customPre_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$customPre item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$value} {/if} {/foreach} {/if} -{if $customPost} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($customPost)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customPost_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$customPost item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$value} {/if} {/foreach} {/if} -{if $customProfile} +{if !empty($customProfile)} {foreach from=$customProfile item=value key=customName} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts 1=$customName+1}Participant Information - Participant %1{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$value item=val key=field} {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' } {if $field eq \'additionalCustomPre\' } -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {$additionalCustomPre_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {else} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {$additionalCustomPost_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {/if} {foreach from=$val item=v key=f} @@ -12797,12 +12845,12 @@ INSERT INTO civicrm_msg_template {/foreach} {/foreach} {/if} -{if $customGroup} +{if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} -=========================================================={if $pricesetFieldsCount }===================={/if} +=========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customName} -=========================================================={if $pricesetFieldsCount }===================={/if} +=========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$value item=v key=n} {$n}: {$v} @@ -12836,22 +12884,22 @@ INSERT INTO civicrm_msg_template <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} <p>{$event.confirm_email_text|htmlize}</p> {/if} - {if $isOnWaitlist} + {if !empty($isOnWaitlist)} <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} + {if !empty($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} + {elseif !empty($isRequireApproval)} <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} + {if !empty($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 *} + {elseif !empty($is_pay_later)} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -12871,7 +12919,7 @@ INSERT INTO civicrm_msg_template </td> </tr> - {if $event.participant_role neq \'Attendee\' and $defaultRole} + {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -12882,7 +12930,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -12890,7 +12938,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -12926,7 +12974,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $event.is_public} + {if !empty($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} @@ -12949,18 +12997,18 @@ INSERT INTO civicrm_msg_template {/if} - {if $event.is_monetary} + {if !empty($event.is_monetary)} <tr> <th {$headerStyle}> - {$event.fee_label} + {if !empty($event.fee_label)}{$event.fee_label}{/if} </th> </tr> - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} - {if $isPrimary} + {if !empty($isPrimary)} {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} <tr> <td colspan="2" {$labelStyle}> @@ -12976,13 +13024,13 @@ INSERT INTO civicrm_msg_template <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($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} + {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if} </tr> {foreach from=$value item=line} <tr> @@ -12995,11 +13043,11 @@ INSERT INTO civicrm_msg_template <td> {$line.unit_price|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -13014,7 +13062,7 @@ INSERT INTO civicrm_msg_template <td> {$line.line_total+$line.tax_amount|crmMoney} </td> - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <td> {$line.participant_count} </td> @@ -13026,7 +13074,8 @@ INSERT INTO civicrm_msg_template </tr> {/if} {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($totalAmount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -13035,13 +13084,14 @@ INSERT INTO civicrm_msg_template {$totalAmount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -13049,7 +13099,7 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $amount && !$lineItem} + {if !empty($amount) && !$lineItem} {foreach from=$amount item=amnt key=level} <tr> <td colspan="2" {$valueStyle}> @@ -13058,7 +13108,7 @@ INSERT INTO civicrm_msg_template </tr> {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -13068,20 +13118,20 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td {$labelStyle}> - {if $balanceAmount} + {if isset($balanceAmount)} {ts}Total Paid{/ts} {else} {ts}Total Amount{/ts} {/if} </td> <td {$valueStyle}> - {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} + {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} </td> </tr> - {if $balanceAmount} + {if isset($balanceAmount)} <tr> <td {$labelStyle}> {ts}Balance{/ts} @@ -13091,7 +13141,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <tr> <td {$labelStyle}> {ts}Total Participants{/ts}</td> @@ -13113,10 +13163,10 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $is_pay_later} + {if !empty($is_pay_later)} <tr> <td colspan="2" {$labelStyle}> - {$pay_later_receipt} + {if isset($pay_later_receipt)}{$pay_later_receipt}{/if} </td> </tr> {/if} @@ -13132,7 +13182,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Transaction Date{/ts} @@ -13143,7 +13193,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $financialTypeName} + {if !empty($financialTypeName)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -13154,7 +13204,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -13165,7 +13215,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -13176,7 +13226,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -13187,7 +13237,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -13201,7 +13251,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -13220,14 +13270,14 @@ INSERT INTO civicrm_msg_template {/if} {* End of conditional section for Paid events *} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -13240,14 +13290,14 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -13260,7 +13310,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customProfile} + {if !empty($customProfile)} {foreach from=$customProfile item=value key=customName} <tr> <th {$headerStyle}> @@ -13293,7 +13343,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customGroup} + {if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} <tr> <th {$headerStyle}> @@ -13325,60 +13375,60 @@ INSERT INTO civicrm_msg_template ', 'event_offline_receipt', @tpl_ovid_event_offline_receipt, 1, 0), ('Events - Registration Confirmation and Receipt (off-line)', '{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} {$event.confirm_email_text} {/if} -{if $isOnWaitlist} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($isOnWaitlist)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}You have been added to the WAIT LIST for this event.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} +{elseif !empty($isRequireApproval)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Your registration has been submitted.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{elseif $is_pay_later} +{elseif !empty($is_pay_later)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {/if} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Event Information and Location{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($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} +{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -13392,88 +13442,90 @@ INSERT INTO civicrm_msg_template {ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} {/if} -{if $event.is_public} +{if !empty($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 !empty($email)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Registered Email{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$email} {/if} -{if $event.is_monetary} {* This section for Paid events only.*} +{if !empty($event.is_monetary)} {* This section for Paid events only.*} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($event.fee_label)}{$event.fee_label}{/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{if $lineItem}{foreach from=$lineItem item=value key=priceset} +{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} -{if $isPrimary} +{if !empty($isPrimary)} {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} {ts 1=$priceset+1}Participant %1{/ts} {/if} {/if} ----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +---------------------------------------------------------{if !empty($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} +{if !empty($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} +{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($dataArray)} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:"%10s"}{/if} +----------------------------------------------------------{if !empty($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"} +{if !empty($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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:"%10s"}{/if} {/foreach} {/if} {/foreach} -{if $dataArray} +{if !empty($dataArray)} +{if isset($totalAmount) and isset($totalTaxAmount)} {ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} +{/if} {foreach from=$dataArray item=value key=priceset} {if $priceset || $priceset == 0} -{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} {/if} -{if $amount && !$lineItem} +{if !empty($amount) && !$lineItem} {foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{if $isPrimary} +{if !empty($isPrimary)} -{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} +{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} -{if $balanceAmount} +{if !empty($balanceAmount)} {ts}Balance{/ts}: {$balanceAmount|crmMoney} {/if} -{if $pricesetFieldsCount } +{if !empty($pricesetFieldsCount) } {assign var="count" value= 0} {foreach from=$lineItem item=pcount} {assign var="lineItemCount" value=0} @@ -13491,12 +13543,12 @@ INSERT INTO civicrm_msg_template {ts}Total Participants{/ts}: {$count} {/if} -{if $is_pay_later } +{if !empty($is_pay_later) } -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {/if} @@ -13506,35 +13558,35 @@ INSERT INTO civicrm_msg_template {if $receive_date} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $financialTypeName} +{if !empty($financialTypeName)} {ts}Financial Type{/ts}: {$financialTypeName} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} -{if $billingName} +{if !empty($billingName)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Billing Name and Address{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$billingName} {$address} {/if} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$credit_card_type} {$credit_card_number} @@ -13543,53 +13595,53 @@ INSERT INTO civicrm_msg_template {/if} {/if} {* End of conditional section for Paid events *} -{if $customPre} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($customPre)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customPre_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$customPre item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$value} {/if} {/foreach} {/if} -{if $customPost} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($customPost)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customPost_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$customPost item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$value} {/if} {/foreach} {/if} -{if $customProfile} +{if !empty($customProfile)} {foreach from=$customProfile item=value key=customName} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts 1=$customName+1}Participant Information - Participant %1{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$value item=val key=field} {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' } {if $field eq \'additionalCustomPre\' } -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {$additionalCustomPre_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {else} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {$additionalCustomPost_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {/if} {foreach from=$val item=v key=f} @@ -13599,12 +13651,12 @@ INSERT INTO civicrm_msg_template {/foreach} {/foreach} {/if} -{if $customGroup} +{if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} -=========================================================={if $pricesetFieldsCount }===================={/if} +=========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customName} -=========================================================={if $pricesetFieldsCount }===================={/if} +=========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$value item=v key=n} {$n}: {$v} @@ -13638,22 +13690,22 @@ INSERT INTO civicrm_msg_template <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} <p>{$event.confirm_email_text|htmlize}</p> {/if} - {if $isOnWaitlist} + {if !empty($isOnWaitlist)} <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} + {if !empty($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} + {elseif !empty($isRequireApproval)} <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} + {if !empty($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 *} + {elseif !empty($is_pay_later)} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -13673,7 +13725,7 @@ INSERT INTO civicrm_msg_template </td> </tr> - {if $event.participant_role neq \'Attendee\' and $defaultRole} + {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -13684,7 +13736,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -13692,7 +13744,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -13728,7 +13780,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $event.is_public} + {if !empty($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} @@ -13751,18 +13803,18 @@ INSERT INTO civicrm_msg_template {/if} - {if $event.is_monetary} + {if !empty($event.is_monetary)} <tr> <th {$headerStyle}> - {$event.fee_label} + {if !empty($event.fee_label)}{$event.fee_label}{/if} </th> </tr> - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} - {if $isPrimary} + {if !empty($isPrimary)} {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} <tr> <td colspan="2" {$labelStyle}> @@ -13778,13 +13830,13 @@ INSERT INTO civicrm_msg_template <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($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} + {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if} </tr> {foreach from=$value item=line} <tr> @@ -13797,11 +13849,11 @@ INSERT INTO civicrm_msg_template <td> {$line.unit_price|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -13816,7 +13868,7 @@ INSERT INTO civicrm_msg_template <td> {$line.line_total+$line.tax_amount|crmMoney} </td> - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <td> {$line.participant_count} </td> @@ -13828,7 +13880,8 @@ INSERT INTO civicrm_msg_template </tr> {/if} {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($totalAmount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -13837,13 +13890,14 @@ INSERT INTO civicrm_msg_template {$totalAmount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -13851,7 +13905,7 @@ INSERT INTO civicrm_msg_template {/if} {/if} - {if $amount && !$lineItem} + {if !empty($amount) && !$lineItem} {foreach from=$amount item=amnt key=level} <tr> <td colspan="2" {$valueStyle}> @@ -13860,7 +13914,7 @@ INSERT INTO civicrm_msg_template </tr> {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -13870,20 +13924,20 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td {$labelStyle}> - {if $balanceAmount} + {if isset($balanceAmount)} {ts}Total Paid{/ts} {else} {ts}Total Amount{/ts} {/if} </td> <td {$valueStyle}> - {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} + {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} </td> </tr> - {if $balanceAmount} + {if isset($balanceAmount)} <tr> <td {$labelStyle}> {ts}Balance{/ts} @@ -13893,7 +13947,7 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <tr> <td {$labelStyle}> {ts}Total Participants{/ts}</td> @@ -13915,10 +13969,10 @@ INSERT INTO civicrm_msg_template </td> </tr> {/if} - {if $is_pay_later} + {if !empty($is_pay_later)} <tr> <td colspan="2" {$labelStyle}> - {$pay_later_receipt} + {if isset($pay_later_receipt)}{$pay_later_receipt}{/if} </td> </tr> {/if} @@ -13934,7 +13988,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Transaction Date{/ts} @@ -13945,7 +13999,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $financialTypeName} + {if !empty($financialTypeName)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -13956,7 +14010,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -13967,7 +14021,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -13978,7 +14032,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -13989,7 +14043,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -14003,7 +14057,7 @@ INSERT INTO civicrm_msg_template </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -14022,14 +14076,14 @@ INSERT INTO civicrm_msg_template {/if} {* End of conditional section for Paid events *} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -14042,14 +14096,14 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -14062,7 +14116,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customProfile} + {if !empty($customProfile)} {foreach from=$customProfile item=value key=customName} <tr> <th {$headerStyle}> @@ -14095,7 +14149,7 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} - {if $customGroup} + {if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} <tr> <th {$headerStyle}> @@ -14127,58 +14181,58 @@ INSERT INTO civicrm_msg_template ', 'event_offline_receipt', @tpl_ovid_event_offline_receipt, 0, 1) , - ('Events - Registration Confirmation and Receipt (on-line)', '{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $isRequireApproval}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} + ('Events - Registration Confirmation and Receipt (on-line)', '{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} {$event.confirm_email_text} {else} {ts}Thank you for your registration.{/ts} {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts} - {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if} + {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This 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} +{if !empty($isOnWaitlist)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}You have been added to the WAIT LIST for this event.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} +{elseif !empty($isRequireApproval)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Your registration has been submitted.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} +{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {/if} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Event Information and Location{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($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} +{if !empty($conference_sessions)} {ts}Your schedule:{/ts} @@ -14196,15 +14250,15 @@ INSERT INTO civicrm_msg_template {/foreach} {/if} -{if $event.participant_role neq \'Attendee\' and $defaultRole} +{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -14218,82 +14272,84 @@ INSERT INTO civicrm_msg_template {ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} {/if} -{if $event.is_public} +{if !empty($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} +{if !empty($payer.name)} You were registered by: {$payer.name} {/if} -{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*} +{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty ($event.fee_label)}{$event.fee_label}{/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{if $lineItem}{foreach from=$lineItem item=value key=priceset} +{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} -{if $isPrimary} +{if !empty($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} +-----------------------------------------------------------{if !empty($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} +{if !empty($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} +{if !empty($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 !empty($dataArray)} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:"%10s"}{/if} +-----------------------------------------------------------{if !empty($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"} +{if !empty($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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:"%10s"}{/if} {/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 !empty($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} +{if !empty($dataArray)} +{if isset($totalAmount) and isset($totalTaxAmount)} {ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} +{/if} {foreach from=$dataArray item=value key=priceset} {if $priceset || $priceset == 0} -{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} {/if} -{if $amounts && !$lineItem} +{if !empty($amounts) && empty($lineItem)} {foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{if $isPrimary } +{if !empty($isPrimary) } -{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} +{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} -{if $pricesetFieldsCount } +{if !empty($pricesetFieldsCount) } {assign var="count" value= 0} {foreach from=$lineItem item=pcount} {assign var="lineItemCount" value=0} @@ -14314,39 +14370,39 @@ You were registered by: {$payer.name} {if $register_date} {ts}Registration Date{/ts}: {$register_date|crmDate} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $financialTypeName} +{if !empty($financialTypeName)} {ts}Financial Type{/ts}: {$financialTypeName} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} -{if $billingName} +{if !empty($billingName)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Billing Name and Address{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$billingName} {$address} {/if} -{if $credit_card_type} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($credit_card_type)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Credit Card Information{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$credit_card_type} {$credit_card_number} @@ -14355,49 +14411,49 @@ You were registered by: {$payer.name} {/if} {/if} {* End of conditional section for Paid events *} -{if $customPre} +{if !empty($customPre)} {foreach from=$customPre item=customPr key=i} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$customPre_grouptitle.$i} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$customPr item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} {foreach from=$customPost item=customPos key=j} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$customPost_grouptitle.$j} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$customPos item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/foreach} {/if} -{if $customProfile} +{if !empty($customProfile)} {foreach from=$customProfile.profile item=eachParticipant key=participantID} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts 1=$participantID+2}Participant Information - Participant %1{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$eachParticipant item=eachProfile key=pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if} {$customProfile.title.$pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if} {foreach from=$eachProfile item=val key=field} {foreach from=$val item=v key=f} @@ -14408,8 +14464,8 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $event.allow_selfcancelxfer } -{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if} +{if !empty($event.allow_selfcancelxfer) } +{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($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} @@ -14442,7 +14498,7 @@ You were registered by: {$payer.name} <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} <p>{$event.confirm_email_text|htmlize}</p> {else} @@ -14453,18 +14509,18 @@ You were registered by: {$payer.name} {/if} <p> - {if $isOnWaitlist} + {if !empty($isOnWaitlist)} <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} + {if !empty($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} + {elseif !empty($isRequireApproval)} <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} + {if !empty($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 *} + {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -14506,7 +14562,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $event.participant_role neq \'Attendee\' and $defaultRole} + {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -14517,7 +14573,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -14525,7 +14581,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -14561,7 +14617,7 @@ You were registered by: {$payer.name} {/foreach} {/if} - {if $event.is_public} + {if !empty($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} @@ -14570,7 +14626,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $event.is_share} + {if !empty($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} @@ -14578,7 +14634,7 @@ You were registered by: {$payer.name} </td> </tr> {/if} - {if $payer.name} + {if !empty($payer.name)} <tr> <th {$headerStyle}> {ts}You were registered by:{/ts} @@ -14590,22 +14646,22 @@ You were registered by: {$payer.name} </td> </tr> {/if} - {if $event.is_monetary and not $isRequireApproval} + {if !empty($event.is_monetary) and empty($isRequireApproval)} <tr> <th {$headerStyle}> - {$event.fee_label} + {if !empty($event.fee_label)}{$event.fee_label}{/if} </th> </tr> - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} - {if $isPrimary} + {if !empty($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} + {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if} </td> </tr> {/if} @@ -14617,13 +14673,13 @@ You were registered by: {$payer.name} <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($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} + {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if} </tr> {foreach from=$value item=line} <tr> @@ -14636,11 +14692,11 @@ You were registered by: {$payer.name} <td {$tdStyle}> {$line.unit_price|crmMoney:$currency} </td> - {if $dataArray} + {if !empty($dataArray)} <td {$tdStyle}> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td {$tdStyle}> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -14655,10 +14711,10 @@ You were registered by: {$payer.name} <td {$tdStyle}> {$line.line_total+$line.tax_amount|crmMoney:$currency} </td> - {if $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if} + {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if} </tr> {/foreach} - {if $individual} + {if !empty($individual)} <tr {$participantTotal}> <td colspan=3>{ts}Participant Total{/ts}</td> <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td> @@ -14671,7 +14727,8 @@ You were registered by: {$payer.name} </tr> {/if} {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($totalAmount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts} Amount Before Tax: {/ts} @@ -14680,13 +14737,14 @@ You were registered by: {$payer.name} {$totalAmount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -14694,7 +14752,7 @@ You were registered by: {$payer.name} {/if} {/if} - {if $amounts && !$lineItem} + {if !empty($amounts) && empty($lineItem)} {foreach from=$amounts item=amnt key=level} <tr> <td colspan="2" {$valueStyle}> @@ -14704,7 +14762,7 @@ You were registered by: {$payer.name} {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -14714,16 +14772,16 @@ You were registered by: {$payer.name} </td> </tr> {/if} - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td {$labelStyle}> {ts}Total Amount{/ts} </td> <td {$valueStyle}> - {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} + {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} </td> </tr> - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <tr> <td {$labelStyle}> {ts}Total Participants{/ts}</td> @@ -14756,7 +14814,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Transaction Date{/ts} @@ -14767,7 +14825,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $financialTypeName} + {if !empty($financialTypeName)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -14778,7 +14836,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -14789,7 +14847,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -14800,7 +14858,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -14811,7 +14869,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -14825,7 +14883,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -14845,11 +14903,11 @@ You were registered by: {$payer.name} {/if} {* End of conditional section for Paid events *} -{if $customPre} +{if !empty($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} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}>{$customName}</td> <td {$valueStyle}>{$customValue}</td> @@ -14859,11 +14917,11 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $customPost} +{if !empty($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} + {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}>{$customName}</td> <td {$valueStyle}>{$customValue}</td> @@ -14873,7 +14931,7 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $customProfile} +{if !empty($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} @@ -14890,10 +14948,10 @@ You were registered by: {$payer.name} {/if} </table> - {if $event.allow_selfcancelxfer } + {if !empty($event.allow_selfcancelxfer) } <tr> <td colspan="2" {$valueStyle}> - {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br /> + {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($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> @@ -14905,58 +14963,58 @@ You were registered by: {$payer.name} </body> </html> ', 'event_online_receipt', @tpl_ovid_event_online_receipt, 1, 0), - ('Events - Registration Confirmation and Receipt (on-line)', '{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $isRequireApproval}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} + ('Events - Registration Confirmation and Receipt (on-line)', '{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} {$event.confirm_email_text} {else} {ts}Thank you for your registration.{/ts} {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts} - {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if} + {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This 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} +{if !empty($isOnWaitlist)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}You have been added to the WAIT LIST for this event.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} +{elseif !empty($isRequireApproval)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Your registration has been submitted.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} +{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {/if} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Event Information and Location{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($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} +{if !empty($conference_sessions)} {ts}Your schedule:{/ts} @@ -14974,15 +15032,15 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $event.participant_role neq \'Attendee\' and $defaultRole} +{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -14996,82 +15054,84 @@ You were registered by: {$payer.name} {ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} {/if} -{if $event.is_public} +{if !empty($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} +{if !empty($payer.name)} You were registered by: {$payer.name} {/if} -{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*} +{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty ($event.fee_label)}{$event.fee_label}{/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{if $lineItem}{foreach from=$lineItem item=value key=priceset} +{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} -{if $isPrimary} +{if !empty($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} +-----------------------------------------------------------{if !empty($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} +{if !empty($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} +{if !empty($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 !empty($dataArray)} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:"%10s"}{/if} +-----------------------------------------------------------{if !empty($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"} +{if !empty($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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:"%10s"}{/if} {/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 !empty($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} +{if !empty($dataArray)} +{if isset($totalAmount) and isset($totalTaxAmount)} {ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} +{/if} {foreach from=$dataArray item=value key=priceset} {if $priceset || $priceset == 0} -{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} {/if} -{if $amounts && !$lineItem} +{if !empty($amounts) && empty($lineItem)} {foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{if $isPrimary } +{if !empty($isPrimary) } -{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} +{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} -{if $pricesetFieldsCount } +{if !empty($pricesetFieldsCount) } {assign var="count" value= 0} {foreach from=$lineItem item=pcount} {assign var="lineItemCount" value=0} @@ -15092,39 +15152,39 @@ You were registered by: {$payer.name} {if $register_date} {ts}Registration Date{/ts}: {$register_date|crmDate} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $financialTypeName} +{if !empty($financialTypeName)} {ts}Financial Type{/ts}: {$financialTypeName} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} -{if $billingName} +{if !empty($billingName)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Billing Name and Address{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$billingName} {$address} {/if} -{if $credit_card_type} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($credit_card_type)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Credit Card Information{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$credit_card_type} {$credit_card_number} @@ -15133,49 +15193,49 @@ You were registered by: {$payer.name} {/if} {/if} {* End of conditional section for Paid events *} -{if $customPre} +{if !empty($customPre)} {foreach from=$customPre item=customPr key=i} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$customPre_grouptitle.$i} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$customPr item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} {foreach from=$customPost item=customPos key=j} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$customPost_grouptitle.$j} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$customPos item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/foreach} {/if} -{if $customProfile} +{if !empty($customProfile)} {foreach from=$customProfile.profile item=eachParticipant key=participantID} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts 1=$participantID+2}Participant Information - Participant %1{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$eachParticipant item=eachProfile key=pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if} {$customProfile.title.$pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if} {foreach from=$eachProfile item=val key=field} {foreach from=$val item=v key=f} @@ -15186,8 +15246,8 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $event.allow_selfcancelxfer } -{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if} +{if !empty($event.allow_selfcancelxfer) } +{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($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} @@ -15220,7 +15280,7 @@ You were registered by: {$payer.name} <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} <p>{$event.confirm_email_text|htmlize}</p> {else} @@ -15231,18 +15291,18 @@ You were registered by: {$payer.name} {/if} <p> - {if $isOnWaitlist} + {if !empty($isOnWaitlist)} <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} + {if !empty($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} + {elseif !empty($isRequireApproval)} <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} + {if !empty($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 *} + {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -15284,7 +15344,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $event.participant_role neq \'Attendee\' and $defaultRole} + {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -15295,7 +15355,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -15303,7 +15363,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -15339,7 +15399,7 @@ You were registered by: {$payer.name} {/foreach} {/if} - {if $event.is_public} + {if !empty($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} @@ -15348,7 +15408,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $event.is_share} + {if !empty($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} @@ -15356,7 +15416,7 @@ You were registered by: {$payer.name} </td> </tr> {/if} - {if $payer.name} + {if !empty($payer.name)} <tr> <th {$headerStyle}> {ts}You were registered by:{/ts} @@ -15368,22 +15428,22 @@ You were registered by: {$payer.name} </td> </tr> {/if} - {if $event.is_monetary and not $isRequireApproval} + {if !empty($event.is_monetary) and empty($isRequireApproval)} <tr> <th {$headerStyle}> - {$event.fee_label} + {if !empty($event.fee_label)}{$event.fee_label}{/if} </th> </tr> - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} {if $value neq \'skip\'} - {if $isPrimary} + {if !empty($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} + {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if} </td> </tr> {/if} @@ -15395,13 +15455,13 @@ You were registered by: {$payer.name} <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($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} + {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if} </tr> {foreach from=$value item=line} <tr> @@ -15414,11 +15474,11 @@ You were registered by: {$payer.name} <td {$tdStyle}> {$line.unit_price|crmMoney:$currency} </td> - {if $dataArray} + {if !empty($dataArray)} <td {$tdStyle}> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td {$tdStyle}> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -15433,10 +15493,10 @@ You were registered by: {$payer.name} <td {$tdStyle}> {$line.line_total+$line.tax_amount|crmMoney:$currency} </td> - {if $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if} + {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if} </tr> {/foreach} - {if $individual} + {if !empty($individual)} <tr {$participantTotal}> <td colspan=3>{ts}Participant Total{/ts}</td> <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td> @@ -15449,7 +15509,8 @@ You were registered by: {$payer.name} </tr> {/if} {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($totalAmount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts} Amount Before Tax: {/ts} @@ -15458,13 +15519,14 @@ You were registered by: {$payer.name} {$totalAmount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -15472,7 +15534,7 @@ You were registered by: {$payer.name} {/if} {/if} - {if $amounts && !$lineItem} + {if !empty($amounts) && empty($lineItem)} {foreach from=$amounts item=amnt key=level} <tr> <td colspan="2" {$valueStyle}> @@ -15482,7 +15544,7 @@ You were registered by: {$payer.name} {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -15492,16 +15554,16 @@ You were registered by: {$payer.name} </td> </tr> {/if} - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td {$labelStyle}> {ts}Total Amount{/ts} </td> <td {$valueStyle}> - {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} + {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} </td> </tr> - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <tr> <td {$labelStyle}> {ts}Total Participants{/ts}</td> @@ -15534,7 +15596,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Transaction Date{/ts} @@ -15545,7 +15607,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $financialTypeName} + {if !empty($financialTypeName)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -15556,7 +15618,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -15567,7 +15629,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -15578,7 +15640,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -15589,7 +15651,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -15603,7 +15665,7 @@ You were registered by: {$payer.name} </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -15623,11 +15685,11 @@ You were registered by: {$payer.name} {/if} {* End of conditional section for Paid events *} -{if $customPre} +{if !empty($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} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}>{$customName}</td> <td {$valueStyle}>{$customValue}</td> @@ -15637,11 +15699,11 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $customPost} +{if !empty($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} + {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}>{$customName}</td> <td {$valueStyle}>{$customValue}</td> @@ -15651,7 +15713,7 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $customProfile} +{if !empty($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} @@ -15668,10 +15730,10 @@ You were registered by: {$payer.name} {/if} </table> - {if $event.allow_selfcancelxfer } + {if !empty($event.allow_selfcancelxfer) } <tr> <td colspan="2" {$valueStyle}> - {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br /> + {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($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> @@ -15691,14 +15753,14 @@ You were registered by: {$payer.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. + This is being sent to you as a {if !empty($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 isset($pay_later_receipt)}{$pay_later_receipt}{/if} {/if} - Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + Your order number is #{$transaction_id}. {if !empty($line_items) && empty($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} @@ -15715,7 +15777,7 @@ You were registered by: {$payer.name} {$email} {/if} -{if $source} +{if !empty($source)} {$source} {/if} @@ -15785,15 +15847,15 @@ Total: {$total|crmMoney:$currency|string_format:"%10s"} </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. + This is being sent to you as a {if !empty($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> + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {/if} - <p>Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($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} @@ -15831,7 +15893,7 @@ Total: {$total|crmMoney:$currency|string_format:"%10s"} </tr> </table> {/if} -{if $source} +{if !empty($source)} <p> </p> {$source} {/if} @@ -15948,14 +16010,14 @@ Total: {$total|crmMoney:$currency|string_format:"%10s"} {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. + This is being sent to you as a {if !empty($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 isset($pay_later_receipt)}{$pay_later_receipt}{/if} {/if} - Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + Your order number is #{$transaction_id}. {if !empty($line_items) && empty($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} @@ -15972,7 +16034,7 @@ Total: {$total|crmMoney:$currency|string_format:"%10s"} {$email} {/if} -{if $source} +{if !empty($source)} {$source} {/if} @@ -16042,15 +16104,15 @@ Total: {$total|crmMoney:$currency|string_format:"%10s"} </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. + This is being sent to you as a {if !empty($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> + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {/if} - <p>Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($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} @@ -16088,7 +16150,7 @@ Total: {$total|crmMoney:$currency|string_format:"%10s"} </tr> </table> {/if} -{if $source} +{if !empty($source)} <p> </p> {$source} {/if} @@ -17950,21 +18012,21 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $formValues.receipt_text_signup} +{if !empty($formValues.receipt_text_signup)} {$formValues.receipt_text_signup} -{elseif $formValues.receipt_text_renewal} +{elseif !empty($formValues.receipt_text_renewal)} {$formValues.receipt_text_renewal} {else}{ts}Thank you for this contribution.{/ts}{/if} -{if !$lineItem} +{if empty($lineItem)} =========================================================== {ts}Membership Information{/ts} =========================================================== {ts}Membership Type{/ts}: {$membership_name} {/if} -{if ! $cancelled} -{if !$lineItem} +{if empty($cancelled)} +{if empty($lineItem)} {ts}Membership Start Date{/ts}: {$mem_start_date} {ts}Membership End Date{/ts}: {$mem_end_date} {/if} @@ -17974,14 +18036,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Membership Fee{/ts} =========================================================== -{if $formValues.contributionType_name} +{if !empty($formValues.contributionType_name)} {ts}Financial Type{/ts}: {$formValues.contributionType_name} {/if} -{if $lineItem} +{if !empty($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} +{if !empty($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} @@ -17989,22 +18051,22 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/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"} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"} %: {$value|crmMoney:$currency} {elseif $priceset == 0} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} @@ -18016,20 +18078,20 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {ts}Amount{/ts}: {$formValues.total_amount|crmMoney} -{if $receive_date} +{if !empty($receive_date)} {ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate} {/if} -{if $formValues.paidBy} +{if !empty($formValues.paidBy)} {ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} +{if !empty($formValues.check_number)} {ts}Check Number{/ts}: {$formValues.check_number} {/if} {/if} {/if} {/if} -{if $isPrimary } -{if $billingName} +{if !empty($isPrimary) } +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -18039,7 +18101,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$address} {/if} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -18050,7 +18112,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {/if} -{if $customValues} +{if !empty($customValues)} =========================================================== {ts}Membership Options{/ts} @@ -18085,9 +18147,9 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $formValues.receipt_text_signup} + {if !empty($formValues.receipt_text_signup)} <p>{$formValues.receipt_text_signup|htmlize}</p> - {elseif $formValues.receipt_text_renewal} + {elseif !empty($formValues.receipt_text_renewal)} <p>{$formValues.receipt_text_renewal|htmlize}</p> {else} <p>{ts}Thank you for this contribution.{/ts}</p> @@ -18097,7 +18159,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if !$lineItem} + {if empty($lineItem)} <tr> <th {$headerStyle}> {ts}Membership Information{/ts} @@ -18112,8 +18174,8 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if ! $cancelled} - {if !$lineItem} + {if empty($cancelled)} + {if empty($lineItem)} <tr> <td {$labelStyle}> {ts}Membership Start Date{/ts} @@ -18137,7 +18199,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Membership Fee{/ts} </th> </tr> - {if $formValues.contributionType_name} + {if !empty($formValues.contributionType_name)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -18148,7 +18210,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -18156,7 +18218,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <th>{ts}Item{/ts}</th> <th>{ts}Fee{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}SubTotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -18174,11 +18236,11 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <td> {$line.line_total|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -18205,7 +18267,8 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($formValues.total_amount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -18214,13 +18277,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$formValues.total_amount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {elseif $priceset == 0} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -18245,7 +18309,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$formValues.total_amount|crmMoney} </td> </tr> - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date Received{/ts} @@ -18255,7 +18319,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if $formValues.paidBy} + {if !empty($formValues.paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -18264,7 +18328,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$formValues.paidBy} </td> </tr> - {if $formValues.check_number} + {if !empty($formValues.check_number)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -18281,12 +18345,12 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -18300,7 +18364,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -18327,7 +18391,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $customValues} + {if !empty($customValues)} <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> @@ -18364,21 +18428,21 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $formValues.receipt_text_signup} +{if !empty($formValues.receipt_text_signup)} {$formValues.receipt_text_signup} -{elseif $formValues.receipt_text_renewal} +{elseif !empty($formValues.receipt_text_renewal)} {$formValues.receipt_text_renewal} {else}{ts}Thank you for this contribution.{/ts}{/if} -{if !$lineItem} +{if empty($lineItem)} =========================================================== {ts}Membership Information{/ts} =========================================================== {ts}Membership Type{/ts}: {$membership_name} {/if} -{if ! $cancelled} -{if !$lineItem} +{if empty($cancelled)} +{if empty($lineItem)} {ts}Membership Start Date{/ts}: {$mem_start_date} {ts}Membership End Date{/ts}: {$mem_end_date} {/if} @@ -18388,14 +18452,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Membership Fee{/ts} =========================================================== -{if $formValues.contributionType_name} +{if !empty($formValues.contributionType_name)} {ts}Financial Type{/ts}: {$formValues.contributionType_name} {/if} -{if $lineItem} +{if !empty($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} +{if !empty($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} @@ -18403,22 +18467,22 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/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"} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"} %: {$value|crmMoney:$currency} {elseif $priceset == 0} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} @@ -18430,20 +18494,20 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {ts}Amount{/ts}: {$formValues.total_amount|crmMoney} -{if $receive_date} +{if !empty($receive_date)} {ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate} {/if} -{if $formValues.paidBy} +{if !empty($formValues.paidBy)} {ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} +{if !empty($formValues.check_number)} {ts}Check Number{/ts}: {$formValues.check_number} {/if} {/if} {/if} {/if} -{if $isPrimary } -{if $billingName} +{if !empty($isPrimary) } +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -18453,7 +18517,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$address} {/if} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -18464,7 +18528,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {/if} -{if $customValues} +{if !empty($customValues)} =========================================================== {ts}Membership Options{/ts} @@ -18499,9 +18563,9 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $formValues.receipt_text_signup} + {if !empty($formValues.receipt_text_signup)} <p>{$formValues.receipt_text_signup|htmlize}</p> - {elseif $formValues.receipt_text_renewal} + {elseif !empty($formValues.receipt_text_renewal)} <p>{$formValues.receipt_text_renewal|htmlize}</p> {else} <p>{ts}Thank you for this contribution.{/ts}</p> @@ -18511,7 +18575,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if !$lineItem} + {if empty($lineItem)} <tr> <th {$headerStyle}> {ts}Membership Information{/ts} @@ -18526,8 +18590,8 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if ! $cancelled} - {if !$lineItem} + {if empty($cancelled)} + {if empty($lineItem)} <tr> <td {$labelStyle}> {ts}Membership Start Date{/ts} @@ -18551,7 +18615,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Membership Fee{/ts} </th> </tr> - {if $formValues.contributionType_name} + {if !empty($formValues.contributionType_name)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -18562,7 +18626,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -18570,7 +18634,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <th>{ts}Item{/ts}</th> <th>{ts}Fee{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}SubTotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -18588,11 +18652,11 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <td> {$line.line_total|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -18619,7 +18683,8 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($formValues.total_amount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -18628,13 +18693,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$formValues.total_amount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {elseif $priceset == 0} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -18659,7 +18725,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$formValues.total_amount|crmMoney} </td> </tr> - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date Received{/ts} @@ -18669,7 +18735,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if $formValues.paidBy} + {if !empty($formValues.paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -18678,7 +18744,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$formValues.paidBy} </td> </tr> - {if $formValues.check_number} + {if !empty($formValues.check_number)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -18695,12 +18761,12 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -18714,7 +18780,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -18741,7 +18807,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $customValues} + {if !empty($customValues)} <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> @@ -18775,13 +18841,13 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> ('Memberships - Receipt (on-line)', '{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $receipt_text} +{if !empty($receipt_text)} {$receipt_text} {/if} {if $is_pay_later} =========================================================== -{$pay_later_receipt} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} =========================================================== {/if} @@ -18802,14 +18868,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Membership Fee{/ts} =========================================================== -{if !$useForMember && $membership_amount && $is_quick_config} +{if !$useForMember && isset($membership_amount) && !empty($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} +{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} --------------------------------------------------------- {capture assign=ts_item}{ts}Item{/ts}{/capture} @@ -18825,11 +18891,11 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Total Amount{/ts}: {$amount|crmMoney} {else} -{if $useForMember && $lineItem && !$is_quick_config} +{if $useForMember && $lineItem && empty($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} +{if !empty($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} @@ -18837,35 +18903,35 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/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"} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} -------------------------------------------------------------------------------------------------- {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if} +{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if} {/if} -{elseif $membership_amount} +{elseif isset($membership_amount)} =========================================================== {ts}Membership Fee{/ts} @@ -18873,19 +18939,19 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Date{/ts}: {$receive_date|crmDate} {/if} -{if $is_monetary and $trxn_id} +{if !empty($is_monetary) and !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $membership_trx_id} +{if !empty($membership_trx_id)} {ts}Membership Transaction #{/ts}: {$membership_trx_id} {/if} -{if $is_recur} +{if !empty($is_recur)} {ts}This membership will be renewed automatically.{/ts} {if $cancelSubscriptionUrl} @@ -18908,7 +18974,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} -{if $pcpBlock} +{if !empty($pcpBlock)} =========================================================== {ts}Personal Campaign Page{/ts} @@ -18920,7 +18986,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} {/if} -{if $onBehalfProfile} +{if !empty($onBehalfProfile)} =========================================================== {ts}On Behalf Of{/ts} @@ -18930,7 +18996,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} -{if $billingName} +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -18939,14 +19005,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$address} {$email} -{elseif $email} +{elseif !empty($email)} =========================================================== {ts}Registered Email{/ts} =========================================================== {$email} {/if} {* End billingName or email *} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -18957,7 +19023,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate} {/if} -{if $selectPremium } +{if !empty($selectPremium)} =========================================================== {ts}Premium Information{/ts} @@ -18975,42 +19041,42 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {if $end_date} {ts}End Date{/ts}: {$end_date|crmDate} {/if} -{if $contact_email OR $contact_phone} +{if !empty($contact_email) OR !empty($contact_phone)} {ts}For information about this premium, contact:{/ts} -{if $contact_email} +{if !empty($contact_email)} {$contact_email} {/if} -{if $contact_phone} +{if !empty($contact_phone)} {$contact_phone} {/if} {/if} -{if $is_deductible AND $price} +{if !empty($is_deductible) AND !empty($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} +{if !empty($customPre)} =========================================================== {$customPre_grouptitle} =========================================================== {foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} =========================================================== {$customPost_grouptitle} =========================================================== {foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} @@ -19039,12 +19105,12 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $receipt_text} + {if !empty($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 *} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -19096,7 +19162,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </th> </tr> - {if !$useForMember and $membership_amount and $is_quick_config} + {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)} <tr> <td {$labelStyle}> @@ -19125,7 +19191,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config} + {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> @@ -19167,7 +19233,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {else} - {if $useForMember && $lineItem and !$is_quick_config} + {if $useForMember && $lineItem and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -19175,7 +19241,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <th>{ts}Item{/ts}</th> <th>{ts}Fee{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}SubTotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -19192,11 +19258,11 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <td> {$line.line_total|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -19223,7 +19289,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -19235,17 +19301,17 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}NO{/ts} {$taxTerm}</td> + <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> {/foreach} {/if} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -19260,14 +19326,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Amount{/ts} </td> <td {$valueStyle}> - {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if} + {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if} </td> </tr> {/if} - {elseif $membership_amount} + {elseif isset($membership_amount)} <tr> @@ -19287,7 +19353,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date{/ts} @@ -19298,7 +19364,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $is_monetary and $trxn_id} + {if !empty($is_monetary) and !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -19309,7 +19375,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $membership_trx_id} + {if !empty($membership_trx_id)} <tr> <td {$labelStyle}> {ts}Membership Transaction #{/ts} @@ -19319,7 +19385,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if $is_recur} + {if !empty($is_recur)} <tr> <td colspan="2" {$labelStyle}> {ts}This membership will be renewed automatically.{/ts} @@ -19355,7 +19421,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} - {if $pcpBlock} + {if !empty($pcpBlock)} <tr> <th {$headerStyle}> {ts}Personal Campaign Page{/ts} @@ -19391,7 +19457,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {/if} - {if $onBehalfProfile} + {if !empty($onBehalfProfile)} <tr> <th {$headerStyle}> {$onBehalfProfile_grouptitle} @@ -19409,7 +19475,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -19422,7 +19488,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$email} </td> </tr> - {elseif $email} + {elseif !empty($email)} <tr> <th {$headerStyle}> {ts}Registered Email{/ts} @@ -19435,7 +19501,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -19450,7 +19516,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $selectPremium} + {if !empty($selectPremium)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -19501,20 +19567,20 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if $contact_email OR $contact_phone} + {if !empty($contact_email) OR !empty($contact_phone)} <tr> <td colspan="2" {$valueStyle}> <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} + {if !empty($contact_email)} <p>{$contact_email}</p> {/if} - {if $contact_phone} + {if !empty($contact_phone)} <p>{$contact_phone}</p> {/if} </td> </tr> {/if} - {if $is_deductible AND $price} + {if !empty($is_deductible) AND !empty($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> @@ -19523,14 +19589,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {/if} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -19543,14 +19609,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -19571,13 +19637,13 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> ', 'membership_online_receipt', @tpl_ovid_membership_online_receipt, 1, 0), ('Memberships - Receipt (on-line)', '{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name} ', '{assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $receipt_text} +{if !empty($receipt_text)} {$receipt_text} {/if} {if $is_pay_later} =========================================================== -{$pay_later_receipt} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} =========================================================== {/if} @@ -19598,14 +19664,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Membership Fee{/ts} =========================================================== -{if !$useForMember && $membership_amount && $is_quick_config} +{if !$useForMember && isset($membership_amount) && !empty($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} +{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} --------------------------------------------------------- {capture assign=ts_item}{ts}Item{/ts}{/capture} @@ -19621,11 +19687,11 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Total Amount{/ts}: {$amount|crmMoney} {else} -{if $useForMember && $lineItem && !$is_quick_config} +{if $useForMember && $lineItem && empty($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} +{if !empty($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} @@ -19633,35 +19699,35 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/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"} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} -------------------------------------------------------------------------------------------------- {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if} +{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if} {/if} -{elseif $membership_amount} +{elseif isset($membership_amount)} =========================================================== {ts}Membership Fee{/ts} @@ -19669,19 +19735,19 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Date{/ts}: {$receive_date|crmDate} {/if} -{if $is_monetary and $trxn_id} +{if !empty($is_monetary) and !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $membership_trx_id} +{if !empty($membership_trx_id)} {ts}Membership Transaction #{/ts}: {$membership_trx_id} {/if} -{if $is_recur} +{if !empty($is_recur)} {ts}This membership will be renewed automatically.{/ts} {if $cancelSubscriptionUrl} @@ -19704,7 +19770,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} -{if $pcpBlock} +{if !empty($pcpBlock)} =========================================================== {ts}Personal Campaign Page{/ts} @@ -19716,7 +19782,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} {/if} -{if $onBehalfProfile} +{if !empty($onBehalfProfile)} =========================================================== {ts}On Behalf Of{/ts} @@ -19726,7 +19792,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} -{if $billingName} +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -19735,14 +19801,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$address} {$email} -{elseif $email} +{elseif !empty($email)} =========================================================== {ts}Registered Email{/ts} =========================================================== {$email} {/if} {* End billingName or email *} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -19753,7 +19819,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate} {/if} -{if $selectPremium } +{if !empty($selectPremium)} =========================================================== {ts}Premium Information{/ts} @@ -19771,42 +19837,42 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {if $end_date} {ts}End Date{/ts}: {$end_date|crmDate} {/if} -{if $contact_email OR $contact_phone} +{if !empty($contact_email) OR !empty($contact_phone)} {ts}For information about this premium, contact:{/ts} -{if $contact_email} +{if !empty($contact_email)} {$contact_email} {/if} -{if $contact_phone} +{if !empty($contact_phone)} {$contact_phone} {/if} {/if} -{if $is_deductible AND $price} +{if !empty($is_deductible) AND !empty($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} +{if !empty($customPre)} =========================================================== {$customPre_grouptitle} =========================================================== {foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} =========================================================== {$customPost_grouptitle} =========================================================== {foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} @@ -19835,12 +19901,12 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $receipt_text} + {if !empty($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 *} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -19892,7 +19958,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </th> </tr> - {if !$useForMember and $membership_amount and $is_quick_config} + {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)} <tr> <td {$labelStyle}> @@ -19921,7 +19987,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config} + {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> @@ -19963,7 +20029,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {else} - {if $useForMember && $lineItem and !$is_quick_config} + {if $useForMember && $lineItem and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -19971,7 +20037,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <tr> <th>{ts}Item{/ts}</th> <th>{ts}Fee{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}SubTotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -19988,11 +20054,11 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> <td> {$line.line_total|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -20019,7 +20085,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -20031,17 +20097,17 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}NO{/ts} {$taxTerm}</td> + <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> {/foreach} {/if} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -20056,14 +20122,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {ts}Amount{/ts} </td> <td {$valueStyle}> - {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if} + {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if} </td> </tr> {/if} - {elseif $membership_amount} + {elseif isset($membership_amount)} <tr> @@ -20083,7 +20149,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date{/ts} @@ -20094,7 +20160,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $is_monetary and $trxn_id} + {if !empty($is_monetary) and !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -20105,7 +20171,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $membership_trx_id} + {if !empty($membership_trx_id)} <tr> <td {$labelStyle}> {ts}Membership Transaction #{/ts} @@ -20115,7 +20181,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if $is_recur} + {if !empty($is_recur)} <tr> <td colspan="2" {$labelStyle}> {ts}This membership will be renewed automatically.{/ts} @@ -20151,7 +20217,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} - {if $pcpBlock} + {if !empty($pcpBlock)} <tr> <th {$headerStyle}> {ts}Personal Campaign Page{/ts} @@ -20187,7 +20253,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {/if} - {if $onBehalfProfile} + {if !empty($onBehalfProfile)} <tr> <th {$headerStyle}> {$onBehalfProfile_grouptitle} @@ -20205,7 +20271,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -20218,7 +20284,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {$email} </td> </tr> - {elseif $email} + {elseif !empty($email)} <tr> <th {$headerStyle}> {ts}Registered Email{/ts} @@ -20231,7 +20297,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -20246,7 +20312,7 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </tr> {/if} - {if $selectPremium} + {if !empty($selectPremium)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -20297,20 +20363,20 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> </td> </tr> {/if} - {if $contact_email OR $contact_phone} + {if !empty($contact_email) OR !empty($contact_phone)} <tr> <td colspan="2" {$valueStyle}> <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} + {if !empty($contact_email)} <p>{$contact_email}</p> {/if} - {if $contact_phone} + {if !empty($contact_phone)} <p>{$contact_phone}</p> {/if} </td> </tr> {/if} - {if $is_deductible AND $price} + {if !empty($is_deductible) AND !empty($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> @@ -20319,14 +20385,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/if} {/if} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -20339,14 +20405,14 @@ or want to inquire about reinstating your registration for this event.{/ts}</p> {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -23874,4 +23940,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 = '5.38.1'; +UPDATE civicrm_domain SET version = '5.39.0'; diff --git a/civicrm/sql/civicrm_drop.mysql b/civicrm/sql/civicrm_drop.mysql index 0dd763eddb..83bc949d98 100644 --- a/civicrm/sql/civicrm_drop.mysql +++ b/civicrm/sql/civicrm_drop.mysql @@ -8,11 +8,9 @@ -- -- Generated from drop.tpl -- DO NOT EDIT. Generated by CRM_Core_CodeGen --- --- /******************************************************* --- * --- * Clean up the existing tables +---- /******************************************************* -- * +-- * Clean up the existing tables-- * -- *******************************************************/ SET FOREIGN_KEY_CHECKS=0; @@ -160,6 +158,7 @@ DROP TABLE IF EXISTS `civicrm_action_mapping`; DROP TABLE IF EXISTS `civicrm_prevnext_cache`; DROP TABLE IF EXISTS `civicrm_component`; DROP TABLE IF EXISTS `civicrm_worldregion`; +DROP TABLE IF EXISTS `civicrm_translation`; DROP TABLE IF EXISTS `civicrm_system_log`; DROP TABLE IF EXISTS `civicrm_preferences_date`; DROP TABLE IF EXISTS `civicrm_option_group`; diff --git a/civicrm/sql/civicrm_dummy_processor.mysql b/civicrm/sql/civicrm_dummy_processor.mysql index 30e2b1ef0b..fed3c452bc 100644 --- a/civicrm/sql/civicrm_dummy_processor.mysql +++ b/civicrm/sql/civicrm_dummy_processor.mysql @@ -1,5 +1,7 @@ -INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES (1, 'Test Processor', '', 7, 1, 1, 0, 'dummy', NULL, NULL, 'http://dummy.com', NULL, 'http://dummyrecur.com', NULL, NULL, 'Payment_Dummy', 1, 1, 1); -INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES (1, 'Test Processor', '', 7, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Payment_Dummy', 1, 1, 1); +SELECT @pptype := id FROM civicrm_payment_processor_type WHERE name='Dummy'; + +INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES (1, 'Test Processor', '', @pptype, 1, 1, 0, 'dummy', NULL, NULL, 'http://dummy.com', NULL, 'http://dummyrecur.com', NULL, NULL, 'Payment_Dummy', 1, 1, 1); +INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES (1, 'Test Processor', '', @pptype, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Payment_Dummy', 1, 1, 1); SELECT @dp := max(id) from civicrm_payment_processor where name = 'Test Processor' AND is_test = 0; SELECT @dpTest := max(id) from civicrm_payment_processor where name = 'Test Processor' AND is_test = 1; @@ -10,3 +12,5 @@ INSERT INTO `civicrm_entity_financial_account` (`entity_table`, `entity_id`, `ac UPDATE `civicrm_contribution_page` SET payment_processor = @dp; UPDATE `civicrm_event` SET payment_processor = @dp; + +UPDATE `civicrm_financial_trxn` SET payment_processor_id = @dp WHERE trxn_id IS NOT NULL; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index 757026dacd..921eee62bf 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.7.32, for Linux (x86_64) +-- MySQL dump 10.19 Distrib 10.3.29-MariaDB, for Linux (x86_64) -- --- Host: 127.0.0.1 Database: 47testcivi_yg7kx +-- Host: localhost Database: civicrm_regen_civi -- ------------------------------------------------------ --- Server version 5.7.32-0ubuntu0.18.04.1 +-- Server version 10.3.29-MariaDB /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -10,7 +10,6 @@ /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; @@ -21,7 +20,72 @@ LOCK TABLES `civicrm_acl` WRITE; /*!40000 ALTER TABLE `civicrm_acl` DISABLE KEYS */; -INSERT INTO `civicrm_acl` (`id`, `name`, `deny`, `entity_table`, `entity_id`, `operation`, `object_table`, `object_id`, `acl_table`, `acl_id`, `is_active`) VALUES (1,'Edit All Contacts',0,'civicrm_acl_role',1,'Edit','civicrm_saved_search',0,NULL,NULL,1),(2,'Core ACL',0,'civicrm_acl_role',0,'All','access CiviMail subscribe/unsubscribe pages',NULL,NULL,NULL,1),(3,'Core ACL',0,'civicrm_acl_role',0,'All','access all custom data',NULL,NULL,NULL,1),(4,'Core ACL',0,'civicrm_acl_role',0,'All','make online contributions',NULL,NULL,NULL,1),(5,'Core ACL',0,'civicrm_acl_role',0,'All','make online pledges',NULL,NULL,NULL,1),(6,'Core ACL',0,'civicrm_acl_role',0,'All','profile listings and forms',NULL,NULL,NULL,1),(7,'Core ACL',0,'civicrm_acl_role',0,'All','view event info',NULL,NULL,NULL,1),(8,'Core ACL',0,'civicrm_acl_role',0,'All','register for events',NULL,NULL,NULL,1),(9,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviCRM',NULL,NULL,NULL,1),(10,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviContribute',NULL,NULL,NULL,1),(11,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviEvent',NULL,NULL,NULL,1),(12,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviMail',NULL,NULL,NULL,1),(13,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviMail subscribe/unsubscribe pages',NULL,NULL,NULL,1),(14,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviMember',NULL,NULL,NULL,1),(15,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviPledge',NULL,NULL,NULL,1),(16,'Core ACL',0,'civicrm_acl_role',1,'All','administer CiviCase',NULL,NULL,NULL,1),(17,'Core ACL',0,'civicrm_acl_role',1,'All','access my cases and activities',NULL,NULL,NULL,1),(18,'Core ACL',0,'civicrm_acl_role',1,'All','access all cases and activities',NULL,NULL,NULL,1),(19,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviCase',NULL,NULL,NULL,1),(20,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviGrant',NULL,NULL,NULL,1),(21,'Core ACL',0,'civicrm_acl_role',1,'All','access Contact Dashboard',NULL,NULL,NULL,1),(22,'Core ACL',0,'civicrm_acl_role',1,'All','administer Multiple Organizations',NULL,NULL,NULL,1),(23,'Core ACL',0,'civicrm_acl_role',1,'All','delete activities',NULL,NULL,NULL,1),(24,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviContribute',NULL,NULL,NULL,1),(25,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviMail',NULL,NULL,NULL,1),(26,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviPledge',NULL,NULL,NULL,1),(27,'Core ACL',0,'civicrm_acl_role',1,'All','delete contacts',NULL,NULL,NULL,1),(28,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviEvent',NULL,NULL,NULL,1),(29,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviMember',NULL,NULL,NULL,1),(30,'Core ACL',0,'civicrm_acl_role',1,'All','translate CiviCRM',NULL,NULL,NULL,1),(31,'Core ACL',0,'civicrm_acl_role',1,'All','edit grants',NULL,NULL,NULL,1),(32,'Core ACL',0,'civicrm_acl_role',1,'All','access all custom data',NULL,NULL,NULL,1),(33,'Core ACL',0,'civicrm_acl_role',1,'All','access uploaded files',NULL,NULL,NULL,1),(34,'Core ACL',0,'civicrm_acl_role',1,'All','add contacts',NULL,NULL,NULL,1),(35,'Core ACL',0,'civicrm_acl_role',1,'All','administer CiviCRM',NULL,NULL,NULL,1),(36,'Core ACL',0,'civicrm_acl_role',1,'All','edit all contacts',NULL,NULL,NULL,1),(37,'Core ACL',0,'civicrm_acl_role',1,'All','edit contributions',NULL,NULL,NULL,1),(38,'Core ACL',0,'civicrm_acl_role',1,'All','edit event participants',NULL,NULL,NULL,1),(39,'Core ACL',0,'civicrm_acl_role',1,'All','edit groups',NULL,NULL,NULL,1),(40,'Core ACL',0,'civicrm_acl_role',1,'All','edit memberships',NULL,NULL,NULL,1),(41,'Core ACL',0,'civicrm_acl_role',1,'All','edit pledges',NULL,NULL,NULL,1),(42,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviReport',NULL,NULL,NULL,1),(43,'Core ACL',0,'civicrm_acl_role',1,'All','access Report Criteria',NULL,NULL,NULL,1),(44,'Core ACL',0,'civicrm_acl_role',1,'All','administer Reports',NULL,NULL,NULL,1),(45,'Core ACL',0,'civicrm_acl_role',1,'All','import contacts',NULL,NULL,NULL,1),(46,'Core ACL',0,'civicrm_acl_role',1,'All','make online contributions',NULL,NULL,NULL,1),(47,'Core ACL',0,'civicrm_acl_role',1,'All','make online pledges',NULL,NULL,NULL,1),(48,'Core ACL',0,'civicrm_acl_role',1,'All','profile listings and forms',NULL,NULL,NULL,1),(49,'Core ACL',0,'civicrm_acl_role',1,'All','profile create',NULL,NULL,NULL,1),(50,'Core ACL',0,'civicrm_acl_role',1,'All','profile edit',NULL,NULL,NULL,1),(51,'Core ACL',0,'civicrm_acl_role',1,'All','profile listings',NULL,NULL,NULL,1),(52,'Core ACL',0,'civicrm_acl_role',1,'All','profile view',NULL,NULL,NULL,1),(53,'Core ACL',0,'civicrm_acl_role',1,'All','register for events',NULL,NULL,NULL,1),(54,'Core ACL',0,'civicrm_acl_role',1,'All','view all activities',NULL,NULL,NULL,1),(55,'Core ACL',0,'civicrm_acl_role',1,'All','view all contacts',NULL,NULL,NULL,1),(56,'Core ACL',0,'civicrm_acl_role',1,'All','view event info',NULL,NULL,NULL,1),(57,'Core ACL',0,'civicrm_acl_role',1,'All','view event participants',NULL,NULL,NULL,1),(58,'Core ACL',0,'civicrm_acl_role',1,'All','edit all events',NULL,NULL,NULL,1),(59,'Core ACL',0,'civicrm_acl_role',2,'All','access CiviMail subscribe/unsubscribe pages',NULL,NULL,NULL,1),(60,'Core ACL',0,'civicrm_acl_role',2,'All','access all custom data',NULL,NULL,NULL,1),(61,'Core ACL',0,'civicrm_acl_role',2,'All','make online contributions',NULL,NULL,NULL,1),(62,'Core ACL',0,'civicrm_acl_role',2,'All','make online pledges',NULL,NULL,NULL,1),(63,'Core ACL',0,'civicrm_acl_role',2,'All','profile listings and forms',NULL,NULL,NULL,1),(64,'Core ACL',0,'civicrm_acl_role',2,'All','register for events',NULL,NULL,NULL,1),(65,'Core ACL',0,'civicrm_acl_role',2,'All','view event info',NULL,NULL,NULL,1); +INSERT INTO `civicrm_acl` (`id`, `name`, `deny`, `entity_table`, `entity_id`, `operation`, `object_table`, `object_id`, `acl_table`, `acl_id`, `is_active`) VALUES + (1,'Edit All Contacts',0,'civicrm_acl_role',1,'Edit','civicrm_saved_search',0,NULL,NULL,1), + (2,'Core ACL',0,'civicrm_acl_role',0,'All','access CiviMail subscribe/unsubscribe pages',NULL,NULL,NULL,1), + (3,'Core ACL',0,'civicrm_acl_role',0,'All','access all custom data',NULL,NULL,NULL,1), + (4,'Core ACL',0,'civicrm_acl_role',0,'All','make online contributions',NULL,NULL,NULL,1), + (5,'Core ACL',0,'civicrm_acl_role',0,'All','make online pledges',NULL,NULL,NULL,1), + (6,'Core ACL',0,'civicrm_acl_role',0,'All','profile listings and forms',NULL,NULL,NULL,1), + (7,'Core ACL',0,'civicrm_acl_role',0,'All','view event info',NULL,NULL,NULL,1), + (8,'Core ACL',0,'civicrm_acl_role',0,'All','register for events',NULL,NULL,NULL,1), + (9,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviCRM',NULL,NULL,NULL,1), + (10,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviContribute',NULL,NULL,NULL,1), + (11,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviEvent',NULL,NULL,NULL,1), + (12,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviMail',NULL,NULL,NULL,1), + (13,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviMail subscribe/unsubscribe pages',NULL,NULL,NULL,1), + (14,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviMember',NULL,NULL,NULL,1), + (15,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviPledge',NULL,NULL,NULL,1), + (16,'Core ACL',0,'civicrm_acl_role',1,'All','administer CiviCase',NULL,NULL,NULL,1), + (17,'Core ACL',0,'civicrm_acl_role',1,'All','access my cases and activities',NULL,NULL,NULL,1), + (18,'Core ACL',0,'civicrm_acl_role',1,'All','access all cases and activities',NULL,NULL,NULL,1), + (19,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviCase',NULL,NULL,NULL,1), + (20,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviGrant',NULL,NULL,NULL,1), + (21,'Core ACL',0,'civicrm_acl_role',1,'All','access Contact Dashboard',NULL,NULL,NULL,1), + (22,'Core ACL',0,'civicrm_acl_role',1,'All','administer Multiple Organizations',NULL,NULL,NULL,1), + (23,'Core ACL',0,'civicrm_acl_role',1,'All','delete activities',NULL,NULL,NULL,1), + (24,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviContribute',NULL,NULL,NULL,1), + (25,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviMail',NULL,NULL,NULL,1), + (26,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviPledge',NULL,NULL,NULL,1), + (27,'Core ACL',0,'civicrm_acl_role',1,'All','delete contacts',NULL,NULL,NULL,1), + (28,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviEvent',NULL,NULL,NULL,1), + (29,'Core ACL',0,'civicrm_acl_role',1,'All','delete in CiviMember',NULL,NULL,NULL,1), + (30,'Core ACL',0,'civicrm_acl_role',1,'All','translate CiviCRM',NULL,NULL,NULL,1), + (31,'Core ACL',0,'civicrm_acl_role',1,'All','edit grants',NULL,NULL,NULL,1), + (32,'Core ACL',0,'civicrm_acl_role',1,'All','access all custom data',NULL,NULL,NULL,1), + (33,'Core ACL',0,'civicrm_acl_role',1,'All','access uploaded files',NULL,NULL,NULL,1), + (34,'Core ACL',0,'civicrm_acl_role',1,'All','add contacts',NULL,NULL,NULL,1), + (35,'Core ACL',0,'civicrm_acl_role',1,'All','administer CiviCRM',NULL,NULL,NULL,1), + (36,'Core ACL',0,'civicrm_acl_role',1,'All','edit all contacts',NULL,NULL,NULL,1), + (37,'Core ACL',0,'civicrm_acl_role',1,'All','edit contributions',NULL,NULL,NULL,1), + (38,'Core ACL',0,'civicrm_acl_role',1,'All','edit event participants',NULL,NULL,NULL,1), + (39,'Core ACL',0,'civicrm_acl_role',1,'All','edit groups',NULL,NULL,NULL,1), + (40,'Core ACL',0,'civicrm_acl_role',1,'All','edit memberships',NULL,NULL,NULL,1), + (41,'Core ACL',0,'civicrm_acl_role',1,'All','edit pledges',NULL,NULL,NULL,1), + (42,'Core ACL',0,'civicrm_acl_role',1,'All','access CiviReport',NULL,NULL,NULL,1), + (43,'Core ACL',0,'civicrm_acl_role',1,'All','access Report Criteria',NULL,NULL,NULL,1), + (44,'Core ACL',0,'civicrm_acl_role',1,'All','administer Reports',NULL,NULL,NULL,1), + (45,'Core ACL',0,'civicrm_acl_role',1,'All','import contacts',NULL,NULL,NULL,1), + (46,'Core ACL',0,'civicrm_acl_role',1,'All','make online contributions',NULL,NULL,NULL,1), + (47,'Core ACL',0,'civicrm_acl_role',1,'All','make online pledges',NULL,NULL,NULL,1), + (48,'Core ACL',0,'civicrm_acl_role',1,'All','profile listings and forms',NULL,NULL,NULL,1), + (49,'Core ACL',0,'civicrm_acl_role',1,'All','profile create',NULL,NULL,NULL,1), + (50,'Core ACL',0,'civicrm_acl_role',1,'All','profile edit',NULL,NULL,NULL,1), + (51,'Core ACL',0,'civicrm_acl_role',1,'All','profile listings',NULL,NULL,NULL,1), + (52,'Core ACL',0,'civicrm_acl_role',1,'All','profile view',NULL,NULL,NULL,1), + (53,'Core ACL',0,'civicrm_acl_role',1,'All','register for events',NULL,NULL,NULL,1), + (54,'Core ACL',0,'civicrm_acl_role',1,'All','view all activities',NULL,NULL,NULL,1), + (55,'Core ACL',0,'civicrm_acl_role',1,'All','view all contacts',NULL,NULL,NULL,1), + (56,'Core ACL',0,'civicrm_acl_role',1,'All','view event info',NULL,NULL,NULL,1), + (57,'Core ACL',0,'civicrm_acl_role',1,'All','view event participants',NULL,NULL,NULL,1), + (58,'Core ACL',0,'civicrm_acl_role',1,'All','edit all events',NULL,NULL,NULL,1), + (59,'Core ACL',0,'civicrm_acl_role',2,'All','access CiviMail subscribe/unsubscribe pages',NULL,NULL,NULL,1), + (60,'Core ACL',0,'civicrm_acl_role',2,'All','access all custom data',NULL,NULL,NULL,1), + (61,'Core ACL',0,'civicrm_acl_role',2,'All','make online contributions',NULL,NULL,NULL,1), + (62,'Core ACL',0,'civicrm_acl_role',2,'All','make online pledges',NULL,NULL,NULL,1), + (63,'Core ACL',0,'civicrm_acl_role',2,'All','profile listings and forms',NULL,NULL,NULL,1), + (64,'Core ACL',0,'civicrm_acl_role',2,'All','register for events',NULL,NULL,NULL,1), + (65,'Core ACL',0,'civicrm_acl_role',2,'All','view event info',NULL,NULL,NULL,1); /*!40000 ALTER TABLE `civicrm_acl` ENABLE KEYS */; UNLOCK TABLES; @@ -49,7 +113,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_acl_entity_role` WRITE; /*!40000 ALTER TABLE `civicrm_acl_entity_role` DISABLE KEYS */; -INSERT INTO `civicrm_acl_entity_role` (`id`, `acl_role_id`, `entity_table`, `entity_id`, `is_active`) VALUES (1,1,'civicrm_group',1,1); +INSERT INTO `civicrm_acl_entity_role` (`id`, `acl_role_id`, `entity_table`, `entity_id`, `is_active`) VALUES + (1,1,'civicrm_group',1,1); /*!40000 ALTER TABLE `civicrm_acl_entity_role` ENABLE KEYS */; UNLOCK TABLES; @@ -68,7 +133,13 @@ UNLOCK TABLES; LOCK TABLES `civicrm_action_mapping` WRITE; /*!40000 ALTER TABLE `civicrm_action_mapping` DISABLE KEYS */; -INSERT INTO `civicrm_action_mapping` (`id`, `entity`, `entity_value`, `entity_value_label`, `entity_status`, `entity_status_label`, `entity_date_start`, `entity_date_end`, `entity_recipient`) VALUES (1,'civicrm_activity','activity_type','Activity Type','activity_status','Activity Status','activity_date_time',NULL,'activity_contacts'),(2,'civicrm_participant','event_type','Event Type','civicrm_participant_status_type','Participant Status','event_start_date','event_end_date','event_contacts'),(3,'civicrm_participant','civicrm_event','Event Name','civicrm_participant_status_type','Participant Status','event_start_date','event_end_date','event_contacts'),(4,'civicrm_membership','civicrm_membership_type','Membership Type','auto_renew_options','Auto Renew Options','membership_join_date','membership_end_date',NULL),(5,'civicrm_participant','event_template','Event Template','civicrm_participant_status_type','Participant Status','event_start_date','event_end_date','event_contacts'),(6,'civicrm_contact','civicrm_contact','Date Field','contact_date_reminder_options','Annual Options','date_field',NULL,NULL); +INSERT INTO `civicrm_action_mapping` (`id`, `entity`, `entity_value`, `entity_value_label`, `entity_status`, `entity_status_label`, `entity_date_start`, `entity_date_end`, `entity_recipient`) VALUES + (1,'civicrm_activity','activity_type','Activity Type','activity_status','Activity Status','activity_date_time',NULL,'activity_contacts'), + (2,'civicrm_participant','event_type','Event Type','civicrm_participant_status_type','Participant Status','event_start_date','event_end_date','event_contacts'), + (3,'civicrm_participant','civicrm_event','Event Name','civicrm_participant_status_type','Participant Status','event_start_date','event_end_date','event_contacts'), + (4,'civicrm_membership','civicrm_membership_type','Membership Type','auto_renew_options','Auto Renew Options','membership_join_date','membership_end_date',NULL), + (5,'civicrm_participant','event_template','Event Template','civicrm_participant_status_type','Participant Status','event_start_date','event_end_date','event_contacts'), + (6,'civicrm_contact','civicrm_contact','Date Field','contact_date_reminder_options','Annual Options','date_field',NULL,NULL); /*!40000 ALTER TABLE `civicrm_action_mapping` ENABLE KEYS */; UNLOCK TABLES; @@ -87,7 +158,630 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity` WRITE; /*!40000 ALTER TABLE `civicrm_activity` DISABLE KEYS */; -INSERT INTO `civicrm_activity` (`id`, `source_record_id`, `activity_type_id`, `subject`, `activity_date_time`, `duration`, `location`, `phone_id`, `phone_number`, `details`, `status_id`, `priority_id`, `parent_id`, `is_test`, `medium_id`, `is_auto`, `relationship_id`, `is_current_revision`, `original_id`, `result`, `is_deleted`, `campaign_id`, `engagement_level`, `weight`, `is_star`, `created_date`, `modified_date`) VALUES (1,NULL,9,'Subject for Tell a Friend','2020-01-14 01:24:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(2,NULL,9,'Subject for Tell a Friend','2020-05-11 07:50:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(3,NULL,9,'Subject for Tell a Friend','2020-12-09 07:28:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(4,NULL,10,'Subject for Pledge Acknowledgment','2020-04-18 12:05:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(5,NULL,9,'Subject for Tell a Friend','2020-04-05 22:04:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(6,NULL,9,'Subject for Tell a Friend','2020-08-02 12:04:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(7,NULL,10,'Subject for Pledge Acknowledgment','2020-06-10 15:11:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(8,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 12:32:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(9,NULL,9,'Subject for Tell a Friend','2021-01-08 22:45:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(10,NULL,9,'Subject for Tell a Friend','2020-07-25 19:32:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(11,NULL,9,'Subject for Tell a Friend','2020-05-31 19:41:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(12,NULL,9,'Subject for Tell a Friend','2020-06-06 22:47:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(13,NULL,9,'Subject for Tell a Friend','2020-03-13 09:30:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(14,NULL,10,'Subject for Pledge Acknowledgment','2020-01-23 12:39:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(15,NULL,9,'Subject for Tell a Friend','2020-11-24 03:47:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(16,NULL,10,'Subject for Pledge Acknowledgment','2020-07-25 19:18:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(17,NULL,10,'Subject for Pledge Acknowledgment','2020-04-08 05:22:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(18,NULL,10,'Subject for Pledge Acknowledgment','2020-03-23 04:42:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(19,NULL,9,'Subject for Tell a Friend','2020-08-15 14:40:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(20,NULL,9,'Subject for Tell a Friend','2020-06-01 22:39:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(21,NULL,10,'Subject for Pledge Acknowledgment','2020-04-13 14:25:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(22,NULL,9,'Subject for Tell a Friend','2020-08-20 04:43:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(23,NULL,9,'Subject for Tell a Friend','2020-02-06 11:29:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(24,NULL,10,'Subject for Pledge Acknowledgment','2020-03-07 11:28:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(25,NULL,10,'Subject for Pledge Acknowledgment','2020-03-01 22:49:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(26,NULL,9,'Subject for Tell a Friend','2020-07-02 02:14:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(27,NULL,10,'Subject for Pledge Acknowledgment','2020-05-24 16:26:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(28,NULL,9,'Subject for Tell a Friend','2020-04-17 03:54:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(29,NULL,9,'Subject for Tell a Friend','2020-09-18 02:52:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(30,NULL,10,'Subject for Pledge Acknowledgment','2020-04-29 01:39:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(31,NULL,9,'Subject for Tell a Friend','2020-03-01 11:33:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(32,NULL,10,'Subject for Pledge Acknowledgment','2020-07-17 03:03:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(33,NULL,9,'Subject for Tell a Friend','2020-08-15 04:08:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(34,NULL,9,'Subject for Tell a Friend','2020-06-29 20:04:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(35,NULL,9,'Subject for Tell a Friend','2020-02-08 22:45:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(36,NULL,10,'Subject for Pledge Acknowledgment','2020-11-17 19:33:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(37,NULL,10,'Subject for Pledge Acknowledgment','2020-04-21 10:01:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(38,NULL,9,'Subject for Tell a Friend','2020-08-20 17:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(39,NULL,10,'Subject for Pledge Acknowledgment','2020-06-02 01:17:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(40,NULL,10,'Subject for Pledge Acknowledgment','2020-11-30 00:11:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(41,NULL,10,'Subject for Pledge Acknowledgment','2020-04-02 18:11:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(42,NULL,9,'Subject for Tell a Friend','2021-01-02 21:46:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(43,NULL,9,'Subject for Tell a Friend','2020-08-17 08:58:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(44,NULL,9,'Subject for Tell a Friend','2020-05-21 18:23:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(45,NULL,9,'Subject for Tell a Friend','2020-06-17 21:00:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(46,NULL,9,'Subject for Tell a Friend','2020-12-08 07:37:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(47,NULL,10,'Subject for Pledge Acknowledgment','2020-11-20 22:03:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(48,NULL,9,'Subject for Tell a Friend','2020-12-01 08:18:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(49,NULL,9,'Subject for Tell a Friend','2020-12-21 04:44:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(50,NULL,9,'Subject for Tell a Friend','2020-10-16 06:54:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(51,NULL,10,'Subject for Pledge Acknowledgment','2020-11-20 06:28:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(52,NULL,9,'Subject for Tell a Friend','2020-02-25 04:21:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(53,NULL,9,'Subject for Tell a Friend','2020-05-03 04:46:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(54,NULL,9,'Subject for Tell a Friend','2020-02-08 04:43:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(55,NULL,9,'Subject for Tell a Friend','2020-05-05 01:55:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(56,NULL,9,'Subject for Tell a Friend','2020-08-26 07:51:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(57,NULL,10,'Subject for Pledge Acknowledgment','2020-03-05 05:07:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(58,NULL,10,'Subject for Pledge Acknowledgment','2020-08-20 20:37:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(59,NULL,10,'Subject for Pledge Acknowledgment','2020-05-24 16:40:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(60,NULL,10,'Subject for Pledge Acknowledgment','2020-08-08 20:56:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(61,NULL,9,'Subject for Tell a Friend','2020-03-09 04:03:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(62,NULL,9,'Subject for Tell a Friend','2020-06-13 13:10:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(63,NULL,10,'Subject for Pledge Acknowledgment','2020-09-21 20:57:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(64,NULL,10,'Subject for Pledge Acknowledgment','2020-03-27 17:51:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(65,NULL,10,'Subject for Pledge Acknowledgment','2020-07-12 22:05:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(66,NULL,9,'Subject for Tell a Friend','2020-03-04 02:16:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(67,NULL,9,'Subject for Tell a Friend','2020-06-03 08:10:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(68,NULL,10,'Subject for Pledge Acknowledgment','2020-07-03 08:56:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(69,NULL,10,'Subject for Pledge Acknowledgment','2020-10-29 12:48:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(70,NULL,9,'Subject for Tell a Friend','2020-03-23 18:30:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(71,NULL,10,'Subject for Pledge Acknowledgment','2020-09-20 18:49:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(72,NULL,10,'Subject for Pledge Acknowledgment','2020-09-03 02:06:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(73,NULL,10,'Subject for Pledge Acknowledgment','2020-08-28 14:13:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(74,NULL,10,'Subject for Pledge Acknowledgment','2020-02-08 08:04:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:49','2021-01-11 22:04:49'),(75,NULL,9,'Subject for Tell a Friend','2020-12-18 04:50:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(76,NULL,10,'Subject for Pledge Acknowledgment','2020-06-12 00:35:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(77,NULL,9,'Subject for Tell a Friend','2020-09-07 23:28:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(78,NULL,10,'Subject for Pledge Acknowledgment','2020-01-26 02:47:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(79,NULL,9,'Subject for Tell a Friend','2020-09-17 18:02:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(80,NULL,10,'Subject for Pledge Acknowledgment','2020-07-21 13:06:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(81,NULL,10,'Subject for Pledge Acknowledgment','2020-01-21 01:39:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(82,NULL,9,'Subject for Tell a Friend','2020-06-08 13:14:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(83,NULL,10,'Subject for Pledge Acknowledgment','2020-01-14 12:50:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(84,NULL,10,'Subject for Pledge Acknowledgment','2020-09-13 13:30:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(85,NULL,10,'Subject for Pledge Acknowledgment','2020-04-12 02:28:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(86,NULL,9,'Subject for Tell a Friend','2020-06-15 02:50:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(87,NULL,10,'Subject for Pledge Acknowledgment','2020-10-25 22:45:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(88,NULL,9,'Subject for Tell a Friend','2020-02-01 02:11:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(89,NULL,9,'Subject for Tell a Friend','2020-09-19 08:55:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(90,NULL,10,'Subject for Pledge Acknowledgment','2020-06-06 11:13:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(91,NULL,9,'Subject for Tell a Friend','2020-03-12 20:31:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(92,NULL,10,'Subject for Pledge Acknowledgment','2020-09-22 17:54:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(93,NULL,10,'Subject for Pledge Acknowledgment','2020-10-09 07:58:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(94,NULL,9,'Subject for Tell a Friend','2020-09-04 16:05:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(95,NULL,9,'Subject for Tell a Friend','2020-08-01 18:42:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(96,NULL,10,'Subject for Pledge Acknowledgment','2020-04-10 06:28:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(97,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 15:04:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(98,NULL,10,'Subject for Pledge Acknowledgment','2020-04-19 10:20:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(99,NULL,10,'Subject for Pledge Acknowledgment','2020-02-27 05:00:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(100,NULL,9,'Subject for Tell a Friend','2020-04-02 02:51:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(101,NULL,9,'Subject for Tell a Friend','2021-01-12 04:39:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(102,NULL,9,'Subject for Tell a Friend','2020-01-16 07:26:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(103,NULL,9,'Subject for Tell a Friend','2020-05-22 05:02:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(104,NULL,10,'Subject for Pledge Acknowledgment','2021-01-08 06:31:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(105,NULL,10,'Subject for Pledge Acknowledgment','2020-03-03 03:40:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(106,NULL,9,'Subject for Tell a Friend','2020-06-29 01:06:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(107,NULL,9,'Subject for Tell a Friend','2020-08-26 01:47:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(108,NULL,9,'Subject for Tell a Friend','2020-06-24 23:58:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(109,NULL,9,'Subject for Tell a Friend','2020-12-21 06:46:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(110,NULL,10,'Subject for Pledge Acknowledgment','2020-10-08 05:27:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(111,NULL,10,'Subject for Pledge Acknowledgment','2020-08-23 20:07:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(112,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 02:08:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(113,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 13:24:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(114,NULL,9,'Subject for Tell a Friend','2020-10-16 09:19:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(115,NULL,10,'Subject for Pledge Acknowledgment','2020-05-12 06:42:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(116,NULL,10,'Subject for Pledge Acknowledgment','2020-02-17 06:57:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(117,NULL,9,'Subject for Tell a Friend','2020-12-24 12:51:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(118,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 18:19:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(119,NULL,10,'Subject for Pledge Acknowledgment','2020-02-25 14:45:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(120,NULL,9,'Subject for Tell a Friend','2021-01-05 21:31:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(121,NULL,9,'Subject for Tell a Friend','2020-04-26 22:03:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(122,NULL,10,'Subject for Pledge Acknowledgment','2020-08-04 15:41:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(123,NULL,9,'Subject for Tell a Friend','2020-07-19 16:40:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(124,NULL,9,'Subject for Tell a Friend','2020-03-08 01:08:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(125,NULL,10,'Subject for Pledge Acknowledgment','2020-08-04 06:41:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(126,NULL,10,'Subject for Pledge Acknowledgment','2020-08-18 21:17:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(127,NULL,9,'Subject for Tell a Friend','2020-02-13 09:26:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(128,NULL,10,'Subject for Pledge Acknowledgment','2020-09-14 20:34:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(129,NULL,9,'Subject for Tell a Friend','2020-02-27 14:18:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(130,NULL,10,'Subject for Pledge Acknowledgment','2020-10-07 07:21:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(131,NULL,10,'Subject for Pledge Acknowledgment','2020-08-02 08:11:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(132,NULL,9,'Subject for Tell a Friend','2020-06-09 02:07:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(133,NULL,9,'Subject for Tell a Friend','2020-10-10 03:40:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(134,NULL,10,'Subject for Pledge Acknowledgment','2020-02-18 02:23:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(135,NULL,10,'Subject for Pledge Acknowledgment','2020-06-19 23:43:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(136,NULL,10,'Subject for Pledge Acknowledgment','2020-12-02 17:51:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(137,NULL,9,'Subject for Tell a Friend','2021-01-11 18:19:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(138,NULL,9,'Subject for Tell a Friend','2021-01-08 06:20:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(139,NULL,9,'Subject for Tell a Friend','2020-05-16 07:19:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(140,NULL,10,'Subject for Pledge Acknowledgment','2020-05-27 06:24:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(141,NULL,9,'Subject for Tell a Friend','2020-05-12 21:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(142,NULL,10,'Subject for Pledge Acknowledgment','2020-05-22 15:00:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(143,NULL,10,'Subject for Pledge Acknowledgment','2020-11-29 11:21:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(144,NULL,10,'Subject for Pledge Acknowledgment','2020-03-26 07:07:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(145,NULL,9,'Subject for Tell a Friend','2020-07-10 06:21:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(146,NULL,10,'Subject for Pledge Acknowledgment','2020-11-20 02:47:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(147,NULL,10,'Subject for Pledge Acknowledgment','2020-07-06 15:46:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(148,NULL,9,'Subject for Tell a Friend','2020-02-20 19:16:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(149,NULL,9,'Subject for Tell a Friend','2020-07-28 05:46:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(150,NULL,9,'Subject for Tell a Friend','2020-06-01 14:44:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(151,NULL,10,'Subject for Pledge Acknowledgment','2020-11-27 22:56:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(152,NULL,10,'Subject for Pledge Acknowledgment','2020-06-09 10:31:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(153,NULL,10,'Subject for Pledge Acknowledgment','2020-02-14 14:28:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(154,NULL,9,'Subject for Tell a Friend','2020-08-19 20:39:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(155,NULL,9,'Subject for Tell a Friend','2020-07-18 05:19:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(156,NULL,9,'Subject for Tell a Friend','2020-05-30 01:59:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(157,NULL,10,'Subject for Pledge Acknowledgment','2020-09-05 17:13:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(158,NULL,10,'Subject for Pledge Acknowledgment','2020-02-09 15:12:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(159,NULL,9,'Subject for Tell a Friend','2020-11-17 16:39:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(160,NULL,10,'Subject for Pledge Acknowledgment','2020-07-17 14:04:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(161,NULL,9,'Subject for Tell a Friend','2020-03-13 02:42:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(162,NULL,9,'Subject for Tell a Friend','2020-07-24 07:17:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(163,NULL,10,'Subject for Pledge Acknowledgment','2020-04-21 02:44:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(164,NULL,9,'Subject for Tell a Friend','2020-02-01 15:22:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(165,NULL,10,'Subject for Pledge Acknowledgment','2020-04-12 13:32:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(166,NULL,10,'Subject for Pledge Acknowledgment','2020-02-18 12:58:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(167,NULL,9,'Subject for Tell a Friend','2020-10-31 06:24:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(168,NULL,10,'Subject for Pledge Acknowledgment','2020-06-17 02:27:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(169,NULL,10,'Subject for Pledge Acknowledgment','2020-03-14 05:12:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(170,NULL,10,'Subject for Pledge Acknowledgment','2020-08-23 21:58:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(171,NULL,10,'Subject for Pledge Acknowledgment','2020-09-30 10:20:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(172,NULL,9,'Subject for Tell a Friend','2020-08-01 23:35:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(173,NULL,9,'Subject for Tell a Friend','2020-08-10 08:05:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(174,NULL,10,'Subject for Pledge Acknowledgment','2020-03-09 19:16:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(175,NULL,10,'Subject for Pledge Acknowledgment','2020-12-10 16:29:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(176,NULL,10,'Subject for Pledge Acknowledgment','2020-02-22 01:13:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(177,NULL,10,'Subject for Pledge Acknowledgment','2020-03-01 07:13:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(178,NULL,9,'Subject for Tell a Friend','2020-07-07 23:54:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(179,NULL,10,'Subject for Pledge Acknowledgment','2020-06-30 04:27:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(180,NULL,9,'Subject for Tell a Friend','2020-05-03 08:00:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(181,NULL,9,'Subject for Tell a Friend','2020-12-11 23:50:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(182,NULL,9,'Subject for Tell a Friend','2020-07-09 15:59:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(183,NULL,10,'Subject for Pledge Acknowledgment','2020-02-09 05:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(184,NULL,9,'Subject for Tell a Friend','2020-11-01 11:01:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(185,NULL,9,'Subject for Tell a Friend','2021-01-04 08:51:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(186,NULL,9,'Subject for Tell a Friend','2020-06-08 12:40:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(187,NULL,10,'Subject for Pledge Acknowledgment','2020-08-28 23:52:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(188,NULL,10,'Subject for Pledge Acknowledgment','2020-02-15 14:47:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(189,NULL,10,'Subject for Pledge Acknowledgment','2020-08-13 08:13:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(190,NULL,9,'Subject for Tell a Friend','2020-04-26 15:17:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(191,NULL,9,'Subject for Tell a Friend','2020-12-06 09:34:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(192,NULL,10,'Subject for Pledge Acknowledgment','2020-04-14 13:02:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(193,NULL,10,'Subject for Pledge Acknowledgment','2020-05-17 03:42:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(194,NULL,10,'Subject for Pledge Acknowledgment','2020-08-02 17:42:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(195,NULL,10,'Subject for Pledge Acknowledgment','2020-05-14 08:53:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(196,NULL,10,'Subject for Pledge Acknowledgment','2020-09-10 19:51:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(197,NULL,9,'Subject for Tell a Friend','2020-04-22 04:02:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(198,NULL,9,'Subject for Tell a Friend','2020-12-04 02:15:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(199,NULL,9,'Subject for Tell a Friend','2020-02-27 02:53:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(200,NULL,10,'Subject for Pledge Acknowledgment','2020-07-04 12:16:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(201,NULL,9,'Subject for Tell a Friend','2020-10-22 11:37:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(202,NULL,10,'Subject for Pledge Acknowledgment','2020-05-03 01:37:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(203,NULL,9,'Subject for Tell a Friend','2020-02-21 06:45:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(204,NULL,9,'Subject for Tell a Friend','2020-08-20 20:56:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(205,NULL,10,'Subject for Pledge Acknowledgment','2020-11-10 22:02:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(206,NULL,9,'Subject for Tell a Friend','2021-01-07 04:12:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(207,NULL,10,'Subject for Pledge Acknowledgment','2020-11-23 18:04:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(208,NULL,10,'Subject for Pledge Acknowledgment','2020-04-05 13:21:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(209,NULL,10,'Subject for Pledge Acknowledgment','2020-04-13 15:01:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(210,NULL,9,'Subject for Tell a Friend','2020-11-02 13:09:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(211,NULL,10,'Subject for Pledge Acknowledgment','2020-09-18 00:22:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(212,NULL,9,'Subject for Tell a Friend','2020-04-27 13:04:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(213,NULL,10,'Subject for Pledge Acknowledgment','2020-06-12 12:50:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(214,NULL,10,'Subject for Pledge Acknowledgment','2020-06-28 08:38:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(215,NULL,10,'Subject for Pledge Acknowledgment','2020-11-24 08:48:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(216,NULL,9,'Subject for Tell a Friend','2020-05-11 02:12:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(217,NULL,9,'Subject for Tell a Friend','2020-07-25 12:55:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(218,NULL,10,'Subject for Pledge Acknowledgment','2020-04-11 07:40:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(219,NULL,9,'Subject for Tell a Friend','2020-10-26 09:53:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(220,NULL,10,'Subject for Pledge Acknowledgment','2020-12-21 10:25:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(221,NULL,9,'Subject for Tell a Friend','2020-03-15 21:07:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(222,NULL,9,'Subject for Tell a Friend','2020-04-20 11:57:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(223,NULL,9,'Subject for Tell a Friend','2020-03-04 12:38:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(224,NULL,9,'Subject for Tell a Friend','2020-12-18 02:21:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(225,NULL,9,'Subject for Tell a Friend','2020-11-26 04:05:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(226,NULL,9,'Subject for Tell a Friend','2020-12-23 11:35:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(227,NULL,9,'Subject for Tell a Friend','2021-01-05 23:32:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(228,NULL,9,'Subject for Tell a Friend','2020-03-06 23:14:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(229,NULL,10,'Subject for Pledge Acknowledgment','2020-07-30 06:12:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(230,NULL,10,'Subject for Pledge Acknowledgment','2020-06-16 08:13:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(231,NULL,9,'Subject for Tell a Friend','2020-07-29 19:02:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(232,NULL,10,'Subject for Pledge Acknowledgment','2020-02-18 15:26:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(233,NULL,10,'Subject for Pledge Acknowledgment','2020-11-14 15:25:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(234,NULL,9,'Subject for Tell a Friend','2020-02-12 06:28:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(235,NULL,10,'Subject for Pledge Acknowledgment','2020-07-16 20:14:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(236,NULL,9,'Subject for Tell a Friend','2020-07-17 11:03:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(237,NULL,10,'Subject for Pledge Acknowledgment','2020-07-20 21:03:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(238,NULL,10,'Subject for Pledge Acknowledgment','2021-01-06 22:02:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(239,NULL,10,'Subject for Pledge Acknowledgment','2020-04-28 22:20:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(240,NULL,9,'Subject for Tell a Friend','2020-12-05 07:15:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(241,NULL,10,'Subject for Pledge Acknowledgment','2020-04-13 21:54:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(242,NULL,9,'Subject for Tell a Friend','2020-09-13 06:52:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(243,NULL,9,'Subject for Tell a Friend','2020-07-16 23:21:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(244,NULL,10,'Subject for Pledge Acknowledgment','2020-04-27 13:40:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(245,NULL,9,'Subject for Tell a Friend','2020-03-14 21:02:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(246,NULL,10,'Subject for Pledge Acknowledgment','2020-06-24 10:00:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(247,NULL,9,'Subject for Tell a Friend','2020-12-28 21:14:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(248,NULL,9,'Subject for Tell a Friend','2020-04-19 14:12:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(249,NULL,9,'Subject for Tell a Friend','2020-01-30 20:31:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(250,NULL,10,'Subject for Pledge Acknowledgment','2020-11-28 05:21:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(251,NULL,9,'Subject for Tell a Friend','2020-03-23 04:54:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(252,NULL,10,'Subject for Pledge Acknowledgment','2020-06-15 10:13:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(253,NULL,10,'Subject for Pledge Acknowledgment','2020-06-02 00:47:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(254,NULL,10,'Subject for Pledge Acknowledgment','2020-11-07 04:25:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(255,NULL,10,'Subject for Pledge Acknowledgment','2020-09-08 03:31:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(256,NULL,10,'Subject for Pledge Acknowledgment','2020-09-23 20:58:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(257,NULL,10,'Subject for Pledge Acknowledgment','2020-06-05 19:04:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(258,NULL,10,'Subject for Pledge Acknowledgment','2020-11-02 07:34:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(259,NULL,9,'Subject for Tell a Friend','2020-12-25 14:26:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(260,NULL,9,'Subject for Tell a Friend','2020-11-03 12:36:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(261,NULL,10,'Subject for Pledge Acknowledgment','2020-12-18 15:30:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(262,NULL,10,'Subject for Pledge Acknowledgment','2020-03-29 19:06:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(263,NULL,10,'Subject for Pledge Acknowledgment','2020-09-03 02:05:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(264,NULL,9,'Subject for Tell a Friend','2020-12-24 03:54:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(265,NULL,9,'Subject for Tell a Friend','2020-06-15 14:18:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(266,NULL,10,'Subject for Pledge Acknowledgment','2020-09-30 11:50:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(267,NULL,10,'Subject for Pledge Acknowledgment','2020-05-27 01:37:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(268,NULL,9,'Subject for Tell a Friend','2020-10-27 23:00:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(269,NULL,9,'Subject for Tell a Friend','2020-06-17 03:50:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(270,NULL,9,'Subject for Tell a Friend','2020-08-03 05:42:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(271,NULL,10,'Subject for Pledge Acknowledgment','2020-05-02 16:02:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(272,NULL,9,'Subject for Tell a Friend','2020-06-24 04:12:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(273,NULL,10,'Subject for Pledge Acknowledgment','2021-01-05 04:44:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(274,NULL,9,'Subject for Tell a Friend','2020-12-05 21:49:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(275,NULL,9,'Subject for Tell a Friend','2020-09-07 23:09:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(276,NULL,10,'Subject for Pledge Acknowledgment','2020-12-04 18:25:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(277,NULL,9,'Subject for Tell a Friend','2020-05-27 22:17:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(278,NULL,9,'Subject for Tell a Friend','2020-02-06 15:32:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(279,NULL,10,'Subject for Pledge Acknowledgment','2020-03-19 21:28:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(280,NULL,9,'Subject for Tell a Friend','2020-09-25 01:31:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(281,NULL,10,'Subject for Pledge Acknowledgment','2020-09-07 05:01:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(282,NULL,9,'Subject for Tell a Friend','2020-11-03 04:55:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(283,NULL,10,'Subject for Pledge Acknowledgment','2020-10-09 19:12:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(284,NULL,10,'Subject for Pledge Acknowledgment','2020-11-30 08:12:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(285,NULL,10,'Subject for Pledge Acknowledgment','2020-11-05 02:39:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(286,NULL,10,'Subject for Pledge Acknowledgment','2020-04-24 19:29:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(287,NULL,10,'Subject for Pledge Acknowledgment','2020-10-22 06:50:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(288,NULL,9,'Subject for Tell a Friend','2020-05-12 14:58:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(289,NULL,10,'Subject for Pledge Acknowledgment','2020-07-22 08:42:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(290,NULL,10,'Subject for Pledge Acknowledgment','2020-10-31 02:03:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(291,NULL,9,'Subject for Tell a Friend','2020-06-15 06:14:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(292,NULL,9,'Subject for Tell a Friend','2020-08-11 18:19:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(293,NULL,10,'Subject for Pledge Acknowledgment','2020-02-08 15:16:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(294,NULL,10,'Subject for Pledge Acknowledgment','2020-10-22 14:42:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(295,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 18:15:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(296,NULL,9,'Subject for Tell a Friend','2020-06-26 10:44:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(297,NULL,9,'Subject for Tell a Friend','2020-12-12 05:01:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(298,NULL,10,'Subject for Pledge Acknowledgment','2020-10-23 03:12:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(299,NULL,9,'Subject for Tell a Friend','2020-09-26 20:30:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(300,NULL,9,'Subject for Tell a Friend','2020-11-30 21:16:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(301,NULL,9,'Subject for Tell a Friend','2020-10-17 07:32:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(302,NULL,9,'Subject for Tell a Friend','2020-07-17 09:58:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(303,NULL,10,'Subject for Pledge Acknowledgment','2020-05-20 00:44:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(304,NULL,10,'Subject for Pledge Acknowledgment','2020-12-19 13:26:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(305,NULL,10,'Subject for Pledge Acknowledgment','2020-02-29 15:11:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(306,NULL,9,'Subject for Tell a Friend','2020-08-07 14:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(307,NULL,9,'Subject for Tell a Friend','2021-01-11 21:44:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(308,NULL,10,'Subject for Pledge Acknowledgment','2020-06-08 20:58:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(309,NULL,10,'Subject for Pledge Acknowledgment','2020-08-20 22:02:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(310,NULL,10,'Subject for Pledge Acknowledgment','2020-05-11 08:39:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(311,NULL,10,'Subject for Pledge Acknowledgment','2020-11-21 06:17:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(312,NULL,9,'Subject for Tell a Friend','2020-10-01 07:54:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(313,NULL,9,'Subject for Tell a Friend','2020-07-05 19:34:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(314,NULL,10,'Subject for Pledge Acknowledgment','2020-01-20 05:26:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(315,NULL,9,'Subject for Tell a Friend','2020-06-14 21:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(316,NULL,9,'Subject for Tell a Friend','2020-12-07 07:01:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(317,NULL,9,'Subject for Tell a Friend','2020-11-26 19:34:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(318,NULL,10,'Subject for Pledge Acknowledgment','2020-09-14 11:57:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(319,NULL,9,'Subject for Tell a Friend','2020-06-05 09:19:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(320,NULL,9,'Subject for Tell a Friend','2020-11-06 19:26:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(321,NULL,9,'Subject for Tell a Friend','2020-03-14 05:08:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(322,NULL,10,'Subject for Pledge Acknowledgment','2020-02-19 10:37:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(323,NULL,9,'Subject for Tell a Friend','2020-08-19 18:07:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(324,NULL,10,'Subject for Pledge Acknowledgment','2020-12-11 02:00:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(325,NULL,9,'Subject for Tell a Friend','2020-12-05 10:51:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(326,NULL,9,'Subject for Tell a Friend','2020-09-17 19:05:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(327,NULL,10,'Subject for Pledge Acknowledgment','2020-05-20 08:16:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(328,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 12:19:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(329,NULL,10,'Subject for Pledge Acknowledgment','2020-07-14 23:02:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(330,NULL,9,'Subject for Tell a Friend','2020-05-25 08:44:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(331,NULL,9,'Subject for Tell a Friend','2020-12-14 22:13:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(332,NULL,9,'Subject for Tell a Friend','2020-02-05 06:57:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(333,NULL,9,'Subject for Tell a Friend','2020-08-18 20:40:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(334,NULL,9,'Subject for Tell a Friend','2020-06-15 10:09:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(335,NULL,10,'Subject for Pledge Acknowledgment','2020-08-28 13:31:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(336,NULL,10,'Subject for Pledge Acknowledgment','2020-10-06 17:00:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(337,NULL,9,'Subject for Tell a Friend','2020-09-24 13:02:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(338,NULL,10,'Subject for Pledge Acknowledgment','2020-07-12 05:22:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(339,NULL,9,'Subject for Tell a Friend','2020-02-27 01:38:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(340,NULL,10,'Subject for Pledge Acknowledgment','2020-10-11 22:54:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(341,NULL,9,'Subject for Tell a Friend','2020-08-31 22:56:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(342,NULL,9,'Subject for Tell a Friend','2020-05-15 17:19:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(343,NULL,9,'Subject for Tell a Friend','2020-11-22 08:36:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(344,NULL,9,'Subject for Tell a Friend','2020-02-09 11:39:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(345,NULL,9,'Subject for Tell a Friend','2020-01-13 13:57:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(346,NULL,9,'Subject for Tell a Friend','2020-08-31 22:36:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(347,NULL,9,'Subject for Tell a Friend','2021-01-05 00:49:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(348,NULL,10,'Subject for Pledge Acknowledgment','2020-07-05 04:39:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(349,NULL,10,'Subject for Pledge Acknowledgment','2020-11-17 01:14:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(350,NULL,9,'Subject for Tell a Friend','2020-12-19 22:09:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(351,NULL,10,'Subject for Pledge Acknowledgment','2020-06-19 23:32:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(352,NULL,10,'Subject for Pledge Acknowledgment','2020-11-30 23:55:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(353,NULL,10,'Subject for Pledge Acknowledgment','2020-09-05 16:39:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(354,NULL,10,'Subject for Pledge Acknowledgment','2020-07-01 19:54:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(355,NULL,10,'Subject for Pledge Acknowledgment','2020-05-06 10:16:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(356,NULL,9,'Subject for Tell a Friend','2020-01-20 03:24:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(357,NULL,10,'Subject for Pledge Acknowledgment','2020-11-10 20:58:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(358,NULL,10,'Subject for Pledge Acknowledgment','2020-02-12 05:47:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(359,NULL,9,'Subject for Tell a Friend','2020-05-13 20:37:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(360,NULL,9,'Subject for Tell a Friend','2020-03-30 22:25:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(361,NULL,9,'Subject for Tell a Friend','2020-07-05 19:50:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(362,NULL,9,'Subject for Tell a Friend','2020-05-26 19:28:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(363,NULL,10,'Subject for Pledge Acknowledgment','2020-05-16 13:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(364,NULL,9,'Subject for Tell a Friend','2020-08-21 11:37:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(365,NULL,10,'Subject for Pledge Acknowledgment','2020-02-17 08:04:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(366,NULL,9,'Subject for Tell a Friend','2020-03-06 06:33:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(367,NULL,10,'Subject for Pledge Acknowledgment','2020-11-30 17:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(368,NULL,9,'Subject for Tell a Friend','2020-03-22 16:51:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(369,NULL,9,'Subject for Tell a Friend','2020-10-06 02:38:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(370,NULL,10,'Subject for Pledge Acknowledgment','2020-10-17 14:54:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(371,NULL,10,'Subject for Pledge Acknowledgment','2020-10-10 23:58:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(372,NULL,10,'Subject for Pledge Acknowledgment','2020-05-08 02:27:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(373,NULL,9,'Subject for Tell a Friend','2020-06-23 00:14:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(374,NULL,9,'Subject for Tell a Friend','2020-02-20 13:03:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(375,NULL,10,'Subject for Pledge Acknowledgment','2020-06-29 20:21:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(376,NULL,9,'Subject for Tell a Friend','2020-07-15 18:32:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(377,NULL,9,'Subject for Tell a Friend','2020-10-20 04:22:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(378,NULL,9,'Subject for Tell a Friend','2020-04-19 00:10:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(379,NULL,9,'Subject for Tell a Friend','2020-07-11 12:41:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(380,NULL,9,'Subject for Tell a Friend','2020-06-20 02:43:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(381,NULL,9,'Subject for Tell a Friend','2020-03-16 10:14:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(382,NULL,9,'Subject for Tell a Friend','2020-08-26 06:40:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(383,NULL,10,'Subject for Pledge Acknowledgment','2020-10-05 16:13:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(384,NULL,9,'Subject for Tell a Friend','2020-06-20 01:56:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(385,NULL,10,'Subject for Pledge Acknowledgment','2020-12-11 11:37:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(386,NULL,10,'Subject for Pledge Acknowledgment','2020-08-21 01:53:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(387,NULL,9,'Subject for Tell a Friend','2020-01-27 10:36:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(388,NULL,9,'Subject for Tell a Friend','2020-02-15 00:41:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(389,NULL,10,'Subject for Pledge Acknowledgment','2020-10-27 18:44:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(390,NULL,10,'Subject for Pledge Acknowledgment','2020-08-14 08:20:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(391,NULL,9,'Subject for Tell a Friend','2020-03-07 04:39:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(392,NULL,10,'Subject for Pledge Acknowledgment','2020-12-22 22:02:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(393,NULL,10,'Subject for Pledge Acknowledgment','2020-11-16 22:27:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(394,NULL,9,'Subject for Tell a Friend','2020-12-01 19:38:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(395,NULL,10,'Subject for Pledge Acknowledgment','2020-01-31 05:15:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(396,NULL,10,'Subject for Pledge Acknowledgment','2020-06-17 21:48:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(397,NULL,10,'Subject for Pledge Acknowledgment','2020-10-15 06:33:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(398,NULL,9,'Subject for Tell a Friend','2020-05-03 08:28:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(399,NULL,10,'Subject for Pledge Acknowledgment','2020-07-29 11:19:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(400,NULL,9,'Subject for Tell a Friend','2020-05-26 00:36:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(401,NULL,9,'Subject for Tell a Friend','2020-02-17 16:30:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(402,NULL,9,'Subject for Tell a Friend','2020-02-20 04:07:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(403,NULL,9,'Subject for Tell a Friend','2020-04-28 07:38:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(404,NULL,10,'Subject for Pledge Acknowledgment','2020-05-14 07:58:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(405,NULL,9,'Subject for Tell a Friend','2020-12-29 20:16:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(406,NULL,9,'Subject for Tell a Friend','2020-05-31 02:01:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(407,NULL,10,'Subject for Pledge Acknowledgment','2020-09-18 16:51:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(408,NULL,9,'Subject for Tell a Friend','2020-12-24 17:32:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(409,NULL,9,'Subject for Tell a Friend','2020-02-29 21:37:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(410,NULL,9,'Subject for Tell a Friend','2020-03-10 16:23:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(411,NULL,9,'Subject for Tell a Friend','2020-07-31 04:16:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(412,NULL,9,'Subject for Tell a Friend','2020-10-03 04:33:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(413,NULL,9,'Subject for Tell a Friend','2020-06-27 21:53:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(414,NULL,9,'Subject for Tell a Friend','2020-09-21 23:51:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(415,NULL,9,'Subject for Tell a Friend','2020-10-05 01:14:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(416,NULL,9,'Subject for Tell a Friend','2020-04-10 08:47:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(417,NULL,9,'Subject for Tell a Friend','2020-12-31 18:00:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(418,NULL,10,'Subject for Pledge Acknowledgment','2020-09-06 19:54:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(419,NULL,9,'Subject for Tell a Friend','2020-06-14 01:09:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(420,NULL,9,'Subject for Tell a Friend','2020-03-11 13:08:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(421,NULL,9,'Subject for Tell a Friend','2020-11-14 01:31:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(422,NULL,9,'Subject for Tell a Friend','2020-12-02 20:08:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(423,NULL,9,'Subject for Tell a Friend','2020-02-25 01:18:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(424,NULL,9,'Subject for Tell a Friend','2020-02-24 14:59:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(425,NULL,10,'Subject for Pledge Acknowledgment','2020-12-28 08:39:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(426,NULL,10,'Subject for Pledge Acknowledgment','2021-01-03 23:27:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(427,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 01:48:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(428,NULL,10,'Subject for Pledge Acknowledgment','2020-04-26 10:26:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(429,NULL,10,'Subject for Pledge Acknowledgment','2020-03-22 01:14:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(430,NULL,10,'Subject for Pledge Acknowledgment','2020-05-15 05:41:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(431,NULL,9,'Subject for Tell a Friend','2020-08-26 07:04:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(432,NULL,10,'Subject for Pledge Acknowledgment','2020-08-06 11:40:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(433,NULL,9,'Subject for Tell a Friend','2020-04-25 13:50:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(434,NULL,9,'Subject for Tell a Friend','2020-02-06 13:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(435,NULL,9,'Subject for Tell a Friend','2020-03-03 06:21:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(436,NULL,9,'Subject for Tell a Friend','2020-09-09 15:55:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(437,NULL,9,'Subject for Tell a Friend','2020-03-12 03:19:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(438,NULL,10,'Subject for Pledge Acknowledgment','2020-11-04 19:09:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(439,NULL,10,'Subject for Pledge Acknowledgment','2020-04-28 22:37:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(440,NULL,9,'Subject for Tell a Friend','2020-10-20 02:33:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(441,NULL,10,'Subject for Pledge Acknowledgment','2020-05-23 16:03:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(442,NULL,9,'Subject for Tell a Friend','2020-09-28 09:55:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(443,NULL,9,'Subject for Tell a Friend','2020-11-22 06:16:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(444,NULL,9,'Subject for Tell a Friend','2020-12-20 15:27:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(445,NULL,9,'Subject for Tell a Friend','2020-04-05 16:35:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(446,NULL,9,'Subject for Tell a Friend','2020-01-17 23:37:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(447,NULL,9,'Subject for Tell a Friend','2020-12-20 15:11:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(448,NULL,10,'Subject for Pledge Acknowledgment','2020-12-26 22:17:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(449,NULL,10,'Subject for Pledge Acknowledgment','2020-04-25 15:59:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(450,NULL,9,'Subject for Tell a Friend','2020-02-29 11:49:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:50','2021-01-11 22:04:50'),(464,1,7,'General','2021-01-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(465,2,7,'Student','2021-01-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(466,3,7,'General','2021-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(467,4,7,'Student','2021-01-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(468,5,7,'Student','2020-01-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(469,6,7,'Student','2021-01-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(470,7,7,'General','2021-01-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(471,8,7,'Student','2021-01-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(472,9,7,'General','2021-01-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(473,10,7,'Student','2020-01-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(474,11,7,'Lifetime','2021-01-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(475,12,7,'Student','2021-01-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(476,13,7,'General','2020-12-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(477,14,7,'Student','2020-12-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(478,15,7,'General','2018-09-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(479,16,7,'Student','2020-12-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(480,17,7,'General','2020-12-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(481,18,7,'Student','2020-12-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(482,19,7,'General','2020-12-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(483,20,7,'Student','2019-12-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(484,21,7,'General','2020-12-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(485,22,7,'Lifetime','2020-12-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(486,23,7,'General','2020-12-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(487,24,7,'Student','2020-12-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(488,25,7,'Student','2019-12-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(489,26,7,'Student','2020-12-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(490,27,7,'General','2020-12-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(491,28,7,'Student','2020-12-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(492,29,7,'General','2020-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(493,30,7,'General','2018-05-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(506,26,6,'$ 100.00 - General Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(507,27,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(508,28,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(509,29,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(575,45,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(576,46,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(578,48,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(579,49,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(580,50,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(581,51,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(582,52,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(583,53,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(584,54,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(585,55,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(586,56,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(587,57,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(588,58,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(589,59,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(591,61,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(593,63,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(594,64,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(595,65,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(597,67,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(598,68,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(599,69,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(600,70,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(601,71,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(602,72,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(603,73,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(604,74,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(606,76,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(607,77,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(608,78,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(610,80,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(612,82,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(616,86,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(619,89,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(620,90,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(621,91,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(623,93,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'),(624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-01-12 09:04:51',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-01-11 22:04:51','2021-01-11 22:04:51'); +INSERT INTO `civicrm_activity` (`id`, `source_record_id`, `activity_type_id`, `subject`, `activity_date_time`, `duration`, `location`, `phone_id`, `phone_number`, `details`, `status_id`, `priority_id`, `parent_id`, `is_test`, `medium_id`, `is_auto`, `relationship_id`, `is_current_revision`, `original_id`, `result`, `is_deleted`, `campaign_id`, `engagement_level`, `weight`, `is_star`, `created_date`, `modified_date`) VALUES + (1,NULL,9,'Subject for Tell a Friend','2021-06-10 04:46:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (2,NULL,9,'Subject for Tell a Friend','2021-05-21 20:37:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (3,NULL,10,'Subject for Pledge Acknowledgment','2020-06-19 05:22:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (4,NULL,10,'Subject for Pledge Acknowledgment','2020-10-08 22:33:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (5,NULL,10,'Subject for Pledge Acknowledgment','2020-06-12 07:43:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (6,NULL,9,'Subject for Tell a Friend','2021-06-10 12:28:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (7,NULL,10,'Subject for Pledge Acknowledgment','2021-03-11 00:47:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (8,NULL,10,'Subject for Pledge Acknowledgment','2021-04-21 19:45:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (9,NULL,10,'Subject for Pledge Acknowledgment','2020-10-19 16:57:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (10,NULL,10,'Subject for Pledge Acknowledgment','2021-02-04 00:21:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (11,NULL,10,'Subject for Pledge Acknowledgment','2021-03-03 20:29:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (12,NULL,9,'Subject for Tell a Friend','2020-11-20 16:23:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (13,NULL,9,'Subject for Tell a Friend','2020-06-14 14:15:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (14,NULL,9,'Subject for Tell a Friend','2020-06-28 21:41:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (15,NULL,9,'Subject for Tell a Friend','2020-11-28 02:44:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (16,NULL,9,'Subject for Tell a Friend','2021-01-16 14:16:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (17,NULL,10,'Subject for Pledge Acknowledgment','2020-08-10 12:54:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (18,NULL,10,'Subject for Pledge Acknowledgment','2020-10-11 19:06:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (19,NULL,10,'Subject for Pledge Acknowledgment','2020-07-04 04:29:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (20,NULL,10,'Subject for Pledge Acknowledgment','2020-08-25 14:37:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (21,NULL,9,'Subject for Tell a Friend','2021-02-15 14:38:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (22,NULL,10,'Subject for Pledge Acknowledgment','2020-09-11 19:23:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (23,NULL,10,'Subject for Pledge Acknowledgment','2020-09-14 18:25:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (24,NULL,9,'Subject for Tell a Friend','2020-08-28 09:57:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (25,NULL,9,'Subject for Tell a Friend','2020-10-09 00:59:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (26,NULL,10,'Subject for Pledge Acknowledgment','2020-11-09 04:59:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (27,NULL,9,'Subject for Tell a Friend','2021-03-05 10:29:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (28,NULL,10,'Subject for Pledge Acknowledgment','2020-07-07 19:06:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (29,NULL,10,'Subject for Pledge Acknowledgment','2021-05-03 07:46:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (30,NULL,9,'Subject for Tell a Friend','2021-01-14 10:39:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (31,NULL,9,'Subject for Tell a Friend','2020-11-12 11:48:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (32,NULL,9,'Subject for Tell a Friend','2020-12-01 21:30:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (33,NULL,9,'Subject for Tell a Friend','2021-02-17 19:00:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (34,NULL,10,'Subject for Pledge Acknowledgment','2020-07-31 05:16:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (35,NULL,9,'Subject for Tell a Friend','2020-10-05 16:10:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (36,NULL,10,'Subject for Pledge Acknowledgment','2020-06-25 04:42:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (37,NULL,10,'Subject for Pledge Acknowledgment','2020-09-11 14:03:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (38,NULL,10,'Subject for Pledge Acknowledgment','2020-11-27 16:55:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (39,NULL,10,'Subject for Pledge Acknowledgment','2020-09-03 15:14:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (40,NULL,10,'Subject for Pledge Acknowledgment','2020-08-05 02:08:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (41,NULL,9,'Subject for Tell a Friend','2021-04-16 04:24:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (42,NULL,9,'Subject for Tell a Friend','2020-11-10 20:20:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (43,NULL,9,'Subject for Tell a Friend','2020-08-18 13:36:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (44,NULL,10,'Subject for Pledge Acknowledgment','2020-08-24 12:05:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (45,NULL,9,'Subject for Tell a Friend','2021-02-23 17:45:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (46,NULL,10,'Subject for Pledge Acknowledgment','2021-02-28 09:28:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (47,NULL,9,'Subject for Tell a Friend','2020-12-24 20:32:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (48,NULL,9,'Subject for Tell a Friend','2021-03-29 18:34:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (49,NULL,9,'Subject for Tell a Friend','2020-07-21 07:00:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (50,NULL,10,'Subject for Pledge Acknowledgment','2020-07-11 01:07:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (51,NULL,9,'Subject for Tell a Friend','2020-11-27 23:42:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (52,NULL,9,'Subject for Tell a Friend','2021-02-17 23:09:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (53,NULL,9,'Subject for Tell a Friend','2021-01-03 05:49:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (54,NULL,10,'Subject for Pledge Acknowledgment','2021-03-16 01:55:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (55,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 04:29:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (56,NULL,9,'Subject for Tell a Friend','2020-08-01 02:21:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (57,NULL,9,'Subject for Tell a Friend','2021-03-28 07:36:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (58,NULL,9,'Subject for Tell a Friend','2020-07-14 18:38:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (59,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 01:00:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (60,NULL,9,'Subject for Tell a Friend','2020-09-28 03:55:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (61,NULL,10,'Subject for Pledge Acknowledgment','2020-09-05 16:13:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (62,NULL,10,'Subject for Pledge Acknowledgment','2021-01-07 01:57:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (63,NULL,10,'Subject for Pledge Acknowledgment','2020-10-16 13:51:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (64,NULL,9,'Subject for Tell a Friend','2021-01-28 00:32:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (65,NULL,10,'Subject for Pledge Acknowledgment','2021-06-10 07:25:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (66,NULL,9,'Subject for Tell a Friend','2021-06-03 07:18:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (67,NULL,10,'Subject for Pledge Acknowledgment','2020-08-05 05:37:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (68,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 07:58:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (69,NULL,9,'Subject for Tell a Friend','2020-09-25 19:38:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (70,NULL,10,'Subject for Pledge Acknowledgment','2020-12-14 06:26:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (71,NULL,10,'Subject for Pledge Acknowledgment','2021-01-08 07:30:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (72,NULL,9,'Subject for Tell a Friend','2020-12-15 13:53:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (73,NULL,9,'Subject for Tell a Friend','2021-01-13 05:50:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (74,NULL,9,'Subject for Tell a Friend','2021-02-27 15:02:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (75,NULL,10,'Subject for Pledge Acknowledgment','2020-07-31 00:41:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (76,NULL,9,'Subject for Tell a Friend','2020-07-31 21:44:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:10','2021-06-11 00:47:10'), + (77,NULL,9,'Subject for Tell a Friend','2020-11-11 04:20:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (78,NULL,10,'Subject for Pledge Acknowledgment','2021-02-07 23:50:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (79,NULL,9,'Subject for Tell a Friend','2020-06-28 22:18:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (80,NULL,9,'Subject for Tell a Friend','2021-03-08 03:36:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (81,NULL,10,'Subject for Pledge Acknowledgment','2020-10-16 21:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (82,NULL,9,'Subject for Tell a Friend','2021-05-14 23:33:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (83,NULL,9,'Subject for Tell a Friend','2021-04-19 06:46:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (84,NULL,9,'Subject for Tell a Friend','2021-03-09 03:49:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (85,NULL,9,'Subject for Tell a Friend','2021-02-22 11:57:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (86,NULL,10,'Subject for Pledge Acknowledgment','2021-03-09 23:59:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (87,NULL,9,'Subject for Tell a Friend','2020-08-15 11:07:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (88,NULL,10,'Subject for Pledge Acknowledgment','2021-01-12 20:45:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (89,NULL,9,'Subject for Tell a Friend','2021-01-15 11:34:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (90,NULL,9,'Subject for Tell a Friend','2021-05-12 16:23:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (91,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 13:59:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (92,NULL,9,'Subject for Tell a Friend','2020-12-13 06:59:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (93,NULL,10,'Subject for Pledge Acknowledgment','2020-08-21 16:29:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (94,NULL,9,'Subject for Tell a Friend','2021-05-08 02:39:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (95,NULL,10,'Subject for Pledge Acknowledgment','2020-10-16 08:51:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (96,NULL,9,'Subject for Tell a Friend','2020-08-02 22:08:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (97,NULL,9,'Subject for Tell a Friend','2021-02-06 15:06:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (98,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 17:07:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (99,NULL,9,'Subject for Tell a Friend','2020-09-25 06:12:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (100,NULL,9,'Subject for Tell a Friend','2021-01-21 17:36:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (101,NULL,9,'Subject for Tell a Friend','2020-09-25 17:48:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (102,NULL,10,'Subject for Pledge Acknowledgment','2020-07-13 13:08:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (103,NULL,9,'Subject for Tell a Friend','2020-10-10 16:08:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (104,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 11:31:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (105,NULL,9,'Subject for Tell a Friend','2020-12-05 16:45:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (106,NULL,9,'Subject for Tell a Friend','2021-01-07 18:15:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (107,NULL,10,'Subject for Pledge Acknowledgment','2020-07-11 20:00:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (108,NULL,9,'Subject for Tell a Friend','2020-08-23 21:19:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (109,NULL,10,'Subject for Pledge Acknowledgment','2021-02-27 15:17:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (110,NULL,9,'Subject for Tell a Friend','2020-11-07 14:26:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (111,NULL,10,'Subject for Pledge Acknowledgment','2020-12-27 11:38:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (112,NULL,9,'Subject for Tell a Friend','2021-03-21 05:47:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (113,NULL,10,'Subject for Pledge Acknowledgment','2020-06-26 01:14:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (114,NULL,10,'Subject for Pledge Acknowledgment','2021-05-30 05:29:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (115,NULL,9,'Subject for Tell a Friend','2021-01-31 23:44:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (116,NULL,10,'Subject for Pledge Acknowledgment','2020-09-22 12:09:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (117,NULL,9,'Subject for Tell a Friend','2020-07-25 06:17:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (118,NULL,9,'Subject for Tell a Friend','2020-11-25 03:23:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (119,NULL,9,'Subject for Tell a Friend','2021-05-18 13:56:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (120,NULL,9,'Subject for Tell a Friend','2020-11-08 04:56:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (121,NULL,10,'Subject for Pledge Acknowledgment','2020-10-22 05:29:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (122,NULL,9,'Subject for Tell a Friend','2020-08-19 20:43:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (123,NULL,10,'Subject for Pledge Acknowledgment','2021-01-26 23:09:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (124,NULL,9,'Subject for Tell a Friend','2021-04-04 12:02:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (125,NULL,9,'Subject for Tell a Friend','2021-03-03 17:14:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (126,NULL,10,'Subject for Pledge Acknowledgment','2021-06-06 18:13:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (127,NULL,9,'Subject for Tell a Friend','2020-07-09 04:33:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (128,NULL,10,'Subject for Pledge Acknowledgment','2020-12-16 22:13:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (129,NULL,9,'Subject for Tell a Friend','2020-11-03 07:40:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (130,NULL,9,'Subject for Tell a Friend','2021-03-06 13:20:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (131,NULL,9,'Subject for Tell a Friend','2020-08-16 23:01:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (132,NULL,10,'Subject for Pledge Acknowledgment','2020-09-21 08:08:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (133,NULL,10,'Subject for Pledge Acknowledgment','2021-02-25 17:16:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (134,NULL,9,'Subject for Tell a Friend','2020-07-21 05:52:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (135,NULL,10,'Subject for Pledge Acknowledgment','2021-05-01 03:16:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (136,NULL,9,'Subject for Tell a Friend','2020-09-10 09:50:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (137,NULL,10,'Subject for Pledge Acknowledgment','2021-05-28 16:45:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (138,NULL,10,'Subject for Pledge Acknowledgment','2020-09-30 13:26:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (139,NULL,9,'Subject for Tell a Friend','2020-09-16 23:58:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (140,NULL,10,'Subject for Pledge Acknowledgment','2020-07-24 18:55:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (141,NULL,10,'Subject for Pledge Acknowledgment','2021-04-25 00:10:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (142,NULL,9,'Subject for Tell a Friend','2020-08-19 13:03:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (143,NULL,9,'Subject for Tell a Friend','2020-12-15 08:04:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (144,NULL,9,'Subject for Tell a Friend','2020-06-30 15:40:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (145,NULL,9,'Subject for Tell a Friend','2021-04-20 02:33:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (146,NULL,9,'Subject for Tell a Friend','2020-07-27 21:12:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (147,NULL,10,'Subject for Pledge Acknowledgment','2020-11-17 22:19:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (148,NULL,10,'Subject for Pledge Acknowledgment','2020-09-09 19:07:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (149,NULL,9,'Subject for Tell a Friend','2020-07-21 01:41:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (150,NULL,10,'Subject for Pledge Acknowledgment','2020-10-10 08:30:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (151,NULL,9,'Subject for Tell a Friend','2020-11-25 21:36:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (152,NULL,10,'Subject for Pledge Acknowledgment','2020-08-08 00:01:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (153,NULL,9,'Subject for Tell a Friend','2020-11-03 13:35:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (154,NULL,9,'Subject for Tell a Friend','2020-06-29 22:12:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (155,NULL,9,'Subject for Tell a Friend','2021-01-02 18:45:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (156,NULL,10,'Subject for Pledge Acknowledgment','2020-10-15 04:00:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (157,NULL,9,'Subject for Tell a Friend','2020-07-30 16:12:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (158,NULL,10,'Subject for Pledge Acknowledgment','2021-01-15 19:25:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (159,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 17:49:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (160,NULL,10,'Subject for Pledge Acknowledgment','2020-08-10 23:34:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (161,NULL,9,'Subject for Tell a Friend','2021-05-23 17:24:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (162,NULL,9,'Subject for Tell a Friend','2020-07-03 01:45:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (163,NULL,10,'Subject for Pledge Acknowledgment','2021-03-26 09:18:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (164,NULL,9,'Subject for Tell a Friend','2020-06-24 11:47:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (165,NULL,9,'Subject for Tell a Friend','2021-05-04 15:02:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (166,NULL,9,'Subject for Tell a Friend','2020-09-22 11:55:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (167,NULL,9,'Subject for Tell a Friend','2020-09-17 19:43:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (168,NULL,9,'Subject for Tell a Friend','2020-11-23 12:20:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (169,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 03:27:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (170,NULL,10,'Subject for Pledge Acknowledgment','2020-08-22 01:20:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (171,NULL,9,'Subject for Tell a Friend','2020-10-14 05:22:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (172,NULL,10,'Subject for Pledge Acknowledgment','2021-05-31 01:18:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (173,NULL,10,'Subject for Pledge Acknowledgment','2020-07-18 21:58:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (174,NULL,10,'Subject for Pledge Acknowledgment','2020-07-16 19:46:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (175,NULL,9,'Subject for Tell a Friend','2020-10-13 01:33:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (176,NULL,9,'Subject for Tell a Friend','2020-07-31 16:50:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (177,NULL,9,'Subject for Tell a Friend','2020-11-11 19:15:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (178,NULL,10,'Subject for Pledge Acknowledgment','2020-08-10 19:40:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (179,NULL,9,'Subject for Tell a Friend','2020-10-22 14:08:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (180,NULL,9,'Subject for Tell a Friend','2021-05-21 09:21:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (181,NULL,10,'Subject for Pledge Acknowledgment','2021-05-30 11:53:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (182,NULL,9,'Subject for Tell a Friend','2020-10-07 09:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (183,NULL,10,'Subject for Pledge Acknowledgment','2021-01-20 11:58:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (184,NULL,9,'Subject for Tell a Friend','2020-10-13 20:41:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (185,NULL,10,'Subject for Pledge Acknowledgment','2020-07-09 19:04:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (186,NULL,9,'Subject for Tell a Friend','2020-11-21 04:50:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (187,NULL,10,'Subject for Pledge Acknowledgment','2020-06-15 06:07:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (188,NULL,10,'Subject for Pledge Acknowledgment','2021-03-26 02:55:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (189,NULL,9,'Subject for Tell a Friend','2020-11-08 14:52:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (190,NULL,10,'Subject for Pledge Acknowledgment','2021-02-16 20:28:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (191,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 03:31:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (192,NULL,10,'Subject for Pledge Acknowledgment','2020-12-27 10:24:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (193,NULL,10,'Subject for Pledge Acknowledgment','2020-10-25 11:43:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (194,NULL,9,'Subject for Tell a Friend','2021-01-29 13:32:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (195,NULL,10,'Subject for Pledge Acknowledgment','2021-02-21 01:52:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (196,NULL,10,'Subject for Pledge Acknowledgment','2020-12-26 21:08:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (197,NULL,10,'Subject for Pledge Acknowledgment','2020-07-04 09:18:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (198,NULL,9,'Subject for Tell a Friend','2021-04-01 15:08:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (199,NULL,9,'Subject for Tell a Friend','2020-12-28 14:49:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (200,NULL,9,'Subject for Tell a Friend','2021-02-20 08:21:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (201,NULL,10,'Subject for Pledge Acknowledgment','2020-07-05 20:00:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (202,NULL,10,'Subject for Pledge Acknowledgment','2021-02-27 10:52:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (203,NULL,10,'Subject for Pledge Acknowledgment','2020-10-05 21:00:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (204,NULL,9,'Subject for Tell a Friend','2020-07-17 22:23:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (205,NULL,10,'Subject for Pledge Acknowledgment','2020-07-03 23:06:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (206,NULL,10,'Subject for Pledge Acknowledgment','2021-05-17 17:44:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (207,NULL,10,'Subject for Pledge Acknowledgment','2021-02-15 08:22:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (208,NULL,9,'Subject for Tell a Friend','2020-11-21 04:51:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (209,NULL,9,'Subject for Tell a Friend','2020-11-15 12:10:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (210,NULL,9,'Subject for Tell a Friend','2021-01-26 23:34:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (211,NULL,10,'Subject for Pledge Acknowledgment','2021-04-29 04:20:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (212,NULL,10,'Subject for Pledge Acknowledgment','2020-11-21 22:50:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (213,NULL,9,'Subject for Tell a Friend','2020-09-25 21:46:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (214,NULL,10,'Subject for Pledge Acknowledgment','2020-08-01 03:32:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (215,NULL,9,'Subject for Tell a Friend','2021-04-12 23:47:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (216,NULL,10,'Subject for Pledge Acknowledgment','2020-10-09 16:34:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (217,NULL,9,'Subject for Tell a Friend','2021-01-23 19:35:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (218,NULL,9,'Subject for Tell a Friend','2020-11-06 11:23:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (219,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 21:46:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (220,NULL,9,'Subject for Tell a Friend','2021-03-04 13:29:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (221,NULL,9,'Subject for Tell a Friend','2020-06-29 22:37:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (222,NULL,9,'Subject for Tell a Friend','2021-04-23 19:23:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (223,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 10:16:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (224,NULL,10,'Subject for Pledge Acknowledgment','2020-10-17 16:39:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (225,NULL,9,'Subject for Tell a Friend','2020-07-28 18:53:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (226,NULL,9,'Subject for Tell a Friend','2020-11-29 03:53:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (227,NULL,9,'Subject for Tell a Friend','2021-01-25 21:57:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (228,NULL,9,'Subject for Tell a Friend','2020-08-22 03:21:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (229,NULL,9,'Subject for Tell a Friend','2021-01-14 20:09:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (230,NULL,9,'Subject for Tell a Friend','2020-09-21 05:08:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (231,NULL,10,'Subject for Pledge Acknowledgment','2021-03-04 17:19:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (232,NULL,10,'Subject for Pledge Acknowledgment','2020-09-22 04:53:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (233,NULL,9,'Subject for Tell a Friend','2020-11-16 22:02:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (234,NULL,10,'Subject for Pledge Acknowledgment','2021-03-01 03:20:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (235,NULL,9,'Subject for Tell a Friend','2021-04-04 23:44:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (236,NULL,9,'Subject for Tell a Friend','2020-08-16 16:44:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (237,NULL,10,'Subject for Pledge Acknowledgment','2021-01-11 22:51:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (238,NULL,10,'Subject for Pledge Acknowledgment','2020-12-27 19:57:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (239,NULL,9,'Subject for Tell a Friend','2020-12-07 07:34:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (240,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 07:01:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (241,NULL,9,'Subject for Tell a Friend','2021-05-27 20:09:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (242,NULL,10,'Subject for Pledge Acknowledgment','2021-01-04 14:12:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (243,NULL,10,'Subject for Pledge Acknowledgment','2021-04-23 01:54:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (244,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 16:25:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (245,NULL,10,'Subject for Pledge Acknowledgment','2020-08-12 15:26:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (246,NULL,10,'Subject for Pledge Acknowledgment','2020-08-13 11:50:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (247,NULL,10,'Subject for Pledge Acknowledgment','2021-05-01 06:05:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (248,NULL,10,'Subject for Pledge Acknowledgment','2020-07-03 06:49:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (249,NULL,9,'Subject for Tell a Friend','2020-08-02 00:28:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (250,NULL,10,'Subject for Pledge Acknowledgment','2021-05-31 06:01:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (251,NULL,9,'Subject for Tell a Friend','2020-07-06 08:42:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (252,NULL,10,'Subject for Pledge Acknowledgment','2021-04-11 13:50:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (253,NULL,10,'Subject for Pledge Acknowledgment','2021-01-14 08:14:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (254,NULL,10,'Subject for Pledge Acknowledgment','2020-09-17 03:43:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (255,NULL,9,'Subject for Tell a Friend','2020-12-29 16:01:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (256,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 12:03:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (257,NULL,10,'Subject for Pledge Acknowledgment','2020-09-13 01:11:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (258,NULL,10,'Subject for Pledge Acknowledgment','2021-04-03 15:16:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (259,NULL,9,'Subject for Tell a Friend','2021-06-09 09:12:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (260,NULL,10,'Subject for Pledge Acknowledgment','2020-11-08 16:28:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (261,NULL,10,'Subject for Pledge Acknowledgment','2021-05-17 08:17:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (262,NULL,9,'Subject for Tell a Friend','2020-10-06 22:10:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (263,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 08:12:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (264,NULL,10,'Subject for Pledge Acknowledgment','2021-05-14 17:32:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (265,NULL,9,'Subject for Tell a Friend','2020-12-09 11:02:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (266,NULL,10,'Subject for Pledge Acknowledgment','2021-05-31 11:07:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (267,NULL,9,'Subject for Tell a Friend','2020-10-23 01:09:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (268,NULL,9,'Subject for Tell a Friend','2021-04-28 09:14:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (269,NULL,9,'Subject for Tell a Friend','2020-09-29 17:25:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (270,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 08:57:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (271,NULL,9,'Subject for Tell a Friend','2020-10-08 18:14:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (272,NULL,9,'Subject for Tell a Friend','2020-07-28 15:45:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (273,NULL,10,'Subject for Pledge Acknowledgment','2020-12-30 05:00:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (274,NULL,9,'Subject for Tell a Friend','2020-12-23 17:45:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (275,NULL,10,'Subject for Pledge Acknowledgment','2020-12-16 08:11:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (276,NULL,9,'Subject for Tell a Friend','2020-07-27 01:21:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (277,NULL,9,'Subject for Tell a Friend','2020-09-15 11:05:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (278,NULL,9,'Subject for Tell a Friend','2021-05-30 19:01:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (279,NULL,9,'Subject for Tell a Friend','2021-01-30 01:21:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (280,NULL,9,'Subject for Tell a Friend','2020-10-19 00:04:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (281,NULL,10,'Subject for Pledge Acknowledgment','2021-01-17 05:03:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (282,NULL,10,'Subject for Pledge Acknowledgment','2020-08-23 21:10:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (283,NULL,10,'Subject for Pledge Acknowledgment','2020-06-28 22:22:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (284,NULL,10,'Subject for Pledge Acknowledgment','2021-02-15 02:59:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (285,NULL,9,'Subject for Tell a Friend','2020-07-31 14:37:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (286,NULL,9,'Subject for Tell a Friend','2020-07-10 02:16:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (287,NULL,9,'Subject for Tell a Friend','2021-04-05 02:26:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (288,NULL,9,'Subject for Tell a Friend','2020-08-17 09:10:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (289,NULL,9,'Subject for Tell a Friend','2021-01-09 08:36:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (290,NULL,9,'Subject for Tell a Friend','2020-11-23 08:01:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (291,NULL,10,'Subject for Pledge Acknowledgment','2021-03-02 17:05:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (292,NULL,9,'Subject for Tell a Friend','2021-04-07 08:01:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (293,NULL,9,'Subject for Tell a Friend','2021-04-23 20:14:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (294,NULL,9,'Subject for Tell a Friend','2020-07-23 15:55:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (295,NULL,9,'Subject for Tell a Friend','2021-03-03 12:10:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (296,NULL,9,'Subject for Tell a Friend','2020-10-27 16:15:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (297,NULL,9,'Subject for Tell a Friend','2020-11-15 23:39:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (298,NULL,10,'Subject for Pledge Acknowledgment','2021-02-24 01:16:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (299,NULL,10,'Subject for Pledge Acknowledgment','2020-07-13 22:58:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (300,NULL,10,'Subject for Pledge Acknowledgment','2020-12-15 22:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (301,NULL,10,'Subject for Pledge Acknowledgment','2020-12-10 05:10:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (302,NULL,10,'Subject for Pledge Acknowledgment','2020-10-18 08:07:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (303,NULL,9,'Subject for Tell a Friend','2020-10-07 19:00:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (304,NULL,10,'Subject for Pledge Acknowledgment','2020-07-07 08:02:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (305,NULL,10,'Subject for Pledge Acknowledgment','2020-08-08 03:11:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (306,NULL,10,'Subject for Pledge Acknowledgment','2020-08-08 01:20:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (307,NULL,9,'Subject for Tell a Friend','2020-06-26 03:42:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (308,NULL,10,'Subject for Pledge Acknowledgment','2020-06-16 22:14:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (309,NULL,10,'Subject for Pledge Acknowledgment','2021-04-17 17:59:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (310,NULL,9,'Subject for Tell a Friend','2020-07-18 08:39:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (311,NULL,10,'Subject for Pledge Acknowledgment','2021-05-31 08:03:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (312,NULL,9,'Subject for Tell a Friend','2020-09-09 22:57:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (313,NULL,10,'Subject for Pledge Acknowledgment','2021-03-22 07:57:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (314,NULL,10,'Subject for Pledge Acknowledgment','2020-10-02 00:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (315,NULL,9,'Subject for Tell a Friend','2020-08-14 11:33:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (316,NULL,9,'Subject for Tell a Friend','2021-01-10 09:21:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (317,NULL,9,'Subject for Tell a Friend','2020-10-11 04:29:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (318,NULL,10,'Subject for Pledge Acknowledgment','2021-03-28 04:30:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (319,NULL,10,'Subject for Pledge Acknowledgment','2020-06-25 22:24:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (320,NULL,10,'Subject for Pledge Acknowledgment','2021-04-01 18:29:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (321,NULL,10,'Subject for Pledge Acknowledgment','2021-03-03 14:49:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (322,NULL,10,'Subject for Pledge Acknowledgment','2020-07-04 00:51:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (323,NULL,10,'Subject for Pledge Acknowledgment','2020-08-30 05:22:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (324,NULL,9,'Subject for Tell a Friend','2021-01-24 14:39:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (325,NULL,10,'Subject for Pledge Acknowledgment','2020-07-13 17:32:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (326,NULL,9,'Subject for Tell a Friend','2020-07-08 15:53:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (327,NULL,9,'Subject for Tell a Friend','2020-11-08 15:44:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (328,NULL,9,'Subject for Tell a Friend','2020-10-26 08:40:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (329,NULL,9,'Subject for Tell a Friend','2020-06-14 09:15:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (330,NULL,9,'Subject for Tell a Friend','2021-05-24 22:58:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (331,NULL,9,'Subject for Tell a Friend','2021-01-14 02:39:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (332,NULL,10,'Subject for Pledge Acknowledgment','2020-10-10 07:10:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (333,NULL,9,'Subject for Tell a Friend','2021-03-28 01:49:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (334,NULL,10,'Subject for Pledge Acknowledgment','2020-09-26 15:34:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (335,NULL,9,'Subject for Tell a Friend','2020-07-28 14:47:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (336,NULL,9,'Subject for Tell a Friend','2021-05-20 19:11:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (337,NULL,9,'Subject for Tell a Friend','2020-08-27 11:06:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (338,NULL,10,'Subject for Pledge Acknowledgment','2021-05-16 21:08:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (339,NULL,9,'Subject for Tell a Friend','2020-12-24 10:54:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (340,NULL,10,'Subject for Pledge Acknowledgment','2020-06-23 23:28:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (341,NULL,10,'Subject for Pledge Acknowledgment','2021-03-30 20:59:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (342,NULL,10,'Subject for Pledge Acknowledgment','2020-10-06 22:25:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (343,NULL,9,'Subject for Tell a Friend','2020-06-19 11:24:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (344,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 06:59:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (345,NULL,9,'Subject for Tell a Friend','2020-11-23 17:37:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (346,NULL,9,'Subject for Tell a Friend','2021-02-28 10:15:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (347,NULL,10,'Subject for Pledge Acknowledgment','2020-07-02 17:14:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (348,NULL,10,'Subject for Pledge Acknowledgment','2021-01-18 20:00:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (349,NULL,9,'Subject for Tell a Friend','2020-07-27 08:27:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (350,NULL,9,'Subject for Tell a Friend','2021-02-01 05:08:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (351,NULL,10,'Subject for Pledge Acknowledgment','2020-09-16 12:36:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (352,NULL,9,'Subject for Tell a Friend','2021-03-12 00:19:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (353,NULL,9,'Subject for Tell a Friend','2020-12-16 17:54:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (354,NULL,9,'Subject for Tell a Friend','2021-01-22 13:03:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (355,NULL,10,'Subject for Pledge Acknowledgment','2021-03-10 01:28:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (356,NULL,9,'Subject for Tell a Friend','2020-08-24 20:47:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (357,NULL,10,'Subject for Pledge Acknowledgment','2020-12-28 11:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (358,NULL,9,'Subject for Tell a Friend','2020-09-13 07:35:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (359,NULL,9,'Subject for Tell a Friend','2020-10-11 20:46:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (360,NULL,9,'Subject for Tell a Friend','2020-12-15 23:29:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (361,NULL,9,'Subject for Tell a Friend','2020-07-09 16:47:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (362,NULL,9,'Subject for Tell a Friend','2021-03-21 20:20:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (363,NULL,10,'Subject for Pledge Acknowledgment','2021-05-12 12:47:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (364,NULL,10,'Subject for Pledge Acknowledgment','2021-04-22 00:59:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (365,NULL,9,'Subject for Tell a Friend','2021-04-15 00:19:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (366,NULL,10,'Subject for Pledge Acknowledgment','2020-07-05 09:03:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (367,NULL,9,'Subject for Tell a Friend','2020-08-01 01:16:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (368,NULL,10,'Subject for Pledge Acknowledgment','2021-05-05 17:58:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (369,NULL,10,'Subject for Pledge Acknowledgment','2020-09-10 09:07:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (370,NULL,10,'Subject for Pledge Acknowledgment','2020-10-19 07:59:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (371,NULL,10,'Subject for Pledge Acknowledgment','2021-04-23 23:00:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (372,NULL,10,'Subject for Pledge Acknowledgment','2020-10-07 15:57:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (373,NULL,10,'Subject for Pledge Acknowledgment','2020-11-12 15:52:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (374,NULL,10,'Subject for Pledge Acknowledgment','2020-08-03 14:27:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (375,NULL,10,'Subject for Pledge Acknowledgment','2020-09-11 14:50:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (376,NULL,9,'Subject for Tell a Friend','2021-04-02 00:36:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (377,NULL,9,'Subject for Tell a Friend','2020-09-17 13:10:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (378,NULL,9,'Subject for Tell a Friend','2021-05-28 08:09:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (379,NULL,9,'Subject for Tell a Friend','2021-04-03 22:05:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (380,NULL,9,'Subject for Tell a Friend','2021-04-06 02:16:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (381,NULL,10,'Subject for Pledge Acknowledgment','2021-02-10 11:27:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (382,NULL,10,'Subject for Pledge Acknowledgment','2021-01-29 13:40:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (383,NULL,10,'Subject for Pledge Acknowledgment','2021-04-04 08:40:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (384,NULL,10,'Subject for Pledge Acknowledgment','2021-02-08 21:59:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (385,NULL,10,'Subject for Pledge Acknowledgment','2021-03-22 04:51:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (386,NULL,10,'Subject for Pledge Acknowledgment','2020-09-11 06:46:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (387,NULL,9,'Subject for Tell a Friend','2021-05-27 18:56:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (388,NULL,9,'Subject for Tell a Friend','2020-09-26 10:46:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (389,NULL,9,'Subject for Tell a Friend','2020-09-10 09:52:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (390,NULL,9,'Subject for Tell a Friend','2020-09-17 13:34:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (391,NULL,9,'Subject for Tell a Friend','2021-04-13 05:32:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (392,NULL,9,'Subject for Tell a Friend','2020-10-21 17:14:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (393,NULL,10,'Subject for Pledge Acknowledgment','2020-12-28 08:23:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (394,NULL,10,'Subject for Pledge Acknowledgment','2021-05-05 22:26:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (395,NULL,10,'Subject for Pledge Acknowledgment','2020-10-11 22:11:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (396,NULL,9,'Subject for Tell a Friend','2020-06-27 10:36:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (397,NULL,10,'Subject for Pledge Acknowledgment','2020-07-18 13:49:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (398,NULL,9,'Subject for Tell a Friend','2020-09-01 15:34:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (399,NULL,10,'Subject for Pledge Acknowledgment','2020-06-15 12:42:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (400,NULL,10,'Subject for Pledge Acknowledgment','2020-08-01 11:21:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (401,NULL,9,'Subject for Tell a Friend','2021-04-23 16:47:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (402,NULL,9,'Subject for Tell a Friend','2020-10-25 04:32:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (403,NULL,9,'Subject for Tell a Friend','2020-08-14 10:09:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (404,NULL,9,'Subject for Tell a Friend','2020-08-01 15:58:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (405,NULL,10,'Subject for Pledge Acknowledgment','2020-09-13 19:01:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (406,NULL,9,'Subject for Tell a Friend','2021-04-23 08:24:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (407,NULL,9,'Subject for Tell a Friend','2021-04-26 04:02:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (408,NULL,9,'Subject for Tell a Friend','2020-12-02 23:59:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (409,NULL,10,'Subject for Pledge Acknowledgment','2021-06-03 18:27:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (410,NULL,10,'Subject for Pledge Acknowledgment','2020-06-20 22:18:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (411,NULL,10,'Subject for Pledge Acknowledgment','2021-05-08 03:05:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (412,NULL,10,'Subject for Pledge Acknowledgment','2021-03-29 02:34:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (413,NULL,9,'Subject for Tell a Friend','2020-10-27 01:36:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (414,NULL,10,'Subject for Pledge Acknowledgment','2020-10-05 22:10:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (415,NULL,10,'Subject for Pledge Acknowledgment','2020-07-21 13:48:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (416,NULL,9,'Subject for Tell a Friend','2020-11-27 15:37:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (417,NULL,9,'Subject for Tell a Friend','2021-05-08 09:36:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (418,NULL,10,'Subject for Pledge Acknowledgment','2020-09-07 12:20:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (419,NULL,10,'Subject for Pledge Acknowledgment','2020-12-31 02:40:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (420,NULL,10,'Subject for Pledge Acknowledgment','2020-10-07 16:58:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (421,NULL,9,'Subject for Tell a Friend','2020-12-02 14:15:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (422,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 15:38:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (423,NULL,10,'Subject for Pledge Acknowledgment','2020-12-03 21:11:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (424,NULL,9,'Subject for Tell a Friend','2020-07-05 00:17:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (425,NULL,9,'Subject for Tell a Friend','2020-11-07 23:28:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (426,NULL,10,'Subject for Pledge Acknowledgment','2021-03-04 01:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (427,NULL,9,'Subject for Tell a Friend','2021-04-20 19:41:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (428,NULL,10,'Subject for Pledge Acknowledgment','2020-11-03 03:32:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (429,NULL,10,'Subject for Pledge Acknowledgment','2021-02-25 04:28:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (430,NULL,10,'Subject for Pledge Acknowledgment','2021-02-27 18:57:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (431,NULL,10,'Subject for Pledge Acknowledgment','2020-12-30 20:00:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (432,NULL,10,'Subject for Pledge Acknowledgment','2020-07-25 20:31:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (433,NULL,9,'Subject for Tell a Friend','2020-07-23 22:55:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (434,NULL,10,'Subject for Pledge Acknowledgment','2020-09-15 17:14:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (435,NULL,10,'Subject for Pledge Acknowledgment','2021-04-24 06:51:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (436,NULL,9,'Subject for Tell a Friend','2021-02-25 23:10:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (437,NULL,10,'Subject for Pledge Acknowledgment','2020-09-04 17:08:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (438,NULL,10,'Subject for Pledge Acknowledgment','2020-11-24 12:07:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (439,NULL,10,'Subject for Pledge Acknowledgment','2020-11-04 06:24:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (440,NULL,10,'Subject for Pledge Acknowledgment','2020-06-25 04:05:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (441,NULL,9,'Subject for Tell a Friend','2021-04-03 07:40:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (442,NULL,9,'Subject for Tell a Friend','2020-10-14 14:36:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (443,NULL,9,'Subject for Tell a Friend','2021-03-29 15:22:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (444,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 04:05:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (445,NULL,9,'Subject for Tell a Friend','2020-07-27 10:51:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (446,NULL,10,'Subject for Pledge Acknowledgment','2021-05-19 07:55:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (447,NULL,10,'Subject for Pledge Acknowledgment','2020-09-22 16:37:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (448,NULL,9,'Subject for Tell a Friend','2020-12-21 20:34:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (449,NULL,10,'Subject for Pledge Acknowledgment','2021-04-05 07:25:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (450,NULL,10,'Subject for Pledge Acknowledgment','2021-06-07 23:01:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (464,1,7,'General','2021-06-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (465,2,7,'Student','2021-06-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (466,3,7,'General','2021-06-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (467,4,7,'Student','2021-06-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (468,5,7,'Student','2020-06-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (469,6,7,'Student','2021-06-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (470,7,7,'General','2021-06-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (471,8,7,'Student','2021-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (472,9,7,'General','2021-06-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (473,10,7,'General','2019-03-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (474,11,7,'Lifetime','2021-06-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (475,12,7,'Student','2021-05-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (476,13,7,'General','2021-05-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (477,14,7,'Student','2021-05-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (478,15,7,'Student','2020-05-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (479,16,7,'Student','2021-05-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (480,17,7,'General','2021-05-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (481,18,7,'Student','2021-05-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (482,19,7,'General','2021-05-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (483,20,7,'Student','2020-05-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (484,21,7,'General','2021-05-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (485,22,7,'Lifetime','2021-05-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (486,23,7,'General','2021-05-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (487,24,7,'Student','2021-05-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (488,25,7,'General','2018-12-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (489,26,7,'Student','2021-05-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (490,27,7,'General','2021-05-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (491,28,7,'Student','2021-05-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (492,29,7,'General','2021-05-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (493,30,7,'Student','2020-05-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (494,14,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (495,15,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (496,16,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (497,17,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (498,18,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (499,19,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (500,20,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (501,21,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (502,22,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (503,23,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (504,24,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (505,25,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (506,26,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (507,27,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (508,28,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (509,29,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (510,30,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (511,31,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (512,32,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (513,33,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (514,34,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (515,35,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (516,36,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (517,37,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (518,38,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (519,39,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (520,40,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (521,41,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (522,42,6,'$ 100.00 - General Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (523,43,6,'$ 50.00 - Student Membership: Offline signup','2021-06-10 20:47:11',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:11','2021-06-11 00:47:11'), + (525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (575,45,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (576,46,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (577,47,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (578,48,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (579,49,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (580,50,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (581,51,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (582,52,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (583,53,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (584,54,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (585,55,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (586,56,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (587,57,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (588,58,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (589,59,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (591,61,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (593,63,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (594,64,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (595,65,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (599,69,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (600,70,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (601,71,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (602,72,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (603,73,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (606,76,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (607,77,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (608,78,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (609,79,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (611,81,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (616,86,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (617,87,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (618,88,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (619,89,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (622,92,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'), + (624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-06-10 20:47:12',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-06-11 00:47:12','2021-06-11 00:47:12'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -97,7 +791,808 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity_contact` WRITE; /*!40000 ALTER TABLE `civicrm_activity_contact` DISABLE KEYS */; -INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES (189,124,1,3),(576,381,1,3),(74,46,2,3),(144,94,2,3),(407,272,2,3),(689,451,2,2),(90,55,3,3),(107,67,3,3),(223,148,3,3),(225,149,3,3),(487,325,3,3),(518,344,3,3),(2,1,4,3),(690,452,4,2),(786,548,4,2),(88,54,5,3),(287,191,5,3),(355,236,5,3),(371,247,5,3),(404,270,5,3),(603,400,5,3),(678,444,5,3),(45,28,6,3),(61,38,6,3),(470,315,6,3),(674,442,6,3),(691,453,6,2),(184,121,7,3),(227,150,7,3),(692,454,8,2),(309,206,9,3),(474,317,9,3),(494,330,9,3),(572,379,9,3),(36,22,10,3),(378,251,10,3),(605,401,10,3),(500,333,12,3),(512,341,12,3),(642,421,12,3),(682,446,12,3),(713,475,12,2),(751,513,12,2),(801,563,12,2),(132,86,13,3),(568,377,13,3),(585,387,13,3),(635,417,13,3),(556,369,14,3),(667,437,14,3),(168,109,15,3),(340,226,15,3),(520,345,15,3),(578,382,15,3),(619,409,15,3),(725,487,15,2),(756,518,15,2),(207,137,16,3),(693,455,16,2),(717,479,16,2),(753,515,16,2),(33,20,17,3),(70,44,17,3),(98,61,18,3),(296,198,18,3),(446,299,18,3),(780,542,18,2),(127,82,19,3),(146,95,19,3),(600,398,19,3),(694,456,19,2),(50,31,20,3),(457,306,20,3),(581,384,20,3),(794,556,20,2),(232,154,21,3),(441,296,21,3),(771,533,21,2),(211,139,22,3),(467,313,22,3),(423,282,24,3),(621,410,24,3),(705,467,24,2),(746,508,24,2),(77,48,25,3),(574,380,25,3),(730,492,25,2),(743,505,25,2),(770,532,25,2),(502,334,26,3),(795,557,26,2),(276,184,27,3),(327,219,27,3),(472,316,27,3),(477,319,27,3),(539,359,27,3),(684,447,27,3),(790,552,27,2),(117,75,28,3),(120,77,28,3),(314,210,28,3),(789,551,28,2),(15,9,29,3),(481,321,29,3),(278,185,30,3),(764,526,31,2),(700,462,32,2),(701,463,32,2),(174,114,33,3),(591,391,33,3),(702,464,33,2),(732,494,33,2),(498,332,34,3),(528,350,34,3),(661,434,34,3),(697,459,34,2),(9,5,35,3),(166,108,36,3),(506,337,36,3),(31,19,37,3),(38,23,37,3),(86,53,38,3),(294,197,38,3),(548,364,38,3),(704,466,38,2),(733,495,38,2),(273,182,39,3),(301,201,39,3),(81,50,40,3),(266,178,40,3),(785,547,40,2),(72,45,41,3),(100,62,41,3),(158,103,41,3),(236,156,41,3),(258,172,41,3),(543,361,41,3),(135,88,42,3),(417,278,42,3),(434,291,42,3),(443,297,42,3),(665,436,42,3),(676,443,42,3),(699,461,43,2),(804,566,43,2),(373,248,44,3),(803,565,44,2),(154,101,45,3),(448,300,45,3),(787,549,45,2),(306,204,46,3),(415,277,46,3),(625,412,46,3),(640,420,46,3),(26,15,47,3),(92,56,47,3),(214,141,47,3),(234,155,48,3),(489,326,48,3),(595,394,48,3),(623,411,48,3),(42,26,49,3),(200,132,49,3),(322,216,49,3),(164,107,50,3),(193,127,50,3),(365,243,50,3),(387,259,50,3),(783,545,50,2),(1,1,51,2),(3,2,51,2),(5,3,51,2),(7,4,51,2),(8,5,51,2),(10,6,51,2),(12,7,51,2),(13,8,51,2),(14,9,51,2),(16,10,51,2),(18,11,51,2),(20,12,51,2),(22,13,51,2),(24,14,51,2),(25,15,51,2),(27,16,51,2),(28,17,51,2),(29,18,51,2),(30,19,51,2),(32,20,51,2),(34,21,51,2),(35,22,51,2),(37,23,51,2),(39,24,51,2),(40,25,51,2),(41,26,51,2),(43,27,51,2),(44,28,51,2),(46,29,51,2),(48,30,51,2),(49,31,51,2),(51,32,51,2),(52,33,51,2),(54,34,51,2),(56,35,51,2),(58,36,51,2),(59,37,51,2),(60,38,51,2),(62,39,51,2),(63,40,51,2),(64,41,51,2),(65,42,51,2),(67,43,51,2),(69,44,51,2),(71,45,51,2),(73,46,51,2),(75,47,51,2),(76,48,51,2),(78,49,51,2),(80,50,51,2),(82,51,51,2),(83,52,51,2),(85,53,51,2),(87,54,51,2),(89,55,51,2),(91,56,51,2),(93,57,51,2),(94,58,51,2),(95,59,51,2),(96,60,51,2),(97,61,51,2),(99,62,51,2),(101,63,51,2),(102,64,51,2),(103,65,51,2),(104,66,51,2),(106,67,51,2),(108,68,51,2),(109,69,51,2),(110,70,51,2),(111,70,51,3),(112,71,51,2),(113,72,51,2),(114,73,51,2),(115,74,51,2),(116,75,51,2),(118,76,51,2),(119,77,51,2),(121,78,51,2),(122,79,51,2),(124,80,51,2),(125,81,51,2),(126,82,51,2),(128,83,51,2),(129,84,51,2),(130,85,51,2),(131,86,51,2),(133,87,51,2),(134,88,51,2),(136,89,51,2),(138,90,51,2),(139,91,51,2),(141,92,51,2),(142,93,51,2),(143,94,51,2),(145,95,51,2),(147,96,51,2),(148,97,51,2),(149,98,51,2),(150,99,51,2),(151,100,51,2),(153,101,51,2),(155,102,51,2),(157,103,51,2),(159,104,51,2),(160,105,51,2),(161,106,51,2),(163,107,51,2),(165,108,51,2),(167,109,51,2),(169,110,51,2),(170,111,51,2),(171,112,51,2),(172,113,51,2),(173,114,51,2),(175,115,51,2),(176,116,51,2),(177,117,51,2),(179,118,51,2),(180,119,51,2),(181,120,51,2),(183,121,51,2),(185,122,51,2),(186,123,51,2),(188,124,51,2),(190,125,51,2),(191,126,51,2),(192,127,51,2),(194,128,51,2),(195,129,51,2),(197,130,51,2),(198,131,51,2),(199,132,51,2),(201,133,51,2),(203,134,51,2),(204,135,51,2),(205,136,51,2),(206,137,51,2),(208,138,51,2),(210,139,51,2),(212,140,51,2),(213,141,51,2),(215,142,51,2),(216,143,51,2),(217,144,51,2),(218,145,51,2),(220,146,51,2),(221,147,51,2),(222,148,51,2),(224,149,51,2),(226,150,51,2),(332,222,51,3),(344,228,51,3),(609,403,51,3),(182,120,52,3),(252,167,52,3),(514,342,52,3),(524,347,52,3),(710,472,52,2),(735,497,52,2),(271,181,54,3),(317,212,54,3),(368,245,55,3),(402,269,55,3),(638,419,55,3),(6,3,56,3),(79,49,56,3),(330,221,56,3),(420,280,56,3),(777,539,57,2),(410,274,58,3),(450,301,58,3),(587,388,58,3),(522,346,59,3),(21,12,60,3),(162,106,60,3),(260,173,60,3),(545,362,60,3),(671,440,60,3),(4,2,61,3),(23,13,61,3),(196,129,61,3),(240,159,61,3),(719,481,61,2),(754,516,61,2),(479,320,62,3),(516,343,62,3),(563,374,62,3),(607,402,62,3),(810,572,62,2),(19,11,63,3),(123,79,64,3),(449,301,64,2),(451,302,64,2),(453,303,64,2),(454,304,64,2),(455,305,64,2),(456,306,64,2),(458,307,64,2),(460,308,64,2),(461,309,64,2),(462,310,64,2),(463,311,64,2),(464,312,64,2),(466,313,64,2),(468,314,64,2),(469,315,64,2),(471,316,64,2),(473,317,64,2),(475,318,64,2),(476,319,64,2),(478,320,64,2),(480,321,64,2),(482,322,64,2),(483,323,64,2),(485,324,64,2),(486,325,64,2),(488,326,64,2),(490,327,64,2),(491,328,64,2),(492,329,64,2),(493,330,64,2),(495,331,64,2),(497,332,64,2),(499,333,64,2),(501,334,64,2),(503,335,64,2),(504,336,64,2),(505,337,64,2),(507,338,64,2),(508,339,64,2),(510,340,64,2),(511,341,64,2),(513,342,64,2),(515,343,64,2),(517,344,64,2),(519,345,64,2),(521,346,64,2),(523,347,64,2),(525,348,64,2),(526,349,64,2),(527,350,64,2),(529,351,64,2),(530,352,64,2),(531,353,64,2),(532,354,64,2),(533,355,64,2),(534,356,64,2),(536,357,64,2),(537,358,64,2),(538,359,64,2),(540,360,64,2),(542,361,64,2),(544,362,64,2),(546,363,64,2),(547,364,64,2),(549,365,64,2),(550,366,64,2),(552,367,64,2),(553,368,64,2),(555,369,64,2),(557,370,64,2),(558,371,64,2),(559,372,64,2),(560,373,64,2),(562,374,64,2),(564,375,64,2),(565,376,64,2),(567,377,64,2),(569,378,64,2),(571,379,64,2),(573,380,64,2),(575,381,64,2),(577,382,64,2),(579,383,64,2),(580,384,64,2),(582,385,64,2),(583,386,64,2),(584,387,64,2),(586,388,64,2),(588,389,64,2),(589,390,64,2),(590,391,64,2),(592,392,64,2),(593,393,64,2),(594,394,64,2),(596,395,64,2),(597,396,64,2),(598,397,64,2),(599,398,64,2),(601,399,64,2),(602,400,64,2),(604,401,64,2),(606,402,64,2),(608,403,64,2),(610,404,64,2),(611,405,64,2),(613,406,64,2),(615,407,64,2),(616,408,64,2),(618,409,64,2),(620,410,64,2),(622,411,64,2),(624,412,64,2),(626,413,64,2),(628,414,64,2),(630,415,64,2),(632,416,64,2),(634,417,64,2),(636,418,64,2),(637,419,64,2),(639,420,64,2),(641,421,64,2),(643,422,64,2),(645,423,64,2),(647,424,64,2),(649,425,64,2),(650,426,64,2),(651,427,64,2),(652,428,64,2),(653,429,64,2),(654,430,64,2),(655,431,64,2),(657,432,64,2),(658,433,64,2),(660,434,64,2),(662,435,64,2),(664,436,64,2),(666,437,64,2),(668,438,64,2),(669,439,64,2),(670,440,64,2),(672,441,64,2),(673,442,64,2),(675,443,64,2),(677,444,64,2),(679,445,64,2),(681,446,64,2),(683,447,64,2),(685,448,64,2),(686,449,64,2),(687,450,64,2),(280,186,65,3),(644,422,65,3),(561,373,66,3),(703,465,66,2),(745,507,66,2),(187,123,67,3),(156,102,68,3),(774,536,68,2),(47,29,69,3),(352,234,69,3),(720,482,69,2),(739,501,69,2),(430,288,70,3),(614,406,70,3),(336,224,71,3),(648,424,71,3),(698,460,71,2),(389,260,72,3),(541,360,72,3),(612,405,72,3),(53,33,73,3),(152,100,73,3),(324,217,73,3),(680,445,73,3),(707,469,73,2),(748,510,73,2),(792,554,73,2),(17,10,74,3),(243,161,74,3),(363,242,74,3),(812,574,74,2),(55,34,75,3),(140,91,75,3),(631,415,75,3),(773,535,75,2),(375,249,77,3),(342,227,78,3),(808,570,78,2),(245,162,79,3),(551,366,79,3),(219,145,80,3),(688,450,80,3),(68,43,81,3),(348,231,81,3),(570,378,81,3),(629,414,81,3),(269,180,82,3),(695,457,82,2),(809,571,82,2),(633,416,83,3),(84,52,84,3),(248,164,84,3),(360,240,84,3),(779,541,84,2),(202,133,85,3),(298,199,85,3),(338,225,85,3),(396,265,85,3),(509,339,85,3),(711,473,85,2),(750,512,85,2),(412,275,86,3),(496,331,86,3),(659,433,86,3),(436,292,87,3),(465,312,87,3),(627,413,87,3),(554,368,89,3),(209,138,90,3),(617,408,90,3),(334,223,91,3),(484,323,91,3),(696,458,92,2),(105,66,93,3),(304,203,93,3),(800,562,93,2),(178,117,94,3),(656,431,94,3),(11,6,95,3),(400,268,95,3),(459,307,95,3),(57,35,96,3),(566,376,96,3),(646,423,96,3),(137,89,97,3),(535,356,97,3),(767,529,97,2),(706,468,98,2),(747,509,98,2),(766,528,98,2),(66,42,99,3),(285,190,99,3),(452,302,99,3),(394,264,100,3),(663,435,100,3),(731,493,101,2),(744,506,101,2),(709,471,102,2),(749,511,102,2),(788,550,102,2),(727,489,109,2),(758,520,109,2),(781,543,113,2),(784,546,115,2),(712,474,118,2),(760,522,118,2),(763,525,118,2),(776,538,119,2),(765,527,120,2),(721,483,122,2),(755,517,122,2),(729,491,124,2),(759,521,124,2),(806,568,124,2),(797,559,126,2),(728,490,127,2),(742,504,127,2),(772,534,127,2),(775,537,128,2),(798,560,131,2),(802,564,132,2),(714,476,136,2),(736,498,136,2),(799,561,136,2),(722,484,137,2),(740,502,137,2),(778,540,137,2),(724,486,138,2),(741,503,138,2),(796,558,143,2),(811,573,148,2),(769,531,159,2),(791,553,163,2),(768,530,170,2),(718,480,173,2),(738,500,173,2),(715,477,175,2),(752,514,175,2),(807,569,181,2),(228,151,185,2),(229,152,185,2),(230,153,185,2),(231,154,185,2),(233,155,185,2),(235,156,185,2),(237,157,185,2),(238,158,185,2),(239,159,185,2),(241,160,185,2),(242,161,185,2),(244,162,185,2),(246,163,185,2),(247,164,185,2),(249,165,185,2),(250,166,185,2),(251,167,185,2),(253,168,185,2),(254,169,185,2),(255,170,185,2),(256,171,185,2),(257,172,185,2),(259,173,185,2),(261,174,185,2),(262,175,185,2),(263,176,185,2),(264,177,185,2),(265,178,185,2),(267,179,185,2),(268,180,185,2),(270,181,185,2),(272,182,185,2),(274,183,185,2),(275,184,185,2),(277,185,185,2),(279,186,185,2),(281,187,185,2),(282,188,185,2),(283,189,185,2),(284,190,185,2),(286,191,185,2),(288,192,185,2),(289,193,185,2),(290,194,185,2),(291,195,185,2),(292,196,185,2),(293,197,185,2),(295,198,185,2),(297,199,185,2),(299,200,185,2),(300,201,185,2),(302,202,185,2),(303,203,185,2),(305,204,185,2),(307,205,185,2),(308,206,185,2),(310,207,185,2),(311,208,185,2),(312,209,185,2),(313,210,185,2),(315,211,185,2),(316,212,185,2),(318,213,185,2),(319,214,185,2),(320,215,185,2),(321,216,185,2),(323,217,185,2),(325,218,185,2),(326,219,185,2),(328,220,185,2),(329,221,185,2),(331,222,185,2),(333,223,185,2),(335,224,185,2),(337,225,185,2),(339,226,185,2),(341,227,185,2),(343,228,185,2),(345,229,185,2),(346,230,185,2),(347,231,185,2),(349,232,185,2),(350,233,185,2),(351,234,185,2),(353,235,185,2),(354,236,185,2),(356,237,185,2),(357,238,185,2),(358,239,185,2),(359,240,185,2),(361,241,185,2),(362,242,185,2),(364,243,185,2),(366,244,185,2),(367,245,185,2),(369,246,185,2),(370,247,185,2),(372,248,185,2),(374,249,185,2),(376,250,185,2),(377,251,185,2),(379,252,185,2),(380,253,185,2),(381,254,185,2),(382,255,185,2),(383,256,185,2),(384,257,185,2),(385,258,185,2),(386,259,185,2),(388,260,185,2),(390,261,185,2),(391,262,185,2),(392,263,185,2),(393,264,185,2),(395,265,185,2),(397,266,185,2),(398,267,185,2),(399,268,185,2),(401,269,185,2),(403,270,185,2),(405,271,185,2),(406,272,185,2),(408,273,185,2),(409,274,185,2),(411,275,185,2),(413,276,185,2),(414,277,185,2),(416,278,185,2),(418,279,185,2),(419,280,185,2),(421,281,185,2),(422,282,185,2),(424,283,185,2),(425,284,185,2),(426,285,185,2),(427,286,185,2),(428,287,185,2),(429,288,185,2),(431,289,185,2),(432,290,185,2),(433,291,185,2),(435,292,185,2),(437,293,185,2),(438,294,185,2),(439,295,185,2),(440,296,185,2),(442,297,185,2),(444,298,185,2),(445,299,185,2),(447,300,185,2),(782,544,187,2),(723,485,188,2),(761,523,188,2),(726,488,190,2),(757,519,190,2),(805,567,193,2),(793,555,194,2),(716,478,199,2),(737,499,199,2),(708,470,200,2),(734,496,200,2); +INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES + (332,217,1,3), + (109,73,2,3), + (628,413,2,3), + (679,451,2,2), + (61,42,3,3), + (408,269,3,3), + (571,376,3,3), + (84,56,4,3), + (413,272,4,3), + (579,380,4,3), + (593,390,4,3), + (680,452,4,2), + (116,77,5,3), + (698,470,5,2), + (728,500,5,2), + (2,1,6,3), + (237,153,6,3), + (421,277,6,3), + (472,310,6,3), + (681,453,6,2), + (708,480,7,2), + (738,510,7,2), + (159,103,8,3), + (289,186,8,3), + (364,236,8,3), + (682,454,8,2), + (36,25,9,3), + (318,208,9,3), + (463,303,9,3), + (776,548,9,2), + (602,396,10,3), + (16,12,12,3), + (147,96,12,3), + (266,171,12,3), + (339,221,12,3), + (355,230,12,3), + (645,425,12,3), + (71,48,13,3), + (280,180,13,3), + (326,213,13,3), + (162,105,14,3), + (351,228,14,3), + (371,241,14,3), + (481,316,14,3), + (527,346,14,3), + (180,117,15,3), + (692,464,15,2), + (722,494,15,2), + (43,30,16,3), + (683,455,16,2), + (103,69,17,3), + (406,268,17,3), + (498,328,17,3), + (595,391,17,3), + (136,89,18,3), + (241,155,19,3), + (271,175,19,3), + (427,280,19,3), + (507,333,19,3), + (684,456,19,2), + (184,119,20,3), + (337,220,20,3), + (496,327,20,3), + (774,546,20,2), + (231,149,21,3), + (275,177,21,3), + (605,398,21,3), + (613,403,21,3), + (283,182,23,3), + (577,379,23,3), + (632,416,23,3), + (634,417,23,3), + (772,544,23,2), + (141,92,24,3), + (450,294,24,3), + (347,226,26,3), + (655,433,26,3), + (128,84,27,3), + (182,118,27,3), + (368,239,27,3), + (597,392,27,3), + (711,483,27,2), + (741,513,27,2), + (802,574,27,2), + (173,112,28,3), + (219,142,29,3), + (225,145,29,3), + (273,176,29,3), + (45,31,30,3), + (517,339,30,3), + (561,367,30,3), + (758,530,30,2), + (554,362,31,3), + (52,35,32,3), + (91,60,32,3), + (215,139,32,3), + (334,218,32,3), + (468,307,32,3), + (690,462,32,2), + (691,463,32,2), + (785,557,32,2), + (133,87,33,3), + (573,377,33,3), + (716,488,33,2), + (746,518,33,2), + (790,562,33,2), + (47,32,34,3), + (353,229,34,3), + (687,459,34,2), + (794,566,34,2), + (20,14,35,3), + (144,94,35,3), + (500,329,35,3), + (659,436,35,3), + (768,540,35,2), + (114,76,36,3), + (589,388,37,3), + (9,6,38,3), + (76,51,38,3), + (221,143,38,3), + (491,324,38,3), + (189,122,39,3), + (313,204,39,3), + (437,287,39,3), + (543,356,39,3), + (88,58,40,3), + (397,262,40,3), + (779,551,40,2), + (256,165,41,3), + (320,209,41,3), + (443,290,41,3), + (460,301,42,2), + (461,302,42,2), + (462,303,42,2), + (464,304,42,2), + (465,305,42,2), + (466,306,42,2), + (467,307,42,2), + (469,308,42,2), + (470,309,42,2), + (471,310,42,2), + (473,311,42,2), + (474,312,42,2), + (476,313,42,2), + (477,314,42,2), + (478,315,42,2), + (480,316,42,2), + (482,317,42,2), + (484,318,42,2), + (485,319,42,2), + (486,320,42,2), + (487,321,42,2), + (488,322,42,2), + (489,323,42,2), + (490,324,42,2), + (492,325,42,2), + (493,326,42,2), + (495,327,42,2), + (497,328,42,2), + (499,329,42,2), + (501,330,42,2), + (503,331,42,2), + (505,332,42,2), + (506,333,42,2), + (508,334,42,2), + (509,335,42,2), + (511,336,42,2), + (513,337,42,2), + (515,338,42,2), + (516,339,42,2), + (518,340,42,2), + (519,341,42,2), + (520,342,42,2), + (521,343,42,2), + (523,344,42,2), + (524,345,42,2), + (526,346,42,2), + (528,347,42,2), + (529,348,42,2), + (530,349,42,2), + (532,350,42,2), + (534,351,42,2), + (535,352,42,2), + (537,353,42,2), + (539,354,42,2), + (541,355,42,2), + (542,356,42,2), + (544,357,42,2), + (545,358,42,2), + (547,359,42,2), + (549,360,42,2), + (551,361,42,2), + (553,362,42,2), + (555,363,42,2), + (556,364,42,2), + (557,365,42,2), + (559,366,42,2), + (560,367,42,2), + (562,368,42,2), + (563,369,42,2), + (564,370,42,2), + (565,371,42,2), + (566,372,42,2), + (567,373,42,2), + (568,374,42,2), + (569,375,42,2), + (570,376,42,2), + (572,377,42,2), + (574,378,42,2), + (576,379,42,2), + (578,380,42,2), + (580,381,42,2), + (581,382,42,2), + (582,383,42,2), + (583,384,42,2), + (584,385,42,2), + (585,386,42,2), + (586,387,42,2), + (588,388,42,2), + (590,389,42,2), + (592,390,42,2), + (594,391,42,2), + (596,392,42,2), + (598,393,42,2), + (599,394,42,2), + (600,395,42,2), + (601,396,42,2), + (603,397,42,2), + (604,398,42,2), + (606,399,42,2), + (607,400,42,2), + (608,401,42,2), + (610,402,42,2), + (612,403,42,2), + (614,404,42,2), + (616,405,42,2), + (617,406,42,2), + (619,407,42,2), + (621,408,42,2), + (623,409,42,2), + (624,410,42,2), + (625,411,42,2), + (626,412,42,2), + (627,413,42,2), + (629,414,42,2), + (630,415,42,2), + (631,416,42,2), + (633,417,42,2), + (635,418,42,2), + (636,419,42,2), + (637,420,42,2), + (638,421,42,2), + (640,422,42,2), + (641,423,42,2), + (642,424,42,2), + (644,425,42,2), + (646,426,42,2), + (647,427,42,2), + (649,428,42,2), + (650,429,42,2), + (651,430,42,2), + (652,431,42,2), + (653,432,42,2), + (654,433,42,2), + (656,434,42,2), + (657,435,42,2), + (658,436,42,2), + (660,437,42,2), + (661,438,42,2), + (662,439,42,2), + (663,440,42,2), + (664,441,42,2), + (666,442,42,2), + (668,443,42,2), + (670,444,42,2), + (671,445,42,2), + (673,446,42,2), + (674,447,42,2), + (675,448,42,2), + (677,449,42,2), + (678,450,42,2), + (704,476,42,2), + (734,506,42,2), + (502,330,43,3), + (618,406,43,3), + (648,427,43,3), + (689,461,43,2), + (759,531,43,2), + (63,43,44,3), + (349,227,44,3), + (791,563,45,2), + (30,21,46,3), + (416,274,46,3), + (721,493,46,2), + (751,523,46,2), + (107,72,47,3), + (4,2,48,3), + (775,547,48,2), + (149,97,49,3), + (170,110,49,3), + (345,225,49,3), + (609,401,49,3), + (130,85,50,3), + (479,315,51,3), + (96,64,52,3), + (99,66,52,3), + (773,545,52,2), + (227,146,53,3), + (119,79,54,3), + (435,286,54,3), + (763,535,56,2), + (475,312,57,3), + (558,365,57,3), + (676,448,57,3), + (718,490,57,2), + (748,520,57,2), + (223,144,58,3), + (293,189,58,3), + (540,354,58,3), + (694,466,58,2), + (724,496,58,2), + (362,235,59,3), + (126,83,60,3), + (401,265,60,3), + (546,358,60,3), + (575,378,60,3), + (66,45,61,3), + (194,125,61,3), + (383,251,61,3), + (69,47,62,3), + (306,199,62,3), + (156,101,63,3), + (177,115,63,3), + (278,179,63,3), + (441,289,63,3), + (552,361,63,3), + (667,442,63,3), + (80,53,64,3), + (404,267,64,3), + (622,408,64,3), + (719,491,64,2), + (749,521,64,2), + (24,16,65,3), + (510,335,65,3), + (550,360,66,3), + (262,168,67,3), + (308,200,67,3), + (425,279,67,3), + (512,336,67,3), + (49,33,68,3), + (286,184,69,3), + (483,317,69,3), + (34,24,70,3), + (249,161,70,3), + (380,249,70,3), + (329,215,71,3), + (587,387,71,3), + (688,460,71,2), + (186,120,72,3), + (258,166,72,3), + (452,295,72,3), + (121,80,73,3), + (244,157,73,3), + (260,167,73,3), + (522,343,73,3), + (639,421,73,3), + (393,259,74,3), + (411,271,74,3), + (591,389,74,3), + (770,542,74,2), + (514,337,75,3), + (620,407,75,3), + (715,487,75,2), + (745,517,75,2), + (705,477,76,2), + (735,507,76,2), + (78,52,77,3), + (251,162,77,3), + (433,285,77,3), + (454,296,77,3), + (322,210,78,3), + (531,349,78,3), + (538,353,78,3), + (611,402,78,3), + (59,41,79,3), + (304,198,79,3), + (756,528,79,2), + (18,13,80,3), + (111,74,80,3), + (138,90,80,3), + (439,288,80,3), + (456,297,80,3), + (200,129,81,3), + (504,331,81,3), + (234,151,82,3), + (685,457,82,2), + (669,443,83,3), + (202,130,84,3), + (341,222,84,3), + (388,255,84,3), + (525,345,85,3), + (239,154,86,3), + (672,445,86,3), + (783,555,86,2), + (39,27,87,3), + (446,292,87,3), + (254,164,88,3), + (419,276,88,3), + (615,404,89,3), + (702,474,89,2), + (732,504,89,2), + (782,554,89,2), + (192,124,90,3), + (22,15,91,3), + (548,359,91,3), + (643,424,91,3), + (86,57,92,3), + (494,326,92,3), + (686,458,92,2), + (695,467,92,2), + (725,497,92,2), + (767,539,92,2), + (152,99,93,3), + (197,127,93,3), + (665,441,94,3), + (167,108,95,3), + (299,194,95,3), + (536,352,95,3), + (423,278,96,3), + (717,489,96,2), + (747,519,96,2), + (796,568,96,2), + (448,293,97,3), + (208,134,98,3), + (233,151,98,2), + (235,152,98,2), + (236,153,98,2), + (238,154,98,2), + (240,155,98,2), + (242,156,98,2), + (243,157,98,2), + (245,158,98,2), + (246,159,98,2), + (247,160,98,2), + (248,161,98,2), + (250,162,98,2), + (252,163,98,2), + (253,164,98,2), + (255,165,98,2), + (257,166,98,2), + (259,167,98,2), + (261,168,98,2), + (263,169,98,2), + (264,170,98,2), + (265,171,98,2), + (267,172,98,2), + (268,173,98,2), + (269,174,98,2), + (270,175,98,2), + (272,176,98,2), + (274,177,98,2), + (276,178,98,2), + (277,179,98,2), + (279,180,98,2), + (281,181,98,2), + (282,182,98,2), + (284,183,98,2), + (285,184,98,2), + (287,185,98,2), + (288,186,98,2), + (290,187,98,2), + (291,188,98,2), + (292,189,98,2), + (294,190,98,2), + (295,191,98,2), + (296,192,98,2), + (297,193,98,2), + (298,194,98,2), + (300,195,98,2), + (301,196,98,2), + (302,197,98,2), + (303,198,98,2), + (305,199,98,2), + (307,200,98,2), + (309,201,98,2), + (310,202,98,2), + (311,203,98,2), + (312,204,98,2), + (314,205,98,2), + (315,206,98,2), + (316,207,98,2), + (317,208,98,2), + (319,209,98,2), + (321,210,98,2), + (323,211,98,2), + (324,212,98,2), + (325,213,98,2), + (327,214,98,2), + (328,215,98,2), + (330,216,98,2), + (331,217,98,2), + (333,218,98,2), + (335,219,98,2), + (336,220,98,2), + (338,221,98,2), + (340,222,98,2), + (342,223,98,2), + (343,224,98,2), + (344,225,98,2), + (346,226,98,2), + (348,227,98,2), + (350,228,98,2), + (352,229,98,2), + (354,230,98,2), + (356,231,98,2), + (357,232,98,2), + (358,233,98,2), + (360,234,98,2), + (361,235,98,2), + (363,236,98,2), + (365,237,98,2), + (366,238,98,2), + (367,239,98,2), + (369,240,98,2), + (370,241,98,2), + (372,242,98,2), + (373,243,98,2), + (374,244,98,2), + (375,245,98,2), + (376,246,98,2), + (377,247,98,2), + (378,248,98,2), + (379,249,98,2), + (381,250,98,2), + (382,251,98,2), + (384,252,98,2), + (385,253,98,2), + (386,254,98,2), + (387,255,98,2), + (389,256,98,2), + (390,257,98,2), + (391,258,98,2), + (392,259,98,2), + (394,260,98,2), + (395,261,98,2), + (396,262,98,2), + (398,263,98,2), + (399,264,98,2), + (400,265,98,2), + (402,266,98,2), + (403,267,98,2), + (405,268,98,2), + (407,269,98,2), + (409,270,98,2), + (410,271,98,2), + (412,272,98,2), + (414,273,98,2), + (415,274,98,2), + (417,275,98,2), + (418,276,98,2), + (420,277,98,2), + (422,278,98,2), + (424,279,98,2), + (426,280,98,2), + (428,281,98,2), + (429,282,98,2), + (430,283,98,2), + (431,284,98,2), + (432,285,98,2), + (434,286,98,2), + (436,287,98,2), + (438,288,98,2), + (440,289,98,2), + (442,290,98,2), + (444,291,98,2), + (445,292,98,2), + (447,293,98,2), + (449,294,98,2), + (451,295,98,2), + (453,296,98,2), + (455,297,98,2), + (457,298,98,2), + (458,299,98,2), + (459,300,98,2), + (533,350,98,3), + (124,82,99,3), + (164,106,99,3), + (211,136,99,3), + (359,233,99,3), + (777,549,99,2), + (73,49,100,3), + (154,100,101,3), + (204,131,101,3), + (757,529,101,2), + (713,485,103,2), + (743,515,103,2), + (707,479,104,2), + (737,509,104,2), + (801,573,105,2), + (778,550,106,2), + (753,525,118,2), + (800,572,122,2), + (697,469,123,2), + (727,499,123,2), + (706,478,124,2), + (736,508,124,2), + (1,1,125,2), + (3,2,125,2), + (5,3,125,2), + (6,4,125,2), + (7,5,125,2), + (8,6,125,2), + (10,7,125,2), + (11,8,125,2), + (12,9,125,2), + (13,10,125,2), + (14,11,125,2), + (15,12,125,2), + (17,13,125,2), + (19,14,125,2), + (21,15,125,2), + (23,16,125,2), + (25,17,125,2), + (26,18,125,2), + (27,19,125,2), + (28,20,125,2), + (29,21,125,2), + (31,22,125,2), + (32,23,125,2), + (33,24,125,2), + (35,25,125,2), + (37,26,125,2), + (38,27,125,2), + (40,28,125,2), + (41,29,125,2), + (42,30,125,2), + (44,31,125,2), + (46,32,125,2), + (48,33,125,2), + (50,34,125,2), + (51,35,125,2), + (53,36,125,2), + (54,37,125,2), + (55,38,125,2), + (56,39,125,2), + (57,40,125,2), + (58,41,125,2), + (60,42,125,2), + (62,43,125,2), + (64,44,125,2), + (65,45,125,2), + (67,46,125,2), + (68,47,125,2), + (70,48,125,2), + (72,49,125,2), + (74,50,125,2), + (75,51,125,2), + (77,52,125,2), + (79,53,125,2), + (81,54,125,2), + (82,55,125,2), + (83,56,125,2), + (85,57,125,2), + (87,58,125,2), + (89,59,125,2), + (90,60,125,2), + (92,61,125,2), + (93,62,125,2), + (94,63,125,2), + (95,64,125,2), + (97,65,125,2), + (98,66,125,2), + (100,67,125,2), + (101,68,125,2), + (102,69,125,2), + (104,70,125,2), + (105,71,125,2), + (106,72,125,2), + (108,73,125,2), + (110,74,125,2), + (112,75,125,2), + (113,76,125,2), + (115,77,125,2), + (117,78,125,2), + (118,79,125,2), + (120,80,125,2), + (122,81,125,2), + (123,82,125,2), + (125,83,125,2), + (127,84,125,2), + (129,85,125,2), + (131,86,125,2), + (132,87,125,2), + (134,88,125,2), + (135,89,125,2), + (137,90,125,2), + (139,91,125,2), + (140,92,125,2), + (142,93,125,2), + (143,94,125,2), + (145,95,125,2), + (146,96,125,2), + (148,97,125,2), + (150,98,125,2), + (151,99,125,2), + (153,100,125,2), + (155,101,125,2), + (157,102,125,2), + (158,103,125,2), + (160,104,125,2), + (161,105,125,2), + (163,106,125,2), + (165,107,125,2), + (166,108,125,2), + (168,109,125,2), + (169,110,125,2), + (171,111,125,2), + (172,112,125,2), + (174,113,125,2), + (175,114,125,2), + (176,115,125,2), + (178,116,125,2), + (179,117,125,2), + (181,118,125,2), + (183,119,125,2), + (185,120,125,2), + (187,121,125,2), + (188,122,125,2), + (190,123,125,2), + (191,124,125,2), + (193,125,125,2), + (195,126,125,2), + (196,127,125,2), + (198,128,125,2), + (199,129,125,2), + (201,130,125,2), + (203,131,125,2), + (205,132,125,2), + (206,133,125,2), + (207,134,125,2), + (209,135,125,2), + (210,136,125,2), + (212,137,125,2), + (213,138,125,2), + (214,139,125,2), + (216,140,125,2), + (217,141,125,2), + (218,142,125,2), + (220,143,125,2), + (222,144,125,2), + (224,145,125,2), + (226,146,125,2), + (228,147,125,2), + (229,148,125,2), + (230,149,125,2), + (232,150,125,2), + (754,526,125,2), + (792,564,127,2), + (710,482,129,2), + (740,512,129,2), + (798,570,129,2), + (712,484,131,2), + (742,514,131,2), + (799,571,135,2), + (700,472,136,2), + (730,502,136,2), + (769,541,140,2), + (788,560,144,2), + (693,465,145,2), + (723,495,145,2), + (786,558,145,2), + (761,533,146,2), + (789,561,147,2), + (764,536,148,2), + (781,553,152,2), + (696,468,154,2), + (726,498,154,2), + (797,569,157,2), + (699,471,158,2), + (729,501,158,2), + (780,552,161,2), + (703,475,165,2), + (733,505,165,2), + (709,481,170,2), + (739,511,170,2), + (787,559,170,2), + (784,556,171,2), + (762,534,172,2), + (766,538,173,2), + (795,567,179,2), + (765,537,180,2), + (771,543,181,2), + (793,565,182,2), + (760,532,183,2), + (714,486,185,2), + (744,516,185,2), + (701,473,191,2), + (731,503,191,2), + (720,492,196,2), + (750,522,196,2), + (755,527,201,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -107,7 +1602,185 @@ UNLOCK TABLES; LOCK TABLES `civicrm_address` WRITE; /*!40000 ALTER TABLE `civicrm_address` DISABLE KEYS */; -INSERT INTO `civicrm_address` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `street_address`, `street_number`, `street_number_suffix`, `street_number_predirectional`, `street_name`, `street_type`, `street_number_postdirectional`, `street_unit`, `supplemental_address_1`, `supplemental_address_2`, `supplemental_address_3`, `city`, `county_id`, `state_province_id`, `postal_code_suffix`, `postal_code`, `usps_adc`, `country_id`, `geo_code_1`, `geo_code_2`, `manual_geo_code`, `timezone`, `name`, `master_id`) VALUES (1,181,1,1,0,'382R Green Blvd NW',382,'R',NULL,'Green','Blvd','NW',NULL,NULL,NULL,NULL,'Cottonwood',1,1002,NULL,'86366',NULL,1228,34.704667,-111.989364,0,NULL,NULL,NULL),(2,14,1,1,0,'287T Green Way S',287,'T',NULL,'Green','Way','S',NULL,NULL,NULL,NULL,'Redlands',1,1004,NULL,'92375',NULL,1228,34.839964,-115.967051,0,NULL,NULL,NULL),(3,30,1,1,0,'155F Cadell St N',155,'F',NULL,'Cadell','St','N',NULL,NULL,NULL,NULL,'Absaraka',1,1033,NULL,'58002',NULL,1228,46.859694,-97.214587,0,NULL,NULL,NULL),(4,49,1,1,0,'713F Caulder Way E',713,'F',NULL,'Caulder','Way','E',NULL,NULL,NULL,NULL,'Galesburg',1,1021,NULL,'49053',NULL,1228,42.289991,-85.41657,0,NULL,NULL,NULL),(5,131,1,1,0,'740Y Northpoint St N',740,'Y',NULL,'Northpoint','St','N',NULL,NULL,NULL,NULL,'Flint',1,1021,NULL,'48557',NULL,1228,43.080578,-83.783675,0,NULL,NULL,NULL),(6,90,1,1,0,'447B Maple Path S',447,'B',NULL,'Maple','Path','S',NULL,NULL,NULL,NULL,'Shaw Island',1,1046,NULL,'98286',NULL,1228,48.575362,-122.96643,0,NULL,NULL,NULL),(7,185,1,1,0,'576N Green Way N',576,'N',NULL,'Green','Way','N',NULL,NULL,NULL,NULL,'Syracuse',1,1031,NULL,'13203',NULL,1228,43.061116,-76.13733,0,NULL,NULL,NULL),(8,157,1,1,0,'651Z Dowlen Ln S',651,'Z',NULL,'Dowlen','Ln','S',NULL,NULL,NULL,NULL,'Hampstead',1,1032,NULL,'28443',NULL,1228,34.407677,-77.65238,0,NULL,NULL,NULL),(9,194,1,1,0,'371R Main Ln NW',371,'R',NULL,'Main','Ln','NW',NULL,NULL,NULL,NULL,'Bayville',1,1031,NULL,'11709',NULL,1228,40.907277,-73.55713,0,NULL,NULL,NULL),(10,193,1,1,0,'88J Bay Rd E',88,'J',NULL,'Bay','Rd','E',NULL,NULL,NULL,NULL,'Keatchie',1,1017,NULL,'71046',NULL,1228,32.168532,-93.95402,0,NULL,NULL,NULL),(11,81,1,1,0,'652Z Green Pl N',652,'Z',NULL,'Green','Pl','N',NULL,NULL,NULL,NULL,'Water Valley',1,1016,NULL,'42085',NULL,1228,36.578907,-88.82074,0,NULL,NULL,NULL),(12,88,1,1,0,'267K Woodbridge Ave W',267,'K',NULL,'Woodbridge','Ave','W',NULL,NULL,NULL,NULL,'Miami',1,1008,NULL,'33185',NULL,1228,25.723173,-80.43995,0,NULL,NULL,NULL),(13,147,1,1,0,'516U El Camino Ln S',516,'U',NULL,'El Camino','Ln','S',NULL,NULL,NULL,NULL,'Woburn',1,1020,NULL,'01808',NULL,1228,42.446396,-71.459405,0,NULL,NULL,NULL),(14,64,1,1,0,'598R Northpoint Path E',598,'R',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Minter',1,1000,NULL,'36761',NULL,1228,32.080532,-86.95524,0,NULL,NULL,NULL),(15,101,1,1,0,'208O Lincoln Rd NW',208,'O',NULL,'Lincoln','Rd','NW',NULL,NULL,NULL,NULL,'Hillsboro',1,1036,NULL,'97123',NULL,1228,45.491024,-122.95745,0,NULL,NULL,NULL),(16,109,1,1,0,'577R Woodbridge Pl NE',577,'R',NULL,'Woodbridge','Pl','NE',NULL,NULL,NULL,NULL,'Loves Park',1,1012,NULL,'61131',NULL,1228,42.325364,-89.170527,0,NULL,NULL,NULL),(17,73,1,1,0,'38G Cadell Ln E',38,'G',NULL,'Cadell','Ln','E',NULL,NULL,NULL,NULL,'Macedonia',1,1034,NULL,'44056',NULL,1228,41.321189,-81.50135,0,NULL,NULL,NULL),(18,196,1,1,0,'209G College Dr NE',209,'G',NULL,'College','Dr','NE',NULL,NULL,NULL,NULL,'Great Neck',1,1031,NULL,'11021',NULL,1228,40.787068,-73.72577,0,NULL,NULL,NULL),(19,6,1,1,0,'475M Green Ln SE',475,'M',NULL,'Green','Ln','SE',NULL,NULL,NULL,NULL,'Chicago',1,1012,NULL,'60614',NULL,1228,41.922682,-87.65432,0,NULL,NULL,NULL),(20,199,1,1,0,'221N Bay Pl N',221,'N',NULL,'Bay','Pl','N',NULL,NULL,NULL,NULL,'Dateland',1,1002,NULL,'85333',NULL,1228,32.921712,-113.45703,0,NULL,NULL,NULL),(21,99,1,1,0,'5Z Pine Ln SE',5,'Z',NULL,'Pine','Ln','SE',NULL,NULL,NULL,NULL,'Metairie',1,1017,NULL,'70009',NULL,1228,29.677893,-90.0901,0,NULL,NULL,NULL),(22,82,1,1,0,'207P Woodbridge Ave W',207,'P',NULL,'Woodbridge','Ave','W',NULL,NULL,NULL,NULL,'Anna',1,1034,NULL,'45302',NULL,1228,40.40476,-84.19578,0,NULL,NULL,NULL),(23,18,1,1,0,'993I Jackson Ln W',993,'I',NULL,'Jackson','Ln','W',NULL,NULL,NULL,NULL,'Clearwater Beach',1,1008,NULL,'33767',NULL,1228,27.982722,-82.82504,0,NULL,NULL,NULL),(24,46,1,1,0,'40M Maple Ave SE',40,'M',NULL,'Maple','Ave','SE',NULL,NULL,NULL,NULL,'Seattle',1,1046,NULL,'98114',NULL,1228,47.432251,-121.803388,0,NULL,NULL,NULL),(25,76,1,1,0,'424R Northpoint Rd E',424,'R',NULL,'Northpoint','Rd','E',NULL,NULL,NULL,NULL,'Atlanta',1,1013,NULL,'46031',NULL,1228,40.211166,-86.02304,0,NULL,NULL,NULL),(26,23,1,1,0,'142W El Camino Pl S',142,'W',NULL,'El Camino','Pl','S',NULL,NULL,NULL,NULL,'College Park',1,1019,NULL,'20742',NULL,1228,38.833563,-76.877743,0,NULL,NULL,NULL),(27,57,1,1,0,'484K Martin Luther King Dr SE',484,'K',NULL,'Martin Luther King','Dr','SE',NULL,NULL,NULL,NULL,'Redwood Valley',1,1004,NULL,'95470',NULL,1228,39.285782,-123.22064,0,NULL,NULL,NULL),(28,180,1,1,0,'387A College St SW',387,'A',NULL,'College','St','SW',NULL,NULL,NULL,NULL,'Stockton',1,1004,NULL,'95212',NULL,1228,38.038906,-121.24213,0,NULL,NULL,NULL),(29,52,1,1,0,'800X Main Way S',800,'X',NULL,'Main','Way','S',NULL,NULL,NULL,NULL,'Jackson',1,1029,NULL,'08527',NULL,1228,40.11597,-74.32251,0,NULL,NULL,NULL),(30,104,1,1,0,'527Y Second Blvd S',527,'Y',NULL,'Second','Blvd','S',NULL,NULL,NULL,NULL,'Warrendale',1,1037,NULL,'15095',NULL,1228,40.434436,-80.024817,0,NULL,NULL,NULL),(31,195,1,1,0,'785C Lincoln Ln W',785,'C',NULL,'Lincoln','Ln','W',NULL,NULL,NULL,NULL,'Boardman',1,1036,NULL,'97818',NULL,1228,45.816575,-119.76236,0,NULL,NULL,NULL),(32,60,1,1,0,'197Q Beech Way SW',197,'Q',NULL,'Beech','Way','SW',NULL,NULL,NULL,NULL,'Munds Park',1,1002,NULL,'86017',NULL,1228,34.9372,-111.62931,0,NULL,NULL,NULL),(33,116,1,1,0,'130A Caulder Blvd E',130,'A',NULL,'Caulder','Blvd','E',NULL,NULL,NULL,NULL,'Nye',1,1025,NULL,'59061',NULL,1228,45.45236,-109.83681,0,NULL,NULL,NULL),(34,75,1,1,0,'851Y Pine Rd SW',851,'Y',NULL,'Pine','Rd','SW',NULL,NULL,NULL,NULL,'Springdale',1,1003,NULL,'72764',NULL,1228,36.182407,-94.1082,0,NULL,NULL,NULL),(35,27,1,1,0,'497B Maple St E',497,'B',NULL,'Maple','St','E',NULL,NULL,NULL,NULL,'Blue Springs',1,1026,NULL,'68318',NULL,1228,40.14601,-96.66049,0,NULL,NULL,NULL),(36,66,1,1,0,'49B El Camino Ln NE',49,'B',NULL,'El Camino','Ln','NE',NULL,NULL,NULL,NULL,'Chilton',1,1048,NULL,'53014',NULL,1228,44.033215,-88.17626,0,NULL,NULL,NULL),(37,164,1,1,0,'165M Martin Luther King St N',165,'M',NULL,'Martin Luther King','St','N',NULL,NULL,NULL,NULL,'Red Devil',1,1001,NULL,'99656',NULL,1228,61.810587,-157.3437,0,NULL,NULL,NULL),(38,12,1,1,0,'739S College Blvd S',739,'S',NULL,'College','Blvd','S',NULL,NULL,NULL,NULL,'Soquel',1,1004,NULL,'95073',NULL,1228,37.007916,-121.95072,0,NULL,NULL,NULL),(39,192,1,1,0,'755Z Lincoln Rd SW',755,'Z',NULL,'Lincoln','Rd','SW',NULL,NULL,NULL,NULL,'Elmer City',1,1046,NULL,'99124',NULL,1228,47.998468,-118.95248,0,NULL,NULL,NULL),(40,11,1,1,0,'219U Beech Ln NE',219,'U',NULL,'Beech','Ln','NE',NULL,NULL,NULL,NULL,'Hebron',1,1034,NULL,'43098',NULL,1228,40.095148,-82.482659,0,NULL,NULL,NULL),(41,39,1,1,0,'330R Maple Blvd SE',330,'R',NULL,'Maple','Blvd','SE',NULL,NULL,NULL,NULL,'Charlottesville',1,1045,NULL,'22902',NULL,1228,38.00847,-78.47803,0,NULL,NULL,NULL),(42,111,1,1,0,'787L Green Way SE',787,'L',NULL,'Green','Way','SE',NULL,NULL,NULL,NULL,'Terryville',1,1006,NULL,'06786',NULL,1228,41.676415,-73.00836,0,NULL,NULL,NULL),(43,16,1,1,0,'40Z Lincoln Way SE',40,'Z',NULL,'Lincoln','Way','SE',NULL,NULL,NULL,NULL,'Clarklake',1,1021,NULL,'49234',NULL,1228,42.121774,-84.36382,0,NULL,NULL,NULL),(44,83,1,1,0,'341D College Way SE',341,'D',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Painesdale',1,1021,NULL,'49955',NULL,1228,47.034828,-88.6719,0,NULL,NULL,NULL),(45,172,1,1,0,'895K Cadell Path SE',895,'K',NULL,'Cadell','Path','SE',NULL,NULL,NULL,NULL,'San Bernardino',1,1004,NULL,'92413',NULL,1228,34.839964,-115.967051,0,NULL,NULL,NULL),(46,59,1,1,0,'284N Northpoint Ln SE',284,'N',NULL,'Northpoint','Ln','SE',NULL,NULL,NULL,NULL,'Clearwater',1,1015,NULL,'67026',NULL,1228,37.518342,-97.49452,0,NULL,NULL,NULL),(47,119,1,1,0,'117R Maple St NE',117,'R',NULL,'Maple','St','NE',NULL,NULL,NULL,NULL,'Pinesdale',1,1025,NULL,'59841',NULL,1228,46.336533,-114.22296,0,NULL,NULL,NULL),(48,182,1,1,0,'650S College Ave NE',650,'S',NULL,'College','Ave','NE',NULL,NULL,NULL,NULL,'Carmichael',1,1004,NULL,'95609',NULL,1228,38.650335,-121.327214,0,NULL,NULL,NULL),(49,26,1,1,0,'778C Second St NE',778,'C',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Magnolia',1,1034,NULL,'44643',NULL,1228,40.646529,-81.30882,0,NULL,NULL,NULL),(50,4,1,1,0,'823R Bay Pl NE',823,'R',NULL,'Bay','Pl','NE',NULL,NULL,NULL,NULL,'Coronado',1,1004,NULL,'92118',NULL,1228,32.682727,-117.17441,0,NULL,NULL,NULL),(51,128,1,1,0,'632Z Caulder Dr E',632,'Z',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Wichita',1,1015,NULL,'67211',NULL,1228,37.667175,-97.31917,0,NULL,NULL,NULL),(52,43,1,1,0,'64N Jackson Path N',64,'N',NULL,'Jackson','Path','N',NULL,NULL,NULL,NULL,'Palm Harbor',1,1008,NULL,'34682',NULL,1228,27.891809,-82.724763,0,NULL,NULL,NULL),(53,186,1,1,0,'796O Cadell Pl N',796,'O',NULL,'Cadell','Pl','N',NULL,NULL,NULL,NULL,'Brave',1,1037,NULL,'15316',NULL,1228,39.743424,-80.26376,0,NULL,NULL,NULL),(54,158,1,1,0,'849N El Camino Ave E',849,'N',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Macon',1,1009,NULL,'31213',NULL,1228,32.839289,-83.638752,0,NULL,NULL,NULL),(55,174,1,1,0,'910L Northpoint Ln SE',910,'L',NULL,'Northpoint','Ln','SE',NULL,NULL,NULL,NULL,'Burgoon',1,1034,NULL,'43407',NULL,1228,41.277969,-83.24578,0,NULL,NULL,NULL),(56,148,1,1,0,'706Y Green Blvd S',706,'Y',NULL,'Green','Blvd','S',NULL,NULL,NULL,NULL,'Pocahontas',1,1045,NULL,'24635',NULL,1228,37.305821,-81.34697,0,NULL,NULL,NULL),(57,165,1,1,0,'344J Green Ln NW',344,'J',NULL,'Green','Ln','NW',NULL,NULL,NULL,NULL,'Olean',1,1031,NULL,'14760',NULL,1228,42.076574,-78.42744,0,NULL,NULL,NULL),(58,97,1,1,0,'91B States Blvd NW',91,'B',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Badger',1,1014,NULL,'50516',NULL,1228,42.624944,-94.13904,0,NULL,NULL,NULL),(59,8,1,1,0,'528Q Van Ness Blvd W',528,'Q',NULL,'Van Ness','Blvd','W',NULL,NULL,NULL,NULL,'Sylacauga',1,1000,NULL,'35150',NULL,1228,33.185782,-86.25105,0,NULL,NULL,NULL),(60,144,1,1,0,'299R Van Ness Ave W',299,'R',NULL,'Van Ness','Ave','W',NULL,NULL,NULL,NULL,'Milwaukee',1,1048,NULL,'53268',NULL,1228,43.038513,-87.909584,0,NULL,NULL,NULL),(61,134,1,1,0,'210M Bay Way W',210,'M',NULL,'Bay','Way','W',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77060',NULL,1228,29.933367,-95.39916,0,NULL,NULL,NULL),(62,96,1,1,0,'358V Martin Luther King Dr SW',358,'V',NULL,'Martin Luther King','Dr','SW',NULL,NULL,NULL,NULL,'Elrosa',1,1022,NULL,'56325',NULL,1228,45.562459,-94.94661,0,NULL,NULL,NULL),(63,107,1,1,0,'343Y Second Ave S',343,'Y',NULL,'Second','Ave','S',NULL,NULL,NULL,NULL,'Rockholds',1,1016,NULL,'40759',NULL,1228,36.817151,-84.05917,0,NULL,NULL,NULL),(64,183,1,1,0,'444O Northpoint Dr NE',444,'O',NULL,'Northpoint','Dr','NE',NULL,NULL,NULL,NULL,'Sergeant Bluff',1,1014,NULL,'51054',NULL,1228,42.38556,-96.34194,0,NULL,NULL,NULL),(65,31,1,1,0,'14R Bay Dr SE',14,'R',NULL,'Bay','Dr','SE',NULL,NULL,NULL,NULL,'Central Islip',1,1031,NULL,'11722',NULL,1228,40.784874,-73.19924,0,NULL,NULL,NULL),(66,32,1,1,0,'54P Northpoint Path E',54,'P',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Clatonia',1,1026,NULL,'68328',NULL,1228,40.473614,-96.84511,0,NULL,NULL,NULL),(67,94,1,1,0,'573M College Blvd SE',573,'M',NULL,'College','Blvd','SE',NULL,NULL,NULL,NULL,'Merkel',1,1042,NULL,'79536',NULL,1228,32.473679,-100.02753,0,NULL,NULL,NULL),(68,153,3,1,0,'980P Lincoln Ln E',980,'P',NULL,'Lincoln','Ln','E',NULL,'Editorial Dept',NULL,NULL,'Memphis',1,1041,NULL,'38127',NULL,1228,35.223796,-90.00646,0,NULL,NULL,NULL),(69,141,3,1,0,'209O Maple Pl NW',209,'O',NULL,'Maple','Pl','NW',NULL,'c/o OPDC',NULL,NULL,'Crystal Bay',1,1027,NULL,'89402',NULL,1228,39.239457,-119.971133,0,NULL,NULL,NULL),(70,16,2,0,0,'209O Maple Pl NW',209,'O',NULL,'Maple','Pl','NW',NULL,'c/o OPDC',NULL,NULL,'Crystal Bay',1,1027,NULL,'89402',NULL,1228,39.239457,-119.971133,0,NULL,NULL,69),(71,53,3,1,0,'651Z Caulder Path S',651,'Z',NULL,'Caulder','Path','S',NULL,'Community Relations',NULL,NULL,'Stone Creek',1,1034,NULL,'43840',NULL,1228,40.406106,-81.58374,0,NULL,NULL,NULL),(72,37,2,1,0,'651Z Caulder Path S',651,'Z',NULL,'Caulder','Path','S',NULL,'Community Relations',NULL,NULL,'Stone Creek',1,1034,NULL,'43840',NULL,1228,40.406106,-81.58374,0,NULL,NULL,71),(73,55,3,1,0,'901E Pine Ln S',901,'E',NULL,'Pine','Ln','S',NULL,'c/o PO Plus',NULL,NULL,'Helmville',1,1025,NULL,'59843',NULL,1228,46.878117,-112.97934,0,NULL,NULL,NULL),(74,161,2,1,0,'901E Pine Ln S',901,'E',NULL,'Pine','Ln','S',NULL,'c/o PO Plus',NULL,NULL,'Helmville',1,1025,NULL,'59843',NULL,1228,46.878117,-112.97934,0,NULL,NULL,73),(75,47,3,1,0,'72T Green Path SE',72,'T',NULL,'Green','Path','SE',NULL,'Payables Dept.',NULL,NULL,'Baton Rouge',1,1017,NULL,'70837',NULL,1228,30.51589,-91.080373,0,NULL,NULL,NULL),(76,48,3,1,0,'612B Van Ness Way S',612,'B',NULL,'Van Ness','Way','S',NULL,'c/o OPDC',NULL,NULL,'Rohrersville',1,1019,NULL,'21779',NULL,1228,39.431058,-77.66169,0,NULL,NULL,NULL),(77,201,2,1,0,'612B Van Ness Way S',612,'B',NULL,'Van Ness','Way','S',NULL,'c/o OPDC',NULL,NULL,'Rohrersville',1,1019,NULL,'21779',NULL,1228,39.431058,-77.66169,0,NULL,NULL,76),(78,44,3,1,0,'515V Cadell Blvd N',515,'V',NULL,'Cadell','Blvd','N',NULL,'Disbursements',NULL,NULL,'Chicago',1,1012,NULL,'60651',NULL,1228,41.901485,-87.74055,0,NULL,NULL,NULL),(79,87,3,1,0,'590L Main Path W',590,'L',NULL,'Main','Path','W',NULL,'c/o PO Plus',NULL,NULL,'New Liberty',1,1016,NULL,'40355',NULL,1228,38.606023,-84.8279,0,NULL,NULL,NULL),(80,68,2,1,0,'590L Main Path W',590,'L',NULL,'Main','Path','W',NULL,'c/o PO Plus',NULL,NULL,'New Liberty',1,1016,NULL,'40355',NULL,1228,38.606023,-84.8279,0,NULL,NULL,79),(81,21,3,1,0,'76Y Van Ness Rd W',76,'Y',NULL,'Van Ness','Rd','W',NULL,'Cuffe Parade',NULL,NULL,'Wabasso',1,1008,NULL,'32970',NULL,1228,27.750176,-80.45364,0,NULL,NULL,NULL),(82,135,2,1,0,'76Y Van Ness Rd W',76,'Y',NULL,'Van Ness','Rd','W',NULL,'Cuffe Parade',NULL,NULL,'Wabasso',1,1008,NULL,'32970',NULL,1228,27.750176,-80.45364,0,NULL,NULL,81),(83,123,3,1,0,'28P Woodbridge Dr N',28,'P',NULL,'Woodbridge','Dr','N',NULL,'c/o OPDC',NULL,NULL,'Dracut',1,1020,NULL,'01826',NULL,1228,42.677772,-71.316,0,NULL,NULL,NULL),(84,137,2,1,0,'28P Woodbridge Dr N',28,'P',NULL,'Woodbridge','Dr','N',NULL,'c/o OPDC',NULL,NULL,'Dracut',1,1020,NULL,'01826',NULL,1228,42.677772,-71.316,0,NULL,NULL,83),(85,113,3,1,0,'667N College Rd NW',667,'N',NULL,'College','Rd','NW',NULL,'Receiving',NULL,NULL,'Crows Landing',1,1004,NULL,'95313',NULL,1228,37.413659,-121.05649,0,NULL,NULL,NULL),(86,5,2,1,0,'667N College Rd NW',667,'N',NULL,'College','Rd','NW',NULL,'Receiving',NULL,NULL,'Crows Landing',1,1004,NULL,'95313',NULL,1228,37.413659,-121.05649,0,NULL,NULL,85),(87,115,3,1,0,'889Q Pine Rd E',889,'Q',NULL,'Pine','Rd','E',NULL,'Attn: Accounting',NULL,NULL,'Sonoma',1,1004,NULL,'95476',NULL,1228,38.277147,-122.47058,0,NULL,NULL,NULL),(88,130,3,1,0,'686P Green Ave E',686,'P',NULL,'Green','Ave','E',NULL,'Churchgate',NULL,NULL,'Blanchard',1,1014,NULL,'51630',NULL,1228,40.588924,-95.21254,0,NULL,NULL,NULL),(89,181,2,0,0,'686P Green Ave E',686,'P',NULL,'Green','Ave','E',NULL,'Churchgate',NULL,NULL,'Blanchard',1,1014,NULL,'51630',NULL,1228,40.588924,-95.21254,0,NULL,NULL,88),(90,62,3,1,0,'708W Dowlen Ave SE',708,'W',NULL,'Dowlen','Ave','SE',NULL,'Attn: Accounting',NULL,NULL,'Port Salerno',1,1008,NULL,'34992',NULL,1228,27.110182,-80.454196,0,NULL,NULL,NULL),(91,139,2,1,0,'708W Dowlen Ave SE',708,'W',NULL,'Dowlen','Ave','SE',NULL,'Attn: Accounting',NULL,NULL,'Port Salerno',1,1008,NULL,'34992',NULL,1228,27.110182,-80.454196,0,NULL,NULL,90),(92,45,3,1,0,'470T Pine Dr SE',470,'T',NULL,'Pine','Dr','SE',NULL,'Payables Dept.',NULL,NULL,'Elk Falls',1,1015,NULL,'67345',NULL,1228,37.37477,-96.19019,0,NULL,NULL,NULL),(93,176,2,1,0,'470T Pine Dr SE',470,'T',NULL,'Pine','Dr','SE',NULL,'Payables Dept.',NULL,NULL,'Elk Falls',1,1015,NULL,'67345',NULL,1228,37.37477,-96.19019,0,NULL,NULL,92),(94,197,3,1,0,'778T Pine Path NE',778,'T',NULL,'Pine','Path','NE',NULL,'Mailstop 101',NULL,NULL,'Fairview',1,1015,NULL,'66425',NULL,1228,39.811818,-95.72861,0,NULL,NULL,NULL),(95,163,3,1,0,'510Z College Ln NE',510,'Z',NULL,'College','Ln','NE',NULL,'Attn: Accounting',NULL,NULL,'Gerald',1,1024,NULL,'63037',NULL,1228,38.412764,-91.3246,0,NULL,NULL,NULL),(96,49,2,0,0,'510Z College Ln NE',510,'Z',NULL,'College','Ln','NE',NULL,'Attn: Accounting',NULL,NULL,'Gerald',1,1024,NULL,'63037',NULL,1228,38.412764,-91.3246,0,NULL,NULL,95),(97,89,3,1,0,'790M Bay Path NW',790,'M',NULL,'Bay','Path','NW',NULL,'c/o OPDC',NULL,NULL,'Hubbard',1,1034,NULL,'44425',NULL,1228,41.166743,-80.57733,0,NULL,NULL,NULL),(98,132,2,1,0,'790M Bay Path NW',790,'M',NULL,'Bay','Path','NW',NULL,'c/o OPDC',NULL,NULL,'Hubbard',1,1034,NULL,'44425',NULL,1228,41.166743,-80.57733,0,NULL,NULL,97),(99,160,3,1,0,'963M Cadell Rd E',963,'M',NULL,'Cadell','Rd','E',NULL,'c/o PO Plus',NULL,NULL,'Fernandina Beach',1,1008,NULL,'32035',NULL,1228,30.551558,-81.698422,0,NULL,NULL,NULL),(100,103,2,1,0,'963M Cadell Rd E',963,'M',NULL,'Cadell','Rd','E',NULL,'c/o PO Plus',NULL,NULL,'Fernandina Beach',1,1008,NULL,'32035',NULL,1228,30.551558,-81.698422,0,NULL,NULL,99),(101,149,3,1,0,'65A Bay Ave E',65,'A',NULL,'Bay','Ave','E',NULL,'Churchgate',NULL,NULL,'El Paso',1,1042,NULL,'88549',NULL,1228,31.694842,-106.299987,0,NULL,NULL,NULL),(102,61,1,1,0,'650S College Ave NE',650,'S',NULL,'College','Ave','NE',NULL,NULL,NULL,NULL,'Carmichael',1,1004,NULL,'95609',NULL,1228,38.650335,-121.327214,0,NULL,NULL,48),(103,146,1,1,0,'650S College Ave NE',650,'S',NULL,'College','Ave','NE',NULL,NULL,NULL,NULL,'Carmichael',1,1004,NULL,'95609',NULL,1228,38.650335,-121.327214,0,NULL,NULL,48),(104,169,1,1,0,'650S College Ave NE',650,'S',NULL,'College','Ave','NE',NULL,NULL,NULL,NULL,'Carmichael',1,1004,NULL,'95609',NULL,1228,38.650335,-121.327214,0,NULL,NULL,48),(105,150,1,1,0,'650S College Ave NE',650,'S',NULL,'College','Ave','NE',NULL,NULL,NULL,NULL,'Carmichael',1,1004,NULL,'95609',NULL,1228,38.650335,-121.327214,0,NULL,NULL,48),(106,198,1,1,0,'778C Second St NE',778,'C',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Magnolia',1,1034,NULL,'44643',NULL,1228,40.646529,-81.30882,0,NULL,NULL,49),(107,5,1,0,0,'778C Second St NE',778,'C',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Magnolia',1,1034,NULL,'44643',NULL,1228,40.646529,-81.30882,0,NULL,NULL,49),(108,145,1,1,0,'778C Second St NE',778,'C',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Magnolia',1,1034,NULL,'44643',NULL,1228,40.646529,-81.30882,0,NULL,NULL,49),(109,156,1,1,0,'847W Martin Luther King Way NW',847,'W',NULL,'Martin Luther King','Way','NW',NULL,NULL,NULL,NULL,'Nogal',1,1030,NULL,'88341',NULL,1228,33.520074,-105.73072,0,NULL,NULL,NULL),(110,36,1,1,0,'823R Bay Pl NE',823,'R',NULL,'Bay','Pl','NE',NULL,NULL,NULL,NULL,'Coronado',1,1004,NULL,'92118',NULL,1228,32.682727,-117.17441,0,NULL,NULL,50),(111,114,1,1,0,'823R Bay Pl NE',823,'R',NULL,'Bay','Pl','NE',NULL,NULL,NULL,NULL,'Coronado',1,1004,NULL,'92118',NULL,1228,32.682727,-117.17441,0,NULL,NULL,50),(112,137,1,0,0,'823R Bay Pl NE',823,'R',NULL,'Bay','Pl','NE',NULL,NULL,NULL,NULL,'Coronado',1,1004,NULL,'92118',NULL,1228,32.682727,-117.17441,0,NULL,NULL,50),(113,136,1,1,0,'823R Bay Pl NE',823,'R',NULL,'Bay','Pl','NE',NULL,NULL,NULL,NULL,'Coronado',1,1004,NULL,'92118',NULL,1228,32.682727,-117.17441,0,NULL,NULL,50),(114,179,1,1,0,'632Z Caulder Dr E',632,'Z',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Wichita',1,1015,NULL,'67211',NULL,1228,37.667175,-97.31917,0,NULL,NULL,51),(115,142,1,1,0,'632Z Caulder Dr E',632,'Z',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Wichita',1,1015,NULL,'67211',NULL,1228,37.667175,-97.31917,0,NULL,NULL,51),(116,2,1,1,0,'632Z Caulder Dr E',632,'Z',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Wichita',1,1015,NULL,'67211',NULL,1228,37.667175,-97.31917,0,NULL,NULL,51),(117,20,1,1,0,'85B Maple Path SE',85,'B',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Beech Island',1,1039,NULL,'29842',NULL,1228,33.443562,-81.87994,0,NULL,NULL,NULL),(118,3,1,1,0,'64N Jackson Path N',64,'N',NULL,'Jackson','Path','N',NULL,NULL,NULL,NULL,'Palm Harbor',1,1008,NULL,'34682',NULL,1228,27.891809,-82.724763,0,NULL,NULL,52),(119,50,1,1,0,'64N Jackson Path N',64,'N',NULL,'Jackson','Path','N',NULL,NULL,NULL,NULL,'Palm Harbor',1,1008,NULL,'34682',NULL,1228,27.891809,-82.724763,0,NULL,NULL,52),(120,70,1,1,0,'64N Jackson Path N',64,'N',NULL,'Jackson','Path','N',NULL,NULL,NULL,NULL,'Palm Harbor',1,1008,NULL,'34682',NULL,1228,27.891809,-82.724763,0,NULL,NULL,52),(121,58,1,1,0,'727C Jackson Path S',727,'C',NULL,'Jackson','Path','S',NULL,NULL,NULL,NULL,'Bowling Green',1,1045,NULL,'22427',NULL,1228,38.042346,-77.30833,0,NULL,NULL,NULL),(122,155,1,1,0,'796O Cadell Pl N',796,'O',NULL,'Cadell','Pl','N',NULL,NULL,NULL,NULL,'Brave',1,1037,NULL,'15316',NULL,1228,39.743424,-80.26376,0,NULL,NULL,53),(123,22,1,1,0,'796O Cadell Pl N',796,'O',NULL,'Cadell','Pl','N',NULL,NULL,NULL,NULL,'Brave',1,1037,NULL,'15316',NULL,1228,39.743424,-80.26376,0,NULL,NULL,53),(124,124,1,1,0,'796O Cadell Pl N',796,'O',NULL,'Cadell','Pl','N',NULL,NULL,NULL,NULL,'Brave',1,1037,NULL,'15316',NULL,1228,39.743424,-80.26376,0,NULL,NULL,53),(125,42,1,1,0,'796O Cadell Pl N',796,'O',NULL,'Cadell','Pl','N',NULL,NULL,NULL,NULL,'Brave',1,1037,NULL,'15316',NULL,1228,39.743424,-80.26376,0,NULL,NULL,53),(126,67,1,1,0,'849N El Camino Ave E',849,'N',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Macon',1,1009,NULL,'31213',NULL,1228,32.839289,-83.638752,0,NULL,NULL,54),(127,170,1,1,0,'849N El Camino Ave E',849,'N',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Macon',1,1009,NULL,'31213',NULL,1228,32.839289,-83.638752,0,NULL,NULL,54),(128,71,1,1,0,'849N El Camino Ave E',849,'N',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Macon',1,1009,NULL,'31213',NULL,1228,32.839289,-83.638752,0,NULL,NULL,54),(129,56,1,1,0,'849N El Camino Ave E',849,'N',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Macon',1,1009,NULL,'31213',NULL,1228,32.839289,-83.638752,0,NULL,NULL,54),(130,40,1,1,0,'910L Northpoint Ln SE',910,'L',NULL,'Northpoint','Ln','SE',NULL,NULL,NULL,NULL,'Burgoon',1,1034,NULL,'43407',NULL,1228,41.277969,-83.24578,0,NULL,NULL,55),(131,80,1,1,0,'910L Northpoint Ln SE',910,'L',NULL,'Northpoint','Ln','SE',NULL,NULL,NULL,NULL,'Burgoon',1,1034,NULL,'43407',NULL,1228,41.277969,-83.24578,0,NULL,NULL,55),(132,135,1,0,0,'910L Northpoint Ln SE',910,'L',NULL,'Northpoint','Ln','SE',NULL,NULL,NULL,NULL,'Burgoon',1,1034,NULL,'43407',NULL,1228,41.277969,-83.24578,0,NULL,NULL,55),(133,120,1,1,0,'29P Main Dr E',29,'P',NULL,'Main','Dr','E',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79903',NULL,1228,31.786221,-106.44583,0,NULL,NULL,NULL),(134,86,1,1,0,'706Y Green Blvd S',706,'Y',NULL,'Green','Blvd','S',NULL,NULL,NULL,NULL,'Pocahontas',1,1045,NULL,'24635',NULL,1228,37.305821,-81.34697,0,NULL,NULL,56),(135,125,1,1,0,'706Y Green Blvd S',706,'Y',NULL,'Green','Blvd','S',NULL,NULL,NULL,NULL,'Pocahontas',1,1045,NULL,'24635',NULL,1228,37.305821,-81.34697,0,NULL,NULL,56),(136,35,1,1,0,'706Y Green Blvd S',706,'Y',NULL,'Green','Blvd','S',NULL,NULL,NULL,NULL,'Pocahontas',1,1045,NULL,'24635',NULL,1228,37.305821,-81.34697,0,NULL,NULL,56),(137,140,1,1,0,'706Y Green Blvd S',706,'Y',NULL,'Green','Blvd','S',NULL,NULL,NULL,NULL,'Pocahontas',1,1045,NULL,'24635',NULL,1228,37.305821,-81.34697,0,NULL,NULL,56),(138,162,1,1,0,'344J Green Ln NW',344,'J',NULL,'Green','Ln','NW',NULL,NULL,NULL,NULL,'Olean',1,1031,NULL,'14760',NULL,1228,42.076574,-78.42744,0,NULL,NULL,57),(139,177,1,1,0,'344J Green Ln NW',344,'J',NULL,'Green','Ln','NW',NULL,NULL,NULL,NULL,'Olean',1,1031,NULL,'14760',NULL,1228,42.076574,-78.42744,0,NULL,NULL,57),(140,129,1,1,0,'344J Green Ln NW',344,'J',NULL,'Green','Ln','NW',NULL,NULL,NULL,NULL,'Olean',1,1031,NULL,'14760',NULL,1228,42.076574,-78.42744,0,NULL,NULL,57),(141,122,1,1,0,'353X Bay Ave S',353,'X',NULL,'Bay','Ave','S',NULL,NULL,NULL,NULL,'Davidsonville',1,1019,NULL,'21035',NULL,1228,38.931312,-76.65248,0,NULL,NULL,NULL),(142,17,1,1,0,'91B States Blvd NW',91,'B',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Badger',1,1014,NULL,'50516',NULL,1228,42.624944,-94.13904,0,NULL,NULL,58),(143,159,1,1,0,'91B States Blvd NW',91,'B',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Badger',1,1014,NULL,'50516',NULL,1228,42.624944,-94.13904,0,NULL,NULL,58),(144,189,1,1,0,'91B States Blvd NW',91,'B',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Badger',1,1014,NULL,'50516',NULL,1228,42.624944,-94.13904,0,NULL,NULL,58),(145,118,1,1,0,'91B States Blvd NW',91,'B',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Badger',1,1014,NULL,'50516',NULL,1228,42.624944,-94.13904,0,NULL,NULL,58),(146,151,1,1,0,'528Q Van Ness Blvd W',528,'Q',NULL,'Van Ness','Blvd','W',NULL,NULL,NULL,NULL,'Sylacauga',1,1000,NULL,'35150',NULL,1228,33.185782,-86.25105,0,NULL,NULL,59),(147,168,1,1,0,'528Q Van Ness Blvd W',528,'Q',NULL,'Van Ness','Blvd','W',NULL,NULL,NULL,NULL,'Sylacauga',1,1000,NULL,'35150',NULL,1228,33.185782,-86.25105,0,NULL,NULL,59),(148,7,1,1,0,'528Q Van Ness Blvd W',528,'Q',NULL,'Van Ness','Blvd','W',NULL,NULL,NULL,NULL,'Sylacauga',1,1000,NULL,'35150',NULL,1228,33.185782,-86.25105,0,NULL,NULL,59),(149,161,1,0,0,'863C Green Pl W',863,'C',NULL,'Green','Pl','W',NULL,NULL,NULL,NULL,'Woodacre',1,1004,NULL,'94973',NULL,1228,38.007639,-122.63914,0,NULL,NULL,NULL),(150,191,1,1,0,'299R Van Ness Ave W',299,'R',NULL,'Van Ness','Ave','W',NULL,NULL,NULL,NULL,'Milwaukee',1,1048,NULL,'53268',NULL,1228,43.038513,-87.909584,0,NULL,NULL,60),(151,138,1,1,0,'299R Van Ness Ave W',299,'R',NULL,'Van Ness','Ave','W',NULL,NULL,NULL,NULL,'Milwaukee',1,1048,NULL,'53268',NULL,1228,43.038513,-87.909584,0,NULL,NULL,60),(152,117,1,1,0,'299R Van Ness Ave W',299,'R',NULL,'Van Ness','Ave','W',NULL,NULL,NULL,NULL,'Milwaukee',1,1048,NULL,'53268',NULL,1228,43.038513,-87.909584,0,NULL,NULL,60),(153,25,1,1,0,'724E Dowlen Way N',724,'E',NULL,'Dowlen','Way','N',NULL,NULL,NULL,NULL,'Grundy',1,1045,NULL,'24614',NULL,1228,37.296213,-82.05775,0,NULL,NULL,NULL),(154,54,1,1,0,'210M Bay Way W',210,'M',NULL,'Bay','Way','W',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77060',NULL,1228,29.933367,-95.39916,0,NULL,NULL,61),(155,79,1,1,0,'210M Bay Way W',210,'M',NULL,'Bay','Way','W',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77060',NULL,1228,29.933367,-95.39916,0,NULL,NULL,61),(156,28,1,1,0,'210M Bay Way W',210,'M',NULL,'Bay','Way','W',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77060',NULL,1228,29.933367,-95.39916,0,NULL,NULL,61),(157,184,1,1,0,'210M Bay Way W',210,'M',NULL,'Bay','Way','W',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77060',NULL,1228,29.933367,-95.39916,0,NULL,NULL,61),(158,72,1,1,0,'358V Martin Luther King Dr SW',358,'V',NULL,'Martin Luther King','Dr','SW',NULL,NULL,NULL,NULL,'Elrosa',1,1022,NULL,'56325',NULL,1228,45.562459,-94.94661,0,NULL,NULL,62),(159,200,1,1,0,'358V Martin Luther King Dr SW',358,'V',NULL,'Martin Luther King','Dr','SW',NULL,NULL,NULL,NULL,'Elrosa',1,1022,NULL,'56325',NULL,1228,45.562459,-94.94661,0,NULL,NULL,62),(160,112,1,1,0,'358V Martin Luther King Dr SW',358,'V',NULL,'Martin Luther King','Dr','SW',NULL,NULL,NULL,NULL,'Elrosa',1,1022,NULL,'56325',NULL,1228,45.562459,-94.94661,0,NULL,NULL,62),(161,127,1,1,0,'358V Martin Luther King Dr SW',358,'V',NULL,'Martin Luther King','Dr','SW',NULL,NULL,NULL,NULL,'Elrosa',1,1022,NULL,'56325',NULL,1228,45.562459,-94.94661,0,NULL,NULL,62),(162,85,1,1,0,'343Y Second Ave S',343,'Y',NULL,'Second','Ave','S',NULL,NULL,NULL,NULL,'Rockholds',1,1016,NULL,'40759',NULL,1228,36.817151,-84.05917,0,NULL,NULL,63),(163,38,1,1,0,'343Y Second Ave S',343,'Y',NULL,'Second','Ave','S',NULL,NULL,NULL,NULL,'Rockholds',1,1016,NULL,'40759',NULL,1228,36.817151,-84.05917,0,NULL,NULL,63),(164,77,1,1,0,'343Y Second Ave S',343,'Y',NULL,'Second','Ave','S',NULL,NULL,NULL,NULL,'Rockholds',1,1016,NULL,'40759',NULL,1228,36.817151,-84.05917,0,NULL,NULL,63),(165,190,1,1,0,'343Y Second Ave S',343,'Y',NULL,'Second','Ave','S',NULL,NULL,NULL,NULL,'Rockholds',1,1016,NULL,'40759',NULL,1228,36.817151,-84.05917,0,NULL,NULL,63),(166,33,1,1,0,'444O Northpoint Dr NE',444,'O',NULL,'Northpoint','Dr','NE',NULL,NULL,NULL,NULL,'Sergeant Bluff',1,1014,NULL,'51054',NULL,1228,42.38556,-96.34194,0,NULL,NULL,64),(167,121,1,1,0,'444O Northpoint Dr NE',444,'O',NULL,'Northpoint','Dr','NE',NULL,NULL,NULL,NULL,'Sergeant Bluff',1,1014,NULL,'51054',NULL,1228,42.38556,-96.34194,0,NULL,NULL,64),(168,103,1,0,0,'444O Northpoint Dr NE',444,'O',NULL,'Northpoint','Dr','NE',NULL,NULL,NULL,NULL,'Sergeant Bluff',1,1014,NULL,'51054',NULL,1228,42.38556,-96.34194,0,NULL,NULL,64),(169,13,1,1,0,'444O Northpoint Dr NE',444,'O',NULL,'Northpoint','Dr','NE',NULL,NULL,NULL,NULL,'Sergeant Bluff',1,1014,NULL,'51054',NULL,1228,42.38556,-96.34194,0,NULL,NULL,64),(170,126,1,1,0,'14R Bay Dr SE',14,'R',NULL,'Bay','Dr','SE',NULL,NULL,NULL,NULL,'Central Islip',1,1031,NULL,'11722',NULL,1228,40.784874,-73.19924,0,NULL,NULL,65),(171,63,1,1,0,'14R Bay Dr SE',14,'R',NULL,'Bay','Dr','SE',NULL,NULL,NULL,NULL,'Central Islip',1,1031,NULL,'11722',NULL,1228,40.784874,-73.19924,0,NULL,NULL,65),(172,69,1,1,0,'14R Bay Dr SE',14,'R',NULL,'Bay','Dr','SE',NULL,NULL,NULL,NULL,'Central Islip',1,1031,NULL,'11722',NULL,1228,40.784874,-73.19924,0,NULL,NULL,65),(173,175,1,1,0,'79M Main Way N',79,'M',NULL,'Main','Way','N',NULL,NULL,NULL,NULL,'Choctaw',1,1035,NULL,'73020',NULL,1228,35.465363,-97.26645,0,NULL,NULL,NULL),(174,133,1,1,0,'54P Northpoint Path E',54,'P',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Clatonia',1,1026,NULL,'68328',NULL,1228,40.473614,-96.84511,0,NULL,NULL,66),(175,15,1,1,0,'54P Northpoint Path E',54,'P',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Clatonia',1,1026,NULL,'68328',NULL,1228,40.473614,-96.84511,0,NULL,NULL,66),(176,37,1,0,0,'54P Northpoint Path E',54,'P',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Clatonia',1,1026,NULL,'68328',NULL,1228,40.473614,-96.84511,0,NULL,NULL,66),(177,84,1,1,0,'714W Martin Luther King Path E',714,'W',NULL,'Martin Luther King','Path','E',NULL,NULL,NULL,NULL,'Reno',1,1027,NULL,'89599',NULL,1228,40.541218,-119.586934,0,NULL,NULL,NULL),(178,51,1,1,0,'573M College Blvd SE',573,'M',NULL,'College','Blvd','SE',NULL,NULL,NULL,NULL,'Merkel',1,1042,NULL,'79536',NULL,1228,32.473679,-100.02753,0,NULL,NULL,67),(179,132,1,0,0,'573M College Blvd SE',573,'M',NULL,'College','Blvd','SE',NULL,NULL,NULL,NULL,'Merkel',1,1042,NULL,'79536',NULL,1228,32.473679,-100.02753,0,NULL,NULL,67),(180,41,1,1,0,'573M College Blvd SE',573,'M',NULL,'College','Blvd','SE',NULL,NULL,NULL,NULL,'Merkel',1,1042,NULL,'79536',NULL,1228,32.473679,-100.02753,0,NULL,NULL,67),(181,34,1,1,0,'573M College Blvd SE',573,'M',NULL,'College','Blvd','SE',NULL,NULL,NULL,NULL,'Merkel',1,1042,NULL,'79536',NULL,1228,32.473679,-100.02753,0,NULL,NULL,67),(182,NULL,1,1,1,'14S El Camino Way E',14,'S',NULL,'El Camino','Way',NULL,NULL,NULL,NULL,NULL,'Collinsville',NULL,1006,NULL,'6022',NULL,1228,41.8328,-72.9253,0,NULL,NULL,NULL),(183,NULL,1,1,1,'11B Woodbridge Path SW',11,'B',NULL,'Woodbridge','Path',NULL,NULL,NULL,NULL,NULL,'Dayton',NULL,1034,NULL,'45417',NULL,1228,39.7531,-84.2471,0,NULL,NULL,NULL),(184,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); +INSERT INTO `civicrm_address` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `street_address`, `street_number`, `street_number_suffix`, `street_number_predirectional`, `street_name`, `street_type`, `street_number_postdirectional`, `street_unit`, `supplemental_address_1`, `supplemental_address_2`, `supplemental_address_3`, `city`, `county_id`, `state_province_id`, `postal_code_suffix`, `postal_code`, `usps_adc`, `country_id`, `geo_code_1`, `geo_code_2`, `manual_geo_code`, `timezone`, `name`, `master_id`) VALUES + (1,138,1,1,0,'459D Dowlen Dr SW',459,'D',NULL,'Dowlen','Dr','SW',NULL,NULL,NULL,NULL,'Carpenter',1,1049,NULL,'82054',NULL,1228,41.064212,-104.34107,0,NULL,NULL,NULL), + (2,21,1,1,0,'718R Woodbridge St E',718,'R',NULL,'Woodbridge','St','E',NULL,NULL,NULL,NULL,'Ventura',1,1014,NULL,'50482',NULL,1228,43.124246,-93.48259,0,NULL,NULL,NULL), + (3,85,1,1,0,'830V Maple Rd E',830,'V',NULL,'Maple','Rd','E',NULL,NULL,NULL,NULL,'Newport Center',1,1044,NULL,'05857',NULL,1228,44.944231,-72.30054,0,NULL,NULL,NULL), + (4,128,1,1,0,'430V College St E',430,'V',NULL,'College','St','E',NULL,NULL,NULL,NULL,'Madison',1,1041,NULL,'37116',NULL,1228,36.186605,-86.785248,0,NULL,NULL,NULL), + (5,53,1,1,0,'175Z Jackson St W',175,'Z',NULL,'Jackson','St','W',NULL,NULL,NULL,NULL,'Fairchild',1,1048,NULL,'54741',NULL,1228,44.601345,-90.98854,0,NULL,NULL,NULL), + (6,14,1,1,0,'26S Lincoln Blvd W',26,'S',NULL,'Lincoln','Blvd','W',NULL,NULL,NULL,NULL,'San Francisco',1,1004,NULL,'94151',NULL,1228,37.784827,-122.727802,0,NULL,NULL,NULL), + (7,191,1,1,0,'424B Northpoint Blvd S',424,'B',NULL,'Northpoint','Blvd','S',NULL,NULL,NULL,NULL,'Sadsburyville',1,1037,NULL,'19369',NULL,1228,39.985257,-75.88984,0,NULL,NULL,NULL), + (8,50,1,1,0,'210Z Woodbridge Way SE',210,'Z',NULL,'Woodbridge','Way','SE',NULL,NULL,NULL,NULL,'Shawnee',1,1035,NULL,'74807',NULL,1228,35.306375,-96.935924,0,NULL,NULL,NULL), + (9,5,1,1,0,'899L El Camino Blvd NE',899,'L',NULL,'El Camino','Blvd','NE',NULL,NULL,NULL,NULL,'New Orleans',1,1017,NULL,'70126',NULL,1228,30.016002,-90.01972,0,NULL,NULL,NULL), + (10,173,1,1,0,'380X Green Path SE',380,'X',NULL,'Green','Path','SE',NULL,NULL,NULL,NULL,'Tupelo',1,1023,NULL,'38804',NULL,1228,34.272374,-88.6822,0,NULL,NULL,NULL), + (11,190,1,1,0,'15J Green Dr SE',15,'J',NULL,'Green','Dr','SE',NULL,NULL,NULL,NULL,'Fort Blackmore',1,1045,NULL,'24250',NULL,1228,36.759614,-82.59473,0,NULL,NULL,NULL), + (12,23,1,1,0,'682Z Lincoln Blvd SE',682,'Z',NULL,'Lincoln','Blvd','SE',NULL,NULL,NULL,NULL,'Kennesaw',1,1009,NULL,'30144',NULL,1228,34.038949,-84.59706,0,NULL,NULL,NULL), + (13,199,1,1,0,'13P States Ave S',13,'P',NULL,'States','Ave','S',NULL,NULL,NULL,NULL,'Albuquerque',1,1030,NULL,'87116',NULL,1228,35.053147,-106.55102,0,NULL,NULL,NULL), + (14,25,1,1,0,'19E Woodbridge Ln W',19,'E',NULL,'Woodbridge','Ln','W',NULL,NULL,NULL,NULL,'Rollinsford',1,1028,NULL,'03805',NULL,1228,43.285282,-70.930684,0,NULL,NULL,NULL), + (15,11,1,1,0,'712J Pine Pl NW',712,'J',NULL,'Pine','Pl','NW',NULL,NULL,NULL,NULL,'Liberal',1,1024,NULL,'64762',NULL,1228,37.555366,-94.51496,0,NULL,NULL,NULL), + (16,20,1,1,0,'419H Beech St N',419,'H',NULL,'Beech','St','N',NULL,NULL,NULL,NULL,'Spearman',1,1042,NULL,'79081',NULL,1228,36.185112,-101.18783,0,NULL,NULL,NULL), + (17,117,1,1,0,'570K El Camino Rd N',570,'K',NULL,'El Camino','Rd','N',NULL,NULL,NULL,NULL,'Eau Claire',1,1037,NULL,'16030',NULL,1228,41.135335,-79.79791,0,NULL,NULL,NULL), + (18,44,1,1,0,'525J El Camino Pl NE',525,'J',NULL,'El Camino','Pl','NE',NULL,NULL,NULL,NULL,'Solebury',1,1037,NULL,'18638',NULL,1228,40.384588,-75.058245,0,NULL,NULL,NULL), + (19,146,1,1,0,'991J Bay Blvd NW',991,'J',NULL,'Bay','Blvd','NW',NULL,NULL,NULL,NULL,'Sacramento',1,1004,NULL,'95817',NULL,1228,38.551106,-121.45996,0,NULL,NULL,NULL), + (20,192,1,1,0,'24C Jackson Blvd E',24,'C',NULL,'Jackson','Blvd','E',NULL,NULL,NULL,NULL,'Laughlin',1,1027,NULL,'89028',NULL,1228,35.013978,-114.6447,0,NULL,NULL,NULL), + (21,122,1,1,0,'767T Maple Path E',767,'T',NULL,'Maple','Path','E',NULL,NULL,NULL,NULL,'Everly',1,1014,NULL,'51338',NULL,1228,43.193363,-95.31854,0,NULL,NULL,NULL), + (22,33,1,1,0,'85B Pine Pl NW',85,'B',NULL,'Pine','Pl','NW',NULL,NULL,NULL,NULL,'Cantril',1,1014,NULL,'52542',NULL,1228,40.649744,-92.0662,0,NULL,NULL,NULL), + (23,149,1,1,0,'700S College Ln N',700,'S',NULL,'College','Ln','N',NULL,NULL,NULL,NULL,'San Diego',1,1004,NULL,'92193',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), + (24,100,1,1,0,'924B Pine Way E',924,'B',NULL,'Pine','Way','E',NULL,NULL,NULL,NULL,'Hamel',1,1022,NULL,'55340',NULL,1228,45.07343,-93.56455,0,NULL,NULL,NULL), + (25,2,1,1,0,'477B Beech Ave E',477,'B',NULL,'Beech','Ave','E',NULL,NULL,NULL,NULL,'Holabird',1,1040,NULL,'57540',NULL,1228,44.466602,-99.61724,0,NULL,NULL,NULL), + (26,26,1,1,0,'958R Beech Ln S',958,'R',NULL,'Beech','Ln','S',NULL,NULL,NULL,NULL,'Charleston',1,1039,NULL,'29409',NULL,1228,32.84885,-79.85773,0,NULL,NULL,NULL), + (27,186,1,1,0,'391B Woodbridge Way S',391,'B',NULL,'Woodbridge','Way','S',NULL,NULL,NULL,NULL,'Leona',1,1042,NULL,'75850',NULL,1228,31.134863,-95.93312,0,NULL,NULL,NULL), + (28,110,1,1,0,'842O Northpoint Way S',842,'O',NULL,'Northpoint','Way','S',NULL,NULL,NULL,NULL,'Chester',1,1037,NULL,'19013',NULL,1228,39.84697,-75.37444,0,NULL,NULL,NULL), + (29,71,1,1,0,'887Z Beech Ln SE',887,'Z',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Minneapolis',1,1022,NULL,'55446',NULL,1228,45.039312,-93.47988,0,NULL,NULL,NULL), + (30,189,1,1,0,'759V Lincoln Rd W',759,'V',NULL,'Lincoln','Rd','W',NULL,NULL,NULL,NULL,'Parker',1,1011,NULL,'83438',NULL,1228,44.319199,-111.60171,0,NULL,NULL,NULL), + (31,10,1,1,0,'89C Maple Dr NE',89,'C',NULL,'Maple','Dr','NE',NULL,NULL,NULL,NULL,'Stevensville',1,1021,NULL,'49127',NULL,1228,42.015092,-86.51351,0,NULL,NULL,NULL), + (32,115,1,1,0,'769W Green Path N',769,'W',NULL,'Green','Path','N',NULL,NULL,NULL,NULL,'San Diego',1,1004,NULL,'92169',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), + (33,38,1,1,0,'924Q Maple Blvd NW',924,'Q',NULL,'Maple','Blvd','NW',NULL,NULL,NULL,NULL,'Rosemead',1,1004,NULL,'91770',NULL,1228,34.066143,-118.08475,0,NULL,NULL,NULL), + (34,156,1,1,0,'842P Northpoint St NW',842,'P',NULL,'Northpoint','St','NW',NULL,NULL,NULL,NULL,'Tecate',1,1004,NULL,'91987',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), + (35,103,1,1,0,'495N Northpoint Rd NW',495,'N',NULL,'Northpoint','Rd','NW',NULL,NULL,NULL,NULL,'Salinas',1,1004,NULL,'93905',NULL,1228,36.681161,-121.61538,0,NULL,NULL,NULL), + (36,68,1,1,0,'672C Green St W',672,'C',NULL,'Green','St','W',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80251',NULL,1228,39.738752,-104.408349,0,NULL,NULL,NULL), + (37,176,1,1,0,'294Z Maple Way NE',294,'Z',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Providence',1,1038,NULL,'02901',NULL,1228,41.82275,-71.414451,0,NULL,NULL,NULL), + (38,49,1,1,0,'194C Lincoln Ln S',194,'C',NULL,'Lincoln','Ln','S',NULL,NULL,NULL,NULL,'Amelia Court House',1,1045,NULL,'23002',NULL,1228,37.338511,-77.95893,0,NULL,NULL,NULL), + (39,75,1,1,0,'385Q Main Ln SE',385,'Q',NULL,'Main','Ln','SE',NULL,NULL,NULL,NULL,'Tacoma',1,1046,NULL,'98411',NULL,1228,47.066193,-122.113223,0,NULL,NULL,NULL), + (40,162,1,1,0,'407E Lincoln Rd NE',407,'E',NULL,'Lincoln','Rd','NE',NULL,NULL,NULL,NULL,'Danville',1,1037,NULL,'17822',NULL,1228,40.967437,-76.604896,0,NULL,NULL,NULL), + (41,58,1,1,0,'411R Green Ave W',411,'R',NULL,'Green','Ave','W',NULL,NULL,NULL,NULL,'Omaha',1,1026,NULL,'68132',NULL,1228,41.26565,-95.99741,0,NULL,NULL,NULL), + (42,64,1,1,0,'971G Maple Ln E',971,'G',NULL,'Maple','Ln','E',NULL,NULL,NULL,NULL,'Tekoa',1,1046,NULL,'99033',NULL,1228,47.222328,-117.08133,0,NULL,NULL,NULL), + (43,35,1,1,0,'895F El Camino Blvd S',895,'F',NULL,'El Camino','Blvd','S',NULL,NULL,NULL,NULL,'Klondike',1,1042,NULL,'75448',NULL,1228,33.31215,-95.81737,0,NULL,NULL,NULL), + (44,51,1,1,0,'600Z Caulder Way N',600,'Z',NULL,'Caulder','Way','N',NULL,NULL,NULL,NULL,'Markleeville',1,1004,NULL,'96120',NULL,1228,38.76467,-119.85236,0,NULL,NULL,NULL), + (45,62,1,1,0,'303E Beech Pl SE',303,'E',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'North',1,1045,NULL,'23128',NULL,1228,37.456363,-76.43298,0,NULL,NULL,NULL), + (46,126,1,1,0,'272R Jackson Ln SW',272,'R',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33073',NULL,1228,26.305433,-80.18287,0,NULL,NULL,NULL), + (47,180,1,1,0,'492U Bay Dr E',492,'U',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Sewaren',1,1029,NULL,'07077',NULL,1228,40.553971,-74.25938,0,NULL,NULL,NULL), + (48,28,1,1,0,'601I Lincoln Ln W',601,'I',NULL,'Lincoln','Ln','W',NULL,NULL,NULL,NULL,'Lexington',1,1031,NULL,'12452',NULL,1228,42.223407,-74.386635,0,NULL,NULL,NULL), + (49,155,1,1,0,'889J Green Path E',889,'J',NULL,'Green','Path','E',NULL,NULL,NULL,NULL,'Smolan',1,1015,NULL,'67479',NULL,1228,38.702546,-97.642827,0,NULL,NULL,NULL), + (50,60,1,1,0,'985F Main Blvd SE',985,'F',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Brusly',1,1017,NULL,'70719',NULL,1228,30.384402,-91.25549,0,NULL,NULL,NULL), + (51,70,1,1,0,'171G Jackson St NE',171,'G',NULL,'Jackson','St','NE',NULL,NULL,NULL,NULL,'Worcester',1,1020,NULL,'01608',NULL,1228,42.261343,-71.80173,0,NULL,NULL,NULL), + (52,97,1,1,0,'456R Beech Dr W',456,'R',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Rochelle',1,1009,NULL,'31079',NULL,1228,31.933079,-83.45722,0,NULL,NULL,NULL), + (53,17,1,1,0,'194E States St E',194,'E',NULL,'States','St','E',NULL,NULL,NULL,NULL,'Bountiful',1,1043,NULL,'84011',NULL,1228,40.963547,-112.115984,0,NULL,NULL,NULL), + (54,147,1,1,0,'312I Green Rd NE',312,'I',NULL,'Green','Rd','NE',NULL,NULL,NULL,NULL,'Monrovia',1,1019,NULL,'21770',NULL,1228,39.354093,-77.24861,0,NULL,NULL,NULL), + (55,63,1,1,0,'186L Bay Rd NW',186,'L',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Orono',1,1018,NULL,'04473',NULL,1228,44.889249,-68.68177,0,NULL,NULL,NULL), + (56,167,1,1,0,'388N College St NE',388,'N',NULL,'College','St','NE',NULL,NULL,NULL,NULL,'Mount Carmel',1,1041,NULL,'37645',NULL,1228,36.560966,-82.65855,0,NULL,NULL,NULL), + (57,161,1,1,0,'300Q College Blvd NE',300,'Q',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75262',NULL,1228,32.767268,-96.777626,0,NULL,NULL,NULL), + (58,39,1,1,0,'961N Lincoln Ln SE',961,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Feather Falls',1,1004,NULL,'95940',NULL,1228,39.585648,-121.259009,0,NULL,NULL,NULL), + (59,109,1,1,0,'34H Van Ness St N',34,'H',NULL,'Van Ness','St','N',NULL,NULL,NULL,NULL,'Redlands',1,1004,NULL,'92374',NULL,1228,34.063264,-117.16888,0,NULL,NULL,NULL), + (60,171,1,1,0,'861B Caulder St NW',861,'B',NULL,'Caulder','St','NW',NULL,NULL,NULL,NULL,'Everton',1,1003,NULL,'72633',NULL,1228,36.150276,-92.89576,0,NULL,NULL,NULL), + (61,159,1,1,0,'544F Cadell Dr E',544,'F',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Marthaville',1,1017,NULL,'71450',NULL,1228,31.77112,-93.41547,0,NULL,NULL,NULL), + (62,12,1,1,0,'309U Caulder Pl NE',309,'U',NULL,'Caulder','Pl','NE',NULL,NULL,NULL,NULL,'Bethel',1,1018,NULL,'04217',NULL,1228,44.372129,-70.8175,0,NULL,NULL,NULL), + (63,188,1,1,0,'477B Van Ness Rd N',477,'B',NULL,'Van Ness','Rd','N',NULL,NULL,NULL,NULL,'Redford',1,1021,NULL,'48239',NULL,1228,42.379436,-83.29105,0,NULL,NULL,NULL), + (64,157,3,1,0,'751A Van Ness Path S',751,'A',NULL,'Van Ness','Path','S',NULL,'c/o PO Plus',NULL,NULL,'Milmay',1,1029,NULL,'08340',NULL,1228,39.437265,-74.87926,0,NULL,NULL,NULL), + (65,91,3,1,0,'741Z Dowlen Ln E',741,'Z',NULL,'Dowlen','Ln','E',NULL,'Subscriptions Dept',NULL,NULL,'Newton Junction',1,1028,NULL,'03859',NULL,1228,42.861915,-71.04002,0,NULL,NULL,NULL), + (66,13,3,1,0,'744J Lincoln Pl NW',744,'J',NULL,'Lincoln','Pl','NW',NULL,'Cuffe Parade',NULL,NULL,'Sacramento',1,1004,NULL,'94229',NULL,1228,38.377411,-121.444429,0,NULL,NULL,NULL), + (67,32,3,1,0,'74P Main Rd W',74,'P',NULL,'Main','Rd','W',NULL,'Mailstop 101',NULL,NULL,'Springfield',1,1034,NULL,'45502',NULL,1228,39.926617,-83.8128,0,NULL,NULL,NULL), + (68,87,3,1,0,'14Z Pine Ln SW',14,'Z',NULL,'Pine','Ln','SW',NULL,'Attn: Accounting',NULL,NULL,'Amf Ohare',1,1012,NULL,'60666',NULL,1228,41.968029,-87.891214,0,NULL,NULL,NULL), + (69,41,2,1,0,'14Z Pine Ln SW',14,'Z',NULL,'Pine','Ln','SW',NULL,'Attn: Accounting',NULL,NULL,'Amf Ohare',1,1012,NULL,'60666',NULL,1228,41.968029,-87.891214,0,NULL,NULL,68), + (70,65,3,1,0,'342S El Camino Dr NE',342,'S',NULL,'El Camino','Dr','NE',NULL,'c/o PO Plus',NULL,NULL,'Pennington',1,1042,NULL,'75856',NULL,1228,31.21349,-95.23475,0,NULL,NULL,NULL), + (71,182,3,1,0,'319Y Cadell Ave S',319,'Y',NULL,'Cadell','Ave','S',NULL,'Attn: Development',NULL,NULL,'Pasadena',1,1004,NULL,'91107',NULL,1228,34.151066,-118.08974,0,NULL,NULL,NULL), + (72,138,2,0,0,'319Y Cadell Ave S',319,'Y',NULL,'Cadell','Ave','S',NULL,'Attn: Development',NULL,NULL,'Pasadena',1,1004,NULL,'91107',NULL,1228,34.151066,-118.08974,0,NULL,NULL,71), + (73,6,3,1,0,'631S Van Ness Way SE',631,'S',NULL,'Van Ness','Way','SE',NULL,'Receiving',NULL,NULL,'Comstock',1,1022,NULL,'56525',NULL,1228,46.659932,-96.74693,0,NULL,NULL,NULL), + (74,53,2,0,0,'631S Van Ness Way SE',631,'S',NULL,'Van Ness','Way','SE',NULL,'Receiving',NULL,NULL,'Comstock',1,1022,NULL,'56525',NULL,1228,46.659932,-96.74693,0,NULL,NULL,73), + (75,168,3,1,0,'983A Maple Rd NE',983,'A',NULL,'Maple','Rd','NE',NULL,'Churchgate',NULL,NULL,'Allentown',1,1009,NULL,'31003',NULL,1228,32.600622,-83.22096,0,NULL,NULL,NULL), + (76,18,2,1,0,'983A Maple Rd NE',983,'A',NULL,'Maple','Rd','NE',NULL,'Churchgate',NULL,NULL,'Allentown',1,1009,NULL,'31003',NULL,1228,32.600622,-83.22096,0,NULL,NULL,75), + (77,36,3,1,0,'289H Green Pl NW',289,'H',NULL,'Green','Pl','NW',NULL,'Attn: Development',NULL,NULL,'Corpus Christi',1,1042,NULL,'78409',NULL,1228,27.806753,-97.50971,0,NULL,NULL,NULL), + (78,16,2,1,0,'289H Green Pl NW',289,'H',NULL,'Green','Pl','NW',NULL,'Attn: Development',NULL,NULL,'Corpus Christi',1,1042,NULL,'78409',NULL,1228,27.806753,-97.50971,0,NULL,NULL,77), + (79,4,3,1,0,'568F Martin Luther King Way NW',568,'F',NULL,'Martin Luther King','Way','NW',NULL,'Disbursements',NULL,NULL,'Dixon',1,1014,NULL,'52745',NULL,1228,41.73542,-90.77717,0,NULL,NULL,NULL), + (80,66,2,1,0,'568F Martin Luther King Way NW',568,'F',NULL,'Martin Luther King','Way','NW',NULL,'Disbursements',NULL,NULL,'Dixon',1,1014,NULL,'52745',NULL,1228,41.73542,-90.77717,0,NULL,NULL,79), + (81,143,3,1,0,'845U Main St E',845,'U',NULL,'Main','St','E',NULL,'Disbursements',NULL,NULL,'Fairfield',1,1029,NULL,'07004',NULL,1228,40.879049,-74.29378,0,NULL,NULL,NULL), + (82,79,3,1,0,'164Q Maple Ave S',164,'Q',NULL,'Maple','Ave','S',NULL,'Receiving',NULL,NULL,'Brooklyn',1,1031,NULL,'11228',NULL,1228,40.617563,-74.01168,0,NULL,NULL,NULL), + (83,3,2,1,0,'164Q Maple Ave S',164,'Q',NULL,'Maple','Ave','S',NULL,'Receiving',NULL,NULL,'Brooklyn',1,1031,NULL,'11228',NULL,1228,40.617563,-74.01168,0,NULL,NULL,82), + (84,61,3,1,0,'402I Bay Ave N',402,'I',NULL,'Bay','Ave','N',NULL,'Urgent',NULL,NULL,'Kiamesha Lake',1,1031,NULL,'12751',NULL,1228,41.679152,-74.657,0,NULL,NULL,NULL), + (85,153,2,1,0,'402I Bay Ave N',402,'I',NULL,'Bay','Ave','N',NULL,'Urgent',NULL,NULL,'Kiamesha Lake',1,1031,NULL,'12751',NULL,1228,41.679152,-74.657,0,NULL,NULL,84), + (86,19,3,1,0,'822H Second Dr E',822,'H',NULL,'Second','Dr','E',NULL,'Subscriptions Dept',NULL,NULL,'Hagar Shores',1,1021,NULL,'49039',NULL,1228,42.224757,-86.372276,0,NULL,NULL,NULL), + (87,72,3,1,0,'688I Lincoln Dr NW',688,'I',NULL,'Lincoln','Dr','NW',NULL,'Disbursements',NULL,NULL,'Bellmawr',1,1029,NULL,'08031',NULL,1228,39.867013,-75.09162,0,NULL,NULL,NULL), + (88,100,2,0,0,'688I Lincoln Dr NW',688,'I',NULL,'Lincoln','Dr','NW',NULL,'Disbursements',NULL,NULL,'Bellmawr',1,1029,NULL,'08031',NULL,1228,39.867013,-75.09162,0,NULL,NULL,87), + (89,181,3,1,0,'18X Woodbridge St SE',18,'X',NULL,'Woodbridge','St','SE',NULL,'Attn: Accounting',NULL,NULL,'Newington',1,1009,NULL,'30446',NULL,1228,32.567281,-81.48627,0,NULL,NULL,NULL), + (90,59,2,1,0,'18X Woodbridge St SE',18,'X',NULL,'Woodbridge','St','SE',NULL,'Attn: Accounting',NULL,NULL,'Newington',1,1009,NULL,'30446',NULL,1228,32.567281,-81.48627,0,NULL,NULL,89), + (91,174,3,1,0,'643B Cadell Ln W',643,'B',NULL,'Cadell','Ln','W',NULL,'Attn: Accounting',NULL,NULL,'Odessa',1,1042,NULL,'79762',NULL,1228,31.890374,-102.35398,0,NULL,NULL,NULL), + (92,69,3,1,0,'443H Dowlen Rd SE',443,'H',NULL,'Dowlen','Rd','SE',NULL,'Attn: Accounting',NULL,NULL,'Glencoe',1,1022,NULL,'55336',NULL,1228,44.773886,-94.17294,0,NULL,NULL,NULL), + (93,73,2,1,0,'443H Dowlen Rd SE',443,'H',NULL,'Dowlen','Rd','SE',NULL,'Attn: Accounting',NULL,NULL,'Glencoe',1,1022,NULL,'55336',NULL,1228,44.773886,-94.17294,0,NULL,NULL,92), + (94,74,3,1,0,'360O Martin Luther King Pl NW',360,'O',NULL,'Martin Luther King','Pl','NW',NULL,'Editorial Dept',NULL,NULL,'Maynard',1,1034,NULL,'43937',NULL,1228,40.130167,-80.877264,0,NULL,NULL,NULL), + (95,78,2,1,0,'360O Martin Luther King Pl NW',360,'O',NULL,'Martin Luther King','Pl','NW',NULL,'Editorial Dept',NULL,NULL,'Maynard',1,1034,NULL,'43937',NULL,1228,40.130167,-80.877264,0,NULL,NULL,94), + (96,92,1,1,0,'600Z Caulder Way N',600,'Z',NULL,'Caulder','Way','N',NULL,NULL,NULL,NULL,'Markleeville',1,1004,NULL,'96120',NULL,1228,38.76467,-119.85236,0,NULL,NULL,44), + (97,130,1,1,0,'600Z Caulder Way N',600,'Z',NULL,'Caulder','Way','N',NULL,NULL,NULL,NULL,'Markleeville',1,1004,NULL,'96120',NULL,1228,38.76467,-119.85236,0,NULL,NULL,44), + (98,55,1,1,0,'600Z Caulder Way N',600,'Z',NULL,'Caulder','Way','N',NULL,NULL,NULL,NULL,'Markleeville',1,1004,NULL,'96120',NULL,1228,38.76467,-119.85236,0,NULL,NULL,44), + (99,35,1,0,0,'600Z Caulder Way N',600,'Z',NULL,'Caulder','Way','N',NULL,NULL,NULL,NULL,'Markleeville',1,1004,NULL,'96120',NULL,1228,38.76467,-119.85236,0,NULL,NULL,44), + (100,42,1,1,0,'303E Beech Pl SE',303,'E',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'North',1,1045,NULL,'23128',NULL,1228,37.456363,-76.43298,0,NULL,NULL,45), + (101,123,1,1,0,'303E Beech Pl SE',303,'E',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'North',1,1045,NULL,'23128',NULL,1228,37.456363,-76.43298,0,NULL,NULL,45), + (102,108,1,1,0,'303E Beech Pl SE',303,'E',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'North',1,1045,NULL,'23128',NULL,1228,37.456363,-76.43298,0,NULL,NULL,45), + (103,3,1,0,0,'303E Beech Pl SE',303,'E',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'North',1,1045,NULL,'23128',NULL,1228,37.456363,-76.43298,0,NULL,NULL,45), + (104,113,1,1,0,'272R Jackson Ln SW',272,'R',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33073',NULL,1228,26.305433,-80.18287,0,NULL,NULL,46), + (105,118,1,1,0,'272R Jackson Ln SW',272,'R',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33073',NULL,1228,26.305433,-80.18287,0,NULL,NULL,46), + (106,101,1,1,0,'272R Jackson Ln SW',272,'R',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33073',NULL,1228,26.305433,-80.18287,0,NULL,NULL,46), + (107,40,1,1,0,'272R Jackson Ln SW',272,'R',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33073',NULL,1228,26.305433,-80.18287,0,NULL,NULL,46), + (108,140,1,1,0,'492U Bay Dr E',492,'U',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Sewaren',1,1029,NULL,'07077',NULL,1228,40.553971,-74.25938,0,NULL,NULL,47), + (109,142,1,1,0,'492U Bay Dr E',492,'U',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Sewaren',1,1029,NULL,'07077',NULL,1228,40.553971,-74.25938,0,NULL,NULL,47), + (110,135,1,1,0,'492U Bay Dr E',492,'U',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Sewaren',1,1029,NULL,'07077',NULL,1228,40.553971,-74.25938,0,NULL,NULL,47), + (111,132,1,1,0,'492U Bay Dr E',492,'U',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Sewaren',1,1029,NULL,'07077',NULL,1228,40.553971,-74.25938,0,NULL,NULL,47), + (112,116,1,1,0,'601I Lincoln Ln W',601,'I',NULL,'Lincoln','Ln','W',NULL,NULL,NULL,NULL,'Lexington',1,1031,NULL,'12452',NULL,1228,42.223407,-74.386635,0,NULL,NULL,48), + (113,102,1,1,0,'601I Lincoln Ln W',601,'I',NULL,'Lincoln','Ln','W',NULL,NULL,NULL,NULL,'Lexington',1,1031,NULL,'12452',NULL,1228,42.223407,-74.386635,0,NULL,NULL,48), + (114,29,1,1,0,'601I Lincoln Ln W',601,'I',NULL,'Lincoln','Ln','W',NULL,NULL,NULL,NULL,'Lexington',1,1031,NULL,'12452',NULL,1228,42.223407,-74.386635,0,NULL,NULL,48), + (115,111,1,1,0,'601I Lincoln Ln W',601,'I',NULL,'Lincoln','Ln','W',NULL,NULL,NULL,NULL,'Lexington',1,1031,NULL,'12452',NULL,1228,42.223407,-74.386635,0,NULL,NULL,48), + (116,195,1,1,0,'889J Green Path E',889,'J',NULL,'Green','Path','E',NULL,NULL,NULL,NULL,'Smolan',1,1015,NULL,'67479',NULL,1228,38.702546,-97.642827,0,NULL,NULL,49), + (117,183,1,1,0,'889J Green Path E',889,'J',NULL,'Green','Path','E',NULL,NULL,NULL,NULL,'Smolan',1,1015,NULL,'67479',NULL,1228,38.702546,-97.642827,0,NULL,NULL,49), + (118,24,1,1,0,'889J Green Path E',889,'J',NULL,'Green','Path','E',NULL,NULL,NULL,NULL,'Smolan',1,1015,NULL,'67479',NULL,1228,38.702546,-97.642827,0,NULL,NULL,49), + (119,95,1,1,0,'749F Dowlen Way W',749,'F',NULL,'Dowlen','Way','W',NULL,NULL,NULL,NULL,'Jenkins',1,1016,NULL,'41537',NULL,1228,37.192483,-82.6235,0,NULL,NULL,NULL), + (120,124,1,1,0,'985F Main Blvd SE',985,'F',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Brusly',1,1017,NULL,'70719',NULL,1228,30.384402,-91.25549,0,NULL,NULL,50), + (121,30,1,1,0,'985F Main Blvd SE',985,'F',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Brusly',1,1017,NULL,'70719',NULL,1228,30.384402,-91.25549,0,NULL,NULL,50), + (122,47,1,1,0,'985F Main Blvd SE',985,'F',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Brusly',1,1017,NULL,'70719',NULL,1228,30.384402,-91.25549,0,NULL,NULL,50), + (123,104,1,1,0,'497D El Camino Dr SW',497,'D',NULL,'El Camino','Dr','SW',NULL,NULL,NULL,NULL,'Washington',1,1050,NULL,'20534',NULL,1228,38.894075,-77.01254,0,NULL,NULL,NULL), + (124,77,1,1,0,'171G Jackson St NE',171,'G',NULL,'Jackson','St','NE',NULL,NULL,NULL,NULL,'Worcester',1,1020,NULL,'01608',NULL,1228,42.261343,-71.80173,0,NULL,NULL,51), + (125,175,1,1,0,'171G Jackson St NE',171,'G',NULL,'Jackson','St','NE',NULL,NULL,NULL,NULL,'Worcester',1,1020,NULL,'01608',NULL,1228,42.261343,-71.80173,0,NULL,NULL,51), + (126,94,1,1,0,'171G Jackson St NE',171,'G',NULL,'Jackson','St','NE',NULL,NULL,NULL,NULL,'Worcester',1,1020,NULL,'01608',NULL,1228,42.261343,-71.80173,0,NULL,NULL,51), + (127,99,1,1,0,'171G Jackson St NE',171,'G',NULL,'Jackson','St','NE',NULL,NULL,NULL,NULL,'Worcester',1,1020,NULL,'01608',NULL,1228,42.261343,-71.80173,0,NULL,NULL,51), + (128,82,1,1,0,'456R Beech Dr W',456,'R',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Rochelle',1,1009,NULL,'31079',NULL,1228,31.933079,-83.45722,0,NULL,NULL,52), + (129,148,1,1,0,'456R Beech Dr W',456,'R',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Rochelle',1,1009,NULL,'31079',NULL,1228,31.933079,-83.45722,0,NULL,NULL,52), + (130,187,1,1,0,'456R Beech Dr W',456,'R',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Rochelle',1,1009,NULL,'31079',NULL,1228,31.933079,-83.45722,0,NULL,NULL,52), + (131,80,1,1,0,'551H Cadell Ave NW',551,'H',NULL,'Cadell','Ave','NW',NULL,NULL,NULL,NULL,'Anaheim',1,1004,NULL,'92812',NULL,1228,33.640302,-117.769442,0,NULL,NULL,NULL), + (132,145,1,1,0,'194E States St E',194,'E',NULL,'States','St','E',NULL,NULL,NULL,NULL,'Bountiful',1,1043,NULL,'84011',NULL,1228,40.963547,-112.115984,0,NULL,NULL,53), + (133,105,1,1,0,'194E States St E',194,'E',NULL,'States','St','E',NULL,NULL,NULL,NULL,'Bountiful',1,1043,NULL,'84011',NULL,1228,40.963547,-112.115984,0,NULL,NULL,53), + (134,22,1,1,0,'194E States St E',194,'E',NULL,'States','St','E',NULL,NULL,NULL,NULL,'Bountiful',1,1043,NULL,'84011',NULL,1228,40.963547,-112.115984,0,NULL,NULL,53), + (135,193,1,1,0,'397T Beech Pl SE',397,'T',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'Riverton',1,1049,NULL,'82501',NULL,1228,43.013826,-108.34879,0,NULL,NULL,NULL), + (136,88,1,1,0,'312I Green Rd NE',312,'I',NULL,'Green','Rd','NE',NULL,NULL,NULL,NULL,'Monrovia',1,1019,NULL,'21770',NULL,1228,39.354093,-77.24861,0,NULL,NULL,54), + (137,141,1,1,0,'312I Green Rd NE',312,'I',NULL,'Green','Rd','NE',NULL,NULL,NULL,NULL,'Monrovia',1,1019,NULL,'21770',NULL,1228,39.354093,-77.24861,0,NULL,NULL,54), + (138,150,1,1,0,'312I Green Rd NE',312,'I',NULL,'Green','Rd','NE',NULL,NULL,NULL,NULL,'Monrovia',1,1019,NULL,'21770',NULL,1228,39.354093,-77.24861,0,NULL,NULL,54), + (139,43,1,1,0,'195C Beech Pl SE',195,'C',NULL,'Beech','Pl','SE',NULL,NULL,NULL,NULL,'Abbot',1,1018,NULL,'04406',NULL,1228,45.221933,-69.49039,0,NULL,NULL,NULL), + (140,136,1,1,0,'186L Bay Rd NW',186,'L',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Orono',1,1018,NULL,'04473',NULL,1228,44.889249,-68.68177,0,NULL,NULL,55), + (141,56,1,1,0,'186L Bay Rd NW',186,'L',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Orono',1,1018,NULL,'04473',NULL,1228,44.889249,-68.68177,0,NULL,NULL,55), + (142,200,1,1,0,'186L Bay Rd NW',186,'L',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Orono',1,1018,NULL,'04473',NULL,1228,44.889249,-68.68177,0,NULL,NULL,55), + (143,106,1,1,0,'186L Bay Rd NW',186,'L',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Orono',1,1018,NULL,'04473',NULL,1228,44.889249,-68.68177,0,NULL,NULL,55), + (144,152,1,1,0,'388N College St NE',388,'N',NULL,'College','St','NE',NULL,NULL,NULL,NULL,'Mount Carmel',1,1041,NULL,'37645',NULL,1228,36.560966,-82.65855,0,NULL,NULL,56), + (145,112,1,1,0,'388N College St NE',388,'N',NULL,'College','St','NE',NULL,NULL,NULL,NULL,'Mount Carmel',1,1041,NULL,'37645',NULL,1228,36.560966,-82.65855,0,NULL,NULL,56), + (146,197,1,1,0,'388N College St NE',388,'N',NULL,'College','St','NE',NULL,NULL,NULL,NULL,'Mount Carmel',1,1041,NULL,'37645',NULL,1228,36.560966,-82.65855,0,NULL,NULL,56), + (147,114,1,1,0,'388N College St NE',388,'N',NULL,'College','St','NE',NULL,NULL,NULL,NULL,'Mount Carmel',1,1041,NULL,'37645',NULL,1228,36.560966,-82.65855,0,NULL,NULL,56), + (148,166,1,1,0,'300Q College Blvd NE',300,'Q',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75262',NULL,1228,32.767268,-96.777626,0,NULL,NULL,57), + (149,76,1,1,0,'300Q College Blvd NE',300,'Q',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75262',NULL,1228,32.767268,-96.777626,0,NULL,NULL,57), + (150,15,1,1,0,'300Q College Blvd NE',300,'Q',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75262',NULL,1228,32.767268,-96.777626,0,NULL,NULL,57), + (151,170,1,1,0,'300Q College Blvd NE',300,'Q',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75262',NULL,1228,32.767268,-96.777626,0,NULL,NULL,57), + (152,7,1,1,0,'961N Lincoln Ln SE',961,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Feather Falls',1,1004,NULL,'95940',NULL,1228,39.585648,-121.259009,0,NULL,NULL,58), + (153,158,1,1,0,'961N Lincoln Ln SE',961,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Feather Falls',1,1004,NULL,'95940',NULL,1228,39.585648,-121.259009,0,NULL,NULL,58), + (154,134,1,1,0,'961N Lincoln Ln SE',961,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Feather Falls',1,1004,NULL,'95940',NULL,1228,39.585648,-121.259009,0,NULL,NULL,58), + (155,133,1,1,0,'242S Woodbridge Path NE',242,'S',NULL,'Woodbridge','Path','NE',NULL,NULL,NULL,NULL,'San Antonio',1,1042,NULL,'78299',NULL,1228,29.437532,-98.461582,0,NULL,NULL,NULL), + (156,129,1,1,0,'34H Van Ness St N',34,'H',NULL,'Van Ness','St','N',NULL,NULL,NULL,NULL,'Redlands',1,1004,NULL,'92374',NULL,1228,34.063264,-117.16888,0,NULL,NULL,59), + (157,164,1,1,0,'34H Van Ness St N',34,'H',NULL,'Van Ness','St','N',NULL,NULL,NULL,NULL,'Redlands',1,1004,NULL,'92374',NULL,1228,34.063264,-117.16888,0,NULL,NULL,59), + (158,54,1,1,0,'34H Van Ness St N',34,'H',NULL,'Van Ness','St','N',NULL,NULL,NULL,NULL,'Redlands',1,1004,NULL,'92374',NULL,1228,34.063264,-117.16888,0,NULL,NULL,59), + (159,151,1,1,0,'34H Van Ness St N',34,'H',NULL,'Van Ness','St','N',NULL,NULL,NULL,NULL,'Redlands',1,1004,NULL,'92374',NULL,1228,34.063264,-117.16888,0,NULL,NULL,59), + (160,198,1,1,0,'861B Caulder St NW',861,'B',NULL,'Caulder','St','NW',NULL,NULL,NULL,NULL,'Everton',1,1003,NULL,'72633',NULL,1228,36.150276,-92.89576,0,NULL,NULL,60), + (161,165,1,1,0,'861B Caulder St NW',861,'B',NULL,'Caulder','St','NW',NULL,NULL,NULL,NULL,'Everton',1,1003,NULL,'72633',NULL,1228,36.150276,-92.89576,0,NULL,NULL,60), + (162,153,1,0,0,'861B Caulder St NW',861,'B',NULL,'Caulder','St','NW',NULL,NULL,NULL,NULL,'Everton',1,1003,NULL,'72633',NULL,1228,36.150276,-92.89576,0,NULL,NULL,60), + (163,8,1,1,0,'861B Caulder St NW',861,'B',NULL,'Caulder','St','NW',NULL,NULL,NULL,NULL,'Everton',1,1003,NULL,'72633',NULL,1228,36.150276,-92.89576,0,NULL,NULL,60), + (164,120,1,1,0,'544F Cadell Dr E',544,'F',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Marthaville',1,1017,NULL,'71450',NULL,1228,31.77112,-93.41547,0,NULL,NULL,61), + (165,119,1,1,0,'544F Cadell Dr E',544,'F',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Marthaville',1,1017,NULL,'71450',NULL,1228,31.77112,-93.41547,0,NULL,NULL,61), + (166,9,1,1,0,'544F Cadell Dr E',544,'F',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Marthaville',1,1017,NULL,'71450',NULL,1228,31.77112,-93.41547,0,NULL,NULL,61), + (167,52,1,1,0,'544F Cadell Dr E',544,'F',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Marthaville',1,1017,NULL,'71450',NULL,1228,31.77112,-93.41547,0,NULL,NULL,61), + (168,86,1,1,0,'309U Caulder Pl NE',309,'U',NULL,'Caulder','Pl','NE',NULL,NULL,NULL,NULL,'Bethel',1,1018,NULL,'04217',NULL,1228,44.372129,-70.8175,0,NULL,NULL,62), + (169,131,1,1,0,'309U Caulder Pl NE',309,'U',NULL,'Caulder','Pl','NE',NULL,NULL,NULL,NULL,'Bethel',1,1018,NULL,'04217',NULL,1228,44.372129,-70.8175,0,NULL,NULL,62), + (170,73,1,0,0,'309U Caulder Pl NE',309,'U',NULL,'Caulder','Pl','NE',NULL,NULL,NULL,NULL,'Bethel',1,1018,NULL,'04217',NULL,1228,44.372129,-70.8175,0,NULL,NULL,62), + (171,139,1,1,0,'309U Caulder Pl NE',309,'U',NULL,'Caulder','Pl','NE',NULL,NULL,NULL,NULL,'Bethel',1,1018,NULL,'04217',NULL,1228,44.372129,-70.8175,0,NULL,NULL,62), + (172,137,1,1,0,'477B Van Ness Rd N',477,'B',NULL,'Van Ness','Rd','N',NULL,NULL,NULL,NULL,'Redford',1,1021,NULL,'48239',NULL,1228,42.379436,-83.29105,0,NULL,NULL,63), + (173,121,1,1,0,'477B Van Ness Rd N',477,'B',NULL,'Van Ness','Rd','N',NULL,NULL,NULL,NULL,'Redford',1,1021,NULL,'48239',NULL,1228,42.379436,-83.29105,0,NULL,NULL,63), + (174,172,1,1,0,'477B Van Ness Rd N',477,'B',NULL,'Van Ness','Rd','N',NULL,NULL,NULL,NULL,'Redford',1,1021,NULL,'48239',NULL,1228,42.379436,-83.29105,0,NULL,NULL,63), + (175,66,1,0,0,'358X Cadell Dr E',358,'X',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Port Clinton',1,1034,NULL,'43452',NULL,1228,41.512855,-82.92948,0,NULL,NULL,NULL), + (176,NULL,1,1,1,'14S El Camino Way E',14,'S',NULL,'El Camino','Way',NULL,NULL,NULL,NULL,NULL,'Collinsville',NULL,1006,NULL,'6022',NULL,1228,41.8328,-72.9253,0,NULL,NULL,NULL), + (177,NULL,1,1,1,'11B Woodbridge Path SW',11,'B',NULL,'Woodbridge','Path',NULL,NULL,NULL,NULL,NULL,'Dayton',NULL,1034,NULL,'45417',NULL,1228,39.7531,-84.2471,0,NULL,NULL,NULL), + (178,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_address` ENABLE KEYS */; UNLOCK TABLES; @@ -198,7 +1871,16 @@ UNLOCK TABLES; LOCK TABLES `civicrm_component` WRITE; /*!40000 ALTER TABLE `civicrm_component` DISABLE KEYS */; -INSERT INTO `civicrm_component` (`id`, `name`, `namespace`) VALUES (1,'CiviEvent','CRM_Event'),(2,'CiviContribute','CRM_Contribute'),(3,'CiviMember','CRM_Member'),(4,'CiviMail','CRM_Mailing'),(5,'CiviGrant','CRM_Grant'),(6,'CiviPledge','CRM_Pledge'),(7,'CiviCase','CRM_Case'),(8,'CiviReport','CRM_Report'),(9,'CiviCampaign','CRM_Campaign'); +INSERT INTO `civicrm_component` (`id`, `name`, `namespace`) VALUES + (1,'CiviEvent','CRM_Event'), + (2,'CiviContribute','CRM_Contribute'), + (3,'CiviMember','CRM_Member'), + (4,'CiviMail','CRM_Mailing'), + (5,'CiviGrant','CRM_Grant'), + (6,'CiviPledge','CRM_Pledge'), + (7,'CiviCase','CRM_Case'), + (8,'CiviReport','CRM_Report'), + (9,'CiviCampaign','CRM_Campaign'); /*!40000 ALTER TABLE `civicrm_component` ENABLE KEYS */; UNLOCK TABLES; @@ -208,7 +1890,208 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contact` WRITE; /*!40000 ALTER TABLE `civicrm_contact` DISABLE KEYS */; -INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2021-01-11 22:04:32'),(2,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Sanford','Mr. Sanford Dimitrov Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1968408302',NULL,'Sample Data','Sanford','','Dimitrov',3,1,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Dimitrov Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(3,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Reynolds, Brittney','Dr. Brittney Reynolds',NULL,NULL,NULL,'5',NULL,'Both','2908689139',NULL,'Sample Data','Brittney','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Dr. Brittney Reynolds',NULL,1,'1962-07-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(4,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Terry-Jones family','Terry-Jones family',NULL,NULL,NULL,'1',NULL,'Both','4585256',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry-Jones family',5,NULL,'Dear Terry-Jones family',2,NULL,'Terry-Jones family',NULL,NULL,NULL,0,NULL,'Terry-Jones family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(5,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Craig','Craig Parker II',NULL,NULL,NULL,'4',NULL,'Both','1038716533',NULL,'Sample Data','Craig','','Parker',NULL,3,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Parker II',NULL,2,NULL,0,NULL,NULL,NULL,'College Development Fund',NULL,NULL,113,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Angelika','Ms. Angelika ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','3508186749',NULL,'Sample Data','Angelika','','ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika ÅÄ…chowski',NULL,1,'1955-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(7,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Nicole','Nicole Wagner',NULL,NULL,NULL,'1',NULL,'Both','2843169462',NULL,'Sample Data','Nicole','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(8,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Wagner family','Wagner family',NULL,NULL,NULL,NULL,NULL,'Both','1570966486',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner family',5,NULL,'Dear Wagner family',2,NULL,'Wagner family',NULL,NULL,NULL,0,NULL,'Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Sherman','Sherman Adams II',NULL,NULL,NULL,'5',NULL,'Both','2610997591',NULL,'Sample Data','Sherman','V','Adams',NULL,3,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Adams II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mariaolsen85@lol.co.in','mariaolsen85@lol.co.in',NULL,NULL,NULL,NULL,NULL,'Both','443214971',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear mariaolsen85@lol.co.in',1,NULL,'Dear mariaolsen85@lol.co.in',1,NULL,'mariaolsen85@lol.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Irvin','Irvin Jones',NULL,NULL,NULL,NULL,NULL,'Both','1283789305',NULL,'Sample Data','Irvin','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Irvin Jones',NULL,NULL,'1976-10-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(12,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Lou','Lou González Sr.',NULL,NULL,NULL,'2',NULL,'Both','2316283556',NULL,'Sample Data','Lou','H','González',NULL,2,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou González Sr.',NULL,2,'1979-08-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(13,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Craig','Mr. Craig Terry',NULL,NULL,NULL,NULL,NULL,'Both','99954809',NULL,'Sample Data','Craig','E','Terry',3,NULL,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Terry',NULL,NULL,'1957-06-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(14,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Sonny','Sonny Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','3890759177',NULL,'Sample Data','Sonny','A','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Blackwell',NULL,2,'1947-07-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(15,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds-Nielsen, Laree','Laree McReynolds-Nielsen',NULL,NULL,NULL,'1',NULL,'Both','4052899559',NULL,'Sample Data','Laree','','McReynolds-Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree McReynolds-Nielsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(16,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Lee, Delana','Delana Lee',NULL,NULL,NULL,NULL,NULL,'Both','3418239378',NULL,'Sample Data','Delana','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Lee',NULL,NULL,'1943-12-07',0,NULL,NULL,NULL,'United Advocacy Alliance',NULL,NULL,141,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(17,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Patel, Bernadette','Dr. Bernadette Patel',NULL,NULL,NULL,'4',NULL,'Both','2696373355',NULL,'Sample Data','Bernadette','K','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Dr. Bernadette Patel',NULL,NULL,'1958-09-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(18,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Ashley','Ashley McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','68872917',NULL,'Sample Data','Ashley','M','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley McReynolds',NULL,1,'1951-07-07',1,'2020-01-30',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(19,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'DÃaz, Toby','Toby DÃaz Jr.',NULL,NULL,NULL,NULL,NULL,'Both','393550532',NULL,'Sample Data','Toby','R','DÃaz',NULL,1,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby DÃaz Jr.',NULL,NULL,'1966-06-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrov.winford77@notmail.co.pl','dimitrov.winford77@notmail.co.pl',NULL,NULL,NULL,'4',NULL,'Both','580839554',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear dimitrov.winford77@notmail.co.pl',1,NULL,'Dear dimitrov.winford77@notmail.co.pl',1,NULL,'dimitrov.winford77@notmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(21,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Van Ness Sustainability Academy','Van Ness Sustainability Academy',NULL,NULL,NULL,NULL,NULL,'Both','2264583247',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Sustainability Academy',NULL,NULL,NULL,0,NULL,NULL,135,'Van Ness Sustainability Academy',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(22,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Margaret','Margaret Bachman',NULL,NULL,NULL,'5',NULL,'Both','2110616060',NULL,'Sample Data','Margaret','X','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Bachman',NULL,1,'2006-12-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(23,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov, Shad','Mr. Shad Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','583180877',NULL,'Sample Data','Shad','A','Dimitrov',3,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Mr. Shad Dimitrov',NULL,2,'1975-12-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Princess','Princess Olsen',NULL,NULL,NULL,'2',NULL,'Both','13405309',NULL,'Sample Data','Princess','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Olsen',NULL,1,'1988-04-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:47'),(25,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Norris','Norris Terry',NULL,NULL,NULL,NULL,NULL,'Both','3663735328',NULL,'Sample Data','Norris','L','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Terry',NULL,2,'1977-03-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(26,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Parker family','Parker family',NULL,NULL,NULL,'2',NULL,'Both','425242179',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker family',5,NULL,'Dear Parker family',2,NULL,'Parker family',NULL,NULL,NULL,0,NULL,'Parker family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Clint','Clint Cooper',NULL,NULL,NULL,NULL,NULL,'Both','303284897',NULL,'Sample Data','Clint','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Cooper',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(28,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Clint','Clint McReynolds Sr.',NULL,NULL,NULL,'3',NULL,'Both','3847785527',NULL,'Sample Data','Clint','','McReynolds',NULL,2,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint McReynolds Sr.',NULL,2,'2014-03-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Billy','Billy Wilson',NULL,NULL,NULL,NULL,NULL,'Both','93183395',NULL,'Sample Data','Billy','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,'Local Health Partnership',NULL,NULL,153,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(30,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Nielsen, Teresa','Teresa Nielsen',NULL,NULL,NULL,'4',NULL,'Both','1054810060',NULL,'Sample Data','Teresa','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Nielsen',NULL,1,'1991-09-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(31,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,'3',NULL,'Both','1110516799',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jones family',5,NULL,'Dear Jones family',2,NULL,'Jones family',NULL,NULL,NULL,0,NULL,'Jones family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(32,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds-Nielsen family','McReynolds-Nielsen family',NULL,NULL,NULL,NULL,NULL,'Both','1225009784',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear McReynolds-Nielsen family',5,NULL,'Dear McReynolds-Nielsen family',2,NULL,'McReynolds-Nielsen family',NULL,NULL,NULL,0,NULL,'McReynolds-Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(33,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell-Terry, Jacob','Dr. Jacob Terrell-Terry Sr.',NULL,NULL,NULL,'2',NULL,'Both','3216355190',NULL,'Sample Data','Jacob','','Terrell-Terry',4,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Dr. Jacob Terrell-Terry Sr.',NULL,NULL,'1983-07-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Sherman','Sherman Barkley',NULL,NULL,NULL,'3',NULL,'Both','926028399',NULL,'Sample Data','Sherman','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Barkley',NULL,NULL,'1991-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(35,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jensen-Deforest, Jacob','Jacob Jensen-Deforest III',NULL,NULL,NULL,NULL,NULL,'Both','2149775532',NULL,'Sample Data','Jacob','','Jensen-Deforest',NULL,4,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Jensen-Deforest III',NULL,2,'2000-05-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(36,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Jones, Scarlet','Dr. Scarlet Jones',NULL,NULL,NULL,'4',NULL,'Both','4237120359',NULL,'Sample Data','Scarlet','','Jones',4,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Dr. Scarlet Jones',NULL,1,'1962-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(37,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds-Nielsen, Kiara','Kiara McReynolds-Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','2592669630',NULL,'Sample Data','Kiara','Y','McReynolds-Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara McReynolds-Nielsen',NULL,NULL,'2000-03-19',0,NULL,NULL,NULL,'Ohio Arts Alliance',NULL,NULL,53,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Elina','Mrs. Elina Jensen',NULL,NULL,NULL,'2',NULL,'Both','2625728964',NULL,'Sample Data','Elina','G','Jensen',1,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Mrs. Elina Jensen',NULL,NULL,'1990-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Mei','Mei Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','1645477105',NULL,'Sample Data','Mei','Y','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Dimitrov',NULL,NULL,'1975-05-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(40,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jinas@airmail.co.uk','jinas@airmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','918586721',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jinas@airmail.co.uk',1,NULL,'Dear jinas@airmail.co.uk',1,NULL,'jinas@airmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(41,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Omar','Dr. Omar Barkley',NULL,NULL,NULL,'1',NULL,'Both','1166913408',NULL,'Sample Data','Omar','','Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Dr. Omar Barkley',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(42,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Bachman, Clint','Clint Bachman Jr.',NULL,NULL,NULL,NULL,NULL,'Both','934287156',NULL,'Sample Data','Clint','','Bachman',NULL,1,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Bachman Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(43,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,NULL,NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(44,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Illinois Culture Fund','Illinois Culture Fund',NULL,NULL,NULL,'3',NULL,'Both','107156479',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Illinois Culture Fund',NULL,NULL,NULL,0,NULL,NULL,NULL,'Illinois Culture Fund',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(45,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Kansas Health Center','Kansas Health Center',NULL,NULL,NULL,NULL,NULL,'Both','2852752016',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kansas Health Center',NULL,NULL,NULL,0,NULL,NULL,176,'Kansas Health Center',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Rebekah','Dr. Rebekah Wattson',NULL,NULL,NULL,NULL,NULL,'Both','289475581',NULL,'Sample Data','Rebekah','J','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Dr. Rebekah Wattson',NULL,1,'1965-04-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(47,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Green Action School','Green Action School',NULL,NULL,NULL,NULL,NULL,'Both','768662729',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Green Action School',NULL,NULL,NULL,0,NULL,NULL,NULL,'Green Action School',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(48,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Advocacy Association','Rural Advocacy Association',NULL,NULL,NULL,NULL,NULL,'Both','2244442002',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Advocacy Association',NULL,NULL,NULL,0,NULL,NULL,201,'Rural Advocacy Association',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Lashawnda','Lashawnda Parker',NULL,NULL,NULL,'1',NULL,'Both','1469017621',NULL,'Sample Data','Lashawnda','C','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Parker',NULL,1,'1997-11-26',0,NULL,NULL,NULL,'Friends Education School',NULL,NULL,163,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(50,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'se.reynolds36@spamalot.co.nz','se.reynolds36@spamalot.co.nz',NULL,NULL,NULL,'1',NULL,'Both','3388634698',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear se.reynolds36@spamalot.co.nz',1,NULL,'Dear se.reynolds36@spamalot.co.nz',1,NULL,'se.reynolds36@spamalot.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(51,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'abarkley@testing.co.nz','abarkley@testing.co.nz',NULL,NULL,NULL,'2',NULL,'Both','1646812998',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear abarkley@testing.co.nz',1,NULL,'Dear abarkley@testing.co.nz',1,NULL,'abarkley@testing.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Maxwell','Dr. Maxwell Parker',NULL,NULL,NULL,'3',NULL,'Both','2668760835',NULL,'Sample Data','Maxwell','R','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Dr. Maxwell Parker',NULL,2,'1952-08-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(53,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Ohio Arts Alliance','Ohio Arts Alliance',NULL,NULL,NULL,'1',NULL,'Both','134500646',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Ohio Arts Alliance',NULL,NULL,NULL,0,NULL,NULL,37,'Ohio Arts Alliance',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(54,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-McReynolds, Bernadette','Mrs. Bernadette Cruz-McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','686668680',NULL,'Sample Data','Bernadette','','Cruz-McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Mrs. Bernadette Cruz-McReynolds',NULL,NULL,'1962-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(55,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Pine Wellness Initiative','Pine Wellness Initiative',NULL,NULL,NULL,'3',NULL,'Both','1281020076',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pine Wellness Initiative',NULL,NULL,NULL,0,NULL,NULL,161,'Pine Wellness Initiative',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Bryon','Bryon Smith II',NULL,NULL,NULL,NULL,NULL,'Both','3610824393',NULL,'Sample Data','Bryon','','Smith',NULL,3,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Smith II',NULL,2,'1986-01-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Lou','Lou McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1805936303',NULL,'Sample Data','Lou','J','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou McReynolds',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Allan','Dr. Allan Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','2732914112',NULL,'Sample Data','Allan','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Dr. Allan Reynolds',NULL,2,'1997-06-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(59,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Lashawnda','Lashawnda Prentice',NULL,NULL,NULL,NULL,NULL,'Both','2396624366',NULL,'Sample Data','Lashawnda','K','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Prentice',NULL,1,'1980-05-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(60,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'jensenb@fishmail.co.in','jensenb@fishmail.co.in',NULL,NULL,NULL,'1',NULL,'Both','1072793496',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jensenb@fishmail.co.in',1,NULL,'Dear jensenb@fishmail.co.in',1,NULL,'jensenb@fishmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(61,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cooper, Laree','Dr. Laree Cooper',NULL,NULL,NULL,NULL,NULL,'Both','4213061637',NULL,'Sample Data','Laree','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Dr. Laree Cooper',NULL,1,'1973-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(62,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Florida Sports Fellowship','Florida Sports Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','3839771272',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Florida Sports Fellowship',NULL,NULL,NULL,0,NULL,NULL,139,'Florida Sports Fellowship',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Sherman','Sherman Jones',NULL,NULL,NULL,'3',NULL,'Both','4211495725',NULL,'Sample Data','Sherman','B','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Jones',NULL,2,'1986-08-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(64,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Maxwell','Maxwell Adams Jr.',NULL,NULL,NULL,'4',NULL,'Both','1901327060',NULL,'Sample Data','Maxwell','U','Adams',NULL,1,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Adams Jr.',NULL,2,'1991-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'carylonb72@fishmail.info','carylonb72@fishmail.info',NULL,NULL,NULL,NULL,NULL,'Both','3056173283',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear carylonb72@fishmail.info',1,NULL,'Dear carylonb72@fishmail.info',1,NULL,'carylonb72@fishmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:47'),(66,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Herminia','Herminia Jacobs',NULL,NULL,NULL,'5',NULL,'Both','4008108326',NULL,'Sample Data','Herminia','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Jacobs',NULL,NULL,'1984-10-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Kacey','Kacey McReynolds',NULL,NULL,NULL,'3',NULL,'Both','3079683979',NULL,'Sample Data','Kacey','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey McReynolds',NULL,NULL,'1975-06-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jeromebarkley@example.co.uk','jeromebarkley@example.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','2936037075',NULL,'Sample Data',NULL,NULL,NULL,3,1,NULL,NULL,1,NULL,'Dear jeromebarkley@example.co.uk',1,NULL,'Dear jeromebarkley@example.co.uk',1,NULL,'jeromebarkley@example.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,'Main Education Center',NULL,NULL,87,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Barry','Barry Jones',NULL,NULL,NULL,NULL,NULL,'Both','1410678296',NULL,'Sample Data','Barry','I','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Jones',NULL,2,'2011-11-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(70,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Jay','Jay Reynolds',NULL,NULL,NULL,'4',NULL,'Both','3874659678',NULL,'Sample Data','Jay','Z','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Reynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(71,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith-McReynolds, Kandace','Kandace Smith-McReynolds',NULL,NULL,NULL,'5',NULL,'Both','3371817142',NULL,'Sample Data','Kandace','M','Smith-McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Smith-McReynolds',NULL,NULL,'2011-09-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(72,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Josefa','Mrs. Josefa Reynolds',NULL,NULL,NULL,'3',NULL,'Both','2579265288',NULL,'Sample Data','Josefa','H','Reynolds',1,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Mrs. Josefa Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(73,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Müller Jr.',NULL,NULL,NULL,'1',NULL,'Both','1266385966',NULL,'Sample Data','BrzÄ™czysÅ‚aw','E','Müller',NULL,1,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Müller Jr.',NULL,2,'1979-03-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(74,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen, Merrie','Merrie Nielsen',NULL,NULL,NULL,'4',NULL,'Both','3023030184',NULL,'Sample Data','Merrie','H','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Nielsen',NULL,1,'1932-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(75,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Herminia','Mrs. Herminia Prentice',NULL,NULL,NULL,NULL,NULL,'Both','4072784830',NULL,'Sample Data','Herminia','Z','Prentice',1,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Mrs. Herminia Prentice',NULL,NULL,'1959-10-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(76,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'lwagner59@fishmail.com','lwagner59@fishmail.com',NULL,NULL,NULL,'4',NULL,'Both','2610486303',NULL,'Sample Data',NULL,NULL,NULL,3,4,NULL,NULL,1,NULL,'Dear lwagner59@fishmail.com',1,NULL,'Dear lwagner59@fishmail.com',1,NULL,'lwagner59@fishmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(77,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Merrie','Merrie Jensen',NULL,NULL,NULL,'3',NULL,'Both','3371244828',NULL,'Sample Data','Merrie','I','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Jensen',NULL,NULL,'1988-05-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Delana','Mrs. Delana Olsen',NULL,NULL,NULL,NULL,NULL,'Both','556761836',NULL,'Sample Data','Delana','Y','Olsen',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana Olsen',NULL,1,'1934-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(79,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Damaris','Damaris McReynolds',NULL,NULL,NULL,'5',NULL,'Both','2561970052',NULL,'Sample Data','Damaris','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris McReynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(80,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Allan','Mr. Allan Grant III',NULL,NULL,NULL,'5',NULL,'Both','2534249041',NULL,'Sample Data','Allan','F','Grant',3,4,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Grant III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(81,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Samuels, Justina','Justina Samuels',NULL,NULL,NULL,NULL,NULL,'Both','1737971561',NULL,'Sample Data','Justina','A','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Samuels',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(82,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Lawerence','Dr. Lawerence Zope',NULL,NULL,NULL,NULL,NULL,'Both','3328706365',NULL,'Sample Data','Lawerence','','Zope',4,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Dr. Lawerence Zope',NULL,2,'1989-06-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(83,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Carylon','Carylon Smith',NULL,NULL,NULL,'2',NULL,'Both','1296165885',NULL,'Sample Data','Carylon','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Smith',NULL,NULL,'1984-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Lincoln','Lincoln McReynolds',NULL,NULL,NULL,'4',NULL,'Both','2687392106',NULL,'Sample Data','Lincoln','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln McReynolds',NULL,2,'1971-01-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Felisha','Mrs. Felisha Jensen',NULL,NULL,NULL,NULL,NULL,'Both','45016701',NULL,'Sample Data','Felisha','X','Jensen',1,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Mrs. Felisha Jensen',NULL,1,'1969-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(86,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Deforest, Margaret','Ms. Margaret Deforest',NULL,NULL,NULL,'2',NULL,'Both','2531077628',NULL,'Sample Data','Margaret','','Deforest',2,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Ms. Margaret Deforest',NULL,1,'1976-03-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(87,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Main Education Center','Main Education Center',NULL,NULL,NULL,NULL,NULL,'Both','3693864473',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Main Education Center',NULL,NULL,NULL,0,NULL,NULL,68,'Main Education Center',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Irvin','Irvin Reynolds II',NULL,NULL,NULL,'4',NULL,'Both','4214895107',NULL,'Sample Data','Irvin','','Reynolds',NULL,3,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Irvin Reynolds II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(89,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Hubbard Education Center','Hubbard Education Center',NULL,NULL,NULL,'4',NULL,'Both','1260470465',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Hubbard Education Center',NULL,NULL,NULL,0,NULL,NULL,132,'Hubbard Education Center',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(90,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Teddy','Teddy Wagner',NULL,NULL,NULL,'3',NULL,'Both','796298897',NULL,'Sample Data','Teddy','W','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Wagner',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Shauna','Ms. Shauna Cruz',NULL,NULL,NULL,'4',NULL,'Both','3185339040',NULL,'Sample Data','Shauna','K','Cruz',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Cruz',NULL,1,'1934-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(92,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Landon','Landon Jameson',NULL,NULL,NULL,NULL,NULL,'Both','548600134',NULL,'Sample Data','Landon','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Jameson',NULL,2,'1989-11-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(93,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrovt@sample.co.pl','dimitrovt@sample.co.pl',NULL,NULL,NULL,'1',NULL,'Both','2108613926',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear dimitrovt@sample.co.pl',1,NULL,'Dear dimitrovt@sample.co.pl',1,NULL,'dimitrovt@sample.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:47'),(94,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,'4',NULL,'Both','2888062109',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Barkley family',5,NULL,'Dear Barkley family',2,NULL,'Barkley family',NULL,NULL,NULL,0,NULL,'Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(95,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'mz.samuels@mymail.co.pl','mz.samuels@mymail.co.pl',NULL,NULL,NULL,'5',NULL,'Both','3887898886',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mz.samuels@mymail.co.pl',1,NULL,'Dear mz.samuels@mymail.co.pl',1,NULL,'mz.samuels@mymail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(96,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,NULL,NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(97,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,'1',NULL,'Both','1669281794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel family',5,NULL,'Dear Patel family',2,NULL,'Patel family',NULL,NULL,NULL,0,NULL,'Patel family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(98,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Herminia','Mrs. Herminia Wagner',NULL,NULL,NULL,NULL,NULL,'Both','1890057520',NULL,'Sample Data','Herminia','','Wagner',1,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Mrs. Herminia Wagner',NULL,NULL,'1938-09-02',1,'2020-07-29',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(99,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Barkley, Ivey','Ivey Barkley',NULL,NULL,NULL,'3',NULL,'Both','2200674369',NULL,'Sample Data','Ivey','M','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(100,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Carylon','Carylon González',NULL,NULL,NULL,'4',NULL,'Both','3685317689',NULL,'Sample Data','Carylon','','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon González',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(101,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Müller, Jacob','Jacob Müller',NULL,NULL,NULL,NULL,NULL,'Both','176489544',NULL,'Sample Data','Jacob','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Müller',NULL,NULL,'1968-01-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(102,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Maxwell','Maxwell McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','961058467',NULL,'Sample Data','Maxwell','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell McReynolds',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(103,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Teddy','Teddy Terry',NULL,NULL,NULL,'3',NULL,'Both','1402049800',NULL,'Sample Data','Teddy','E','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Terry',NULL,2,'1999-01-24',0,NULL,NULL,NULL,'Florida Development Systems',NULL,NULL,160,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(104,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'re.mcreynolds25@sample.net','re.mcreynolds25@sample.net',NULL,NULL,NULL,NULL,NULL,'Both','1060715298',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear re.mcreynolds25@sample.net',1,NULL,'Dear re.mcreynolds25@sample.net',1,NULL,'re.mcreynolds25@sample.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(105,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Junko','Junko Reynolds',NULL,NULL,NULL,'3',NULL,'Both','1984549046',NULL,'Sample Data','Junko','Z','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Reynolds',NULL,NULL,'1982-07-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Eleonor','Eleonor Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2182789463',NULL,'Sample Data','Eleonor','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Barkley',NULL,NULL,'1980-04-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(107,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen family','Jensen family',NULL,NULL,NULL,NULL,NULL,'Both','797435572',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen family',5,NULL,'Dear Jensen family',2,NULL,'Jensen family',NULL,NULL,NULL,0,NULL,'Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Craig','Craig Parker III',NULL,NULL,NULL,NULL,NULL,'Both','1038716533',NULL,'Sample Data','Craig','','Parker',NULL,4,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Parker III',NULL,2,'1978-03-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(109,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Ivanov, Tanya','Tanya Ivanov',NULL,NULL,NULL,'1',NULL,'Both','2385741924',NULL,'Sample Data','Tanya','Q','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(110,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'nielsen.junko@fakemail.biz','nielsen.junko@fakemail.biz',NULL,NULL,NULL,'5',NULL,'Both','2000501273',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear nielsen.junko@fakemail.biz',1,NULL,'Dear nielsen.junko@fakemail.biz',1,NULL,'nielsen.junko@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(111,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Teresa','Teresa McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','2267068970',NULL,'Sample Data','Teresa','X','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa McReynolds',NULL,1,'1941-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(112,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Reynolds, Ray','Dr. Ray Reynolds Sr.',NULL,NULL,NULL,NULL,NULL,'Both','4106710934',NULL,'Sample Data','Ray','','Reynolds',4,2,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Dr. Ray Reynolds Sr.',NULL,2,'1985-07-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(113,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'College Development Fund','College Development Fund',NULL,NULL,NULL,'5',NULL,'Both','655448948',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'College Development Fund',NULL,NULL,NULL,0,NULL,NULL,5,'College Development Fund',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(114,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry-Jones, Josefa','Ms. Josefa Terry-Jones',NULL,NULL,NULL,'1',NULL,'Both','1207050813',NULL,'Sample Data','Josefa','','Terry-Jones',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Terry-Jones',NULL,NULL,'1987-03-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(115,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Pine Food Systems','Pine Food Systems',NULL,NULL,NULL,'5',NULL,'Both','2224347895',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pine Food Systems',NULL,NULL,NULL,0,NULL,NULL,NULL,'Pine Food Systems',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jones.lou@example.com','jones.lou@example.com',NULL,NULL,NULL,NULL,NULL,'Both','3683928131',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear jones.lou@example.com',1,NULL,'Dear jones.lou@example.com',1,NULL,'jones.lou@example.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(117,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Roland','Mr. Roland Terry II',NULL,NULL,NULL,NULL,NULL,'Both','3426797125',NULL,'Sample Data','Roland','','Terry',3,3,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Mr. Roland Terry II',NULL,2,'1987-11-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(118,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'patels@notmail.co.in','patels@notmail.co.in',NULL,NULL,NULL,'1',NULL,'Both','1359331683',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear patels@notmail.co.in',1,NULL,'Dear patels@notmail.co.in',1,NULL,'patels@notmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Betty','Betty Samson',NULL,NULL,NULL,'1',NULL,'Both','3629042466',NULL,'Sample Data','Betty','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Samson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(120,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Lou','Lou Grant II',NULL,NULL,NULL,NULL,NULL,'Both','155954418',NULL,'Sample Data','Lou','','Grant',NULL,3,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Grant II',NULL,NULL,'1975-12-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(121,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Ashlie','Ashlie Terry',NULL,NULL,NULL,NULL,NULL,'Both','1408134822',NULL,'Sample Data','Ashlie','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Terry',NULL,1,'2002-09-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Kenny','Mr. Kenny Cooper',NULL,NULL,NULL,NULL,NULL,'Both','613788882',NULL,'Sample Data','Kenny','','Cooper',3,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Mr. Kenny Cooper',NULL,2,'1968-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(123,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Dracut Software Collective','Dracut Software Collective',NULL,NULL,NULL,NULL,NULL,'Both','629034642',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dracut Software Collective',NULL,NULL,NULL,0,NULL,NULL,137,'Dracut Software Collective',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(124,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Betty','Betty Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2914699083',NULL,'Sample Data','Betty','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Bachman',NULL,1,'1979-09-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(125,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jensen-Deforest, Troy','Dr. Troy Jensen-Deforest Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3191001097',NULL,'Sample Data','Troy','','Jensen-Deforest',4,1,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Dr. Troy Jensen-Deforest Jr.',NULL,2,'1976-06-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Rebekah','Rebekah Jones',NULL,NULL,NULL,'2',NULL,'Both','1945051638',NULL,'Sample Data','Rebekah','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(127,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Shad','Mr. Shad Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3023273825',NULL,'Sample Data','Shad','Q','Reynolds',3,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Mr. Shad Reynolds',NULL,2,'1991-04-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(128,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov family','Dimitrov family',NULL,NULL,NULL,'1',NULL,'Both','3351288571',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Dimitrov family',5,NULL,'Dear Dimitrov family',2,NULL,'Dimitrov family',NULL,NULL,NULL,0,NULL,'Dimitrov family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(129,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper, Jay','Dr. Jay Cooper',NULL,NULL,NULL,'4',NULL,'Both','941520833',NULL,'Sample Data','Jay','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Dr. Jay Cooper',NULL,2,'1991-05-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(130,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Blanchard Action Systems','Blanchard Action Systems',NULL,NULL,NULL,NULL,NULL,'Both','2630530243',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Blanchard Action Systems',NULL,NULL,NULL,0,NULL,NULL,181,'Blanchard Action Systems',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(131,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jacobs, Kacey','Dr. Kacey Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','1510706462',NULL,'Sample Data','Kacey','','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Dr. Kacey Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Shauna','Shauna Barkley',NULL,NULL,NULL,'4',NULL,'Both','1145257394',NULL,'Sample Data','Shauna','J','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Barkley',NULL,1,NULL,0,NULL,NULL,NULL,'Hubbard Education Center',NULL,NULL,89,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Elizabeth','Mrs. Elizabeth Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3252450799',NULL,'Sample Data','Elizabeth','','Nielsen',1,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Mrs. Elizabeth Nielsen',NULL,1,'1990-11-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(134,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds family','McReynolds family',NULL,NULL,NULL,'3',NULL,'Both','3032680972',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear McReynolds family',5,NULL,'Dear McReynolds family',2,NULL,'McReynolds family',NULL,NULL,NULL,0,NULL,'McReynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Betty','Betty Grant',NULL,NULL,NULL,'2',NULL,'Both','200685072',NULL,'Sample Data','Betty','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Grant',NULL,1,'2014-10-02',0,NULL,NULL,NULL,'Van Ness Sustainability Academy',NULL,NULL,21,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(136,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Erik','Erik Terry',NULL,NULL,NULL,'5',NULL,'Both','4189171326',NULL,'Sample Data','Erik','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Terry',NULL,2,'1986-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(137,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry-Jones, BrzÄ™czysÅ‚aw','Dr. BrzÄ™czysÅ‚aw Terry-Jones Sr.',NULL,NULL,NULL,NULL,NULL,'Both','526422427',NULL,'Sample Data','BrzÄ™czysÅ‚aw','R','Terry-Jones',4,2,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dr. BrzÄ™czysÅ‚aw Terry-Jones Sr.',NULL,2,NULL,0,NULL,NULL,NULL,'Dracut Software Collective',NULL,NULL,123,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(138,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Omar','Mr. Omar Terry',NULL,NULL,NULL,'4',NULL,'Both','767854751',NULL,'Sample Data','Omar','','Terry',3,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar Terry',NULL,NULL,'1981-06-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(139,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Elizabeth','Elizabeth Roberts',NULL,NULL,NULL,'1',NULL,'Both','3104864980',NULL,'Sample Data','Elizabeth','K','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Roberts',NULL,1,'1992-01-26',0,NULL,NULL,NULL,'Florida Sports Fellowship',NULL,NULL,62,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(140,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jensen, Ray','Mr. Ray Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2879715845',NULL,'Sample Data','Ray','Q','Jensen',3,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Jensen',NULL,2,'1963-11-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(141,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'United Advocacy Alliance','United Advocacy Alliance',NULL,NULL,NULL,NULL,NULL,'Both','2372921211',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Advocacy Alliance',NULL,NULL,NULL,0,NULL,NULL,16,'United Advocacy Alliance',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(142,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, BrzÄ™czysÅ‚aw','Mr. BrzÄ™czysÅ‚aw Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','1759214817',NULL,'Sample Data','BrzÄ™czysÅ‚aw','K','Dimitrov',3,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Mr. BrzÄ™czysÅ‚aw Dimitrov',NULL,2,'1988-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'cruzf@testing.co.pl','cruzf@testing.co.pl',NULL,NULL,NULL,'2',NULL,'Both','3022732797',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear cruzf@testing.co.pl',1,NULL,'Dear cruzf@testing.co.pl',1,NULL,'cruzf@testing.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(144,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,'4',NULL,'Both','558108751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry family',5,NULL,'Dear Terry family',2,NULL,'Terry family',NULL,NULL,NULL,0,NULL,'Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Barry','Mr. Barry Parker',NULL,NULL,NULL,NULL,NULL,'Both','259830884',NULL,'Sample Data','Barry','L','Parker',3,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Parker',NULL,NULL,'1991-06-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(146,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cooper, Bernadette','Dr. Bernadette Cooper',NULL,NULL,NULL,'3',NULL,'Both','1160205929',NULL,'Sample Data','Bernadette','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Dr. Bernadette Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Alexia','Ms. Alexia Terry',NULL,NULL,NULL,NULL,NULL,'Both','1601599901',NULL,'Sample Data','Alexia','','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Ms. Alexia Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(148,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen-Deforest family','Jensen-Deforest family',NULL,NULL,NULL,NULL,NULL,'Both','3466315261',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen-Deforest family',5,NULL,'Dear Jensen-Deforest family',2,NULL,'Jensen-Deforest family',NULL,NULL,NULL,0,NULL,'Jensen-Deforest family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(149,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Bay Culture Initiative','Bay Culture Initiative',NULL,NULL,NULL,NULL,NULL,'Both','3165072325',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bay Culture Initiative',NULL,NULL,NULL,0,NULL,NULL,NULL,'Bay Culture Initiative',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(150,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Sonny','Dr. Sonny ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','3611935208',NULL,'Sample Data','Sonny','','ÅÄ…chowski',4,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Dr. Sonny ÅÄ…chowski',NULL,NULL,'1968-06-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(151,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts-Wagner, Sharyn','Sharyn Roberts-Wagner',NULL,NULL,NULL,'5',NULL,'Both','3340889672',NULL,'Sample Data','Sharyn','','Roberts-Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Roberts-Wagner',NULL,1,'1961-08-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(152,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Olsen, Jackson','Jackson Olsen',NULL,NULL,NULL,NULL,NULL,'Both','2108387664',NULL,'Sample Data','Jackson','A','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Olsen',NULL,2,'1960-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(153,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Local Health Partnership','Local Health Partnership',NULL,NULL,NULL,NULL,NULL,'Both','2090894266',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Local Health Partnership',NULL,NULL,NULL,0,NULL,NULL,29,'Local Health Partnership',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(154,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Wagner, Ashley','Mr. Ashley Wagner III',NULL,NULL,NULL,NULL,NULL,'Both','1660268830',NULL,'Sample Data','Ashley','X','Wagner',3,4,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mr. Ashley Wagner III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(155,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Carylon','Carylon Bachman',NULL,NULL,NULL,NULL,NULL,'Both','1159348459',NULL,'Sample Data','Carylon','N','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Bachman',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(156,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'parkers62@testing.biz','parkers62@testing.biz',NULL,NULL,NULL,'3',NULL,'Both','1772148902',NULL,'Sample Data',NULL,NULL,NULL,4,4,NULL,NULL,1,NULL,'Dear parkers62@testing.biz',1,NULL,'Dear parkers62@testing.biz',1,NULL,'parkers62@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(157,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Daren','Dr. Daren Jensen',NULL,NULL,NULL,'4',NULL,'Both','817039458',NULL,'Sample Data','Daren','R','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Dr. Daren Jensen',NULL,2,'1990-06-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(158,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Smith-McReynolds family','Smith-McReynolds family',NULL,NULL,NULL,'5',NULL,'Both','1495579570',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Smith-McReynolds family',5,NULL,'Dear Smith-McReynolds family',2,NULL,'Smith-McReynolds family',NULL,NULL,NULL,0,NULL,'Smith-McReynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(159,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Bryon','Mr. Bryon Patel',NULL,NULL,NULL,'4',NULL,'Both','1193139310',NULL,'Sample Data','Bryon','','Patel',3,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Mr. Bryon Patel',NULL,2,'1998-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(160,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Florida Development Systems','Florida Development Systems',NULL,NULL,NULL,NULL,NULL,'Both','3154151423',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Florida Development Systems',NULL,NULL,NULL,0,NULL,NULL,103,'Florida Development Systems',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(161,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wagner, Sherman','Sherman Wagner',NULL,NULL,NULL,'3',NULL,'Both','3748346179',NULL,'Sample Data','Sherman','Y','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Wagner',NULL,2,'1977-03-12',0,NULL,NULL,NULL,'Pine Wellness Initiative',NULL,NULL,55,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(162,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Justina','Justina Cooper',NULL,NULL,NULL,NULL,NULL,'Both','4063176516',NULL,'Sample Data','Justina','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Cooper',NULL,1,'1982-08-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(163,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Friends Education School','Friends Education School',NULL,NULL,NULL,'5',NULL,'Both','848731202',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Education School',NULL,NULL,NULL,0,NULL,NULL,49,'Friends Education School',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Esta','Dr. Esta González',NULL,NULL,NULL,'3',NULL,'Both','1219097283',NULL,'Sample Data','Esta','M','González',4,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Dr. Esta González',NULL,NULL,'1988-02-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(165,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','1133003930',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper family',5,NULL,'Dear Cooper family',2,NULL,'Cooper family',NULL,NULL,NULL,0,NULL,'Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Heidi','Dr. Heidi Grant',NULL,NULL,NULL,'5',NULL,'Both','46996647',NULL,'Sample Data','Heidi','','Grant',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Grant',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(167,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Allan','Mr. Allan Deforest III',NULL,NULL,NULL,NULL,NULL,'Both','2545747290',NULL,'Sample Data','Allan','Q','Deforest',3,4,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Deforest III',NULL,2,'1959-01-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(168,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Lawerence','Lawerence Wagner',NULL,NULL,NULL,'5',NULL,'Both','1509313186',NULL,'Sample Data','Lawerence','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Wagner',NULL,2,'1979-09-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(169,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'cooper.d.jerome@infomail.co.pl','cooper.d.jerome@infomail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','2052277386',NULL,'Sample Data',NULL,NULL,NULL,3,1,NULL,NULL,1,NULL,'Dear cooper.d.jerome@infomail.co.pl',1,NULL,'Dear cooper.d.jerome@infomail.co.pl',1,NULL,'cooper.d.jerome@infomail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(170,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith-McReynolds, Scott','Scott Smith-McReynolds',NULL,NULL,NULL,'1',NULL,'Both','2224831540',NULL,'Sample Data','Scott','','Smith-McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Smith-McReynolds',NULL,2,'2013-01-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(171,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Eleonor','Eleonor McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1720935960',NULL,'Sample Data','Eleonor','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(172,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Ashlie','Dr. Ashlie ÅÄ…chowski',NULL,NULL,NULL,'2',NULL,'Both','3338606881',NULL,'Sample Data','Ashlie','D','ÅÄ…chowski',4,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Dr. Ashlie ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(173,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Jensen, Junko','Junko Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2889888199',NULL,'Sample Data','Junko','M','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Jensen',NULL,NULL,'1998-05-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(174,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Grant family','Grant family',NULL,NULL,NULL,NULL,NULL,'Both','3228000340',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Grant family',5,NULL,'Dear Grant family',2,NULL,'Grant family',NULL,NULL,NULL,0,NULL,'Grant family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(175,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones, Sanford','Sanford Jones',NULL,NULL,NULL,'5',NULL,'Both','4129066974',NULL,'Sample Data','Sanford','E','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(176,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Shad','Shad DÃaz III',NULL,NULL,NULL,NULL,NULL,'Both','3351645154',NULL,'Sample Data','Shad','','DÃaz',NULL,4,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad DÃaz III',NULL,2,'1983-06-02',0,NULL,NULL,NULL,'Kansas Health Center',NULL,NULL,45,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(177,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper, Billy','Mr. Billy Cooper II',NULL,NULL,NULL,'3',NULL,'Both','1390528503',NULL,'Sample Data','Billy','X','Cooper',3,3,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Mr. Billy Cooper II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Roland','Dr. Roland Wagner',NULL,NULL,NULL,'4',NULL,'Both','1173293758',NULL,'Sample Data','Roland','','Wagner',4,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Dr. Roland Wagner',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Arlyne','Arlyne Dimitrov',NULL,NULL,NULL,'2',NULL,'Both','2024461314',NULL,'Sample Data','Arlyne','Z','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Dimitrov',NULL,NULL,'1996-08-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(180,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Bernadette','Bernadette González',NULL,NULL,NULL,'3',NULL,'Both','3507551861',NULL,'Sample Data','Bernadette','','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette González',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Bernadette','Bernadette Reynolds',NULL,NULL,NULL,'4',NULL,'Both','3235351596',NULL,'Sample Data','Bernadette','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,'Blanchard Action Systems',NULL,NULL,130,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(182,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','1133003930',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper family',5,NULL,'Dear Cooper family',2,NULL,'Cooper family',NULL,NULL,NULL,0,NULL,'Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(183,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,'4',NULL,'Both','558108751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry family',5,NULL,'Dear Terry family',2,NULL,'Terry family',NULL,NULL,NULL,0,NULL,'Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(184,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'winfordmcreynolds@sample.com','winfordmcreynolds@sample.com',NULL,NULL,NULL,'3',NULL,'Both','1588546099',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear winfordmcreynolds@sample.com',1,NULL,'Dear winfordmcreynolds@sample.com',1,NULL,'winfordmcreynolds@sample.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(185,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Margaret','Dr. Margaret Adams',NULL,NULL,NULL,NULL,NULL,'Both','2378565911',NULL,'Sample Data','Margaret','B','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Dr. Margaret Adams',NULL,NULL,'1997-04-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(186,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,NULL,NULL,'Both','1714131215',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman family',5,NULL,'Dear Bachman family',2,NULL,'Bachman family',NULL,NULL,NULL,0,NULL,'Bachman family',NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(187,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Elizabeth','Elizabeth Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2458618009',NULL,'Sample Data','Elizabeth','R','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Jacobs',NULL,1,'1974-07-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Maxwell','Maxwell Jameson Jr.',NULL,NULL,NULL,'1',NULL,'Both','1027858961',NULL,'Sample Data','Maxwell','','Jameson',NULL,1,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Jameson Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(189,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Patel, Kathlyn','Kathlyn Patel',NULL,NULL,NULL,'5',NULL,'Both','388767316',NULL,'Sample Data','Kathlyn','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Patel',NULL,1,'1973-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(190,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'jensen.miguel@infomail.info','jensen.miguel@infomail.info',NULL,NULL,NULL,'5',NULL,'Both','1412080390',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear jensen.miguel@infomail.info',1,NULL,'Dear jensen.miguel@infomail.info',1,NULL,'jensen.miguel@infomail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(191,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs-Terry, Margaret','Ms. Margaret Jacobs-Terry',NULL,NULL,NULL,'4',NULL,'Both','1332478570',NULL,'Sample Data','Margaret','D','Jacobs-Terry',2,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Ms. Margaret Jacobs-Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Allan','Allan Prentice Jr.',NULL,NULL,NULL,'4',NULL,'Both','2464878706',NULL,'Sample Data','Allan','G','Prentice',NULL,1,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Prentice Jr.',NULL,2,'1956-11-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(193,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Parker, Lawerence','Lawerence Parker Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2317515072',NULL,'Sample Data','Lawerence','','Parker',NULL,1,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Parker Jr.',NULL,2,'1947-03-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Iris','Dr. Iris Müller',NULL,NULL,NULL,NULL,NULL,'Both','1761286600',NULL,'Sample Data','Iris','','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Müller',NULL,NULL,'1944-06-15',1,'2020-03-05',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(195,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Lee, Landon','Landon Lee',NULL,NULL,NULL,NULL,NULL,'Both','4144706447',NULL,'Sample Data','Landon','Y','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Lee',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(196,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov, Carylon','Mrs. Carylon Ivanov',NULL,NULL,NULL,'1',NULL,'Both','3841280474',NULL,'Sample Data','Carylon','N','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Mrs. Carylon Ivanov',NULL,1,NULL,1,'2020-06-27',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(197,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Kansas Arts Academy','Kansas Arts Academy',NULL,NULL,NULL,'4',NULL,'Both','643460073',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kansas Arts Academy',NULL,NULL,NULL,0,NULL,NULL,NULL,'Kansas Arts Academy',NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(198,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones-Parker, Lashawnda','Dr. Lashawnda Jones-Parker',NULL,NULL,NULL,'4',NULL,'Both','1534300040',NULL,'Sample Data','Lashawnda','','Jones-Parker',4,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Dr. Lashawnda Jones-Parker',NULL,1,'1960-09-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(199,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Rodrigo','Rodrigo Patel',NULL,NULL,NULL,NULL,NULL,'Both','631852002',NULL,'Sample Data','Rodrigo','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Patel',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'),(200,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Kandace','Kandace Reynolds',NULL,NULL,NULL,'4',NULL,'Both','1783653514',NULL,'Sample Data','Kandace','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Reynolds',NULL,1,'2011-06-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-01-11 22:04:47','2021-01-11 22:04:49'),(201,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson, Beula','Dr. Beula Wattson',NULL,NULL,NULL,NULL,NULL,'Both','4074227652',NULL,'Sample Data','Beula','','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Dr. Beula Wattson',NULL,1,'1982-12-10',0,NULL,NULL,NULL,'Rural Advocacy Association',NULL,NULL,48,0,'2021-01-11 22:04:47','2021-01-11 22:04:48'); +INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES + (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2021-06-11 00:47:04'), + (2,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Carlos','Carlos Prentice',NULL,NULL,NULL,'5',NULL,'Both','2982859535',NULL,'Sample Data','Carlos','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Prentice',NULL,NULL,'1970-04-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (3,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Winford','Winford Prentice',NULL,NULL,NULL,'1',NULL,'Both','2762411160',NULL,'Sample Data','Winford','J','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford Prentice',NULL,2,NULL,0,NULL,NULL,NULL,'New York Peace Academy',NULL,NULL,79,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (4,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Martin Luther King Arts Trust','Martin Luther King Arts Trust',NULL,NULL,NULL,NULL,NULL,'Both','1416172647',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Arts Trust',NULL,NULL,NULL,0,NULL,NULL,66,'Martin Luther King Arts Trust',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Errol','Dr. Errol Bachman',NULL,NULL,NULL,NULL,NULL,'Both','305276862',NULL,'Sample Data','Errol','','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Dr. Errol Bachman',NULL,2,'1947-11-05',1,'2021-03-01',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (6,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Van Ness Software Fellowship','Van Ness Software Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','623052245',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Software Fellowship',NULL,NULL,NULL,0,NULL,NULL,53,'Van Ness Software Fellowship',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (7,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Nicole','Mrs. Nicole Wilson',NULL,NULL,NULL,'5',NULL,'Both','3125972405',NULL,'Sample Data','Nicole','Y','Wilson',1,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Mrs. Nicole Wilson',NULL,1,'1977-11-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (8,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson, Errol','Errol Samson',NULL,NULL,NULL,'2',NULL,'Both','1741040599',NULL,'Sample Data','Errol','C','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Samson',NULL,2,'1970-04-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Nicole','Dr. Nicole Parker',NULL,NULL,NULL,NULL,NULL,'Both','693554904',NULL,'Sample Data','Nicole','D','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Dr. Nicole Parker',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (10,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jensen, Bernadette','Ms. Bernadette Jensen',NULL,NULL,NULL,'1',NULL,'Both','513832212',NULL,'Sample Data','Bernadette','J','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Ms. Bernadette Jensen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'margaretgrant@notmail.co.nz','margaretgrant@notmail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','1099101361',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear margaretgrant@notmail.co.nz',1,NULL,'Dear margaretgrant@notmail.co.nz',1,NULL,'margaretgrant@notmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (12,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Grant family','Grant family',NULL,NULL,NULL,NULL,NULL,'Both','3228000340',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Grant family',5,NULL,'Dear Grant family',2,NULL,'Grant family',NULL,NULL,NULL,0,NULL,'Grant family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (13,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Sacramento Sports Academy','Sacramento Sports Academy',NULL,NULL,NULL,NULL,NULL,'Both','762268720',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Sacramento Sports Academy',NULL,NULL,NULL,0,NULL,NULL,NULL,'Sacramento Sports Academy',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (14,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Rolando','Mr. Rolando Müller',NULL,NULL,NULL,'4',NULL,'Both','2804310363',NULL,'Sample Data','Rolando','','Müller',3,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Mr. Rolando Müller',NULL,2,'1978-11-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (15,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Merrie','Merrie Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2483805039',NULL,'Sample Data','Merrie','G','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Jerome','Dr. Jerome McReynolds',NULL,NULL,NULL,'4',NULL,'Both','1615308753',NULL,'Sample Data','Jerome','','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome McReynolds',NULL,2,NULL,0,NULL,NULL,NULL,'Corpus Christi Agriculture Alliance',NULL,NULL,36,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (17,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,NULL,NULL,'Both','1110516799',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jones family',5,NULL,'Dear Jones family',2,NULL,'Jones family',NULL,NULL,NULL,0,NULL,'Jones family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (18,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Megan','Dr. Megan Wilson',NULL,NULL,NULL,NULL,NULL,'Both','4146323873',NULL,'Sample Data','Megan','','Wilson',4,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Dr. Megan Wilson',NULL,1,NULL,0,NULL,NULL,NULL,'Rural Software Services',NULL,NULL,168,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (19,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Hagar Shores Empowerment Systems','Hagar Shores Empowerment Systems',NULL,NULL,NULL,'3',NULL,'Both','376403915',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Hagar Shores Empowerment Systems',NULL,NULL,NULL,0,NULL,NULL,NULL,'Hagar Shores Empowerment Systems',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (20,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cooper, Ray','Mr. Ray Cooper III',NULL,NULL,NULL,NULL,NULL,'Both','707495177',NULL,'Sample Data','Ray','P','Cooper',3,4,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Cooper III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Sonny','Sonny Robertson',NULL,NULL,NULL,'2',NULL,'Both','2508034963',NULL,'Sample Data','Sonny','','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Robertson',NULL,2,'1946-10-23',1,'2021-05-09',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:08'), + (22,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Esta','Ms. Esta Jones',NULL,NULL,NULL,NULL,NULL,'Both','2492655702',NULL,'Sample Data','Esta','','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Jones',NULL,NULL,'1995-01-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Rebekah','Ms. Rebekah Wattson',NULL,NULL,NULL,'4',NULL,'Both','289475581',NULL,'Sample Data','Rebekah','','Wattson',2,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Ms. Rebekah Wattson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Miguel','Miguel Patel Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2561562874',NULL,'Sample Data','Miguel','U','Patel',NULL,2,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Patel Sr.',NULL,2,'1990-05-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Arlyne','Arlyne DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','4265577068',NULL,'Sample Data','Arlyne','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne DÃaz',NULL,NULL,'1970-09-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (26,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Erik','Erik Nielsen Jr.',NULL,NULL,NULL,'4',NULL,'Both','3110052789',NULL,'Sample Data','Erik','','Nielsen',NULL,1,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Nielsen Jr.',NULL,NULL,'1950-02-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Mei','Mrs. Mei Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3817644881',NULL,'Sample Data','Mei','','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mrs. Mei Ivanov',NULL,1,'1948-01-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (28,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav family','Yadav family',NULL,NULL,NULL,'3',NULL,'Both','1777336212',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Yadav family',5,NULL,'Dear Yadav family',2,NULL,'Yadav family',NULL,NULL,NULL,0,NULL,'Yadav family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (29,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav, Shad','Shad Yadav Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3704457125',NULL,'Sample Data','Shad','Z','Yadav',NULL,2,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Yadav Sr.',NULL,NULL,'2003-12-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (30,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Ray','Ray Roberts',NULL,NULL,NULL,'3',NULL,'Both','1321167237',NULL,'Sample Data','Ray','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Roberts',NULL,2,'2005-06-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (31,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Laree','Laree Cooper',NULL,NULL,NULL,'3',NULL,'Both','4213061637',NULL,'Sample Data','Laree','T','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Cooper',NULL,1,'2007-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:08'), + (32,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Rural Family Fund','Rural Family Fund',NULL,NULL,NULL,NULL,NULL,'Both','1606759660',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Family Fund',NULL,NULL,NULL,0,NULL,NULL,NULL,'Rural Family Fund',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (33,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Dimitrov, Megan','Megan Dimitrov',NULL,NULL,NULL,'1',NULL,'Both','604448148',NULL,'Sample Data','Megan','M','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Dimitrov',NULL,NULL,'1974-08-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'carylonnielsen10@spamalot.co.nz','carylonnielsen10@spamalot.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','1898318637',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear carylonnielsen10@spamalot.co.nz',1,NULL,'Dear carylonnielsen10@spamalot.co.nz',1,NULL,'carylonnielsen10@spamalot.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Bernadette','Mrs. Bernadette Terry',NULL,NULL,NULL,'4',NULL,'Both','2401458356',NULL,'Sample Data','Bernadette','O','Terry',1,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Mrs. Bernadette Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (36,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Corpus Christi Agriculture Alliance','Corpus Christi Agriculture Alliance',NULL,NULL,NULL,'2',NULL,'Both','1647729060',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Corpus Christi Agriculture Alliance',NULL,NULL,NULL,0,NULL,NULL,16,'Corpus Christi Agriculture Alliance',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (37,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Damaris','Damaris Smith',NULL,NULL,NULL,'5',NULL,'Both','3693080437',NULL,'Sample Data','Damaris','T','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Smith',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (38,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'trumanwilson@spamalot.co.nz','trumanwilson@spamalot.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','93472421',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear trumanwilson@spamalot.co.nz',1,NULL,'Dear trumanwilson@spamalot.co.nz',1,NULL,'trumanwilson@spamalot.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (39,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,NULL,NULL,'Both','350510798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson family',5,NULL,'Dear Wilson family',2,NULL,'Wilson family',NULL,NULL,NULL,0,NULL,'Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (40,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Jackson','Dr. Jackson Prentice Jr.',NULL,NULL,NULL,'4',NULL,'Both','1317187713',NULL,'Sample Data','Jackson','','Prentice',4,1,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Prentice Jr.',NULL,2,'1996-02-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Iris','Dr. Iris DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2732168560',NULL,'Sample Data','Iris','','DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris DÃaz',NULL,NULL,'1942-11-08',0,NULL,NULL,NULL,'Urban Peace Center',NULL,NULL,87,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (42,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ashleyroberts-prentice@mymail.co.nz','ashleyroberts-prentice@mymail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','3588394643',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ashleyroberts-prentice@mymail.co.nz',1,NULL,'Dear ashleyroberts-prentice@mymail.co.nz',1,NULL,'ashleyroberts-prentice@mymail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (43,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jameson, Rosario','Rosario Jameson',NULL,NULL,NULL,'3',NULL,'Both','1768572446',NULL,'Sample Data','Rosario','J','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Jameson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (44,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts, Allan','Dr. Allan Roberts',NULL,NULL,NULL,NULL,NULL,'Both','711502623',NULL,'Sample Data','Allan','','Roberts',4,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Dr. Allan Roberts',NULL,2,'1971-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (45,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cooper, Truman','Truman Cooper',NULL,NULL,NULL,NULL,NULL,'Both','938772676',NULL,'Sample Data','Truman','X','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Truman Cooper',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Brent','Dr. Brent Jacobs III',NULL,NULL,NULL,'1',NULL,'Both','2357186266',NULL,'Sample Data','Brent','','Jacobs',4,4,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Dr. Brent Jacobs III',NULL,NULL,'1949-03-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (47,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Lawerence','Lawerence Roberts',NULL,NULL,NULL,'5',NULL,'Both','2250722466',NULL,'Sample Data','Lawerence','P','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Roberts',NULL,2,'2009-11-13',0,NULL,NULL,NULL,'United Agriculture Center',NULL,NULL,174,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (48,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Craig','Dr. Craig Roberts Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1504934188',NULL,'Sample Data','Craig','','Roberts',4,2,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Dr. Craig Roberts Sr.',NULL,NULL,'1952-06-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (49,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Iris','Iris González',NULL,NULL,NULL,'3',NULL,'Both','258488856',NULL,'Sample Data','Iris','D','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris González',NULL,1,'1953-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (50,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Prentice, Maxwell','Maxwell Prentice II',NULL,NULL,NULL,'3',NULL,'Both','1532112278',NULL,'Sample Data','Maxwell','E','Prentice',NULL,3,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Prentice II',NULL,NULL,'1977-07-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (51,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,'5',NULL,'Both','3235379039',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Deforest family',5,NULL,'Dear Deforest family',2,NULL,'Deforest family',NULL,NULL,NULL,0,NULL,'Deforest family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Allan','Allan Parker',NULL,NULL,NULL,'2',NULL,'Both','1311923270',NULL,'Sample Data','Allan','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Parker',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (53,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Kathlyn','Dr. Kathlyn Yadav',NULL,NULL,NULL,'4',NULL,'Both','892825163',NULL,'Sample Data','Kathlyn','','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Dr. Kathlyn Yadav',NULL,1,'1943-11-21',0,NULL,NULL,NULL,'Van Ness Software Fellowship',NULL,NULL,6,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (54,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Bob','Mr. Bob Robertson II',NULL,NULL,NULL,'5',NULL,'Both','2136994257',NULL,'Sample Data','Bob','','Robertson',3,3,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Mr. Bob Robertson II',NULL,2,'1989-01-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (55,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Deforest, Brittney','Brittney Deforest',NULL,NULL,NULL,'2',NULL,'Both','1540368141',NULL,'Sample Data','Brittney','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Deforest',NULL,NULL,'1984-03-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Barkley, Sherman','Sherman ÅÄ…chowski-Barkley III',NULL,NULL,NULL,NULL,NULL,'Both','2383515627',NULL,'Sample Data','Sherman','','ÅÄ…chowski-Barkley',NULL,4,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman ÅÄ…chowski-Barkley III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (57,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Shauna','Dr. Shauna Jensen',NULL,NULL,NULL,NULL,NULL,'Both','108136044',NULL,'Sample Data','Shauna','U','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Dr. Shauna Jensen',NULL,1,'1997-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Landon','Dr. Landon Jameson III',NULL,NULL,NULL,NULL,NULL,'Both','548600134',NULL,'Sample Data','Landon','I','Jameson',4,4,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Jameson III',NULL,2,'1985-01-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (59,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'González, Maxwell','Maxwell González',NULL,NULL,NULL,NULL,NULL,'Both','3943391638',NULL,'Sample Data','Maxwell','N','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell González',NULL,NULL,NULL,0,NULL,NULL,NULL,'United Software Systems',NULL,NULL,181,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (60,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts family','Roberts family',NULL,NULL,NULL,NULL,NULL,'Both','2097305882',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Roberts family',5,NULL,'Dear Roberts family',2,NULL,'Roberts family',NULL,NULL,NULL,0,NULL,'Roberts family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (61,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Kiamesha Lake Sustainability Fund','Kiamesha Lake Sustainability Fund',NULL,NULL,NULL,NULL,NULL,'Both','1618028462',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kiamesha Lake Sustainability Fund',NULL,NULL,NULL,0,NULL,NULL,153,'Kiamesha Lake Sustainability Fund',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (62,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice family','Prentice family',NULL,NULL,NULL,NULL,NULL,'Both','3313623671',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Prentice family',5,NULL,'Dear Prentice family',2,NULL,'Prentice family',NULL,NULL,NULL,0,NULL,'Prentice family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (63,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Barkley family','ÅÄ…chowski-Barkley family',NULL,NULL,NULL,'1',NULL,'Both','989157296',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski-Barkley family',5,NULL,'Dear ÅÄ…chowski-Barkley family',2,NULL,'ÅÄ…chowski-Barkley family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski-Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (64,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Rosario','Mr. Rosario Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1768572446',NULL,'Sample Data','Rosario','','Jameson',3,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Jameson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (65,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'United Culture Partners','United Culture Partners',NULL,NULL,NULL,'2',NULL,'Both','2576598866',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Culture Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'United Culture Partners',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'rgrant-cooper@sample.biz','rgrant-cooper@sample.biz',NULL,NULL,NULL,'4',NULL,'Both','713196471',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear rgrant-cooper@sample.biz',1,NULL,'Dear rgrant-cooper@sample.biz',1,NULL,'rgrant-cooper@sample.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,'Martin Luther King Arts Trust',NULL,NULL,4,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (67,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Mei','Ms. Mei Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','2590400187',NULL,'Sample Data','Mei','','Reynolds',2,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Ms. Mei Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw González Sr.',NULL,NULL,NULL,'1',NULL,'Both','3813995489',NULL,'Sample Data','BrzÄ™czysÅ‚aw','J','González',NULL,2,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw González Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (69,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Glencoe Development Academy','Glencoe Development Academy',NULL,NULL,NULL,'1',NULL,'Both','764165573',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Glencoe Development Academy',NULL,NULL,NULL,0,NULL,NULL,73,'Glencoe Development Academy',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (70,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper-Müller family','Cooper-Müller family',NULL,NULL,NULL,NULL,NULL,'Both','1121596331',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper-Müller family',5,NULL,'Dear Cooper-Müller family',2,NULL,'Cooper-Müller family',NULL,NULL,NULL,0,NULL,'Cooper-Müller family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (71,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Kenny','Kenny Jacobs Jr.',NULL,NULL,NULL,'5',NULL,'Both','1044730065',NULL,'Sample Data','Kenny','','Jacobs',NULL,1,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Jacobs Jr.',NULL,2,'1946-05-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (72,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Bellmawr Arts Fund','Bellmawr Arts Fund',NULL,NULL,NULL,NULL,NULL,'Both','3104492188',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bellmawr Arts Fund',NULL,NULL,NULL,0,NULL,NULL,100,'Bellmawr Arts Fund',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (73,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Grant, Valene','Valene Grant',NULL,NULL,NULL,NULL,NULL,'Both','309020900',NULL,'Sample Data','Valene','O','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Grant',NULL,1,'2007-08-27',0,NULL,NULL,NULL,'Glencoe Development Academy',NULL,NULL,69,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (74,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Martin Luther King Food Partnership','Martin Luther King Food Partnership',NULL,NULL,NULL,'4',NULL,'Both','1756812436',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Food Partnership',NULL,NULL,NULL,0,NULL,NULL,78,'Martin Luther King Food Partnership',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Scott','Scott Terrell Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2651035335',NULL,'Sample Data','Scott','Y','Terrell',NULL,1,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Terrell Jr.',NULL,NULL,'1955-05-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (76,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'bachman.jay@fishmail.biz','bachman.jay@fishmail.biz',NULL,NULL,NULL,'3',NULL,'Both','1953746416',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear bachman.jay@fishmail.biz',1,NULL,'Dear bachman.jay@fishmail.biz',1,NULL,'bachman.jay@fishmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mller.alexia@example.co.in','mller.alexia@example.co.in',NULL,NULL,NULL,'5',NULL,'Both','1179921504',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mller.alexia@example.co.in',1,NULL,'Dear mller.alexia@example.co.in',1,NULL,'mller.alexia@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Russell','Russell Olsen',NULL,NULL,NULL,'1',NULL,'Both','2568545963',NULL,'Sample Data','Russell','X','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Olsen',NULL,2,'1934-12-20',0,NULL,NULL,NULL,'Martin Luther King Food Partnership',NULL,NULL,74,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (79,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'New York Peace Academy','New York Peace Academy',NULL,NULL,NULL,'3',NULL,'Both','2836415379',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New York Peace Academy',NULL,NULL,NULL,0,NULL,NULL,3,'New York Peace Academy',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (80,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Parker, Maria','Dr. Maria Parker',NULL,NULL,NULL,NULL,NULL,'Both','930508921',NULL,'Sample Data','Maria','N','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Dr. Maria Parker',NULL,NULL,'1984-05-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'reynoldsv@example.com','reynoldsv@example.com',NULL,NULL,NULL,NULL,NULL,'Both','1403985781',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear reynoldsv@example.com',1,NULL,'Dear reynoldsv@example.com',1,NULL,'reynoldsv@example.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Shauna','Ms. Shauna Cruz',NULL,NULL,NULL,'5',NULL,'Both','3185339040',NULL,'Sample Data','Shauna','','Cruz',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Cruz',NULL,1,'1967-07-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (83,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Merrie','Merrie Jacobs',NULL,NULL,NULL,'1',NULL,'Both','2371395127',NULL,'Sample Data','Merrie','A','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Jacobs',NULL,NULL,'1956-03-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Jackson','Dr. Jackson Ivanov Jr.',NULL,NULL,NULL,'1',NULL,'Both','3246901602',NULL,'Sample Data','Jackson','B','Ivanov',4,1,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Ivanov Jr.',NULL,NULL,'1960-02-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (85,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Scarlet','Mrs. Scarlet Yadav',NULL,NULL,NULL,'1',NULL,'Both','2692683463',NULL,'Sample Data','Scarlet','A','Yadav',1,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Mrs. Scarlet Yadav',NULL,1,'1977-07-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (86,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Lashawnda','Lashawnda Grant',NULL,NULL,NULL,NULL,NULL,'Both','2795633205',NULL,'Sample Data','Lashawnda','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Grant',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (87,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Peace Center','Urban Peace Center',NULL,NULL,NULL,'2',NULL,'Both','4047507838',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Peace Center',NULL,NULL,NULL,0,NULL,NULL,41,'Urban Peace Center',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (88,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ejameson@mymail.co.uk','ejameson@mymail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','119685343',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ejameson@mymail.co.uk',1,NULL,'Dear ejameson@mymail.co.uk',1,NULL,'ejameson@mymail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Rolando','Mr. Rolando Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3260863600',NULL,'Sample Data','Rolando','V','Ivanov',3,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Mr. Rolando Ivanov',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (90,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Allan','Mr. Allan Terrell',NULL,NULL,NULL,'4',NULL,'Both','349299524',NULL,'Sample Data','Allan','','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Terrell',NULL,2,'1958-05-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (91,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Community Empowerment Trust','Community Empowerment Trust',NULL,NULL,NULL,'5',NULL,'Both','2422921319',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Empowerment Trust',NULL,NULL,NULL,0,NULL,NULL,NULL,'Community Empowerment Trust',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (92,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Carylon','Carylon Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1534099246',NULL,'Sample Data','Carylon','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Deforest',NULL,1,'1991-08-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (93,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Ashley','Mr. Ashley Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3241907591',NULL,'Sample Data','Ashley','','Jensen',3,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mr. Ashley Jensen',NULL,2,'1993-12-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper-Müller, Laree','Laree Cooper-Müller',NULL,NULL,NULL,'3',NULL,'Both','4199305012',NULL,'Sample Data','Laree','','Cooper-Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Cooper-Müller',NULL,1,'1987-09-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Kenny','Dr. Kenny Patel Sr.',NULL,NULL,NULL,'3',NULL,'Both','73584714',NULL,'Sample Data','Kenny','','Patel',4,2,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny Patel Sr.',NULL,NULL,'1962-09-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (96,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Robertson, Bryon','Bryon Robertson',NULL,NULL,NULL,'3',NULL,'Both','3912213392',NULL,'Sample Data','Bryon','Z','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Robertson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (97,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Parker-Cruz family','Parker-Cruz family',NULL,NULL,NULL,'2',NULL,'Both','1981374575',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker-Cruz family',5,NULL,'Dear Parker-Cruz family',2,NULL,'Parker-Cruz family',NULL,NULL,NULL,0,NULL,'Parker-Cruz family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (98,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Adams, Miguel','Dr. Miguel Adams',NULL,NULL,NULL,'3',NULL,'Both','3600020840',NULL,'Sample Data','Miguel','U','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Dr. Miguel Adams',NULL,2,'1945-02-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (99,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cooper, BrzÄ™czysÅ‚aw','Mr. BrzÄ™czysÅ‚aw Cooper',NULL,NULL,NULL,'3',NULL,'Both','671824527',NULL,'Sample Data','BrzÄ™czysÅ‚aw','T','Cooper',3,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Mr. BrzÄ™czysÅ‚aw Cooper',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (100,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'blackwells45@fakemail.biz','blackwells45@fakemail.biz',NULL,NULL,NULL,'4',NULL,'Both','4242031944',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear blackwells45@fakemail.biz',1,NULL,'Dear blackwells45@fakemail.biz',1,NULL,'blackwells45@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,'Bellmawr Arts Fund',NULL,NULL,72,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Valene','Valene Prentice',NULL,NULL,NULL,NULL,NULL,'Both','2953436948',NULL,'Sample Data','Valene','W','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Prentice',NULL,NULL,'2008-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (102,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Alexia','Dr. Alexia Yadav',NULL,NULL,NULL,'3',NULL,'Both','1312807214',NULL,'Sample Data','Alexia','','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Dr. Alexia Yadav',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Lashawnda','Dr. Lashawnda DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2462862160',NULL,'Sample Data','Lashawnda','','DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Dr. Lashawnda DÃaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (104,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Allen','Mr. Allen Roberts',NULL,NULL,NULL,'2',NULL,'Both','1308913179',NULL,'Sample Data','Allen','V','Roberts',3,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Roberts',NULL,2,'1982-01-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (105,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Mei','Dr. Mei Jones',NULL,NULL,NULL,NULL,NULL,'Both','2285120120',NULL,'Sample Data','Mei','','Jones',4,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Dr. Mei Jones',NULL,NULL,'1979-04-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (106,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Shad','Dr. Shad ÅÄ…chowski II',NULL,NULL,NULL,'3',NULL,'Both','695965162',NULL,'Sample Data','Shad','I','ÅÄ…chowski',4,3,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Dr. Shad ÅÄ…chowski II',NULL,2,'1957-01-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Maria','Maria Samson III',NULL,NULL,NULL,'1',NULL,'Both','1039221596',NULL,'Sample Data','Maria','T','Samson',NULL,4,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Samson III',NULL,NULL,'1975-09-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (108,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Prentice, Jacob','Jacob Prentice Sr.',NULL,NULL,NULL,'2',NULL,'Both','2335760166',NULL,'Sample Data','Jacob','V','Prentice',NULL,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Prentice Sr.',NULL,2,'2001-11-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (109,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson family','Robertson family',NULL,NULL,NULL,NULL,NULL,'Both','3444393980',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Robertson family',5,NULL,'Dear Robertson family',2,NULL,'Robertson family',NULL,NULL,NULL,0,NULL,'Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Santina','Mrs. Santina Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2989109013',NULL,'Sample Data','Santina','B','Jameson',1,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Mrs. Santina Jameson',NULL,1,'1948-05-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (111,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Norris','Dr. Norris Yadav III',NULL,NULL,NULL,'3',NULL,'Both','3408497299',NULL,'Sample Data','Norris','E','Yadav',4,4,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Yadav III',NULL,NULL,'1969-08-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (112,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Jerome','Dr. Jerome Reynolds Sr.',NULL,NULL,NULL,'4',NULL,'Both','2193526984',NULL,'Sample Data','Jerome','','Reynolds',4,2,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Reynolds Sr.',NULL,2,'1992-07-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (113,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell-Prentice, Kiara','Kiara Terrell-Prentice',NULL,NULL,NULL,NULL,NULL,'Both','561749650',NULL,'Sample Data','Kiara','','Terrell-Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Terrell-Prentice',NULL,1,'1960-11-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (114,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Sanford','Sanford Reynolds',NULL,NULL,NULL,'2',NULL,'Both','3123200036',NULL,'Sample Data','Sanford','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Reynolds',NULL,2,'1968-01-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Scarlet','Dr. Scarlet Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','959385532',NULL,'Sample Data','Scarlet','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Dr. Scarlet Ivanov',NULL,1,'1964-03-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (116,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Sharyn','Mrs. Sharyn Yadav',NULL,NULL,NULL,'5',NULL,'Both','2905194815',NULL,'Sample Data','Sharyn','','Yadav',1,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Mrs. Sharyn Yadav',NULL,1,'1973-11-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (117,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Jed','Jed ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','2063929350',NULL,'Sample Data','Jed','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed ÅÄ…chowski',NULL,2,'1936-12-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (118,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Rolando','Mr. Rolando Prentice',NULL,NULL,NULL,'5',NULL,'Both','1297722771',NULL,'Sample Data','Rolando','P','Prentice',3,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Mr. Rolando Prentice',NULL,2,'1989-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (119,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker, Teresa','Teresa Parker',NULL,NULL,NULL,NULL,NULL,'Both','1643019663',NULL,'Sample Data','Teresa','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Parker',NULL,1,'2005-12-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (120,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'fparker@spamalot.org','fparker@spamalot.org',NULL,NULL,NULL,NULL,NULL,'Both','2523071110',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear fparker@spamalot.org',1,NULL,'Dear fparker@spamalot.org',1,NULL,'fparker@spamalot.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (121,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Elina','Elina Cooper',NULL,NULL,NULL,'2',NULL,'Both','4035892202',NULL,'Sample Data','Elina','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Cooper',NULL,NULL,'2010-03-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Damaris','Damaris Zope',NULL,NULL,NULL,NULL,NULL,'Both','2309654739',NULL,'Sample Data','Damaris','E','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Zope',NULL,NULL,'1951-09-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Norris','Dr. Norris Prentice Sr.',NULL,NULL,NULL,'1',NULL,'Both','4068890444',NULL,'Sample Data','Norris','','Prentice',4,2,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Prentice Sr.',NULL,2,'1981-10-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (124,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry-Roberts, Jina','Jina Terry-Roberts',NULL,NULL,NULL,'4',NULL,'Both','1753689551',NULL,'Sample Data','Jina','','Terry-Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Terry-Roberts',NULL,1,'1959-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (125,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Lashawnda','Dr. Lashawnda Adams',NULL,NULL,NULL,'2',NULL,'Both','1526357293',NULL,'Sample Data','Lashawnda','','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Dr. Lashawnda Adams',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (126,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice family','Prentice family',NULL,NULL,NULL,NULL,NULL,'Both','3313623671',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Prentice family',5,NULL,'Dear Prentice family',2,NULL,'Prentice family',NULL,NULL,NULL,0,NULL,'Prentice family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (127,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Merrie','Merrie Wilson',NULL,NULL,NULL,NULL,NULL,'Both','2015028870',NULL,'Sample Data','Merrie','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (128,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Ivey','Ivey McReynolds',NULL,NULL,NULL,'3',NULL,'Both','3543287446',NULL,'Sample Data','Ivey','A','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey McReynolds',NULL,1,'1970-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'robertsonb@testing.org','robertsonb@testing.org',NULL,NULL,NULL,'4',NULL,'Both','2185730426',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear robertsonb@testing.org',1,NULL,'Dear robertsonb@testing.org',1,NULL,'robertsonb@testing.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Carlos','Dr. Carlos Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2222599648',NULL,'Sample Data','Carlos','Q','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Dr. Carlos Deforest',NULL,2,'1992-09-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Justina','Mrs. Justina Grant',NULL,NULL,NULL,'2',NULL,'Both','2606086842',NULL,'Sample Data','Justina','','Grant',1,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Mrs. Justina Grant',NULL,NULL,'1992-12-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (132,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Brent','Mr. Brent Lee II',NULL,NULL,NULL,NULL,NULL,'Both','3880593995',NULL,'Sample Data','Brent','','Lee',3,3,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Mr. Brent Lee II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (133,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Miguel','Dr. Miguel Wilson',NULL,NULL,NULL,'4',NULL,'Both','168512775',NULL,'Sample Data','Miguel','','Wilson',4,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Dr. Miguel Wilson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Shad','Shad Wilson',NULL,NULL,NULL,NULL,NULL,'Both','3505548330',NULL,'Sample Data','Shad','P','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Wilson',NULL,NULL,'2013-06-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (135,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Lee, Claudio','Claudio Lee',NULL,NULL,NULL,NULL,NULL,'Both','298367996',NULL,'Sample Data','Claudio','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Lee',NULL,2,'1977-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (136,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Rebekah','Rebekah Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3218825396',NULL,'Sample Data','Rebekah','E','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Barkley',NULL,1,'1960-02-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Beula','Mrs. Beula Cooper',NULL,NULL,NULL,NULL,NULL,'Both','413956326',NULL,'Sample Data','Beula','S','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Mrs. Beula Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (138,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Rosario','Mr. Rosario Terry III',NULL,NULL,NULL,NULL,NULL,'Both','1264009879',NULL,'Sample Data','Rosario','','Terry',3,4,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Terry III',NULL,NULL,NULL,0,NULL,NULL,NULL,'California Advocacy Partners',NULL,NULL,182,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Jay','Mr. Jay Grant',NULL,NULL,NULL,NULL,NULL,'Both','2599662053',NULL,'Sample Data','Jay','Z','Grant',3,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Mr. Jay Grant',NULL,2,'1962-12-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (140,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Carylon','Dr. Carylon Lee',NULL,NULL,NULL,NULL,NULL,'Both','4019076192',NULL,'Sample Data','Carylon','X','Lee',4,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Dr. Carylon Lee',NULL,1,'1991-07-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (141,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'shadjameson@example.co.in','shadjameson@example.co.in',NULL,NULL,NULL,'5',NULL,'Both','1486964407',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear shadjameson@example.co.in',1,NULL,'Dear shadjameson@example.co.in',1,NULL,'shadjameson@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (142,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Lee, Maxwell','Maxwell Lee III',NULL,NULL,NULL,'4',NULL,'Both','3744211407',NULL,'Sample Data','Maxwell','','Lee',NULL,4,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Lee III',NULL,NULL,'1982-12-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (143,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Global Environmental Collective','Global Environmental Collective',NULL,NULL,NULL,'5',NULL,'Both','3287854532',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Environmental Collective',NULL,NULL,NULL,0,NULL,NULL,170,'Global Environmental Collective',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (144,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Maria','Mr. Maria Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2824644051',NULL,'Sample Data','Maria','F','Jameson',3,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Mr. Maria Jameson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (145,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones, Magan','Magan Jones',NULL,NULL,NULL,NULL,NULL,'Both','781454343',NULL,'Sample Data','Magan','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Jones',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jed','Jed Lee',NULL,NULL,NULL,NULL,NULL,'Both','301771502',NULL,'Sample Data','Jed','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Lee',NULL,2,'1936-05-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (147,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson family','Jameson family',NULL,NULL,NULL,'4',NULL,'Both','2255649769',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson family',5,NULL,'Dear Jameson family',2,NULL,'Jameson family',NULL,NULL,NULL,0,NULL,'Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (148,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker-Cruz, Elizabeth','Elizabeth Parker-Cruz',NULL,NULL,NULL,NULL,NULL,'Both','4038059639',NULL,'Sample Data','Elizabeth','','Parker-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Parker-Cruz',NULL,1,'1994-08-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (149,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov, Rodrigo','Mr. Rodrigo Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','3624892269',NULL,'Sample Data','Rodrigo','','Dimitrov',3,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Mr. Rodrigo Dimitrov',NULL,2,'1984-05-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (150,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Jina','Jina Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1333283460',NULL,'Sample Data','Jina','N','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Jameson',NULL,NULL,'2008-09-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (151,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson, Omar','Dr. Omar Robertson',NULL,NULL,NULL,'1',NULL,'Both','1197546846',NULL,'Sample Data','Omar','K','Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Dr. Omar Robertson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (152,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Merrie','Merrie Reynolds',NULL,NULL,NULL,'2',NULL,'Both','4012463447',NULL,'Sample Data','Merrie','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Reynolds',NULL,NULL,'1955-03-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (153,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Landon','Landon Samson',NULL,NULL,NULL,NULL,NULL,'Both','1562429969',NULL,'Sample Data','Landon','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Samson',NULL,2,NULL,0,NULL,NULL,NULL,'Kiamesha Lake Sustainability Fund',NULL,NULL,61,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (154,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Clint','Clint Grant',NULL,NULL,NULL,'3',NULL,'Both','2449270383',NULL,'Sample Data','Clint','M','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Grant',NULL,2,'1970-12-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (155,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,'4',NULL,'Both','1669281794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel family',5,NULL,'Dear Patel family',2,NULL,'Patel family',NULL,NULL,NULL,0,NULL,'Patel family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (156,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Junko','Junko DÃaz',NULL,NULL,NULL,'4',NULL,'Both','42727256',NULL,'Sample Data','Junko','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko DÃaz',NULL,NULL,'1962-06-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (157,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Van Ness Development Services','Van Ness Development Services',NULL,NULL,NULL,'2',NULL,'Both','1137211499',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Development Services',NULL,NULL,NULL,0,NULL,NULL,NULL,'Van Ness Development Services',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (158,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Sonny','Sonny Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1288997537',NULL,'Sample Data','Sonny','Q','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Wilson',NULL,2,'1991-01-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (159,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Parker family','Parker family',NULL,NULL,NULL,NULL,NULL,'Both','425242179',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker family',5,NULL,'Dear Parker family',2,NULL,'Parker family',NULL,NULL,NULL,0,NULL,'Parker family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (160,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Josefa','Ms. Josefa Smith',NULL,NULL,NULL,'2',NULL,'Both','3557343869',NULL,'Sample Data','Josefa','','Smith',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Smith',NULL,1,'1964-08-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (161,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,'5',NULL,'Both','1714131215',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman family',5,NULL,'Dear Bachman family',2,NULL,'Bachman family',NULL,NULL,NULL,0,NULL,'Bachman family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (162,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'robertsp99@testmail.com','robertsp99@testmail.com',NULL,NULL,NULL,'3',NULL,'Both','3634038642',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear robertsp99@testmail.com',1,NULL,'Dear robertsp99@testmail.com',1,NULL,'robertsp99@testmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Toby','Toby Cooper',NULL,NULL,NULL,'2',NULL,'Both','82709624',NULL,'Sample Data','Toby','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Cooper',NULL,NULL,'1947-04-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (164,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Robertson, Carlos','Carlos Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3416802562',NULL,'Sample Data','Carlos','Z','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Robertson',NULL,2,'2010-08-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (165,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Troy','Dr. Troy Samson',NULL,NULL,NULL,'2',NULL,'Both','4145447526',NULL,'Sample Data','Troy','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Dr. Troy Samson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds-Bachman, Lashawnda','Ms. Lashawnda McReynolds-Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2775111724',NULL,'Sample Data','Lashawnda','L','McReynolds-Bachman',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda McReynolds-Bachman',NULL,NULL,'1962-06-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (167,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,NULL,NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (168,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Software Services','Rural Software Services',NULL,NULL,NULL,NULL,NULL,'Both','3725502059',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Software Services',NULL,NULL,NULL,0,NULL,NULL,18,'Rural Software Services',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (169,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'wattson.scarlet55@fishmail.co.nz','wattson.scarlet55@fishmail.co.nz',NULL,NULL,NULL,'2',NULL,'Both','3354089619',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear wattson.scarlet55@fishmail.co.nz',1,NULL,'Dear wattson.scarlet55@fishmail.co.nz',1,NULL,'wattson.scarlet55@fishmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (170,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Jackson','Jackson Bachman',NULL,NULL,NULL,'3',NULL,'Both','1617477715',NULL,'Sample Data','Jackson','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Bachman',NULL,2,'1962-04-13',0,NULL,NULL,NULL,'Global Environmental Collective',NULL,NULL,143,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (171,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samson family','Samson family',NULL,NULL,NULL,NULL,NULL,'Both','333421926',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson family',5,NULL,'Dear Samson family',2,NULL,'Samson family',NULL,NULL,NULL,0,NULL,'Samson family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (172,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Rolando','Mr. Rolando Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2570887398',NULL,'Sample Data','Rolando','','Cooper',3,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Mr. Rolando Cooper',NULL,NULL,'1993-11-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (173,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Carlos','Carlos Lee III',NULL,NULL,NULL,NULL,NULL,'Both','1904694300',NULL,'Sample Data','Carlos','Q','Lee',NULL,4,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Lee III',NULL,2,'1977-01-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (174,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'United Agriculture Center','United Agriculture Center',NULL,NULL,NULL,'3',NULL,'Both','1560765789',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Agriculture Center',NULL,NULL,NULL,0,NULL,NULL,47,'United Agriculture Center',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (175,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'mcooper-mller80@fakemail.net','mcooper-mller80@fakemail.net',NULL,NULL,NULL,'2',NULL,'Both','2153571564',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear mcooper-mller80@fakemail.net',1,NULL,'Dear mcooper-mller80@fakemail.net',1,NULL,'mcooper-mller80@fakemail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (176,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Alida','Mrs. Alida ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','856739005',NULL,'Sample Data','Alida','','ÅÄ…chowski',1,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Mrs. Alida ÅÄ…chowski',NULL,1,'1995-04-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (177,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wattson, Princess','Mrs. Princess Wattson',NULL,NULL,NULL,NULL,NULL,'Both','1322463207',NULL,'Sample Data','Princess','','Wattson',1,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Mrs. Princess Wattson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Truman','Dr. Truman Lee III',NULL,NULL,NULL,NULL,NULL,'Both','696555700',NULL,'Sample Data','Truman','','Lee',4,4,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Dr. Truman Lee III',NULL,2,'1937-08-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Esta','Dr. Esta ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','195412899',NULL,'Sample Data','Esta','C','ÅÄ…chowski',4,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Dr. Esta ÅÄ…chowski',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (180,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Lee family','Lee family',NULL,NULL,NULL,'1',NULL,'Both','845831176',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Lee family',5,NULL,'Dear Lee family',2,NULL,'Lee family',NULL,NULL,NULL,0,NULL,'Lee family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (181,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'United Software Systems','United Software Systems',NULL,NULL,NULL,'2',NULL,'Both','3171127775',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Software Systems',NULL,NULL,NULL,0,NULL,NULL,59,'United Software Systems',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (182,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'California Advocacy Partners','California Advocacy Partners',NULL,NULL,NULL,'2',NULL,'Both','2292966928',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'California Advocacy Partners',NULL,NULL,NULL,0,NULL,NULL,138,'California Advocacy Partners',NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Arlyne','Arlyne Patel',NULL,NULL,NULL,'5',NULL,'Both','3161399576',NULL,'Sample Data','Arlyne','M','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Patel',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (184,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'rx.jones96@spamalot.org','rx.jones96@spamalot.org',NULL,NULL,NULL,'4',NULL,'Both','1386564851',NULL,'Sample Data',NULL,NULL,NULL,3,3,NULL,NULL,1,NULL,'Dear rx.jones96@spamalot.org',1,NULL,'Dear rx.jones96@spamalot.org',1,NULL,'rx.jones96@spamalot.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (185,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav, Billy','Billy Yadav Sr.',NULL,NULL,NULL,'4',NULL,'Both','2022079737',NULL,'Sample Data','Billy','F','Yadav',NULL,2,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Yadav Sr.',NULL,2,'1970-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (186,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Robertson, Ashley','Mr. Ashley Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3118372484',NULL,'Sample Data','Ashley','B','Robertson',3,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mr. Ashley Robertson',NULL,2,'1957-11-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (187,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker-Cruz, Allan','Allan Parker-Cruz',NULL,NULL,NULL,'4',NULL,'Both','561222250',NULL,'Sample Data','Allan','S','Parker-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Parker-Cruz',NULL,2,'2002-06-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (188,'Household',NULL,1,1,0,0,1,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','1133003930',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper family',5,NULL,'Dear Cooper family',2,NULL,'Cooper family',NULL,NULL,NULL,0,NULL,'Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (189,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones, Sonny','Dr. Sonny Jones II',NULL,NULL,NULL,'5',NULL,'Both','436334672',NULL,'Sample Data','Sonny','','Jones',4,3,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Dr. Sonny Jones II',NULL,2,'1970-04-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (190,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Lincoln','Dr. Lincoln Prentice',NULL,NULL,NULL,'5',NULL,'Both','3258245727',NULL,'Sample Data','Lincoln','W','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Prentice',NULL,NULL,'1936-01-05',1,'2021-02-16',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (191,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Irvin','Dr. Irvin Jacobs III',NULL,NULL,NULL,'2',NULL,'Both','1475120479',NULL,'Sample Data','Irvin','','Jacobs',4,4,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Dr. Irvin Jacobs III',NULL,NULL,'1952-01-14',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (192,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Shad','Shad Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','3732235082',NULL,'Sample Data','Shad','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Jacobs',NULL,2,'1974-06-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (193,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Jones, Sanford','Mr. Sanford Jones',NULL,NULL,NULL,NULL,NULL,'Both','4129066974',NULL,'Sample Data','Sanford','','Jones',3,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Damaris','Dr. Damaris Olsen',NULL,NULL,NULL,'1',NULL,'Both','3381130592',NULL,'Sample Data','Damaris','A','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Dr. Damaris Olsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Nicole','Nicole Patel',NULL,NULL,NULL,'3',NULL,'Both','687315016',NULL,'Sample Data','Nicole','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Patel',NULL,1,'1969-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (196,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'McReynolds, Shad','Shad McReynolds',NULL,NULL,NULL,'4',NULL,'Both','4249147082',NULL,'Sample Data','Shad','S','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad McReynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (197,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Tanya','Tanya Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3920520265',NULL,'Sample Data','Tanya','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (198,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Nicole','Dr. Nicole Samson',NULL,NULL,NULL,'2',NULL,'Both','1649974700',NULL,'Sample Data','Nicole','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Dr. Nicole Samson',NULL,1,'1988-10-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (199,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Brigette','Brigette DÃaz',NULL,NULL,NULL,'2',NULL,'Both','939555461',NULL,'Sample Data','Brigette','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'), + (200,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Barkley, Betty','Betty ÅÄ…chowski-Barkley',NULL,NULL,NULL,NULL,NULL,'Both','4049863156',NULL,'Sample Data','Betty','','ÅÄ…chowski-Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty ÅÄ…chowski-Barkley',NULL,1,'1982-06-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:10'), + (201,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Lincoln','Mr. Lincoln Roberts',NULL,NULL,NULL,NULL,NULL,'Both','1322526002',NULL,'Sample Data','Lincoln','','Roberts',3,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Mr. Lincoln Roberts',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-06-11 00:47:08','2021-06-11 00:47:09'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -218,7 +2101,15 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contact_type` WRITE; /*!40000 ALTER TABLE `civicrm_contact_type` DISABLE KEYS */; -INSERT INTO `civicrm_contact_type` (`id`, `name`, `label`, `description`, `image_URL`, `parent_id`, `is_active`, `is_reserved`) VALUES (1,'Individual','Individual',NULL,NULL,NULL,1,1),(2,'Household','Household',NULL,NULL,NULL,1,1),(3,'Organization','Organization',NULL,NULL,NULL,1,1),(4,'Student','Student',NULL,NULL,1,1,0),(5,'Parent','Parent',NULL,NULL,1,1,0),(6,'Staff','Staff',NULL,NULL,1,1,0),(7,'Team','Team',NULL,NULL,3,1,0),(8,'Sponsor','Sponsor',NULL,NULL,3,1,0); +INSERT INTO `civicrm_contact_type` (`id`, `name`, `label`, `description`, `image_URL`, `parent_id`, `is_active`, `is_reserved`) VALUES + (1,'Individual','Individual',NULL,NULL,NULL,1,1), + (2,'Household','Household',NULL,NULL,NULL,1,1), + (3,'Organization','Organization',NULL,NULL,NULL,1,1), + (4,'Student','Student',NULL,NULL,1,1,0), + (5,'Parent','Parent',NULL,NULL,1,1,0), + (6,'Staff','Staff',NULL,NULL,1,1,0), + (7,'Team','Team',NULL,NULL,3,1,0), + (8,'Sponsor','Sponsor',NULL,NULL,3,1,0); /*!40000 ALTER TABLE `civicrm_contact_type` ENABLE KEYS */; UNLOCK TABLES; @@ -228,7 +2119,100 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution` WRITE; /*!40000 ALTER TABLE `civicrm_contribution` DISABLE KEYS */; -INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES (1,2,1,NULL,4,'2010-04-11 00:00:00',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0),(2,4,1,NULL,1,'2010-03-21 00:00:00',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(3,6,1,NULL,4,'2010-04-29 00:00:00',0.00,25.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0),(4,8,1,NULL,4,'2010-04-11 00:00:00',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0),(5,16,1,NULL,4,'2010-04-15 00:00:00',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0),(6,19,1,NULL,4,'2010-04-11 00:00:00',0.00,175.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0),(7,82,1,NULL,1,'2010-03-27 00:00:00',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(8,92,1,NULL,1,'2010-03-08 00:00:00',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(9,34,1,NULL,1,'2010-04-22 00:00:00',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(10,71,1,NULL,1,'2009-07-01 11:53:50',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(11,43,1,NULL,1,'2009-07-01 12:55:41',0.00,200.00,NULL,NULL,'PL43II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(12,32,1,NULL,1,'2009-10-01 11:53:50',0.00,200.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(13,32,1,NULL,1,'2009-12-01 12:55:41',0.00,200.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(14,33,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(15,38,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(16,200,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(17,52,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(18,136,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(19,199,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(20,173,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(21,69,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(22,137,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(23,138,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(24,127,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(25,25,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(26,101,2,NULL,1,'2021-01-12 09:04:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(27,66,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(28,24,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(29,98,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(30,73,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(31,102,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(32,85,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(33,12,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(34,175,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(35,16,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(36,61,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(37,122,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(38,15,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(39,190,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(40,109,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(41,124,2,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(42,118,2,NULL,1,'2021-01-12 09:04:51',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(43,188,2,NULL,1,'2021-01-12 09:04:51',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(45,4,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(46,12,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(47,18,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(48,20,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(49,21,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(50,25,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(51,26,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(52,27,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(53,28,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(54,31,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(55,40,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(56,43,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(57,44,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(58,45,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(59,50,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(60,57,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(61,62,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(62,68,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(63,73,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(64,74,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(65,75,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(66,78,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(67,82,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(68,84,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(69,93,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(70,97,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(71,98,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(72,102,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(73,113,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(74,115,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(75,118,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(76,119,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(77,120,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(78,124,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(79,126,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(80,127,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(81,128,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(82,131,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(83,132,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(84,136,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(85,137,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(86,143,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(87,148,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(88,159,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(89,163,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(90,170,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(91,181,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(92,187,4,NULL,1,'2021-01-12 09:04:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(93,193,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(94,194,4,NULL,1,'2021-01-12 09:04:51',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2021-01-12 09:04:51',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES + (1,2,1,NULL,4,'2010-04-11 00:00:00',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0), + (2,4,1,NULL,1,'2010-03-21 00:00:00',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (3,6,1,NULL,4,'2010-04-29 00:00:00',0.00,25.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0), + (4,8,1,NULL,4,'2010-04-11 00:00:00',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0), + (5,16,1,NULL,4,'2010-04-15 00:00:00',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0), + (6,19,1,NULL,4,'2010-04-11 00:00:00',0.00,175.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0), + (7,82,1,NULL,1,'2010-03-27 00:00:00',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (8,92,1,NULL,1,'2010-03-08 00:00:00',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (9,34,1,NULL,1,'2010-04-22 00:00:00',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (10,71,1,NULL,1,'2009-07-01 11:53:50',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (11,43,1,NULL,1,'2009-07-01 12:55:41',0.00,200.00,NULL,NULL,'PL43II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (12,32,1,NULL,1,'2009-10-01 11:53:50',0.00,200.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (13,32,1,NULL,1,'2009-12-01 12:55:41',0.00,200.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (14,15,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'eafa6983717b93b0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (15,145,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'1ac3eb07f6424e89',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (16,58,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'15243cfadf0f2536',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (17,92,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'2f48d84c4f5d1f19',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (18,154,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'5f2c43ecf6f87091',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (19,123,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'d76e674b092c0b60',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (20,5,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'1bcdd35abac9d31e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (21,158,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'372aea6295d47771',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (22,136,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'e030336e9d9e27a7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (23,191,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'cbde35e851d08693',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (24,89,2,NULL,1,'2021-06-10 20:47:11',0.00,1200.00,NULL,NULL,'023c1d3bad756070',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (25,165,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'a35026fe0645c5ae',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (26,42,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'7d39bad93d16e658',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (27,76,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'68f0a75d1f668c1b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (28,124,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'f47f8898b6317b5f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (29,104,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'5cadf16ab32b0434',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (30,7,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'33714841f2853c39',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (31,170,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'0762aa5988787fd5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (32,129,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'5389f88cfe515057',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (33,27,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'d80168527be7f31a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (34,131,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'58daff9210aa1dac',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (35,103,2,NULL,1,'2021-06-10 20:47:11',0.00,1200.00,NULL,NULL,'1ed15367939dd345',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (36,185,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'5730290ee5588bd2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (37,75,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'d41c794608ab1605',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (38,33,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'315b9f8a4cac9458',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (39,96,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'efd51e3b59f0cfed',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (40,57,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'69246f58a09a2f97',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (41,64,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'ed31197c507715f1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (42,196,2,NULL,1,'2021-06-10 20:47:11',0.00,100.00,NULL,NULL,'c5de7035a4c701fb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (43,46,2,NULL,1,'2021-06-10 20:47:11',0.00,50.00,NULL,NULL,'5dc1b2d5ca4c5525',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (45,9,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'06a7e4450da325ae',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (46,20,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'482154f519605172',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (47,23,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'faa956f935647168',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (48,27,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'d6510b94103ea3e2',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (49,30,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'e4662fa255fcab54',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (50,32,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'a13c9ae0ec206c58',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (51,33,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'bdcd5238815847c7',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (52,34,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'5a468bb7b6b6bb68',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (53,35,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'ad5709781553b5e8',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (54,40,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'75a57ab7ae4d6707',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (55,43,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'44804cc0767c2365',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (56,45,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'e0722580fc4157d7',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (57,48,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'596e85759113dc46',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (58,52,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'e6ee01ed8f4e1d37',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (59,56,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'2d1228acbadf6839',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (60,74,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'0c973d4463bb35c3',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (61,79,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'ae35c3a093b5d14f',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (62,86,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'a69da8779369e62a',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (63,89,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'fc4f22863da1aeca',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (64,92,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'35a34b90d08a1e17',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (65,96,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'445212dcef683434',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (66,99,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'0634a826e55b2d45',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (67,101,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'8b62828a3226d9cc',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (68,105,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'3259f51a57f9bcac',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (69,106,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'c2df86cb38acf5cd',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (70,118,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'db48d1b73f7e2129',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (71,122,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'3d53d6822d6c4005',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (72,125,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'aa77badcabeeb9e0',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (73,127,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'5a993ddc0132e579',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (74,129,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'98e8d03b37a9d77c',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (75,135,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'8852a3eb747973ac',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (76,140,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'99f322caa83d5e6d',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (77,144,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'6fbe546dac220841',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (78,145,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'72149328347ea433',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (79,146,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'59a5e5a89823197d',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (80,147,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'fcbb39a2213da47e',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (81,148,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'c4c12a9af2fff4ee',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (82,152,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'76ed6c8fe2a0d183',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (83,157,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'37de6f426f359bd2',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (84,161,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'1d860a759c13421e',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (85,170,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'b545a95cd18db373',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (86,171,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'026e0db1c8c4aeea',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (87,172,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'0d5f2bdfb43bf660',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (88,173,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'783d82f1e7c74502',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (89,179,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'4113e78404d7c038',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (90,180,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'e6cabf5b83231efa',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (91,181,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'a8e7e70a760615f1',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (92,182,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'c74e50e0a15c9fac',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (93,183,4,NULL,1,'2021-06-10 20:47:12',0.00,50.00,NULL,NULL,'a4f295df8eab7355',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (94,201,4,NULL,1,'2021-06-10 20:47:12',0.00,800.00,NULL,NULL,'88746b3f28c58d01',NULL,NULL,'USD',NULL,NULL,'2021-06-10 20:47:12',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_contribution` ENABLE KEYS */; UNLOCK TABLES; @@ -238,7 +2222,10 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_page` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_page` DISABLE KEYS */; -INSERT INTO `civicrm_contribution_page` (`id`, `title`, `intro_text`, `financial_type_id`, `payment_processor`, `is_credit_card_only`, `is_monetary`, `is_recur`, `is_confirm_enabled`, `recur_frequency_unit`, `is_recur_interval`, `is_recur_installments`, `adjust_recur_start_date`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_allow_other_amount`, `default_amount_id`, `min_amount`, `max_amount`, `goal_amount`, `thankyou_title`, `thankyou_text`, `thankyou_footer`, `is_email_receipt`, `receipt_from_name`, `receipt_from_email`, `cc_receipt`, `bcc_receipt`, `receipt_text`, `is_active`, `footer_text`, `amount_block_is_active`, `start_date`, `end_date`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_billing_required`, `frontend_title`) VALUES (1,'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,NULL,0,1,0,1,NULL,0,0,0,0,NULL,NULL,0,NULL,NULL,NULL,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>',1,'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,NULL,NULL,NULL,NULL,'USD',NULL,1,0,NULL),(2,'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,NULL,0,1,0,1,NULL,0,0,0,0,NULL,NULL,0,NULL,NULL,NULL,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,1,'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,NULL,NULL,NULL,NULL,'USD',NULL,1,0,NULL),(3,'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,NULL,0,1,0,1,NULL,0,0,0,0,NULL,NULL,0,NULL,NULL,NULL,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>',1,'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,NULL,NULL,NULL,NULL,'USD',NULL,1,0,NULL); +INSERT INTO `civicrm_contribution_page` (`id`, `title`, `intro_text`, `financial_type_id`, `payment_processor`, `is_credit_card_only`, `is_monetary`, `is_recur`, `is_confirm_enabled`, `recur_frequency_unit`, `is_recur_interval`, `is_recur_installments`, `adjust_recur_start_date`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_allow_other_amount`, `default_amount_id`, `min_amount`, `max_amount`, `goal_amount`, `thankyou_title`, `thankyou_text`, `thankyou_footer`, `is_email_receipt`, `receipt_from_name`, `receipt_from_email`, `cc_receipt`, `bcc_receipt`, `receipt_text`, `is_active`, `footer_text`, `amount_block_is_active`, `start_date`, `end_date`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_billing_required`, `frontend_title`) VALUES + (1,'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,NULL,0,1,0,1,NULL,0,0,0,0,NULL,NULL,0,NULL,NULL,NULL,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>',1,'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,NULL,NULL,NULL,NULL,'USD',NULL,1,0,NULL), + (2,'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,NULL,0,1,0,1,NULL,0,0,0,0,NULL,NULL,0,NULL,NULL,NULL,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,1,'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,NULL,NULL,NULL,NULL,'USD',NULL,1,0,NULL), + (3,'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,NULL,0,1,0,1,NULL,0,0,0,0,NULL,NULL,0,NULL,NULL,NULL,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>',1,'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,NULL,NULL,NULL,NULL,'USD',NULL,1,0,NULL); /*!40000 ALTER TABLE `civicrm_contribution_page` ENABLE KEYS */; UNLOCK TABLES; @@ -266,7 +2253,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_soft` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_soft` DISABLE KEYS */; -INSERT INTO `civicrm_contribution_soft` (`id`, `contribution_id`, `contact_id`, `amount`, `currency`, `pcp_id`, `pcp_display_in_roll`, `pcp_roll_nickname`, `pcp_personal_note`, `soft_credit_type_id`) VALUES (1,8,181,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,181,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); +INSERT INTO `civicrm_contribution_soft` (`id`, `contribution_id`, `contact_id`, `amount`, `currency`, `pcp_id`, `pcp_display_in_roll`, `pcp_roll_nickname`, `pcp_personal_note`, `soft_credit_type_id`) VALUES + (1,8,85,10.00,'USD',1,1,'Jones Family','Helping Hands',10), + (2,9,85,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -285,7 +2274,258 @@ UNLOCK TABLES; LOCK TABLES `civicrm_country` WRITE; /*!40000 ALTER TABLE `civicrm_country` DISABLE KEYS */; -INSERT INTO `civicrm_country` (`id`, `name`, `iso_code`, `country_code`, `address_format_id`, `idd_prefix`, `ndd_prefix`, `region_id`, `is_province_abbreviated`) VALUES (1001,'Afghanistan','AF',NULL,NULL,NULL,NULL,4,0),(1002,'Albania','AL',NULL,NULL,NULL,NULL,1,0),(1003,'Algeria','DZ',NULL,NULL,NULL,NULL,3,0),(1004,'American Samoa','AS',NULL,NULL,NULL,NULL,2,0),(1005,'Andorra','AD',NULL,NULL,NULL,NULL,1,0),(1006,'Angola','AO',NULL,NULL,NULL,NULL,5,0),(1007,'Anguilla','AI',NULL,NULL,NULL,NULL,2,0),(1008,'Antarctica','AQ',NULL,NULL,NULL,NULL,1,0),(1009,'Antigua and Barbuda','AG',NULL,NULL,NULL,NULL,2,0),(1010,'Argentina','AR',NULL,NULL,NULL,NULL,2,0),(1011,'Armenia','AM',NULL,NULL,NULL,NULL,1,0),(1012,'Aruba','AW',NULL,NULL,NULL,NULL,2,0),(1013,'Australia','AU',NULL,NULL,NULL,NULL,4,0),(1014,'Austria','AT',NULL,NULL,NULL,NULL,1,0),(1015,'Azerbaijan','AZ',NULL,NULL,NULL,NULL,1,0),(1016,'Bahrain','BH',NULL,NULL,NULL,NULL,3,0),(1017,'Bangladesh','BD',NULL,NULL,NULL,NULL,4,0),(1018,'Barbados','BB',NULL,NULL,NULL,NULL,4,0),(1019,'Belarus','BY',NULL,NULL,NULL,NULL,1,0),(1020,'Belgium','BE',NULL,NULL,NULL,NULL,1,0),(1021,'Belize','BZ',NULL,NULL,NULL,NULL,2,0),(1022,'Benin','BJ',NULL,NULL,NULL,NULL,5,0),(1023,'Bermuda','BM',NULL,NULL,NULL,NULL,2,0),(1024,'Bhutan','BT',NULL,NULL,NULL,NULL,4,0),(1025,'Bolivia','BO',NULL,NULL,NULL,NULL,2,0),(1026,'Bosnia and Herzegovina','BA',NULL,NULL,NULL,NULL,1,0),(1027,'Botswana','BW',NULL,NULL,NULL,NULL,5,0),(1028,'Bouvet Island','BV',NULL,NULL,NULL,NULL,1,0),(1029,'Brazil','BR',NULL,NULL,NULL,NULL,2,0),(1030,'British Indian Ocean Territory','IO',NULL,NULL,NULL,NULL,4,0),(1031,'Virgin Islands, British','VG',NULL,NULL,NULL,NULL,2,0),(1032,'Brunei Darussalam','BN',NULL,NULL,NULL,NULL,4,0),(1033,'Bulgaria','BG',NULL,NULL,NULL,NULL,1,0),(1034,'Burkina Faso','BF',NULL,NULL,NULL,NULL,5,0),(1035,'Myanmar','MM',NULL,NULL,NULL,NULL,4,0),(1036,'Burundi','BI',NULL,NULL,NULL,NULL,5,0),(1037,'Cambodia','KH',NULL,NULL,NULL,NULL,4,0),(1038,'Cameroon','CM',NULL,NULL,NULL,NULL,5,0),(1039,'Canada','CA',NULL,NULL,NULL,NULL,2,1),(1040,'Cape Verde','CV',NULL,NULL,NULL,NULL,5,0),(1041,'Cayman Islands','KY',NULL,NULL,NULL,NULL,5,0),(1042,'Central African Republic','CF',NULL,NULL,NULL,NULL,5,0),(1043,'Chad','TD',NULL,NULL,NULL,NULL,5,0),(1044,'Chile','CL',NULL,NULL,NULL,NULL,2,0),(1045,'China','CN',NULL,NULL,NULL,NULL,4,0),(1046,'Christmas Island','CX',NULL,NULL,NULL,NULL,4,0),(1047,'Cocos (Keeling) Islands','CC',NULL,NULL,NULL,NULL,4,0),(1048,'Colombia','CO',NULL,NULL,NULL,NULL,2,0),(1049,'Comoros','KM',NULL,NULL,NULL,NULL,5,0),(1050,'Congo, The Democratic Republic of the','CD',NULL,NULL,NULL,NULL,5,0),(1051,'Congo, Republic of the','CG',NULL,NULL,NULL,NULL,5,0),(1052,'Cook Islands','CK',NULL,NULL,NULL,NULL,4,0),(1053,'Costa Rica','CR',NULL,NULL,NULL,NULL,2,0),(1054,'Côte d’Ivoire','CI',NULL,NULL,NULL,NULL,5,0),(1055,'Croatia','HR',NULL,NULL,NULL,NULL,1,0),(1056,'Cuba','CU',NULL,NULL,NULL,NULL,2,0),(1057,'Cyprus','CY',NULL,NULL,NULL,NULL,1,0),(1058,'Czech Republic','CZ',NULL,NULL,NULL,NULL,1,0),(1059,'Denmark','DK',NULL,NULL,NULL,NULL,1,0),(1060,'Djibouti','DJ',NULL,NULL,NULL,NULL,5,0),(1061,'Dominica','DM',NULL,NULL,NULL,NULL,2,0),(1062,'Dominican Republic','DO',NULL,NULL,NULL,NULL,2,0),(1063,'Timor-Leste','TL',NULL,NULL,NULL,NULL,4,0),(1064,'Ecuador','EC',NULL,NULL,NULL,NULL,2,0),(1065,'Egypt','EG',NULL,NULL,NULL,NULL,3,0),(1066,'El Salvador','SV',NULL,NULL,NULL,NULL,2,0),(1067,'Equatorial Guinea','GQ',NULL,NULL,NULL,NULL,5,0),(1068,'Eritrea','ER',NULL,NULL,NULL,NULL,5,0),(1069,'Estonia','EE',NULL,NULL,NULL,NULL,1,0),(1070,'Ethiopia','ET',NULL,NULL,NULL,NULL,5,0),(1072,'Falkland Islands (Malvinas)','FK',NULL,NULL,NULL,NULL,2,0),(1073,'Faroe Islands','FO',NULL,NULL,NULL,NULL,1,0),(1074,'Fiji','FJ',NULL,NULL,NULL,NULL,4,0),(1075,'Finland','FI',NULL,NULL,NULL,NULL,1,0),(1076,'France','FR',NULL,NULL,NULL,NULL,1,0),(1077,'French Guiana','GF',NULL,NULL,NULL,NULL,2,0),(1078,'French Polynesia','PF',NULL,NULL,NULL,NULL,4,0),(1079,'French Southern Territories','TF',NULL,NULL,NULL,NULL,1,0),(1080,'Gabon','GA',NULL,NULL,NULL,NULL,5,0),(1081,'Georgia','GE',NULL,NULL,NULL,NULL,3,0),(1082,'Germany','DE',NULL,NULL,NULL,NULL,1,0),(1083,'Ghana','GH',NULL,NULL,NULL,NULL,5,0),(1084,'Gibraltar','GI',NULL,NULL,NULL,NULL,1,0),(1085,'Greece','GR',NULL,NULL,NULL,NULL,1,0),(1086,'Greenland','GL',NULL,NULL,NULL,NULL,2,0),(1087,'Grenada','GD',NULL,NULL,NULL,NULL,2,0),(1088,'Guadeloupe','GP',NULL,NULL,NULL,NULL,2,0),(1089,'Guam','GU',NULL,NULL,NULL,NULL,4,0),(1090,'Guatemala','GT',NULL,NULL,NULL,NULL,2,0),(1091,'Guinea','GN',NULL,NULL,NULL,NULL,5,0),(1092,'Guinea-Bissau','GW',NULL,NULL,NULL,NULL,5,0),(1093,'Guyana','GY',NULL,NULL,NULL,NULL,2,0),(1094,'Haiti','HT',NULL,NULL,NULL,NULL,2,0),(1095,'Heard Island and McDonald Islands','HM',NULL,NULL,NULL,NULL,4,0),(1096,'Holy See (Vatican City State)','VA',NULL,NULL,NULL,NULL,1,0),(1097,'Honduras','HN',NULL,NULL,NULL,NULL,2,0),(1098,'Hong Kong','HK',NULL,NULL,NULL,NULL,4,0),(1099,'Hungary','HU',NULL,NULL,NULL,NULL,1,0),(1100,'Iceland','IS',NULL,NULL,NULL,NULL,1,0),(1101,'India','IN',NULL,NULL,NULL,NULL,4,0),(1102,'Indonesia','ID',NULL,NULL,NULL,NULL,4,0),(1103,'Iran, Islamic Republic of','IR',NULL,NULL,NULL,NULL,3,0),(1104,'Iraq','IQ',NULL,NULL,NULL,NULL,3,0),(1105,'Ireland','IE',NULL,NULL,NULL,NULL,1,0),(1106,'Israel','IL',NULL,NULL,NULL,NULL,3,0),(1107,'Italy','IT',NULL,NULL,NULL,NULL,1,0),(1108,'Jamaica','JM',NULL,NULL,NULL,NULL,2,0),(1109,'Japan','JP',NULL,NULL,NULL,NULL,4,0),(1110,'Jordan','JO',NULL,NULL,NULL,NULL,3,0),(1111,'Kazakhstan','KZ',NULL,NULL,NULL,NULL,1,0),(1112,'Kenya','KE',NULL,NULL,NULL,NULL,5,0),(1113,'Kiribati','KI',NULL,NULL,NULL,NULL,4,0),(1114,'Korea, Democratic People\'s Republic of','KP',NULL,NULL,NULL,NULL,4,0),(1115,'Korea, Republic of','KR',NULL,NULL,NULL,NULL,4,0),(1116,'Kuwait','KW',NULL,NULL,NULL,NULL,3,0),(1117,'Kyrgyzstan','KG',NULL,NULL,NULL,NULL,1,0),(1118,'Lao People\'s Democratic Republic','LA',NULL,NULL,NULL,NULL,4,0),(1119,'Latvia','LV',NULL,NULL,NULL,NULL,1,0),(1120,'Lebanon','LB',NULL,NULL,NULL,NULL,3,0),(1121,'Lesotho','LS',NULL,NULL,NULL,NULL,5,0),(1122,'Liberia','LR',NULL,NULL,NULL,NULL,5,0),(1123,'Libya','LY',NULL,NULL,NULL,NULL,3,0),(1124,'Liechtenstein','LI',NULL,NULL,NULL,NULL,1,0),(1125,'Lithuania','LT',NULL,NULL,NULL,NULL,1,0),(1126,'Luxembourg','LU',NULL,NULL,NULL,NULL,1,0),(1127,'Macao','MO',NULL,NULL,NULL,NULL,4,0),(1128,'North Macedonia','MK',NULL,NULL,NULL,NULL,1,0),(1129,'Madagascar','MG',NULL,NULL,NULL,NULL,5,0),(1130,'Malawi','MW',NULL,NULL,NULL,NULL,5,0),(1131,'Malaysia','MY',NULL,NULL,NULL,NULL,4,0),(1132,'Maldives','MV',NULL,NULL,NULL,NULL,4,0),(1133,'Mali','ML',NULL,NULL,NULL,NULL,5,0),(1134,'Malta','MT',NULL,NULL,NULL,NULL,1,0),(1135,'Marshall Islands','MH',NULL,NULL,NULL,NULL,4,0),(1136,'Martinique','MQ',NULL,NULL,NULL,NULL,2,0),(1137,'Mauritania','MR',NULL,NULL,NULL,NULL,5,0),(1138,'Mauritius','MU',NULL,NULL,NULL,NULL,5,0),(1139,'Mayotte','YT',NULL,NULL,NULL,NULL,5,0),(1140,'Mexico','MX',NULL,NULL,NULL,NULL,2,0),(1141,'Micronesia, Federated States of','FM',NULL,NULL,NULL,NULL,4,0),(1142,'Moldova','MD',NULL,NULL,NULL,NULL,1,0),(1143,'Monaco','MC',NULL,NULL,NULL,NULL,1,0),(1144,'Mongolia','MN',NULL,NULL,NULL,NULL,4,0),(1145,'Montserrat','MS',NULL,NULL,NULL,NULL,2,0),(1146,'Morocco','MA',NULL,NULL,NULL,NULL,3,0),(1147,'Mozambique','MZ',NULL,NULL,NULL,NULL,5,0),(1148,'Namibia','NA',NULL,NULL,NULL,NULL,5,0),(1149,'Nauru','NR',NULL,NULL,NULL,NULL,4,0),(1150,'Nepal','NP',NULL,NULL,NULL,NULL,4,0),(1152,'Netherlands','NL',NULL,NULL,NULL,NULL,1,0),(1153,'New Caledonia','NC',NULL,NULL,NULL,NULL,4,0),(1154,'New Zealand','NZ',NULL,NULL,NULL,NULL,4,0),(1155,'Nicaragua','NI',NULL,NULL,NULL,NULL,2,0),(1156,'Niger','NE',NULL,NULL,NULL,NULL,5,0),(1157,'Nigeria','NG',NULL,NULL,NULL,NULL,5,0),(1158,'Niue','NU',NULL,NULL,NULL,NULL,4,0),(1159,'Norfolk Island','NF',NULL,NULL,NULL,NULL,4,0),(1160,'Northern Mariana Islands','MP',NULL,NULL,NULL,NULL,2,0),(1161,'Norway','NO',NULL,NULL,NULL,NULL,1,0),(1162,'Oman','OM',NULL,NULL,NULL,NULL,3,0),(1163,'Pakistan','PK',NULL,NULL,NULL,NULL,4,0),(1164,'Palau','PW',NULL,NULL,NULL,NULL,4,0),(1165,'Palestine, State of','PS',NULL,NULL,NULL,NULL,3,0),(1166,'Panama','PA',NULL,NULL,NULL,NULL,2,0),(1167,'Papua New Guinea','PG',NULL,NULL,NULL,NULL,4,0),(1168,'Paraguay','PY',NULL,NULL,NULL,NULL,2,0),(1169,'Peru','PE',NULL,NULL,NULL,NULL,2,0),(1170,'Philippines','PH',NULL,NULL,NULL,NULL,4,0),(1171,'Pitcairn','PN',NULL,NULL,NULL,NULL,4,0),(1172,'Poland','PL',NULL,NULL,NULL,NULL,1,0),(1173,'Portugal','PT',NULL,NULL,NULL,NULL,1,0),(1174,'Puerto Rico','PR',NULL,NULL,NULL,NULL,2,0),(1175,'Qatar','QA',NULL,NULL,NULL,NULL,3,0),(1176,'Romania','RO',NULL,NULL,NULL,NULL,1,0),(1177,'Russian Federation','RU',NULL,NULL,NULL,NULL,1,0),(1178,'Rwanda','RW',NULL,NULL,NULL,NULL,5,0),(1179,'Reunion','RE',NULL,NULL,NULL,NULL,5,0),(1180,'Saint Helena','SH',NULL,NULL,NULL,NULL,5,0),(1181,'Saint Kitts and Nevis','KN',NULL,NULL,NULL,NULL,2,0),(1182,'Saint Lucia','LC',NULL,NULL,NULL,NULL,2,0),(1183,'Saint Pierre and Miquelon','PM',NULL,NULL,NULL,NULL,2,0),(1184,'Saint Vincent and the Grenadines','VC',NULL,NULL,NULL,NULL,2,0),(1185,'Samoa','WS',NULL,NULL,NULL,NULL,4,0),(1186,'San Marino','SM',NULL,NULL,NULL,NULL,1,0),(1187,'Saudi Arabia','SA',NULL,NULL,NULL,NULL,3,0),(1188,'Senegal','SN',NULL,NULL,NULL,NULL,5,0),(1189,'Seychelles','SC',NULL,NULL,NULL,NULL,5,0),(1190,'Sierra Leone','SL',NULL,NULL,NULL,NULL,5,0),(1191,'Singapore','SG',NULL,NULL,NULL,NULL,4,0),(1192,'Slovakia','SK',NULL,NULL,NULL,NULL,1,0),(1193,'Slovenia','SI',NULL,NULL,NULL,NULL,1,0),(1194,'Solomon Islands','SB',NULL,NULL,NULL,NULL,4,0),(1195,'Somalia','SO',NULL,NULL,NULL,NULL,5,0),(1196,'South Africa','ZA',NULL,NULL,NULL,NULL,5,0),(1197,'South Georgia and the South Sandwich Islands','GS',NULL,NULL,NULL,NULL,2,0),(1198,'Spain','ES',NULL,NULL,NULL,NULL,1,0),(1199,'Sri Lanka','LK',NULL,NULL,NULL,NULL,4,0),(1200,'Sudan','SD',NULL,NULL,NULL,NULL,3,0),(1201,'Suriname','SR',NULL,NULL,NULL,NULL,2,0),(1202,'Svalbard and Jan Mayen','SJ',NULL,NULL,NULL,NULL,1,0),(1203,'Eswatini','SZ',NULL,NULL,NULL,NULL,5,0),(1204,'Sweden','SE',NULL,NULL,NULL,NULL,1,0),(1205,'Switzerland','CH',NULL,NULL,NULL,NULL,1,0),(1206,'Syrian Arab Republic','SY',NULL,NULL,NULL,NULL,3,0),(1207,'Sao Tome and Principe','ST',NULL,NULL,NULL,NULL,5,0),(1208,'Taiwan','TW',NULL,NULL,NULL,NULL,4,0),(1209,'Tajikistan','TJ',NULL,NULL,NULL,NULL,3,0),(1210,'Tanzania, United Republic of','TZ',NULL,NULL,NULL,NULL,5,0),(1211,'Thailand','TH',NULL,NULL,NULL,NULL,4,0),(1212,'Bahamas','BS',NULL,NULL,NULL,NULL,2,0),(1213,'Gambia','GM',NULL,NULL,NULL,NULL,5,0),(1214,'Togo','TG',NULL,NULL,NULL,NULL,5,0),(1215,'Tokelau','TK',NULL,NULL,NULL,NULL,4,0),(1216,'Tonga','TO',NULL,NULL,NULL,NULL,4,0),(1217,'Trinidad and Tobago','TT',NULL,NULL,NULL,NULL,2,0),(1218,'Tunisia','TN',NULL,NULL,NULL,NULL,3,0),(1219,'Turkey','TR',NULL,NULL,NULL,NULL,1,0),(1220,'Turkmenistan','TM',NULL,NULL,NULL,NULL,1,0),(1221,'Turks and Caicos Islands','TC',NULL,NULL,NULL,NULL,2,0),(1222,'Tuvalu','TV',NULL,NULL,NULL,NULL,4,0),(1223,'Uganda','UG',NULL,NULL,NULL,NULL,5,0),(1224,'Ukraine','UA',NULL,NULL,NULL,NULL,1,0),(1225,'United Arab Emirates','AE',NULL,NULL,NULL,NULL,3,0),(1226,'United Kingdom','GB',NULL,NULL,NULL,NULL,1,0),(1227,'United States Minor Outlying Islands','UM',NULL,NULL,NULL,NULL,2,0),(1228,'United States','US',NULL,NULL,NULL,NULL,2,1),(1229,'Uruguay','UY',NULL,NULL,NULL,NULL,2,0),(1230,'Uzbekistan','UZ',NULL,NULL,NULL,NULL,1,0),(1231,'Vanuatu','VU',NULL,NULL,NULL,NULL,4,0),(1232,'Venezuela','VE',NULL,NULL,NULL,NULL,2,0),(1233,'Viet Nam','VN',NULL,NULL,NULL,NULL,4,0),(1234,'Virgin Islands, U.S.','VI',NULL,NULL,NULL,NULL,2,0),(1235,'Wallis and Futuna','WF',NULL,NULL,NULL,NULL,4,0),(1236,'Western Sahara','EH',NULL,NULL,NULL,NULL,3,0),(1237,'Yemen','YE',NULL,NULL,NULL,NULL,3,0),(1238,'Serbia and Montenegro','CS',NULL,NULL,NULL,NULL,1,0),(1239,'Zambia','ZM',NULL,NULL,NULL,NULL,5,0),(1240,'Zimbabwe','ZW',NULL,NULL,NULL,NULL,5,0),(1241,'Ã…land Islands','AX',NULL,NULL,NULL,NULL,1,0),(1242,'Serbia','RS',NULL,NULL,NULL,NULL,1,0),(1243,'Montenegro','ME',NULL,NULL,NULL,NULL,1,0),(1244,'Jersey','JE',NULL,NULL,NULL,NULL,99,0),(1245,'Guernsey','GG',NULL,NULL,NULL,NULL,99,0),(1246,'Isle of Man','IM',NULL,NULL,NULL,NULL,99,0),(1247,'South Sudan','SS',NULL,NULL,NULL,NULL,5,0),(1248,'Curaçao','CW',NULL,NULL,NULL,NULL,2,0),(1249,'Sint Maarten (Dutch Part)','SX',NULL,NULL,NULL,NULL,2,0),(1250,'Bonaire, Saint Eustatius and Saba','BQ',NULL,NULL,NULL,NULL,2,0),(1251,'Kosovo','XK',NULL,NULL,NULL,NULL,1,0),(1252,'Saint Barthélemy','BL',NULL,NULL,NULL,NULL,2,0),(1253,'Saint Martin (French part)','MF',NULL,NULL,NULL,NULL,2,0); +INSERT INTO `civicrm_country` (`id`, `name`, `iso_code`, `country_code`, `address_format_id`, `idd_prefix`, `ndd_prefix`, `region_id`, `is_province_abbreviated`, `is_active`) VALUES + (1001,'Afghanistan','AF',NULL,NULL,NULL,NULL,4,0,1), + (1002,'Albania','AL',NULL,NULL,NULL,NULL,1,0,1), + (1003,'Algeria','DZ',NULL,NULL,NULL,NULL,3,0,1), + (1004,'American Samoa','AS',NULL,NULL,NULL,NULL,2,0,1), + (1005,'Andorra','AD',NULL,NULL,NULL,NULL,1,0,1), + (1006,'Angola','AO',NULL,NULL,NULL,NULL,5,0,1), + (1007,'Anguilla','AI',NULL,NULL,NULL,NULL,2,0,1), + (1008,'Antarctica','AQ',NULL,NULL,NULL,NULL,1,0,1), + (1009,'Antigua and Barbuda','AG',NULL,NULL,NULL,NULL,2,0,1), + (1010,'Argentina','AR',NULL,NULL,NULL,NULL,2,0,1), + (1011,'Armenia','AM',NULL,NULL,NULL,NULL,1,0,1), + (1012,'Aruba','AW',NULL,NULL,NULL,NULL,2,0,1), + (1013,'Australia','AU',NULL,NULL,NULL,NULL,4,0,1), + (1014,'Austria','AT',NULL,NULL,NULL,NULL,1,0,1), + (1015,'Azerbaijan','AZ',NULL,NULL,NULL,NULL,1,0,1), + (1016,'Bahrain','BH',NULL,NULL,NULL,NULL,3,0,1), + (1017,'Bangladesh','BD',NULL,NULL,NULL,NULL,4,0,1), + (1018,'Barbados','BB',NULL,NULL,NULL,NULL,4,0,1), + (1019,'Belarus','BY',NULL,NULL,NULL,NULL,1,0,1), + (1020,'Belgium','BE',NULL,NULL,NULL,NULL,1,0,1), + (1021,'Belize','BZ',NULL,NULL,NULL,NULL,2,0,1), + (1022,'Benin','BJ',NULL,NULL,NULL,NULL,5,0,1), + (1023,'Bermuda','BM',NULL,NULL,NULL,NULL,2,0,1), + (1024,'Bhutan','BT',NULL,NULL,NULL,NULL,4,0,1), + (1025,'Bolivia','BO',NULL,NULL,NULL,NULL,2,0,1), + (1026,'Bosnia and Herzegovina','BA',NULL,NULL,NULL,NULL,1,0,1), + (1027,'Botswana','BW',NULL,NULL,NULL,NULL,5,0,1), + (1028,'Bouvet Island','BV',NULL,NULL,NULL,NULL,1,0,1), + (1029,'Brazil','BR',NULL,NULL,NULL,NULL,2,0,1), + (1030,'British Indian Ocean Territory','IO',NULL,NULL,NULL,NULL,4,0,1), + (1031,'Virgin Islands, British','VG',NULL,NULL,NULL,NULL,2,0,1), + (1032,'Brunei Darussalam','BN',NULL,NULL,NULL,NULL,4,0,1), + (1033,'Bulgaria','BG',NULL,NULL,NULL,NULL,1,0,1), + (1034,'Burkina Faso','BF',NULL,NULL,NULL,NULL,5,0,1), + (1035,'Myanmar','MM',NULL,NULL,NULL,NULL,4,0,1), + (1036,'Burundi','BI',NULL,NULL,NULL,NULL,5,0,1), + (1037,'Cambodia','KH',NULL,NULL,NULL,NULL,4,0,1), + (1038,'Cameroon','CM',NULL,NULL,NULL,NULL,5,0,1), + (1039,'Canada','CA',NULL,NULL,NULL,NULL,2,1,1), + (1040,'Cape Verde','CV',NULL,NULL,NULL,NULL,5,0,1), + (1041,'Cayman Islands','KY',NULL,NULL,NULL,NULL,5,0,1), + (1042,'Central African Republic','CF',NULL,NULL,NULL,NULL,5,0,1), + (1043,'Chad','TD',NULL,NULL,NULL,NULL,5,0,1), + (1044,'Chile','CL',NULL,NULL,NULL,NULL,2,0,1), + (1045,'China','CN',NULL,NULL,NULL,NULL,4,0,1), + (1046,'Christmas Island','CX',NULL,NULL,NULL,NULL,4,0,1), + (1047,'Cocos (Keeling) Islands','CC',NULL,NULL,NULL,NULL,4,0,1), + (1048,'Colombia','CO',NULL,NULL,NULL,NULL,2,0,1), + (1049,'Comoros','KM',NULL,NULL,NULL,NULL,5,0,1), + (1050,'Congo, The Democratic Republic of the','CD',NULL,NULL,NULL,NULL,5,0,1), + (1051,'Congo, Republic of the','CG',NULL,NULL,NULL,NULL,5,0,1), + (1052,'Cook Islands','CK',NULL,NULL,NULL,NULL,4,0,1), + (1053,'Costa Rica','CR',NULL,NULL,NULL,NULL,2,0,1), + (1054,'Côte d’Ivoire','CI',NULL,NULL,NULL,NULL,5,0,1), + (1055,'Croatia','HR',NULL,NULL,NULL,NULL,1,0,1), + (1056,'Cuba','CU',NULL,NULL,NULL,NULL,2,0,1), + (1057,'Cyprus','CY',NULL,NULL,NULL,NULL,1,0,1), + (1058,'Czech Republic','CZ',NULL,NULL,NULL,NULL,1,0,1), + (1059,'Denmark','DK',NULL,NULL,NULL,NULL,1,0,1), + (1060,'Djibouti','DJ',NULL,NULL,NULL,NULL,5,0,1), + (1061,'Dominica','DM',NULL,NULL,NULL,NULL,2,0,1), + (1062,'Dominican Republic','DO',NULL,NULL,NULL,NULL,2,0,1), + (1063,'Timor-Leste','TL',NULL,NULL,NULL,NULL,4,0,1), + (1064,'Ecuador','EC',NULL,NULL,NULL,NULL,2,0,1), + (1065,'Egypt','EG',NULL,NULL,NULL,NULL,3,0,1), + (1066,'El Salvador','SV',NULL,NULL,NULL,NULL,2,0,1), + (1067,'Equatorial Guinea','GQ',NULL,NULL,NULL,NULL,5,0,1), + (1068,'Eritrea','ER',NULL,NULL,NULL,NULL,5,0,1), + (1069,'Estonia','EE',NULL,NULL,NULL,NULL,1,0,1), + (1070,'Ethiopia','ET',NULL,NULL,NULL,NULL,5,0,1), + (1072,'Falkland Islands (Malvinas)','FK',NULL,NULL,NULL,NULL,2,0,1), + (1073,'Faroe Islands','FO',NULL,NULL,NULL,NULL,1,0,1), + (1074,'Fiji','FJ',NULL,NULL,NULL,NULL,4,0,1), + (1075,'Finland','FI',NULL,NULL,NULL,NULL,1,0,1), + (1076,'France','FR',NULL,NULL,NULL,NULL,1,0,1), + (1077,'French Guiana','GF',NULL,NULL,NULL,NULL,2,0,1), + (1078,'French Polynesia','PF',NULL,NULL,NULL,NULL,4,0,1), + (1079,'French Southern Territories','TF',NULL,NULL,NULL,NULL,1,0,1), + (1080,'Gabon','GA',NULL,NULL,NULL,NULL,5,0,1), + (1081,'Georgia','GE',NULL,NULL,NULL,NULL,3,0,1), + (1082,'Germany','DE',NULL,NULL,NULL,NULL,1,0,1), + (1083,'Ghana','GH',NULL,NULL,NULL,NULL,5,0,1), + (1084,'Gibraltar','GI',NULL,NULL,NULL,NULL,1,0,1), + (1085,'Greece','GR',NULL,NULL,NULL,NULL,1,0,1), + (1086,'Greenland','GL',NULL,NULL,NULL,NULL,2,0,1), + (1087,'Grenada','GD',NULL,NULL,NULL,NULL,2,0,1), + (1088,'Guadeloupe','GP',NULL,NULL,NULL,NULL,2,0,1), + (1089,'Guam','GU',NULL,NULL,NULL,NULL,4,0,1), + (1090,'Guatemala','GT',NULL,NULL,NULL,NULL,2,0,1), + (1091,'Guinea','GN',NULL,NULL,NULL,NULL,5,0,1), + (1092,'Guinea-Bissau','GW',NULL,NULL,NULL,NULL,5,0,1), + (1093,'Guyana','GY',NULL,NULL,NULL,NULL,2,0,1), + (1094,'Haiti','HT',NULL,NULL,NULL,NULL,2,0,1), + (1095,'Heard Island and McDonald Islands','HM',NULL,NULL,NULL,NULL,4,0,1), + (1096,'Holy See (Vatican City State)','VA',NULL,NULL,NULL,NULL,1,0,1), + (1097,'Honduras','HN',NULL,NULL,NULL,NULL,2,0,1), + (1098,'Hong Kong','HK',NULL,NULL,NULL,NULL,4,0,1), + (1099,'Hungary','HU',NULL,NULL,NULL,NULL,1,0,1), + (1100,'Iceland','IS',NULL,NULL,NULL,NULL,1,0,1), + (1101,'India','IN',NULL,NULL,NULL,NULL,4,0,1), + (1102,'Indonesia','ID',NULL,NULL,NULL,NULL,4,0,1), + (1103,'Iran, Islamic Republic of','IR',NULL,NULL,NULL,NULL,3,0,1), + (1104,'Iraq','IQ',NULL,NULL,NULL,NULL,3,0,1), + (1105,'Ireland','IE',NULL,NULL,NULL,NULL,1,0,1), + (1106,'Israel','IL',NULL,NULL,NULL,NULL,3,0,1), + (1107,'Italy','IT',NULL,NULL,NULL,NULL,1,0,1), + (1108,'Jamaica','JM',NULL,NULL,NULL,NULL,2,0,1), + (1109,'Japan','JP',NULL,NULL,NULL,NULL,4,0,1), + (1110,'Jordan','JO',NULL,NULL,NULL,NULL,3,0,1), + (1111,'Kazakhstan','KZ',NULL,NULL,NULL,NULL,1,0,1), + (1112,'Kenya','KE',NULL,NULL,NULL,NULL,5,0,1), + (1113,'Kiribati','KI',NULL,NULL,NULL,NULL,4,0,1), + (1114,'Korea, Democratic People\'s Republic of','KP',NULL,NULL,NULL,NULL,4,0,1), + (1115,'Korea, Republic of','KR',NULL,NULL,NULL,NULL,4,0,1), + (1116,'Kuwait','KW',NULL,NULL,NULL,NULL,3,0,1), + (1117,'Kyrgyzstan','KG',NULL,NULL,NULL,NULL,1,0,1), + (1118,'Lao People\'s Democratic Republic','LA',NULL,NULL,NULL,NULL,4,0,1), + (1119,'Latvia','LV',NULL,NULL,NULL,NULL,1,0,1), + (1120,'Lebanon','LB',NULL,NULL,NULL,NULL,3,0,1), + (1121,'Lesotho','LS',NULL,NULL,NULL,NULL,5,0,1), + (1122,'Liberia','LR',NULL,NULL,NULL,NULL,5,0,1), + (1123,'Libya','LY',NULL,NULL,NULL,NULL,3,0,1), + (1124,'Liechtenstein','LI',NULL,NULL,NULL,NULL,1,0,1), + (1125,'Lithuania','LT',NULL,NULL,NULL,NULL,1,0,1), + (1126,'Luxembourg','LU',NULL,NULL,NULL,NULL,1,0,1), + (1127,'Macao','MO',NULL,NULL,NULL,NULL,4,0,1), + (1128,'North Macedonia','MK',NULL,NULL,NULL,NULL,1,0,1), + (1129,'Madagascar','MG',NULL,NULL,NULL,NULL,5,0,1), + (1130,'Malawi','MW',NULL,NULL,NULL,NULL,5,0,1), + (1131,'Malaysia','MY',NULL,NULL,NULL,NULL,4,0,1), + (1132,'Maldives','MV',NULL,NULL,NULL,NULL,4,0,1), + (1133,'Mali','ML',NULL,NULL,NULL,NULL,5,0,1), + (1134,'Malta','MT',NULL,NULL,NULL,NULL,1,0,1), + (1135,'Marshall Islands','MH',NULL,NULL,NULL,NULL,4,0,1), + (1136,'Martinique','MQ',NULL,NULL,NULL,NULL,2,0,1), + (1137,'Mauritania','MR',NULL,NULL,NULL,NULL,5,0,1), + (1138,'Mauritius','MU',NULL,NULL,NULL,NULL,5,0,1), + (1139,'Mayotte','YT',NULL,NULL,NULL,NULL,5,0,1), + (1140,'Mexico','MX',NULL,NULL,NULL,NULL,2,0,1), + (1141,'Micronesia, Federated States of','FM',NULL,NULL,NULL,NULL,4,0,1), + (1142,'Moldova','MD',NULL,NULL,NULL,NULL,1,0,1), + (1143,'Monaco','MC',NULL,NULL,NULL,NULL,1,0,1), + (1144,'Mongolia','MN',NULL,NULL,NULL,NULL,4,0,1), + (1145,'Montserrat','MS',NULL,NULL,NULL,NULL,2,0,1), + (1146,'Morocco','MA',NULL,NULL,NULL,NULL,3,0,1), + (1147,'Mozambique','MZ',NULL,NULL,NULL,NULL,5,0,1), + (1148,'Namibia','NA',NULL,NULL,NULL,NULL,5,0,1), + (1149,'Nauru','NR',NULL,NULL,NULL,NULL,4,0,1), + (1150,'Nepal','NP',NULL,NULL,NULL,NULL,4,0,1), + (1152,'Netherlands','NL',NULL,NULL,NULL,NULL,1,0,1), + (1153,'New Caledonia','NC',NULL,NULL,NULL,NULL,4,0,1), + (1154,'New Zealand','NZ',NULL,NULL,NULL,NULL,4,0,1), + (1155,'Nicaragua','NI',NULL,NULL,NULL,NULL,2,0,1), + (1156,'Niger','NE',NULL,NULL,NULL,NULL,5,0,1), + (1157,'Nigeria','NG',NULL,NULL,NULL,NULL,5,0,1), + (1158,'Niue','NU',NULL,NULL,NULL,NULL,4,0,1), + (1159,'Norfolk Island','NF',NULL,NULL,NULL,NULL,4,0,1), + (1160,'Northern Mariana Islands','MP',NULL,NULL,NULL,NULL,2,0,1), + (1161,'Norway','NO',NULL,NULL,NULL,NULL,1,0,1), + (1162,'Oman','OM',NULL,NULL,NULL,NULL,3,0,1), + (1163,'Pakistan','PK',NULL,NULL,NULL,NULL,4,0,1), + (1164,'Palau','PW',NULL,NULL,NULL,NULL,4,0,1), + (1165,'Palestine, State of','PS',NULL,NULL,NULL,NULL,3,0,1), + (1166,'Panama','PA',NULL,NULL,NULL,NULL,2,0,1), + (1167,'Papua New Guinea','PG',NULL,NULL,NULL,NULL,4,0,1), + (1168,'Paraguay','PY',NULL,NULL,NULL,NULL,2,0,1), + (1169,'Peru','PE',NULL,NULL,NULL,NULL,2,0,1), + (1170,'Philippines','PH',NULL,NULL,NULL,NULL,4,0,1), + (1171,'Pitcairn','PN',NULL,NULL,NULL,NULL,4,0,1), + (1172,'Poland','PL',NULL,NULL,NULL,NULL,1,0,1), + (1173,'Portugal','PT',NULL,NULL,NULL,NULL,1,0,1), + (1174,'Puerto Rico','PR',NULL,NULL,NULL,NULL,2,0,1), + (1175,'Qatar','QA',NULL,NULL,NULL,NULL,3,0,1), + (1176,'Romania','RO',NULL,NULL,NULL,NULL,1,0,1), + (1177,'Russian Federation','RU',NULL,NULL,NULL,NULL,1,0,1), + (1178,'Rwanda','RW',NULL,NULL,NULL,NULL,5,0,1), + (1179,'Reunion','RE',NULL,NULL,NULL,NULL,5,0,1), + (1180,'Saint Helena','SH',NULL,NULL,NULL,NULL,5,0,1), + (1181,'Saint Kitts and Nevis','KN',NULL,NULL,NULL,NULL,2,0,1), + (1182,'Saint Lucia','LC',NULL,NULL,NULL,NULL,2,0,1), + (1183,'Saint Pierre and Miquelon','PM',NULL,NULL,NULL,NULL,2,0,1), + (1184,'Saint Vincent and the Grenadines','VC',NULL,NULL,NULL,NULL,2,0,1), + (1185,'Samoa','WS',NULL,NULL,NULL,NULL,4,0,1), + (1186,'San Marino','SM',NULL,NULL,NULL,NULL,1,0,1), + (1187,'Saudi Arabia','SA',NULL,NULL,NULL,NULL,3,0,1), + (1188,'Senegal','SN',NULL,NULL,NULL,NULL,5,0,1), + (1189,'Seychelles','SC',NULL,NULL,NULL,NULL,5,0,1), + (1190,'Sierra Leone','SL',NULL,NULL,NULL,NULL,5,0,1), + (1191,'Singapore','SG',NULL,NULL,NULL,NULL,4,0,1), + (1192,'Slovakia','SK',NULL,NULL,NULL,NULL,1,0,1), + (1193,'Slovenia','SI',NULL,NULL,NULL,NULL,1,0,1), + (1194,'Solomon Islands','SB',NULL,NULL,NULL,NULL,4,0,1), + (1195,'Somalia','SO',NULL,NULL,NULL,NULL,5,0,1), + (1196,'South Africa','ZA',NULL,NULL,NULL,NULL,5,0,1), + (1197,'South Georgia and the South Sandwich Islands','GS',NULL,NULL,NULL,NULL,2,0,1), + (1198,'Spain','ES',NULL,NULL,NULL,NULL,1,0,1), + (1199,'Sri Lanka','LK',NULL,NULL,NULL,NULL,4,0,1), + (1200,'Sudan','SD',NULL,NULL,NULL,NULL,3,0,1), + (1201,'Suriname','SR',NULL,NULL,NULL,NULL,2,0,1), + (1202,'Svalbard and Jan Mayen','SJ',NULL,NULL,NULL,NULL,1,0,1), + (1203,'Eswatini','SZ',NULL,NULL,NULL,NULL,5,0,1), + (1204,'Sweden','SE',NULL,NULL,NULL,NULL,1,0,1), + (1205,'Switzerland','CH',NULL,NULL,NULL,NULL,1,0,1), + (1206,'Syrian Arab Republic','SY',NULL,NULL,NULL,NULL,3,0,1), + (1207,'Sao Tome and Principe','ST',NULL,NULL,NULL,NULL,5,0,1), + (1208,'Taiwan','TW',NULL,NULL,NULL,NULL,4,0,1), + (1209,'Tajikistan','TJ',NULL,NULL,NULL,NULL,3,0,1), + (1210,'Tanzania, United Republic of','TZ',NULL,NULL,NULL,NULL,5,0,1), + (1211,'Thailand','TH',NULL,NULL,NULL,NULL,4,0,1), + (1212,'Bahamas','BS',NULL,NULL,NULL,NULL,2,0,1), + (1213,'Gambia','GM',NULL,NULL,NULL,NULL,5,0,1), + (1214,'Togo','TG',NULL,NULL,NULL,NULL,5,0,1), + (1215,'Tokelau','TK',NULL,NULL,NULL,NULL,4,0,1), + (1216,'Tonga','TO',NULL,NULL,NULL,NULL,4,0,1), + (1217,'Trinidad and Tobago','TT',NULL,NULL,NULL,NULL,2,0,1), + (1218,'Tunisia','TN',NULL,NULL,NULL,NULL,3,0,1), + (1219,'Turkey','TR',NULL,NULL,NULL,NULL,1,0,1), + (1220,'Turkmenistan','TM',NULL,NULL,NULL,NULL,1,0,1), + (1221,'Turks and Caicos Islands','TC',NULL,NULL,NULL,NULL,2,0,1), + (1222,'Tuvalu','TV',NULL,NULL,NULL,NULL,4,0,1), + (1223,'Uganda','UG',NULL,NULL,NULL,NULL,5,0,1), + (1224,'Ukraine','UA',NULL,NULL,NULL,NULL,1,0,1), + (1225,'United Arab Emirates','AE',NULL,NULL,NULL,NULL,3,0,1), + (1226,'United Kingdom','GB',NULL,NULL,NULL,NULL,1,0,1), + (1227,'United States Minor Outlying Islands','UM',NULL,NULL,NULL,NULL,2,0,1), + (1228,'United States','US',NULL,NULL,NULL,NULL,2,1,1), + (1229,'Uruguay','UY',NULL,NULL,NULL,NULL,2,0,1), + (1230,'Uzbekistan','UZ',NULL,NULL,NULL,NULL,1,0,1), + (1231,'Vanuatu','VU',NULL,NULL,NULL,NULL,4,0,1), + (1232,'Venezuela','VE',NULL,NULL,NULL,NULL,2,0,1), + (1233,'Viet Nam','VN',NULL,NULL,NULL,NULL,4,0,1), + (1234,'Virgin Islands, U.S.','VI',NULL,NULL,NULL,NULL,2,0,1), + (1235,'Wallis and Futuna','WF',NULL,NULL,NULL,NULL,4,0,1), + (1236,'Western Sahara','EH',NULL,NULL,NULL,NULL,3,0,1), + (1237,'Yemen','YE',NULL,NULL,NULL,NULL,3,0,1), + (1238,'Serbia and Montenegro','CS',NULL,NULL,NULL,NULL,1,0,1), + (1239,'Zambia','ZM',NULL,NULL,NULL,NULL,5,0,1), + (1240,'Zimbabwe','ZW',NULL,NULL,NULL,NULL,5,0,1), + (1241,'Ã…land Islands','AX',NULL,NULL,NULL,NULL,1,0,1), + (1242,'Serbia','RS',NULL,NULL,NULL,NULL,1,0,1), + (1243,'Montenegro','ME',NULL,NULL,NULL,NULL,1,0,1), + (1244,'Jersey','JE',NULL,NULL,NULL,NULL,99,0,1), + (1245,'Guernsey','GG',NULL,NULL,NULL,NULL,99,0,1), + (1246,'Isle of Man','IM',NULL,NULL,NULL,NULL,99,0,1), + (1247,'South Sudan','SS',NULL,NULL,NULL,NULL,5,0,1), + (1248,'Curaçao','CW',NULL,NULL,NULL,NULL,2,0,1), + (1249,'Sint Maarten (Dutch Part)','SX',NULL,NULL,NULL,NULL,2,0,1), + (1250,'Bonaire, Saint Eustatius and Saba','BQ',NULL,NULL,NULL,NULL,2,0,1), + (1251,'Kosovo','XK',NULL,NULL,NULL,NULL,1,0,1), + (1252,'Saint Barthélemy','BL',NULL,NULL,NULL,NULL,2,0,1), + (1253,'Saint Martin (French part)','MF',NULL,NULL,NULL,NULL,2,0,1); /*!40000 ALTER TABLE `civicrm_country` ENABLE KEYS */; UNLOCK TABLES; @@ -295,7 +2535,13 @@ UNLOCK TABLES; LOCK TABLES `civicrm_county` WRITE; /*!40000 ALTER TABLE `civicrm_county` DISABLE KEYS */; -INSERT INTO `civicrm_county` (`id`, `name`, `abbreviation`, `state_province_id`) VALUES (1,'Alameda',NULL,1004),(2,'Contra Costa',NULL,1004),(3,'Marin',NULL,1004),(4,'San Francisco',NULL,1004),(5,'San Mateo',NULL,1004),(6,'Santa Clara',NULL,1004); +INSERT INTO `civicrm_county` (`id`, `name`, `abbreviation`, `state_province_id`, `is_active`) VALUES + (1,'Alameda',NULL,1004,1), + (2,'Contra Costa',NULL,1004,1), + (3,'Marin',NULL,1004,1), + (4,'San Francisco',NULL,1004,1), + (5,'San Mateo',NULL,1004,1), + (6,'Santa Clara',NULL,1004,1); /*!40000 ALTER TABLE `civicrm_county` ENABLE KEYS */; UNLOCK TABLES; @@ -305,7 +2551,191 @@ UNLOCK TABLES; LOCK TABLES `civicrm_currency` WRITE; /*!40000 ALTER TABLE `civicrm_currency` DISABLE KEYS */; -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','Eswatini 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'); +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','Eswatini 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'); /*!40000 ALTER TABLE `civicrm_currency` ENABLE KEYS */; UNLOCK TABLES; @@ -342,7 +2772,17 @@ UNLOCK TABLES; LOCK TABLES `civicrm_dashboard` WRITE; /*!40000 ALTER TABLE `civicrm_dashboard` DISABLE KEYS */; -INSERT INTO `civicrm_dashboard` (`id`, `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `fullscreen_url`, `is_active`, `is_reserved`, `cache_minutes`, `directive`) VALUES (1,1,'blog','CiviCRM News','civicrm/dashlet/blog?reset=1','access CiviCRM',NULL,'civicrm/dashlet/blog?reset=1&context=dashletFullscreen',1,1,1440,NULL),(2,1,'getting-started','CiviCRM Resources','civicrm/dashlet/getting-started?reset=1','access CiviCRM',NULL,'civicrm/dashlet/getting-started?reset=1&context=dashletFullscreen',1,1,7200,NULL),(3,1,'activity','Activities','civicrm/dashlet/activity?reset=1','access CiviCRM',NULL,'civicrm/dashlet/activity?reset=1&context=dashletFullscreen',1,1,7200,NULL),(4,1,'myCases','My Cases','civicrm/dashlet/myCases?reset=1','access my cases and activities',NULL,'civicrm/dashlet/myCases?reset=1&context=dashletFullscreen',1,1,60,NULL),(5,1,'allCases','All Cases','civicrm/dashlet/allCases?reset=1','access all cases and activities',NULL,'civicrm/dashlet/allCases?reset=1&context=dashletFullscreen',1,1,60,NULL),(6,1,'casedashboard','Case Dashboard Dashlet','civicrm/dashlet/casedashboard?reset=1','access my cases and activities,access all cases and activities','OR','civicrm/dashlet/casedashboard?reset=1&context=dashletFullscreen',1,1,60,NULL),(7,1,'report/7','Donor Summary','civicrm/report/instance/7?reset=1§ion=1&charts=barChart','access CiviContribute','AND','civicrm/report/instance/7?reset=1§ion=1&charts=barChart&context=dashletFullscreen',1,0,60,NULL),(8,1,'report/14','Top Donors','civicrm/report/instance/14?reset=1§ion=2','access CiviContribute','AND','civicrm/report/instance/14?reset=1§ion=2&context=dashletFullscreen',1,0,60,NULL),(9,1,'report/27','Event Income Summary','civicrm/report/instance/27?reset=1§ion=1&charts=pieChart','access CiviEvent','AND','civicrm/report/instance/27?reset=1§ion=1&charts=pieChart&context=dashletFullscreen',1,0,60,NULL),(10,1,'report/22','Membership Summary','civicrm/report/instance/22?reset=1§ion=2','access CiviMember','AND','civicrm/report/instance/22?reset=1§ion=2&context=dashletFullscreen',1,0,60,NULL); +INSERT INTO `civicrm_dashboard` (`id`, `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `fullscreen_url`, `is_active`, `is_reserved`, `cache_minutes`, `directive`) VALUES + (1,1,'blog','CiviCRM News','civicrm/dashlet/blog?reset=1','access CiviCRM',NULL,'civicrm/dashlet/blog?reset=1&context=dashletFullscreen',1,1,1440,NULL), + (2,1,'getting-started','CiviCRM Resources','civicrm/dashlet/getting-started?reset=1','access CiviCRM',NULL,'civicrm/dashlet/getting-started?reset=1&context=dashletFullscreen',1,1,7200,NULL), + (3,1,'activity','Activities','civicrm/dashlet/activity?reset=1','access CiviCRM',NULL,'civicrm/dashlet/activity?reset=1&context=dashletFullscreen',1,1,7200,NULL), + (4,1,'myCases','My Cases','civicrm/dashlet/myCases?reset=1','access my cases and activities',NULL,'civicrm/dashlet/myCases?reset=1&context=dashletFullscreen',1,1,60,NULL), + (5,1,'allCases','All Cases','civicrm/dashlet/allCases?reset=1','access all cases and activities',NULL,'civicrm/dashlet/allCases?reset=1&context=dashletFullscreen',1,1,60,NULL), + (6,1,'casedashboard','Case Dashboard Dashlet','civicrm/dashlet/casedashboard?reset=1','access my cases and activities,access all cases and activities','OR','civicrm/dashlet/casedashboard?reset=1&context=dashletFullscreen',1,1,60,NULL), + (7,1,'report/7','Donor Summary','civicrm/report/instance/7?reset=1§ion=1&charts=barChart','access CiviContribute','AND','civicrm/report/instance/7?reset=1§ion=1&charts=barChart&context=dashletFullscreen',1,0,60,NULL), + (8,1,'report/14','Top Donors','civicrm/report/instance/14?reset=1§ion=2','access CiviContribute','AND','civicrm/report/instance/14?reset=1§ion=2&context=dashletFullscreen',1,0,60,NULL), + (9,1,'report/27','Event Income Summary','civicrm/report/instance/27?reset=1§ion=1&charts=pieChart','access CiviEvent','AND','civicrm/report/instance/27?reset=1§ion=1&charts=pieChart&context=dashletFullscreen',1,0,60,NULL), + (10,1,'report/22','Membership Summary','civicrm/report/instance/22?reset=1§ion=2','access CiviMember','AND','civicrm/report/instance/22?reset=1§ion=2&context=dashletFullscreen',1,0,60,NULL); /*!40000 ALTER TABLE `civicrm_dashboard` ENABLE KEYS */; UNLOCK TABLES; @@ -370,7 +2810,24 @@ UNLOCK TABLES; LOCK TABLES `civicrm_dedupe_rule` WRITE; /*!40000 ALTER TABLE `civicrm_dedupe_rule` DISABLE KEYS */; -INSERT INTO `civicrm_dedupe_rule` (`id`, `dedupe_rule_group_id`, `rule_table`, `rule_field`, `rule_length`, `rule_weight`) VALUES (1,1,'civicrm_contact','first_name',NULL,5),(2,1,'civicrm_contact','last_name',NULL,7),(3,1,'civicrm_email','email',NULL,10),(4,2,'civicrm_contact','organization_name',NULL,10),(5,2,'civicrm_email','email',NULL,10),(6,3,'civicrm_contact','household_name',NULL,10),(7,3,'civicrm_email','email',NULL,10),(8,4,'civicrm_email','email',NULL,10),(9,5,'civicrm_contact','organization_name',NULL,10),(10,5,'civicrm_email','email',NULL,10),(11,6,'civicrm_contact','household_name',NULL,10),(12,6,'civicrm_email','email',NULL,10),(13,7,'civicrm_contact','first_name',NULL,5),(14,7,'civicrm_contact','last_name',NULL,5),(15,7,'civicrm_address','street_address',NULL,5),(16,7,'civicrm_contact','middle_name',NULL,1),(17,7,'civicrm_contact','suffix_id',NULL,1); +INSERT INTO `civicrm_dedupe_rule` (`id`, `dedupe_rule_group_id`, `rule_table`, `rule_field`, `rule_length`, `rule_weight`) VALUES + (1,1,'civicrm_contact','first_name',NULL,5), + (2,1,'civicrm_contact','last_name',NULL,7), + (3,1,'civicrm_email','email',NULL,10), + (4,2,'civicrm_contact','organization_name',NULL,10), + (5,2,'civicrm_email','email',NULL,10), + (6,3,'civicrm_contact','household_name',NULL,10), + (7,3,'civicrm_email','email',NULL,10), + (8,4,'civicrm_email','email',NULL,10), + (9,5,'civicrm_contact','organization_name',NULL,10), + (10,5,'civicrm_email','email',NULL,10), + (11,6,'civicrm_contact','household_name',NULL,10), + (12,6,'civicrm_email','email',NULL,10), + (13,7,'civicrm_contact','first_name',NULL,5), + (14,7,'civicrm_contact','last_name',NULL,5), + (15,7,'civicrm_address','street_address',NULL,5), + (16,7,'civicrm_contact','middle_name',NULL,1), + (17,7,'civicrm_contact','suffix_id',NULL,1); /*!40000 ALTER TABLE `civicrm_dedupe_rule` ENABLE KEYS */; UNLOCK TABLES; @@ -380,7 +2837,14 @@ UNLOCK TABLES; LOCK TABLES `civicrm_dedupe_rule_group` WRITE; /*!40000 ALTER TABLE `civicrm_dedupe_rule_group` DISABLE KEYS */; -INSERT INTO `civicrm_dedupe_rule_group` (`id`, `contact_type`, `threshold`, `used`, `name`, `title`, `is_reserved`) VALUES (1,'Individual',20,'Supervised','IndividualSupervised','Name and Email (reserved)',1),(2,'Organization',10,'Supervised','OrganizationSupervised','Name and Email',0),(3,'Household',10,'Supervised','HouseholdSupervised','Name and Email',0),(4,'Individual',10,'Unsupervised','IndividualUnsupervised','Email (reserved)',1),(5,'Organization',10,'Unsupervised','OrganizationUnsupervised','Name and Email',0),(6,'Household',10,'Unsupervised','HouseholdUnsupervised','Name and Email',0),(7,'Individual',15,'General','IndividualGeneral','Name and Address (reserved)',1); +INSERT INTO `civicrm_dedupe_rule_group` (`id`, `contact_type`, `threshold`, `used`, `name`, `title`, `is_reserved`) VALUES + (1,'Individual',20,'Supervised','IndividualSupervised','Name and Email (reserved)',1), + (2,'Organization',10,'Supervised','OrganizationSupervised','Name and Email',0), + (3,'Household',10,'Supervised','HouseholdSupervised','Name and Email',0), + (4,'Individual',10,'Unsupervised','IndividualUnsupervised','Email (reserved)',1), + (5,'Organization',10,'Unsupervised','OrganizationUnsupervised','Name and Email',0), + (6,'Household',10,'Unsupervised','HouseholdUnsupervised','Name and Email',0), + (7,'Individual',15,'General','IndividualGeneral','Name and Address (reserved)',1); /*!40000 ALTER TABLE `civicrm_dedupe_rule_group` ENABLE KEYS */; UNLOCK TABLES; @@ -399,7 +2863,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; -INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.38.1',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); +INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES + (1,'Default Domain Name',NULL,'5.39.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -409,7 +2874,195 @@ UNLOCK TABLES; LOCK TABLES `civicrm_email` WRITE; /*!40000 ALTER TABLE `civicrm_email` DISABLE KEYS */; -INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES (1,1,1,'fixme.domainemail@example.org',1,0,0,0,NULL,NULL,NULL,NULL),(2,65,1,'cp.barkley@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(3,65,1,'carylonb72@fishmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(4,93,1,'dimitrovt@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(5,24,1,'polsen@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(6,24,1,'olsen.princess12@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(7,176,1,'shaddaz37@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(8,14,1,'blackwell.sonny@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(9,14,1,'sa.blackwell53@lol.org',0,0,0,0,NULL,NULL,NULL,NULL),(10,30,1,'nielsen.teresa@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(11,30,1,'nielsent@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL),(12,106,1,'barkleye@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(13,185,1,'mb.adams70@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(14,157,1,'jensen.daren44@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(15,194,1,'irismller5@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(16,193,1,'lawerenceparker83@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(17,193,1,'lawerenceparker@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(18,201,1,'wattsonb23@example.net',1,0,0,0,NULL,NULL,NULL,NULL),(19,201,1,'beulawattson96@sample.org',0,0,0,0,NULL,NULL,NULL,NULL),(20,88,1,'reynolds.irvin94@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(21,91,1,'cruz.k.shauna47@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(22,91,1,'shaunac54@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(23,95,1,'miguelsamuels@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(24,95,1,'mz.samuels@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(25,147,1,'alexiaterry50@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(26,64,1,'adams.u.maxwell@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(27,64,1,'mu.adams43@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL),(28,101,1,'mller.jacob83@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(29,73,1,'be.mller@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(30,196,1,'carylonivanov@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL),(31,196,1,'ivanov.carylon@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(32,99,1,'im.barkley@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(33,10,1,'mariao68@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(34,10,1,'mariaolsen85@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(35,139,1,'robertse@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(36,82,1,'zope.lawerence@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(37,82,1,'lzope@spamalot.info',0,0,0,0,NULL,NULL,NULL,NULL),(38,18,1,'mcreynolds.m.ashley@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(39,46,1,'wattson.rebekah@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL),(40,46,1,'rj.wattson79@testing.info',0,0,0,0,NULL,NULL,NULL,NULL),(41,110,1,'jnielsen29@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(42,110,1,'nielsen.junko@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(43,76,1,'lwagner59@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(44,68,1,'jeromebarkley@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(45,100,1,'gonzlezc35@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(46,171,1,'mcreynoldse@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(47,104,1,'re.mcreynolds25@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(48,29,1,'wilsonb90@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(49,29,1,'billywilson@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(50,195,1,'lee.y.landon11@testing.org',1,0,0,0,NULL,NULL,NULL,NULL),(51,195,1,'landonlee4@testmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(52,60,1,'jensen.q.brigette60@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(53,60,1,'jensenb@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(54,116,1,'jones.lou@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(55,75,1,'prentice.herminia@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(56,75,1,'prenticeh@sample.org',0,0,0,0,NULL,NULL,NULL,NULL),(57,66,1,'jacobs.herminia@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL),(58,164,1,'gonzleze@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(59,164,1,'em.gonzlez96@notmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(60,187,1,'elizabethj@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(61,187,1,'jacobs.elizabeth@testing.com',0,0,0,0,NULL,NULL,NULL,NULL),(62,105,1,'junkoreynolds65@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(63,105,1,'jz.reynolds@lol.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(64,143,1,'cruzf@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(65,192,1,'ag.prentice@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(66,111,1,'tx.mcreynolds@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(67,111,1,'teresamcreynolds@lol.net',0,0,0,0,NULL,NULL,NULL,NULL),(68,83,1,'carylonsmith54@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(69,172,1,'chowski.d.ashlie@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(70,59,1,'prenticel@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(71,59,1,'lashawndaprentice@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(72,92,1,'jameson.landon@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(73,92,1,'ljameson@notmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(74,119,1,'samson.betty71@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(75,166,1,'hgrant@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(76,150,1,'sonny14@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(77,61,1,'cooperl@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(78,146,1,'cooperb@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(79,146,1,'bernadettec@sample.com',0,0,0,0,NULL,NULL,NULL,NULL),(80,169,1,'cooper.d.jerome@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(81,156,1,'parker.sanford@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(82,156,1,'parkers62@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL),(83,198,1,'jones-parker.lashawnda@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL),(84,5,1,'craigparker@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(85,36,1,'scarletjones@lol.org',1,0,0,0,NULL,NULL,NULL,NULL),(86,36,1,'jones.scarlet@fishmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(87,114,1,'terry-jonesj87@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(88,114,1,'josefaterry-jones@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL),(89,20,1,'dimitrovw86@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(90,20,1,'dimitrov.winford77@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(91,179,1,'dimitrova@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(92,179,1,'dimitrov.z.arlyne@lol.com',0,0,0,0,NULL,NULL,NULL,NULL),(93,142,1,'dimitrovb15@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(94,2,1,'dimitrovs@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(95,3,1,'brittneyreynolds@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(96,50,1,'se.reynolds36@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(97,70,1,'jayreynolds45@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(98,124,1,'bbachman14@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(99,124,1,'bettyb@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(100,56,1,'bryonsmith93@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(101,56,1,'bryons63@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(102,67,1,'kaceymcreynolds20@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(103,170,1,'smith-mcreynolds.scott78@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(104,170,1,'ssmith-mcreynolds25@sample.org',0,0,0,0,NULL,NULL,NULL,NULL),(105,71,1,'kandaces@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(106,71,1,'kandacesmith-mcreynolds@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL),(107,120,1,'grantl@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(108,40,1,'jinas@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(109,135,1,'grantb60@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(110,135,1,'bettyg@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(111,125,1,'jensen-deforest.troy79@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(112,125,1,'troyj59@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(113,35,1,'jacobj@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(114,35,1,'jacobjensen-deforest@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(115,162,1,'cooperj88@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(116,162,1,'justinacooper@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(117,177,1,'cooperb@lol.org',1,0,0,0,NULL,NULL,NULL,NULL),(118,129,1,'jayc@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(119,118,1,'patels@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(120,17,1,'bk.patel@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(121,159,1,'patel.bryon9@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(122,159,1,'patel.bryon@spamalot.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(123,189,1,'patelk40@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(124,161,1,'wagner.sherman27@sample.org',1,0,0,0,NULL,NULL,NULL,NULL),(125,191,1,'margaretjacobs-terry52@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL),(126,191,1,'md.jacobs-terry@notmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(127,138,1,'omarterry66@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(128,117,1,'terry.roland@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(129,117,1,'terry.roland@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(130,184,1,'winfordmcreynolds@sample.com',1,0,0,0,NULL,NULL,NULL,NULL),(131,54,1,'bernadettecruz-mcreynolds@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(132,54,1,'bcruz-mcreynolds62@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL),(133,28,1,'clintmcreynolds16@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(134,112,1,'reynolds.ray@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(135,112,1,'rreynolds@fishmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(136,190,1,'jensen.miguel@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(137,38,1,'elinajensen@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL),(138,13,1,'terryc@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(139,121,1,'terry.ashlie@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(140,121,1,'ashlieterry@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(141,103,1,'teddyterry@testing.org',1,0,0,0,NULL,NULL,NULL,NULL),(142,103,1,'terry.teddy@fishmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(143,126,1,'jonesr@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(144,69,1,'jones.i.barry65@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(145,133,1,'elizabethn@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL),(146,15,1,'mcreynolds-nielsenl68@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(147,15,1,'lareem@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL),(148,37,1,'mcreynolds-nielsen.y.kiara@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(149,34,1,'barkleys@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(150,51,1,'abarkley@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(151,132,1,'barkley.j.shauna@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL),(152,132,1,'shaunab15@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(153,41,1,'barkley.omar@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(154,41,1,'barkley.omar@mymail.com',0,0,0,0,NULL,NULL,NULL,NULL),(155,141,3,'feedback@unitedadvocacyalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(156,16,2,'dlee96@unitedadvocacyalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(157,55,3,'sales@pinewellness.org',1,0,0,0,NULL,NULL,NULL,NULL),(158,161,2,'wagners97@pinewellness.org',0,0,0,0,NULL,NULL,NULL,NULL),(159,47,3,'feedback@greenschool.org',1,0,0,0,NULL,NULL,NULL,NULL),(160,48,3,'feedback@ruralassociation.org',1,0,0,0,NULL,NULL,NULL,NULL),(161,201,2,'beulaw@ruralassociation.org',0,0,0,0,NULL,NULL,NULL,NULL),(162,44,3,'info@illinoisculturefund.org',1,0,0,0,NULL,NULL,NULL,NULL),(163,87,3,'sales@maineducationcenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(164,68,2,'20@maineducationcenter.org',0,0,0,0,NULL,NULL,NULL,NULL),(165,21,3,'feedback@vnsustainabilityacademy.org',1,0,0,0,NULL,NULL,NULL,NULL),(166,135,2,'bettyg@vnsustainabilityacademy.org',0,0,0,0,NULL,NULL,NULL,NULL),(167,123,3,'info@dracutsoftwarecollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(168,137,2,'brzczysawt28@dracutsoftwarecollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(169,113,3,'feedback@collegedevelopmentfund.org',1,0,0,0,NULL,NULL,NULL,NULL),(170,5,2,'parker.craig16@collegedevelopmentfund.org',0,0,0,0,NULL,NULL,NULL,NULL),(171,115,3,'feedback@pinesystems.org',1,0,0,0,NULL,NULL,NULL,NULL),(172,130,3,'info@blanchardaction.org',1,0,0,0,NULL,NULL,NULL,NULL),(173,181,2,'reynoldsb@blanchardaction.org',1,0,0,0,NULL,NULL,NULL,NULL),(174,62,3,'sales@floridasportsfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(175,139,2,'elizabethr67@floridasportsfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL),(176,45,3,'sales@kansashealth.org',1,0,0,0,NULL,NULL,NULL,NULL),(177,176,2,'shaddaz58@kansashealth.org',0,0,0,0,NULL,NULL,NULL,NULL),(178,197,3,'info@kansasartsacademy.org',1,0,0,0,NULL,NULL,NULL,NULL),(179,89,3,'contact@hubbardeducation.org',1,0,0,0,NULL,NULL,NULL,NULL),(180,132,2,'barkley.j.shauna96@hubbardeducation.org',0,0,0,0,NULL,NULL,NULL,NULL),(181,149,3,'sales@bayculture.org',1,0,0,0,NULL,NULL,NULL,NULL),(182,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(183,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(184,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES + (1,1,1,'fixme.domainemail@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (2,31,1,'cooper.t.laree@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (3,138,1,'terry.rosario@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (4,21,1,'sonnyrobertson7@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (5,21,1,'robertson.sonny@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (6,85,1,'yadav.a.scarlet@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (7,46,1,'brentj86@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (8,53,1,'yadav.kathlyn20@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (9,89,1,'rolandoivanov80@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (10,89,1,'rv.ivanov@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (11,14,1,'mller.rolando@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (12,191,1,'jacobs.irvin@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (13,5,1,'bachman.errol@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), + (14,173,1,'carloslee@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (15,173,1,'cq.lee70@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (16,178,1,'leet@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), + (17,178,1,'lee.truman33@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (18,23,1,'rebekahwattson@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (19,199,1,'brigettedaz@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (20,199,1,'brigetted95@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (21,37,1,'smith.t.damaris@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (22,179,1,'chowski.c.esta@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (23,11,1,'grant.e.margaret74@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (24,11,1,'margaretgrant@notmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (25,20,1,'cooperr23@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), + (26,98,1,'adams.miguel53@example.info',1,0,0,0,NULL,NULL,NULL,NULL), + (27,98,1,'adams.u.miguel@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), + (28,57,1,'shaunaj69@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (29,57,1,'shaunaj@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (30,44,1,'roberts.allan96@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (31,27,1,'meii@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (32,78,1,'olsen.x.russell39@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (33,146,1,'lee.jed20@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (34,45,1,'cooper.truman@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), + (35,34,1,'carylonnielsen10@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (36,41,1,'daz.iris@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (37,41,1,'irisd17@testmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (38,83,1,'merriej68@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), + (39,83,1,'merriej@infomail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (40,18,1,'meganw40@example.com',1,0,0,0,NULL,NULL,NULL,NULL), + (41,154,1,'grantc@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (42,154,1,'cm.grant12@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (43,192,1,'shadj75@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), + (44,192,1,'jacobss@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (45,122,1,'zope.e.damaris80@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (46,33,1,'mm.dimitrov@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (47,33,1,'mm.dimitrov85@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL), + (48,48,1,'croberts84@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (49,81,1,'vt.reynolds@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (50,81,1,'reynoldsv@example.com',0,0,0,0,NULL,NULL,NULL,NULL), + (51,100,1,'blackwell.sharyn44@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (52,100,1,'blackwells45@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (53,26,1,'erikn@testing.net',1,0,0,0,NULL,NULL,NULL,NULL), + (54,110,1,'sb.jameson@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (55,110,1,'jameson.b.santina75@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (56,71,1,'jacobsk27@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (57,71,1,'kennyjacobs@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (58,163,1,'cooper.toby@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (59,38,1,'trumanwilson@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (60,156,1,'daz.junko@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (61,156,1,'junkodaz@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (62,184,1,'jones.russell@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (63,184,1,'rx.jones96@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL), + (64,169,1,'wattson.scarlet45@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (65,169,1,'wattson.scarlet55@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (66,96,1,'bryonr@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (67,176,1,'alidachowski@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (68,49,1,'irisgonzlez25@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), + (69,49,1,'gonzlez.d.iris@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (70,162,1,'robertsp99@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (71,64,1,'jameson.rosario63@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (72,35,1,'terry.o.bernadette@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (73,35,1,'terryb@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), + (74,92,1,'deforestc52@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (75,92,1,'deforest.carylon2@fishmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (76,130,1,'deforest.q.carlos@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (77,130,1,'deforestc69@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (78,3,1,'wj.prentice@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (79,3,1,'prentice.winford@example.com',0,0,0,0,NULL,NULL,NULL,NULL), + (80,42,1,'ashleyroberts-prentice@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (81,123,1,'prentice.norris88@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (82,123,1,'prentice.norris16@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL), + (83,108,1,'jacobprentice@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (84,108,1,'prenticej@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (85,140,1,'lee.carylon51@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (86,140,1,'lee.carylon65@testing.org',0,0,0,0,NULL,NULL,NULL,NULL), + (87,142,1,'leem68@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (88,135,1,'leec55@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (89,135,1,'clee@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (90,111,1,'ne.yadav@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (91,111,1,'norrisyadav35@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (92,116,1,'yadav.sharyn@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (93,116,1,'syadav31@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (94,102,1,'yadav.alexia@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (95,102,1,'yadava65@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (96,29,1,'yadav.shad50@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (97,29,1,'shady54@lol.com',0,0,0,0,NULL,NULL,NULL,NULL), + (98,95,1,'patel.kenny@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (99,195,1,'pateln@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (100,183,1,'arlynep@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (101,24,1,'miguelpatel7@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (102,104,1,'roberts.allen@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), + (103,30,1,'roberts.ray@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), + (104,99,1,'brzczysawcooper72@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (105,77,1,'amller@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (106,77,1,'mller.alexia@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (107,175,1,'mcooper-mller80@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (108,80,1,'mariap@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (109,193,1,'sanfordjones@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (110,193,1,'sanfordjones40@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (111,145,1,'maganjones54@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (112,145,1,'jonesm@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (113,22,1,'jones.esta61@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), + (114,43,1,'rosarioj19@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (115,43,1,'rosarioj@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (116,88,1,'ejameson@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (117,141,1,'shadjameson@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (118,106,1,'si.chowski42@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (119,136,1,'barkleyr@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (120,136,1,'barkley.e.rebekah@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (121,56,1,'chowski-barkley.sherman@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (122,200,1,'bettychowski-barkley@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (123,200,1,'chowski-barkley.betty30@sample.info',0,0,0,0,NULL,NULL,NULL,NULL), + (124,112,1,'reynolds.jerome@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (125,112,1,'jreynolds@fishmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (126,197,1,'reynolds.tanya@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (127,197,1,'treynolds@sample.org',0,0,0,0,NULL,NULL,NULL,NULL), + (128,170,1,'bachmanj@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (129,170,1,'bachman.jackson@lol.info',0,0,0,0,NULL,NULL,NULL,NULL), + (130,166,1,'lashawndam@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), + (131,76,1,'bachman.jay@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (132,15,1,'bachman.g.merrie21@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (133,15,1,'merriebachman@notmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (134,7,1,'wilson.y.nicole@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), + (135,158,1,'sonnyw@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (136,158,1,'wilson.q.sonny@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (137,134,1,'wilsons@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (138,134,1,'wilsons29@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (139,151,1,'omarrobertson@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (140,129,1,'robertsonb@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), + (141,164,1,'robertson.z.carlos@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (142,164,1,'cz.robertson@testmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (143,54,1,'robertson.bob33@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (144,54,1,'bobrobertson38@lol.com',0,0,0,0,NULL,NULL,NULL,NULL), + (145,8,1,'samson.errol40@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (146,8,1,'samsone@infomail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (147,165,1,'samsont49@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), + (148,165,1,'samson.troy@testmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (149,52,1,'parker.allan@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (150,120,1,'felishap52@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (151,120,1,'fparker@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL), + (152,119,1,'teresaparker97@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (153,9,1,'parker.d.nicole28@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (154,139,1,'jayg59@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (155,86,1,'grant.lashawnda41@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (156,73,1,'valeneg@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (157,66,1,'rgrant-cooper@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (158,137,1,'bs.cooper@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (159,121,1,'ecooper@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (160,121,1,'ecooper15@fishmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (161,172,1,'cooperr64@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (162,172,1,'rolandocooper26@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (163,157,3,'sales@vndevelopmentservices.org',1,0,0,0,NULL,NULL,NULL,NULL), + (164,91,3,'sales@communityempowermenttrust.org',1,0,0,0,NULL,NULL,NULL,NULL), + (165,13,3,'feedback@sacramentosportsacademy.org',1,0,0,0,NULL,NULL,NULL,NULL), + (166,32,3,'sales@ruralfamilyfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (167,6,3,'feedback@vnsoftwarefellowship.org',1,0,0,0,NULL,NULL,NULL,NULL), + (168,53,2,'yadavk@vnsoftwarefellowship.org',0,0,0,0,NULL,NULL,NULL,NULL), + (169,168,3,'service@ruralsoftware.org',1,0,0,0,NULL,NULL,NULL,NULL), + (170,18,2,'meganwilson@ruralsoftware.org',0,0,0,0,NULL,NULL,NULL,NULL), + (171,36,3,'service@ccagriculturealliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (172,16,2,'jmcreynolds28@ccagriculturealliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (173,4,3,'feedback@mlkingarts.org',1,0,0,0,NULL,NULL,NULL,NULL), + (174,66,2,'.99@mlkingarts.org',0,0,0,0,NULL,NULL,NULL,NULL), + (175,79,3,'service@nypeaceacademy.org',1,0,0,0,NULL,NULL,NULL,NULL), + (176,3,2,'prentice.j.winford@nypeaceacademy.org',0,0,0,0,NULL,NULL,NULL,NULL), + (177,61,3,'feedback@klsustainabilityfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (178,153,2,'landons@klsustainabilityfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (179,19,3,'sales@hsempowermentsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (180,72,3,'sales@bellmawrfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (181,100,2,'.@bellmawrfund.org',0,0,0,0,NULL,NULL,NULL,NULL), + (182,181,3,'info@unitedsoftwaresystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (183,59,2,'mn.gonzlez@unitedsoftwaresystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (184,174,3,'contact@unitedagriculturecenter.org',1,0,0,0,NULL,NULL,NULL,NULL), + (185,47,2,'roberts.lawerence@unitedagriculturecenter.org',1,0,0,0,NULL,NULL,NULL,NULL), + (186,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (187,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (188,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -437,7 +3090,30 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_financial_account` WRITE; /*!40000 ALTER TABLE `civicrm_entity_financial_account` DISABLE KEYS */; -INSERT INTO `civicrm_entity_financial_account` (`id`, `entity_table`, `entity_id`, `account_relationship`, `financial_account_id`) VALUES (1,'civicrm_financial_type',1,1,1),(2,'civicrm_financial_type',1,5,5),(3,'civicrm_financial_type',1,3,7),(4,'civicrm_financial_type',1,7,9),(5,'civicrm_financial_type',2,1,2),(6,'civicrm_financial_type',2,5,5),(7,'civicrm_financial_type',2,3,7),(8,'civicrm_financial_type',2,7,9),(9,'civicrm_financial_type',2,12,14),(10,'civicrm_financial_type',3,1,3),(11,'civicrm_financial_type',3,5,5),(12,'civicrm_financial_type',3,3,7),(13,'civicrm_financial_type',3,7,9),(14,'civicrm_financial_type',4,5,5),(15,'civicrm_financial_type',4,3,7),(16,'civicrm_financial_type',4,1,4),(17,'civicrm_financial_type',4,12,13),(18,'civicrm_financial_type',4,7,9),(19,'civicrm_option_value',92,6,6),(20,'civicrm_option_value',93,6,6),(21,'civicrm_option_value',94,6,6),(22,'civicrm_option_value',90,6,12),(23,'civicrm_option_value',91,6,12); +INSERT INTO `civicrm_entity_financial_account` (`id`, `entity_table`, `entity_id`, `account_relationship`, `financial_account_id`) VALUES + (1,'civicrm_financial_type',1,1,1), + (2,'civicrm_financial_type',1,5,5), + (3,'civicrm_financial_type',1,3,7), + (4,'civicrm_financial_type',1,7,9), + (5,'civicrm_financial_type',2,1,2), + (6,'civicrm_financial_type',2,5,5), + (7,'civicrm_financial_type',2,3,7), + (8,'civicrm_financial_type',2,7,9), + (9,'civicrm_financial_type',2,12,14), + (10,'civicrm_financial_type',3,1,3), + (11,'civicrm_financial_type',3,5,5), + (12,'civicrm_financial_type',3,3,7), + (13,'civicrm_financial_type',3,7,9), + (14,'civicrm_financial_type',4,5,5), + (15,'civicrm_financial_type',4,3,7), + (16,'civicrm_financial_type',4,1,4), + (17,'civicrm_financial_type',4,12,13), + (18,'civicrm_financial_type',4,7,9), + (19,'civicrm_option_value',92,6,6), + (20,'civicrm_option_value',93,6,6), + (21,'civicrm_option_value',94,6,6), + (22,'civicrm_option_value',90,6,12), + (23,'civicrm_option_value',91,6,12); /*!40000 ALTER TABLE `civicrm_entity_financial_account` ENABLE KEYS */; UNLOCK TABLES; @@ -447,7 +3123,193 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` DISABLE KEYS */; -INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, `financial_trxn_id`, `amount`) VALUES (1,'civicrm_contribution',1,1,125.00),(2,'civicrm_financial_item',1,1,125.00),(3,'civicrm_contribution',2,2,50.00),(4,'civicrm_financial_item',2,2,50.00),(5,'civicrm_contribution',3,3,25.00),(6,'civicrm_financial_item',3,3,25.00),(7,'civicrm_contribution',4,4,50.00),(8,'civicrm_financial_item',4,4,50.00),(9,'civicrm_contribution',5,5,500.00),(10,'civicrm_financial_item',5,5,500.00),(11,'civicrm_contribution',6,6,175.00),(12,'civicrm_financial_item',6,6,175.00),(13,'civicrm_contribution',7,7,50.00),(14,'civicrm_financial_item',7,7,50.00),(15,'civicrm_contribution',8,8,10.00),(16,'civicrm_financial_item',8,8,10.00),(17,'civicrm_contribution',9,9,250.00),(18,'civicrm_financial_item',9,9,250.00),(19,'civicrm_contribution',10,10,500.00),(20,'civicrm_financial_item',10,10,500.00),(21,'civicrm_contribution',11,11,200.00),(22,'civicrm_financial_item',11,11,200.00),(23,'civicrm_contribution',12,12,200.00),(24,'civicrm_financial_item',12,12,200.00),(25,'civicrm_contribution',13,13,200.00),(26,'civicrm_financial_item',13,13,200.00),(27,'civicrm_contribution',14,14,100.00),(28,'civicrm_financial_item',14,14,100.00),(29,'civicrm_contribution',15,15,100.00),(30,'civicrm_financial_item',15,15,100.00),(31,'civicrm_contribution',16,16,100.00),(32,'civicrm_financial_item',16,16,100.00),(33,'civicrm_contribution',17,17,100.00),(34,'civicrm_financial_item',17,17,100.00),(35,'civicrm_contribution',18,18,100.00),(36,'civicrm_financial_item',18,18,100.00),(37,'civicrm_contribution',19,19,100.00),(38,'civicrm_financial_item',19,19,100.00),(39,'civicrm_contribution',20,20,100.00),(40,'civicrm_financial_item',20,20,100.00),(41,'civicrm_contribution',21,21,100.00),(42,'civicrm_financial_item',21,21,100.00),(43,'civicrm_contribution',22,22,100.00),(44,'civicrm_financial_item',22,22,100.00),(45,'civicrm_contribution',23,23,100.00),(46,'civicrm_financial_item',23,23,100.00),(47,'civicrm_contribution',24,24,100.00),(48,'civicrm_financial_item',24,24,100.00),(49,'civicrm_contribution',25,25,100.00),(50,'civicrm_financial_item',25,25,100.00),(51,'civicrm_contribution',26,26,100.00),(52,'civicrm_financial_item',26,26,100.00),(53,'civicrm_contribution',27,27,50.00),(54,'civicrm_financial_item',27,27,50.00),(55,'civicrm_contribution',28,28,50.00),(56,'civicrm_financial_item',28,28,50.00),(57,'civicrm_contribution',29,29,50.00),(58,'civicrm_financial_item',29,29,50.00),(59,'civicrm_contribution',30,30,50.00),(60,'civicrm_financial_item',30,30,50.00),(61,'civicrm_contribution',31,31,50.00),(62,'civicrm_financial_item',31,31,50.00),(63,'civicrm_contribution',32,32,50.00),(64,'civicrm_financial_item',32,32,50.00),(65,'civicrm_contribution',33,33,50.00),(66,'civicrm_financial_item',33,33,50.00),(67,'civicrm_contribution',34,34,50.00),(68,'civicrm_financial_item',34,34,50.00),(69,'civicrm_contribution',35,35,50.00),(70,'civicrm_financial_item',35,35,50.00),(71,'civicrm_contribution',36,36,50.00),(72,'civicrm_financial_item',36,36,50.00),(73,'civicrm_contribution',37,37,50.00),(74,'civicrm_financial_item',37,37,50.00),(75,'civicrm_contribution',38,38,50.00),(76,'civicrm_financial_item',38,38,50.00),(77,'civicrm_contribution',39,39,50.00),(78,'civicrm_financial_item',39,39,50.00),(79,'civicrm_contribution',40,40,50.00),(80,'civicrm_financial_item',40,40,50.00),(81,'civicrm_contribution',41,41,50.00),(82,'civicrm_financial_item',41,41,50.00),(83,'civicrm_contribution',42,42,1200.00),(84,'civicrm_financial_item',42,42,1200.00),(85,'civicrm_contribution',43,43,1200.00),(86,'civicrm_financial_item',43,43,1200.00),(87,'civicrm_contribution',54,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',70,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',50,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',65,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',76,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',68,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',92,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',55,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',53,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',63,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',51,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',82,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',46,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',56,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',91,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',61,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',77,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',90,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',49,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',62,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',60,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',47,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',59,66,800.00),(132,'civicrm_financial_item',66,66,800.00),(133,'civicrm_contribution',45,67,800.00),(134,'civicrm_financial_item',67,67,800.00),(135,'civicrm_contribution',58,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',52,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',94,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',86,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',84,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',83,73,800.00),(146,'civicrm_financial_item',73,73,800.00),(147,'civicrm_contribution',93,74,800.00),(148,'civicrm_financial_item',74,74,800.00),(149,'civicrm_contribution',66,75,800.00),(150,'civicrm_financial_item',75,75,800.00),(151,'civicrm_contribution',87,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',64,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',75,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',71,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',88,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',80,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',81,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',85,83,50.00),(166,'civicrm_financial_item',83,83,50.00),(167,'civicrm_contribution',73,84,50.00),(168,'civicrm_financial_item',84,84,50.00),(169,'civicrm_contribution',74,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',72,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',89,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',48,88,50.00),(176,'civicrm_financial_item',88,88,50.00),(177,'civicrm_contribution',79,89,50.00),(178,'civicrm_financial_item',89,89,50.00),(179,'civicrm_contribution',69,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',57,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',78,92,50.00),(184,'civicrm_financial_item',92,92,50.00),(185,'civicrm_contribution',67,93,50.00),(186,'civicrm_financial_item',93,93,50.00); +INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, `financial_trxn_id`, `amount`) VALUES + (1,'civicrm_contribution',1,1,125.00), + (2,'civicrm_financial_item',1,1,125.00), + (3,'civicrm_contribution',2,2,50.00), + (4,'civicrm_financial_item',2,2,50.00), + (5,'civicrm_contribution',3,3,25.00), + (6,'civicrm_financial_item',3,3,25.00), + (7,'civicrm_contribution',4,4,50.00), + (8,'civicrm_financial_item',4,4,50.00), + (9,'civicrm_contribution',5,5,500.00), + (10,'civicrm_financial_item',5,5,500.00), + (11,'civicrm_contribution',6,6,175.00), + (12,'civicrm_financial_item',6,6,175.00), + (13,'civicrm_contribution',7,7,50.00), + (14,'civicrm_financial_item',7,7,50.00), + (15,'civicrm_contribution',8,8,10.00), + (16,'civicrm_financial_item',8,8,10.00), + (17,'civicrm_contribution',9,9,250.00), + (18,'civicrm_financial_item',9,9,250.00), + (19,'civicrm_contribution',10,10,500.00), + (20,'civicrm_financial_item',10,10,500.00), + (21,'civicrm_contribution',11,11,200.00), + (22,'civicrm_financial_item',11,11,200.00), + (23,'civicrm_contribution',12,12,200.00), + (24,'civicrm_financial_item',12,12,200.00), + (25,'civicrm_contribution',13,13,200.00), + (26,'civicrm_financial_item',13,13,200.00), + (27,'civicrm_contribution',14,14,100.00), + (28,'civicrm_financial_item',14,14,100.00), + (29,'civicrm_contribution',16,15,100.00), + (30,'civicrm_financial_item',15,15,100.00), + (31,'civicrm_contribution',20,16,100.00), + (32,'civicrm_financial_item',16,16,100.00), + (33,'civicrm_contribution',22,17,100.00), + (34,'civicrm_financial_item',17,17,100.00), + (35,'civicrm_contribution',23,18,100.00), + (36,'civicrm_financial_item',18,18,100.00), + (37,'civicrm_contribution',26,19,100.00), + (38,'civicrm_financial_item',19,19,100.00), + (39,'civicrm_contribution',30,20,100.00), + (40,'civicrm_financial_item',20,20,100.00), + (41,'civicrm_contribution',32,21,100.00), + (42,'civicrm_financial_item',21,21,100.00), + (43,'civicrm_contribution',34,22,100.00), + (44,'civicrm_financial_item',22,22,100.00), + (45,'civicrm_contribution',36,23,100.00), + (46,'civicrm_financial_item',23,23,100.00), + (47,'civicrm_contribution',38,24,100.00), + (48,'civicrm_financial_item',24,24,100.00), + (49,'civicrm_contribution',40,25,100.00), + (50,'civicrm_financial_item',25,25,100.00), + (51,'civicrm_contribution',42,26,100.00), + (52,'civicrm_financial_item',26,26,100.00), + (53,'civicrm_contribution',15,27,50.00), + (54,'civicrm_financial_item',27,27,50.00), + (55,'civicrm_contribution',17,28,50.00), + (56,'civicrm_financial_item',28,28,50.00), + (57,'civicrm_contribution',18,29,50.00), + (58,'civicrm_financial_item',29,29,50.00), + (59,'civicrm_contribution',19,30,50.00), + (60,'civicrm_financial_item',30,30,50.00), + (61,'civicrm_contribution',21,31,50.00), + (62,'civicrm_financial_item',31,31,50.00), + (63,'civicrm_contribution',25,32,50.00), + (64,'civicrm_financial_item',32,32,50.00), + (65,'civicrm_contribution',27,33,50.00), + (66,'civicrm_financial_item',33,33,50.00), + (67,'civicrm_contribution',28,34,50.00), + (68,'civicrm_financial_item',34,34,50.00), + (69,'civicrm_contribution',29,35,50.00), + (70,'civicrm_financial_item',35,35,50.00), + (71,'civicrm_contribution',31,36,50.00), + (72,'civicrm_financial_item',36,36,50.00), + (73,'civicrm_contribution',33,37,50.00), + (74,'civicrm_financial_item',37,37,50.00), + (75,'civicrm_contribution',37,38,50.00), + (76,'civicrm_financial_item',38,38,50.00), + (77,'civicrm_contribution',39,39,50.00), + (78,'civicrm_financial_item',39,39,50.00), + (79,'civicrm_contribution',41,40,50.00), + (80,'civicrm_financial_item',40,40,50.00), + (81,'civicrm_contribution',43,41,50.00), + (82,'civicrm_financial_item',41,41,50.00), + (83,'civicrm_contribution',24,42,1200.00), + (84,'civicrm_financial_item',42,42,1200.00), + (85,'civicrm_contribution',35,43,1200.00), + (86,'civicrm_financial_item',43,43,1200.00), + (87,'civicrm_contribution',72,44,50.00), + (88,'civicrm_financial_item',44,44,50.00), + (89,'civicrm_contribution',67,45,50.00), + (90,'civicrm_financial_item',45,45,50.00), + (91,'civicrm_contribution',93,46,50.00), + (92,'civicrm_financial_item',46,46,50.00), + (93,'civicrm_contribution',59,47,50.00), + (94,'civicrm_financial_item',47,47,50.00), + (95,'civicrm_contribution',88,48,50.00), + (96,'civicrm_financial_item',48,48,50.00), + (97,'civicrm_contribution',76,49,50.00), + (98,'civicrm_financial_item',49,49,50.00), + (99,'civicrm_contribution',47,50,50.00), + (100,'civicrm_financial_item',50,50,50.00), + (101,'civicrm_contribution',57,51,50.00), + (102,'civicrm_financial_item',51,51,50.00), + (103,'civicrm_contribution',54,52,50.00), + (104,'civicrm_financial_item',52,52,50.00), + (105,'civicrm_contribution',63,53,50.00), + (106,'civicrm_financial_item',53,53,50.00), + (107,'civicrm_contribution',50,54,50.00), + (108,'civicrm_financial_item',54,54,50.00), + (109,'civicrm_contribution',77,55,50.00), + (110,'civicrm_financial_item',55,55,50.00), + (111,'civicrm_contribution',56,56,50.00), + (112,'civicrm_financial_item',56,56,50.00), + (113,'civicrm_contribution',52,57,50.00), + (114,'civicrm_financial_item',57,57,50.00), + (115,'civicrm_contribution',83,58,50.00), + (116,'civicrm_financial_item',58,58,50.00), + (117,'civicrm_contribution',71,59,50.00), + (118,'civicrm_financial_item',59,59,50.00), + (119,'civicrm_contribution',94,60,800.00), + (120,'civicrm_financial_item',60,60,800.00), + (121,'civicrm_contribution',49,61,800.00), + (122,'civicrm_financial_item',61,61,800.00), + (123,'civicrm_contribution',79,62,800.00), + (124,'civicrm_financial_item',62,62,800.00), + (125,'civicrm_contribution',81,63,800.00), + (126,'civicrm_financial_item',63,63,800.00), + (127,'civicrm_contribution',64,64,800.00), + (128,'civicrm_financial_item',64,64,800.00), + (129,'civicrm_contribution',60,65,800.00), + (130,'civicrm_financial_item',65,65,800.00), + (131,'civicrm_contribution',58,66,800.00), + (132,'civicrm_financial_item',66,66,800.00), + (133,'civicrm_contribution',45,67,800.00), + (134,'civicrm_financial_item',67,67,800.00), + (135,'civicrm_contribution',66,68,800.00), + (136,'civicrm_financial_item',68,68,800.00), + (137,'civicrm_contribution',84,69,800.00), + (138,'civicrm_financial_item',69,69,800.00), + (139,'civicrm_contribution',62,70,800.00), + (140,'civicrm_financial_item',70,70,800.00), + (141,'civicrm_contribution',78,71,800.00), + (142,'civicrm_financial_item',71,71,800.00), + (143,'civicrm_contribution',80,72,800.00), + (144,'civicrm_financial_item',72,72,800.00), + (145,'civicrm_contribution',73,73,800.00), + (146,'civicrm_financial_item',73,73,800.00), + (147,'civicrm_contribution',89,74,800.00), + (148,'civicrm_financial_item',74,74,800.00), + (149,'civicrm_contribution',74,75,800.00), + (150,'civicrm_financial_item',75,75,800.00), + (151,'civicrm_contribution',68,76,800.00), + (152,'civicrm_financial_item',76,76,800.00), + (153,'civicrm_contribution',48,77,800.00), + (154,'civicrm_financial_item',77,77,800.00), + (155,'civicrm_contribution',70,78,50.00), + (156,'civicrm_financial_item',78,78,50.00), + (157,'civicrm_contribution',61,79,50.00), + (158,'civicrm_financial_item',79,79,50.00), + (159,'civicrm_contribution',55,80,50.00), + (160,'civicrm_financial_item',80,80,50.00), + (161,'civicrm_contribution',87,81,50.00), + (162,'civicrm_financial_item',81,81,50.00), + (163,'civicrm_contribution',90,82,50.00), + (164,'civicrm_financial_item',82,82,50.00), + (165,'civicrm_contribution',53,83,50.00), + (166,'civicrm_financial_item',83,83,50.00), + (167,'civicrm_contribution',91,84,50.00), + (168,'civicrm_financial_item',84,84,50.00), + (169,'civicrm_contribution',46,85,50.00), + (170,'civicrm_financial_item',85,85,50.00), + (171,'civicrm_contribution',69,86,50.00), + (172,'civicrm_financial_item',86,86,50.00), + (173,'civicrm_contribution',82,87,50.00), + (174,'civicrm_financial_item',87,87,50.00), + (175,'civicrm_contribution',86,88,50.00), + (176,'civicrm_financial_item',88,88,50.00), + (177,'civicrm_contribution',85,89,50.00), + (178,'civicrm_financial_item',89,89,50.00), + (179,'civicrm_contribution',51,90,50.00), + (180,'civicrm_financial_item',90,90,50.00), + (181,'civicrm_contribution',92,91,50.00), + (182,'civicrm_financial_item',91,91,50.00), + (183,'civicrm_contribution',65,92,50.00), + (184,'civicrm_financial_item',92,92,50.00), + (185,'civicrm_contribution',75,93,50.00), + (186,'civicrm_financial_item',93,93,50.00); /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -457,7 +3319,118 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_tag` WRITE; /*!40000 ALTER TABLE `civicrm_entity_tag` DISABLE KEYS */; -INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES (72,'civicrm_contact',5,5),(30,'civicrm_contact',6,4),(31,'civicrm_contact',6,5),(64,'civicrm_contact',9,4),(65,'civicrm_contact',9,5),(59,'civicrm_contact',11,4),(57,'civicrm_contact',12,4),(58,'civicrm_contact',12,5),(108,'civicrm_contact',13,4),(16,'civicrm_contact',14,4),(115,'civicrm_contact',15,4),(116,'civicrm_contact',15,5),(61,'civicrm_contact',16,4),(35,'civicrm_contact',18,4),(36,'civicrm_contact',18,5),(60,'civicrm_contact',19,4),(76,'civicrm_contact',20,4),(5,'civicrm_contact',21,3),(82,'civicrm_contact',22,4),(12,'civicrm_contact',24,4),(13,'civicrm_contact',24,5),(99,'civicrm_contact',25,4),(52,'civicrm_contact',27,4),(53,'civicrm_contact',27,5),(117,'civicrm_contact',34,4),(107,'civicrm_contact',38,5),(80,'civicrm_contact',42,4),(81,'civicrm_contact',42,5),(4,'civicrm_contact',44,3),(8,'civicrm_contact',45,1),(3,'civicrm_contact',47,1),(17,'civicrm_contact',49,5),(79,'civicrm_contact',50,5),(43,'civicrm_contact',52,5),(2,'civicrm_contact',53,1),(83,'civicrm_contact',56,4),(39,'civicrm_contact',57,4),(40,'civicrm_contact',57,5),(78,'civicrm_contact',58,4),(111,'civicrm_contact',63,4),(112,'civicrm_contact',63,5),(11,'civicrm_contact',65,5),(29,'civicrm_contact',73,5),(50,'civicrm_contact',75,4),(51,'civicrm_contact',75,5),(38,'civicrm_contact',76,4),(103,'civicrm_contact',79,4),(87,'civicrm_contact',80,4),(23,'civicrm_contact',81,4),(24,'civicrm_contact',81,5),(113,'civicrm_contact',84,4),(114,'civicrm_contact',84,5),(18,'civicrm_contact',90,4),(19,'civicrm_contact',90,5),(25,'civicrm_contact',91,5),(63,'civicrm_contact',92,5),(26,'civicrm_contact',95,4),(32,'civicrm_contact',99,4),(33,'civicrm_contact',99,5),(28,'civicrm_contact',101,4),(14,'civicrm_contact',102,4),(15,'civicrm_contact',102,5),(46,'civicrm_contact',104,4),(55,'civicrm_contact',105,4),(56,'civicrm_contact',105,5),(44,'civicrm_contact',108,4),(45,'civicrm_contact',108,5),(37,'civicrm_contact',110,4),(6,'civicrm_contact',113,1),(74,'civicrm_contact',114,4),(75,'civicrm_contact',114,5),(49,'civicrm_contact',116,4),(93,'civicrm_contact',118,5),(85,'civicrm_contact',120,4),(86,'civicrm_contact',120,5),(109,'civicrm_contact',121,5),(90,'civicrm_contact',122,4),(89,'civicrm_contact',125,5),(104,'civicrm_contact',127,4),(7,'civicrm_contact',130,1),(118,'civicrm_contact',132,4),(119,'civicrm_contact',132,5),(73,'civicrm_contact',136,4),(100,'civicrm_contact',138,4),(101,'civicrm_contact',138,5),(34,'civicrm_contact',139,4),(88,'civicrm_contact',140,5),(77,'civicrm_contact',142,5),(69,'civicrm_contact',146,5),(67,'civicrm_contact',150,4),(68,'civicrm_contact',150,5),(27,'civicrm_contact',152,5),(1,'civicrm_contact',153,3),(66,'civicrm_contact',154,4),(70,'civicrm_contact',156,4),(71,'civicrm_contact',156,5),(94,'civicrm_contact',159,4),(95,'civicrm_contact',159,5),(10,'civicrm_contact',160,2),(96,'civicrm_contact',161,5),(9,'civicrm_contact',163,3),(54,'civicrm_contact',164,4),(97,'civicrm_contact',168,4),(98,'civicrm_contact',168,5),(84,'civicrm_contact',170,5),(62,'civicrm_contact',172,5),(110,'civicrm_contact',175,4),(91,'civicrm_contact',177,4),(92,'civicrm_contact',177,5),(41,'civicrm_contact',180,4),(42,'civicrm_contact',180,5),(102,'civicrm_contact',184,4),(20,'civicrm_contact',185,4),(106,'civicrm_contact',190,4),(22,'civicrm_contact',193,4),(21,'civicrm_contact',194,5),(47,'civicrm_contact',195,4),(48,'civicrm_contact',195,5),(105,'civicrm_contact',200,4); +INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES + (44,'civicrm_contact',2,5), + (61,'civicrm_contact',3,4), + (62,'civicrm_contact',3,5), + (6,'civicrm_contact',4,2), + (20,'civicrm_contact',5,5), + (102,'civicrm_contact',8,4), + (50,'civicrm_contact',10,4), + (2,'civicrm_contact',13,2), + (22,'civicrm_contact',16,4), + (8,'civicrm_contact',19,3), + (26,'civicrm_contact',20,4), + (12,'civicrm_contact',21,4), + (13,'civicrm_contact',21,5), + (78,'civicrm_contact',30,4), + (79,'civicrm_contact',30,5), + (11,'civicrm_contact',31,5), + (34,'civicrm_contact',34,4), + (59,'civicrm_contact',35,5), + (24,'civicrm_contact',37,5), + (51,'civicrm_contact',38,5), + (65,'civicrm_contact',40,4), + (88,'civicrm_contact',43,4), + (29,'civicrm_contact',44,4), + (41,'civicrm_contact',48,4), + (42,'civicrm_contact',48,5), + (105,'civicrm_contact',52,4), + (17,'civicrm_contact',53,4), + (92,'civicrm_contact',56,4), + (58,'civicrm_contact',58,5), + (109,'civicrm_contact',66,4), + (110,'civicrm_contact',66,5), + (39,'civicrm_contact',67,5), + (10,'civicrm_contact',69,3), + (47,'civicrm_contact',71,5), + (56,'civicrm_contact',75,4), + (57,'civicrm_contact',75,5), + (97,'civicrm_contact',76,4), + (30,'civicrm_contact',78,4), + (31,'civicrm_contact',78,5), + (7,'civicrm_contact',79,3), + (83,'civicrm_contact',80,5), + (35,'civicrm_contact',83,5), + (3,'civicrm_contact',87,1), + (18,'civicrm_contact',89,4), + (32,'civicrm_contact',90,4), + (33,'civicrm_contact',90,5), + (15,'civicrm_contact',93,4), + (16,'civicrm_contact',93,5), + (74,'civicrm_contact',95,4), + (27,'civicrm_contact',98,5), + (80,'civicrm_contact',99,4), + (81,'civicrm_contact',99,5), + (72,'civicrm_contact',102,4), + (73,'civicrm_contact',102,5), + (52,'civicrm_contact',103,4), + (77,'civicrm_contact',104,5), + (86,'civicrm_contact',105,4), + (87,'civicrm_contact',105,5), + (91,'civicrm_contact',106,5), + (37,'civicrm_contact',107,5), + (70,'civicrm_contact',111,4), + (71,'civicrm_contact',111,5), + (95,'civicrm_contact',112,5), + (93,'civicrm_contact',114,4), + (94,'civicrm_contact',114,5), + (66,'civicrm_contact',118,5), + (106,'civicrm_contact',119,4), + (111,'civicrm_contact',121,4), + (38,'civicrm_contact',122,4), + (63,'civicrm_contact',123,4), + (64,'civicrm_contact',123,5), + (28,'civicrm_contact',125,5), + (54,'civicrm_contact',127,5), + (14,'civicrm_contact',128,5), + (60,'civicrm_contact',130,5), + (108,'civicrm_contact',131,5), + (67,'civicrm_contact',132,4), + (68,'civicrm_contact',132,5), + (98,'civicrm_contact',133,5), + (107,'civicrm_contact',139,5), + (89,'civicrm_contact',141,4), + (90,'civicrm_contact',141,5), + (69,'civicrm_contact',142,5), + (84,'civicrm_contact',148,4), + (43,'civicrm_contact',149,5), + (100,'civicrm_contact',151,5), + (36,'civicrm_contact',154,4), + (1,'civicrm_contact',157,2), + (99,'civicrm_contact',158,4), + (101,'civicrm_contact',164,4), + (103,'civicrm_contact',165,4), + (104,'civicrm_contact',165,5), + (5,'civicrm_contact',168,1), + (96,'civicrm_contact',170,4), + (82,'civicrm_contact',175,5), + (55,'civicrm_contact',176,5), + (25,'civicrm_contact',179,4), + (9,'civicrm_contact',181,1), + (4,'civicrm_contact',182,2), + (75,'civicrm_contact',183,4), + (76,'civicrm_contact',183,5), + (53,'civicrm_contact',184,4), + (40,'civicrm_contact',185,5), + (45,'civicrm_contact',186,4), + (46,'civicrm_contact',186,5), + (48,'civicrm_contact',189,4), + (49,'civicrm_contact',189,5), + (21,'civicrm_contact',190,5), + (19,'civicrm_contact',191,5), + (85,'civicrm_contact',193,4), + (23,'civicrm_contact',199,5); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -467,7 +3440,13 @@ UNLOCK TABLES; LOCK TABLES `civicrm_event` WRITE; /*!40000 ALTER TABLE `civicrm_event` DISABLE KEYS */; -INSERT INTO `civicrm_event` (`id`, `title`, `summary`, `description`, `event_type_id`, `participant_listing_id`, `is_public`, `start_date`, `end_date`, `is_online_registration`, `registration_link_text`, `registration_start_date`, `registration_end_date`, `max_participants`, `event_full_text`, `is_monetary`, `financial_type_id`, `payment_processor`, `is_map`, `is_active`, `fee_label`, `is_show_location`, `loc_block_id`, `default_role_id`, `intro_text`, `footer_text`, `confirm_title`, `confirm_text`, `confirm_footer_text`, `is_email_confirm`, `confirm_email_text`, `confirm_from_name`, `confirm_from_email`, `cc_confirm`, `bcc_confirm`, `default_fee_id`, `default_discount_fee_id`, `thankyou_title`, `thankyou_text`, `thankyou_footer_text`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_multiple_registrations`, `max_additional_participants`, `allow_same_participant_emails`, `has_waitlist`, `requires_approval`, `expiration_time`, `allow_selfcancelxfer`, `selfcancelxfer_time`, `waitlist_text`, `approval_req_text`, `is_template`, `template_title`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_confirm_enabled`, `parent_event_id`, `slot_label_id`, `dedupe_rule_group_id`, `is_billing_required`) VALUES (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2021-07-12 17:00:00','2021-07-14 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2021-01-11 12:00:00','2021-01-11 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2021-08-12 07:00:00','2021-08-15 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(4,NULL,NULL,NULL,4,1,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting without Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(5,NULL,NULL,NULL,4,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(6,NULL,NULL,NULL,1,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,1,4,NULL,0,1,'Conference Fee',1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,1,NULL,'Event Template Dept.','event_templates@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); +INSERT INTO `civicrm_event` (`id`, `title`, `summary`, `description`, `event_type_id`, `participant_listing_id`, `is_public`, `start_date`, `end_date`, `is_online_registration`, `registration_link_text`, `registration_start_date`, `registration_end_date`, `max_participants`, `event_full_text`, `is_monetary`, `financial_type_id`, `payment_processor`, `is_map`, `is_active`, `fee_label`, `is_show_location`, `loc_block_id`, `default_role_id`, `intro_text`, `footer_text`, `confirm_title`, `confirm_text`, `confirm_footer_text`, `is_email_confirm`, `confirm_email_text`, `confirm_from_name`, `confirm_from_email`, `cc_confirm`, `bcc_confirm`, `default_fee_id`, `default_discount_fee_id`, `thankyou_title`, `thankyou_text`, `thankyou_footer_text`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_multiple_registrations`, `max_additional_participants`, `allow_same_participant_emails`, `has_waitlist`, `requires_approval`, `expiration_time`, `allow_selfcancelxfer`, `selfcancelxfer_time`, `waitlist_text`, `approval_req_text`, `is_template`, `template_title`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_confirm_enabled`, `parent_event_id`, `slot_label_id`, `dedupe_rule_group_id`, `is_billing_required`) VALUES + (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2021-12-11 17:00:00','2021-12-13 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2021-06-10 12:00:00','2021-06-10 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-01-11 07:00:00','2022-01-14 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (4,NULL,NULL,NULL,4,1,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting without Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (5,NULL,NULL,NULL,4,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (6,NULL,NULL,NULL,1,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,1,4,NULL,0,1,'Conference Fee',1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,1,NULL,'Event Template Dept.','event_templates@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_event` ENABLE KEYS */; UNLOCK TABLES; @@ -495,7 +3474,13 @@ UNLOCK TABLES; LOCK TABLES `civicrm_extension` WRITE; /*!40000 ALTER TABLE `civicrm_extension` DISABLE KEYS */; -INSERT INTO `civicrm_extension` (`id`, `type`, `full_name`, `name`, `label`, `file`, `schema_version`, `is_active`) VALUES (1,'module','sequentialcreditnotes','Sequential credit notes','Sequential credit notes','sequentialcreditnotes',NULL,1),(2,'module','greenwich','Theme: Greenwich','Theme: Greenwich','greenwich',NULL,1),(3,'module','eventcart','Event cart','Event cart','eventcart',NULL,1),(4,'module','financialacls','Financial ACLs','Financial ACLs','financialacls',NULL,1),(5,'module','contributioncancelactions','Contribution cancel actions','Contribution cancel actions','contributioncancelactions',NULL,1),(6,'module','recaptcha','reCAPTCHA','reCAPTCHA','recaptcha',NULL,1); +INSERT INTO `civicrm_extension` (`id`, `type`, `full_name`, `name`, `label`, `file`, `schema_version`, `is_active`) VALUES + (1,'module','sequentialcreditnotes','Sequential credit notes','Sequential credit notes','sequentialcreditnotes',NULL,1), + (2,'module','greenwich','Theme: Greenwich','Theme: Greenwich','greenwich',NULL,1), + (3,'module','eventcart','Event cart','Event cart','eventcart',NULL,1), + (4,'module','financialacls','Financial ACLs','Financial ACLs','financialacls',NULL,1), + (5,'module','contributioncancelactions','Contribution cancel actions','Contribution cancel actions','contributioncancelactions',NULL,1), + (6,'module','recaptcha','reCAPTCHA','reCAPTCHA','recaptcha',NULL,1); /*!40000 ALTER TABLE `civicrm_extension` ENABLE KEYS */; UNLOCK TABLES; @@ -514,7 +3499,21 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_account` WRITE; /*!40000 ALTER TABLE `civicrm_financial_account` DISABLE KEYS */; -INSERT INTO `civicrm_financial_account` (`id`, `name`, `contact_id`, `financial_account_type_id`, `accounting_code`, `account_type_code`, `description`, `parent_id`, `is_header_account`, `is_deductible`, `is_tax`, `tax_rate`, `is_reserved`, `is_active`, `is_default`) VALUES (1,'Donation',1,3,'4200','INC','Default account for donations',NULL,0,1,0,NULL,0,1,1),(2,'Member Dues',1,3,'4400','INC','Default account for membership sales',NULL,0,1,0,NULL,0,1,0),(3,'Campaign Contribution',1,3,'4100','INC','Sample account for recording payments to a campaign',NULL,0,0,0,NULL,0,1,0),(4,'Event Fee',1,3,'4300','INC','Default account for event ticket sales',NULL,0,0,0,NULL,0,1,0),(5,'Banking Fees',1,5,'5200','EXP','Payment processor fees and manually recorded banking fees',NULL,0,0,0,NULL,0,1,1),(6,'Deposit Bank Account',1,1,'1100','BANK','All manually recorded cash and cheques go to this account',NULL,0,0,0,NULL,0,1,1),(7,'Accounts Receivable',1,1,'1200','AR','Amounts to be received later (eg pay later event revenues)',NULL,0,0,0,NULL,0,1,0),(8,'Accounts Payable',1,2,'2200','AP','Amounts to be paid out such as grants and refunds',NULL,0,0,0,NULL,0,1,1),(9,'Premiums',1,4,'5100','COGS','Account to record cost of premiums provided to payors',NULL,0,0,0,NULL,0,1,1),(10,'Premiums inventory',1,1,'1375','OCASSET','Account representing value of premiums inventory',NULL,0,0,0,NULL,0,1,0),(11,'Discounts',1,3,'4900','INC','Contra-revenue account for amounts discounted from sales',NULL,0,0,0,NULL,0,1,0),(12,'Payment Processor Account',1,1,'1150','BANK','Account to record payments into a payment processor merchant account',NULL,0,0,0,NULL,0,1,0),(13,'Deferred Revenue - Event Fee',1,2,'2730','OCLIAB','Event revenue to be recognized in future months when the events occur',NULL,0,0,0,NULL,0,1,0),(14,'Deferred Revenue - Member Dues',1,2,'2740','OCLIAB','Membership revenue to be recognized in future months',NULL,0,0,0,NULL,0,1,0); +INSERT INTO `civicrm_financial_account` (`id`, `name`, `contact_id`, `financial_account_type_id`, `accounting_code`, `account_type_code`, `description`, `parent_id`, `is_header_account`, `is_deductible`, `is_tax`, `tax_rate`, `is_reserved`, `is_active`, `is_default`) VALUES + (1,'Donation',1,3,'4200','INC','Default account for donations',NULL,0,1,0,NULL,0,1,1), + (2,'Member Dues',1,3,'4400','INC','Default account for membership sales',NULL,0,1,0,NULL,0,1,0), + (3,'Campaign Contribution',1,3,'4100','INC','Sample account for recording payments to a campaign',NULL,0,0,0,NULL,0,1,0), + (4,'Event Fee',1,3,'4300','INC','Default account for event ticket sales',NULL,0,0,0,NULL,0,1,0), + (5,'Banking Fees',1,5,'5200','EXP','Payment processor fees and manually recorded banking fees',NULL,0,0,0,NULL,0,1,1), + (6,'Deposit Bank Account',1,1,'1100','BANK','All manually recorded cash and cheques go to this account',NULL,0,0,0,NULL,0,1,1), + (7,'Accounts Receivable',1,1,'1200','AR','Amounts to be received later (eg pay later event revenues)',NULL,0,0,0,NULL,0,1,0), + (8,'Accounts Payable',1,2,'2200','AP','Amounts to be paid out such as grants and refunds',NULL,0,0,0,NULL,0,1,1), + (9,'Premiums',1,4,'5100','COGS','Account to record cost of premiums provided to payors',NULL,0,0,0,NULL,0,1,1), + (10,'Premiums inventory',1,1,'1375','OCASSET','Account representing value of premiums inventory',NULL,0,0,0,NULL,0,1,0), + (11,'Discounts',1,3,'4900','INC','Contra-revenue account for amounts discounted from sales',NULL,0,0,0,NULL,0,1,0), + (12,'Payment Processor Account',1,1,'1150','BANK','Account to record payments into a payment processor merchant account',NULL,0,0,0,NULL,0,1,0), + (13,'Deferred Revenue - Event Fee',1,2,'2730','OCLIAB','Event revenue to be recognized in future months when the events occur',NULL,0,0,0,NULL,0,1,0), + (14,'Deferred Revenue - Member Dues',1,2,'2740','OCLIAB','Membership revenue to be recognized in future months',NULL,0,0,0,NULL,0,1,0); /*!40000 ALTER TABLE `civicrm_financial_account` ENABLE KEYS */; UNLOCK TABLES; @@ -524,7 +3523,100 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_item` WRITE; /*!40000 ALTER TABLE `civicrm_financial_item` DISABLE KEYS */; -INSERT INTO `civicrm_financial_item` (`id`, `created_date`, `transaction_date`, `contact_id`, `description`, `amount`, `currency`, `financial_account_id`, `status_id`, `entity_table`, `entity_id`) VALUES (1,'2021-01-11 22:04:51','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2021-01-11 22:04:51','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2021-01-11 22:04:51','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2021-01-11 22:04:51','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2021-01-11 22:04:51','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2021-01-11 22:04:51','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2021-01-11 22:04:51','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2021-01-11 22:04:51','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2021-01-11 22:04:51','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2021-01-11 22:04:51','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2021-01-11 22:04:51','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2021-01-11 22:04:51','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2021-01-11 22:04:51','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2021-01-11 22:04:51','2021-01-12 09:04:51',33,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2021-01-11 22:04:51','2021-01-12 09:04:51',38,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2021-01-11 22:04:51','2021-01-12 09:04:51',200,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2021-01-11 22:04:51','2021-01-12 09:04:51',52,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2021-01-11 22:04:51','2021-01-12 09:04:51',136,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2021-01-11 22:04:51','2021-01-12 09:04:51',199,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2021-01-11 22:04:51','2021-01-12 09:04:51',173,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2021-01-11 22:04:51','2021-01-12 09:04:51',69,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2021-01-11 22:04:51','2021-01-12 09:04:51',137,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2021-01-11 22:04:51','2021-01-12 09:04:51',138,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2021-01-11 22:04:51','2021-01-12 09:04:51',127,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2021-01-11 22:04:51','2021-01-12 09:04:51',25,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2021-01-11 22:04:51','2021-01-12 09:04:51',101,'General',100.00,'USD',2,1,'civicrm_line_item',28),(27,'2021-01-11 22:04:51','2021-01-12 09:04:51',66,'Student',50.00,'USD',2,1,'civicrm_line_item',29),(28,'2021-01-11 22:04:51','2021-01-12 09:04:51',24,'Student',50.00,'USD',2,1,'civicrm_line_item',30),(29,'2021-01-11 22:04:51','2021-01-12 09:04:51',98,'Student',50.00,'USD',2,1,'civicrm_line_item',31),(30,'2021-01-11 22:04:51','2021-01-12 09:04:51',73,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2021-01-11 22:04:51','2021-01-12 09:04:51',102,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2021-01-11 22:04:51','2021-01-12 09:04:51',85,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2021-01-11 22:04:51','2021-01-12 09:04:51',12,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2021-01-11 22:04:51','2021-01-12 09:04:51',175,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2021-01-11 22:04:51','2021-01-12 09:04:51',16,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2021-01-11 22:04:51','2021-01-12 09:04:51',61,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2021-01-11 22:04:51','2021-01-12 09:04:51',122,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2021-01-11 22:04:51','2021-01-12 09:04:51',15,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2021-01-11 22:04:51','2021-01-12 09:04:51',190,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2021-01-11 22:04:51','2021-01-12 09:04:51',109,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2021-01-11 22:04:51','2021-01-12 09:04:51',124,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2021-01-11 22:04:51','2021-01-12 09:04:51',118,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2021-01-11 22:04:51','2021-01-12 09:04:51',188,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2021-01-11 22:04:51','2021-01-12 09:04:51',31,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2021-01-11 22:04:51','2021-01-12 09:04:51',97,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2021-01-11 22:04:51','2021-01-12 09:04:51',25,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2021-01-11 22:04:51','2021-01-12 09:04:51',75,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2021-01-11 22:04:51','2021-01-12 09:04:51',119,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2021-01-11 22:04:51','2021-01-12 09:04:51',84,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2021-01-11 22:04:51','2021-01-12 09:04:51',187,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2021-01-11 22:04:51','2021-01-12 09:04:51',40,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2021-01-11 22:04:51','2021-01-12 09:04:51',28,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2021-01-11 22:04:51','2021-01-12 09:04:51',73,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2021-01-11 22:04:51','2021-01-12 09:04:51',26,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2021-01-11 22:04:51','2021-01-12 09:04:51',131,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2021-01-11 22:04:51','2021-01-12 09:04:51',12,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2021-01-11 22:04:51','2021-01-12 09:04:51',43,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2021-01-11 22:04:51','2021-01-12 09:04:51',181,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2021-01-11 22:04:51','2021-01-12 09:04:51',62,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2021-01-11 22:04:51','2021-01-12 09:04:51',120,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2021-01-11 22:04:51','2021-01-12 09:04:51',170,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2021-01-11 22:04:51','2021-01-12 09:04:51',21,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2021-01-11 22:04:51','2021-01-12 09:04:51',68,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2021-01-11 22:04:51','2021-01-12 09:04:51',57,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2021-01-11 22:04:51','2021-01-12 09:04:51',18,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2021-01-11 22:04:51','2021-01-12 09:04:51',50,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2021-01-11 22:04:51','2021-01-12 09:04:51',4,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2021-01-11 22:04:51','2021-01-12 09:04:51',45,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2021-01-11 22:04:51','2021-01-12 09:04:51',27,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2021-01-11 22:04:51','2021-01-12 09:04:51',194,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2021-01-11 22:04:51','2021-01-12 09:04:51',143,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2021-01-11 22:04:51','2021-01-12 09:04:51',136,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2021-01-11 22:04:51','2021-01-12 09:04:51',132,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2021-01-11 22:04:51','2021-01-12 09:04:51',193,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2021-01-11 22:04:51','2021-01-12 09:04:51',78,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2021-01-11 22:04:51','2021-01-12 09:04:51',148,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2021-01-11 22:04:51','2021-01-12 09:04:51',74,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2021-01-11 22:04:51','2021-01-12 09:04:51',118,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2021-01-11 22:04:51','2021-01-12 09:04:51',98,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2021-01-11 22:04:51','2021-01-12 09:04:51',159,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2021-01-11 22:04:51','2021-01-12 09:04:51',127,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2021-01-11 22:04:51','2021-01-12 09:04:51',128,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2021-01-11 22:04:51','2021-01-12 09:04:51',137,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2021-01-11 22:04:51','2021-01-12 09:04:51',113,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2021-01-11 22:04:51','2021-01-12 09:04:51',115,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2021-01-11 22:04:51','2021-01-12 09:04:51',102,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2021-01-11 22:04:51','2021-01-12 09:04:51',163,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2021-01-11 22:04:51','2021-01-12 09:04:51',20,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2021-01-11 22:04:51','2021-01-12 09:04:51',126,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2021-01-11 22:04:51','2021-01-12 09:04:51',93,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2021-01-11 22:04:51','2021-01-12 09:04:51',44,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2021-01-11 22:04:51','2021-01-12 09:04:51',124,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2021-01-11 22:04:51','2021-01-12 09:04:51',82,'Single',50.00,'USD',4,1,'civicrm_line_item',80); +INSERT INTO `civicrm_financial_item` (`id`, `created_date`, `transaction_date`, `contact_id`, `description`, `amount`, `currency`, `financial_account_id`, `status_id`, `entity_table`, `entity_id`) VALUES + (1,'2021-06-11 00:47:12','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), + (2,'2021-06-11 00:47:12','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), + (3,'2021-06-11 00:47:12','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3), + (4,'2021-06-11 00:47:12','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), + (5,'2021-06-11 00:47:12','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5), + (6,'2021-06-11 00:47:12','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6), + (7,'2021-06-11 00:47:12','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7), + (8,'2021-06-11 00:47:12','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8), + (9,'2021-06-11 00:47:12','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9), + (10,'2021-06-11 00:47:12','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10), + (11,'2021-06-11 00:47:12','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11), + (12,'2021-06-11 00:47:12','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12), + (13,'2021-06-11 00:47:12','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13), + (14,'2021-06-11 00:47:12','2021-06-10 20:47:11',15,'General',100.00,'USD',2,1,'civicrm_line_item',16), + (15,'2021-06-11 00:47:12','2021-06-10 20:47:11',58,'General',100.00,'USD',2,1,'civicrm_line_item',17), + (16,'2021-06-11 00:47:12','2021-06-10 20:47:11',5,'General',100.00,'USD',2,1,'civicrm_line_item',18), + (17,'2021-06-11 00:47:12','2021-06-10 20:47:11',136,'General',100.00,'USD',2,1,'civicrm_line_item',19), + (18,'2021-06-11 00:47:12','2021-06-10 20:47:11',191,'General',100.00,'USD',2,1,'civicrm_line_item',20), + (19,'2021-06-11 00:47:12','2021-06-10 20:47:11',42,'General',100.00,'USD',2,1,'civicrm_line_item',21), + (20,'2021-06-11 00:47:12','2021-06-10 20:47:11',7,'General',100.00,'USD',2,1,'civicrm_line_item',22), + (21,'2021-06-11 00:47:12','2021-06-10 20:47:11',129,'General',100.00,'USD',2,1,'civicrm_line_item',23), + (22,'2021-06-11 00:47:12','2021-06-10 20:47:11',131,'General',100.00,'USD',2,1,'civicrm_line_item',24), + (23,'2021-06-11 00:47:12','2021-06-10 20:47:11',185,'General',100.00,'USD',2,1,'civicrm_line_item',25), + (24,'2021-06-11 00:47:12','2021-06-10 20:47:11',33,'General',100.00,'USD',2,1,'civicrm_line_item',26), + (25,'2021-06-11 00:47:12','2021-06-10 20:47:11',57,'General',100.00,'USD',2,1,'civicrm_line_item',27), + (26,'2021-06-11 00:47:12','2021-06-10 20:47:11',196,'General',100.00,'USD',2,1,'civicrm_line_item',28), + (27,'2021-06-11 00:47:12','2021-06-10 20:47:11',145,'Student',50.00,'USD',2,1,'civicrm_line_item',29), + (28,'2021-06-11 00:47:12','2021-06-10 20:47:11',92,'Student',50.00,'USD',2,1,'civicrm_line_item',30), + (29,'2021-06-11 00:47:12','2021-06-10 20:47:11',154,'Student',50.00,'USD',2,1,'civicrm_line_item',31), + (30,'2021-06-11 00:47:12','2021-06-10 20:47:11',123,'Student',50.00,'USD',2,1,'civicrm_line_item',32), + (31,'2021-06-11 00:47:12','2021-06-10 20:47:11',158,'Student',50.00,'USD',2,1,'civicrm_line_item',33), + (32,'2021-06-11 00:47:12','2021-06-10 20:47:11',165,'Student',50.00,'USD',2,1,'civicrm_line_item',34), + (33,'2021-06-11 00:47:12','2021-06-10 20:47:11',76,'Student',50.00,'USD',2,1,'civicrm_line_item',35), + (34,'2021-06-11 00:47:12','2021-06-10 20:47:11',124,'Student',50.00,'USD',2,1,'civicrm_line_item',36), + (35,'2021-06-11 00:47:12','2021-06-10 20:47:11',104,'Student',50.00,'USD',2,1,'civicrm_line_item',37), + (36,'2021-06-11 00:47:12','2021-06-10 20:47:11',170,'Student',50.00,'USD',2,1,'civicrm_line_item',38), + (37,'2021-06-11 00:47:12','2021-06-10 20:47:11',27,'Student',50.00,'USD',2,1,'civicrm_line_item',39), + (38,'2021-06-11 00:47:12','2021-06-10 20:47:11',75,'Student',50.00,'USD',2,1,'civicrm_line_item',40), + (39,'2021-06-11 00:47:12','2021-06-10 20:47:11',96,'Student',50.00,'USD',2,1,'civicrm_line_item',41), + (40,'2021-06-11 00:47:12','2021-06-10 20:47:11',64,'Student',50.00,'USD',2,1,'civicrm_line_item',42), + (41,'2021-06-11 00:47:12','2021-06-10 20:47:11',46,'Student',50.00,'USD',2,1,'civicrm_line_item',43), + (42,'2021-06-11 00:47:12','2021-06-10 20:47:11',89,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44), + (43,'2021-06-11 00:47:12','2021-06-10 20:47:11',103,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45), + (44,'2021-06-11 00:47:12','2021-06-10 20:47:12',125,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81), + (45,'2021-06-11 00:47:12','2021-06-10 20:47:12',101,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82), + (46,'2021-06-11 00:47:12','2021-06-10 20:47:12',183,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83), + (47,'2021-06-11 00:47:12','2021-06-10 20:47:12',56,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84), + (48,'2021-06-11 00:47:12','2021-06-10 20:47:12',173,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85), + (49,'2021-06-11 00:47:12','2021-06-10 20:47:12',140,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86), + (50,'2021-06-11 00:47:12','2021-06-10 20:47:12',23,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87), + (51,'2021-06-11 00:47:12','2021-06-10 20:47:12',48,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88), + (52,'2021-06-11 00:47:12','2021-06-10 20:47:12',40,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89), + (53,'2021-06-11 00:47:12','2021-06-10 20:47:12',89,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90), + (54,'2021-06-11 00:47:12','2021-06-10 20:47:12',32,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91), + (55,'2021-06-11 00:47:12','2021-06-10 20:47:12',144,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92), + (56,'2021-06-11 00:47:12','2021-06-10 20:47:12',45,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93), + (57,'2021-06-11 00:47:12','2021-06-10 20:47:12',34,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94), + (58,'2021-06-11 00:47:12','2021-06-10 20:47:12',157,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95), + (59,'2021-06-11 00:47:12','2021-06-10 20:47:12',122,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96), + (60,'2021-06-11 00:47:12','2021-06-10 20:47:12',201,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47), + (61,'2021-06-11 00:47:12','2021-06-10 20:47:12',30,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48), + (62,'2021-06-11 00:47:12','2021-06-10 20:47:12',146,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49), + (63,'2021-06-11 00:47:12','2021-06-10 20:47:12',148,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50), + (64,'2021-06-11 00:47:12','2021-06-10 20:47:12',92,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51), + (65,'2021-06-11 00:47:12','2021-06-10 20:47:12',74,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52), + (66,'2021-06-11 00:47:12','2021-06-10 20:47:12',52,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53), + (67,'2021-06-11 00:47:12','2021-06-10 20:47:12',9,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54), + (68,'2021-06-11 00:47:12','2021-06-10 20:47:12',99,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55), + (69,'2021-06-11 00:47:12','2021-06-10 20:47:12',161,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56), + (70,'2021-06-11 00:47:12','2021-06-10 20:47:12',86,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57), + (71,'2021-06-11 00:47:12','2021-06-10 20:47:12',145,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58), + (72,'2021-06-11 00:47:12','2021-06-10 20:47:12',147,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59), + (73,'2021-06-11 00:47:12','2021-06-10 20:47:12',127,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60), + (74,'2021-06-11 00:47:12','2021-06-10 20:47:12',179,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61), + (75,'2021-06-11 00:47:12','2021-06-10 20:47:12',129,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62), + (76,'2021-06-11 00:47:12','2021-06-10 20:47:12',105,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), + (77,'2021-06-11 00:47:12','2021-06-10 20:47:12',27,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), + (78,'2021-06-11 00:47:12','2021-06-10 20:47:12',118,'Single',50.00,'USD',4,1,'civicrm_line_item',65), + (79,'2021-06-11 00:47:12','2021-06-10 20:47:12',79,'Single',50.00,'USD',4,1,'civicrm_line_item',66), + (80,'2021-06-11 00:47:12','2021-06-10 20:47:12',43,'Single',50.00,'USD',4,1,'civicrm_line_item',67), + (81,'2021-06-11 00:47:12','2021-06-10 20:47:12',172,'Single',50.00,'USD',4,1,'civicrm_line_item',68), + (82,'2021-06-11 00:47:12','2021-06-10 20:47:12',180,'Single',50.00,'USD',4,1,'civicrm_line_item',69), + (83,'2021-06-11 00:47:12','2021-06-10 20:47:12',35,'Single',50.00,'USD',4,1,'civicrm_line_item',70), + (84,'2021-06-11 00:47:12','2021-06-10 20:47:12',181,'Single',50.00,'USD',4,1,'civicrm_line_item',71), + (85,'2021-06-11 00:47:12','2021-06-10 20:47:12',20,'Single',50.00,'USD',4,1,'civicrm_line_item',72), + (86,'2021-06-11 00:47:12','2021-06-10 20:47:12',106,'Single',50.00,'USD',4,1,'civicrm_line_item',73), + (87,'2021-06-11 00:47:12','2021-06-10 20:47:12',152,'Single',50.00,'USD',4,1,'civicrm_line_item',74), + (88,'2021-06-11 00:47:12','2021-06-10 20:47:12',171,'Single',50.00,'USD',4,1,'civicrm_line_item',75), + (89,'2021-06-11 00:47:12','2021-06-10 20:47:12',170,'Single',50.00,'USD',4,1,'civicrm_line_item',76), + (90,'2021-06-11 00:47:12','2021-06-10 20:47:12',33,'Single',50.00,'USD',4,1,'civicrm_line_item',77), + (91,'2021-06-11 00:47:12','2021-06-10 20:47:12',182,'Single',50.00,'USD',4,1,'civicrm_line_item',78), + (92,'2021-06-11 00:47:12','2021-06-10 20:47:12',96,'Single',50.00,'USD',4,1,'civicrm_line_item',79), + (93,'2021-06-11 00:47:12','2021-06-10 20:47:12',135,'Single',50.00,'USD',4,1,'civicrm_line_item',80); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -534,7 +3626,100 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_financial_trxn` DISABLE KEYS */; -INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES (1,NULL,6,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL),(2,NULL,6,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(3,NULL,6,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL,NULL),(4,NULL,6,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL),(5,NULL,6,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL),(6,NULL,6,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL,NULL),(7,NULL,6,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(8,NULL,6,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(9,NULL,6,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(10,NULL,6,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(11,NULL,6,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(12,NULL,6,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(13,NULL,6,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(14,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(15,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(16,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(17,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(18,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(19,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(20,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(21,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(22,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(23,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(24,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(25,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(26,NULL,6,'2021-01-12 09:04:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(27,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(28,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(29,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(30,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(31,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(32,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(33,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(34,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(35,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(36,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(37,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(38,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(39,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(40,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(41,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(42,NULL,6,'2021-01-12 09:04:51',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(43,NULL,6,'2021-01-12 09:04:51',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(44,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(45,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(46,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(47,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(48,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(49,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(50,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(51,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(52,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(53,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(54,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(55,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(56,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(57,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(58,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(59,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(60,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(61,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(62,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(63,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(64,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(65,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(66,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(67,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(68,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(69,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(70,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(71,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(72,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(73,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(74,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(75,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(76,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(77,NULL,6,'2021-01-12 09:04:51',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(78,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(79,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(80,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(81,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(82,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(83,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(84,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(85,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(86,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(87,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(88,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(89,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(90,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(91,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(92,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(93,NULL,6,'2021-01-12 09:04:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES + (1,NULL,6,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL), + (2,NULL,6,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (3,NULL,6,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL,NULL), + (4,NULL,6,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL), + (5,NULL,6,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL), + (6,NULL,6,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL,NULL), + (7,NULL,6,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (8,NULL,6,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (9,NULL,6,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (10,NULL,6,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (11,NULL,6,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (12,NULL,6,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (13,NULL,6,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (14,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'eafa6983717b93b0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (15,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'15243cfadf0f2536',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (16,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'1bcdd35abac9d31e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (17,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'e030336e9d9e27a7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (18,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'cbde35e851d08693',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (19,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'7d39bad93d16e658',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (20,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'33714841f2853c39',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (21,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'5389f88cfe515057',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (22,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'58daff9210aa1dac',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (23,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'5730290ee5588bd2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (24,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'315b9f8a4cac9458',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (25,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'69246f58a09a2f97',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (26,NULL,6,'2021-06-10 20:47:11',100.00,NULL,NULL,'USD',1,'c5de7035a4c701fb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (27,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'1ac3eb07f6424e89',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (28,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'2f48d84c4f5d1f19',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (29,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'5f2c43ecf6f87091',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (30,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'d76e674b092c0b60',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (31,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'372aea6295d47771',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (32,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'a35026fe0645c5ae',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (33,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'68f0a75d1f668c1b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (34,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'f47f8898b6317b5f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (35,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'5cadf16ab32b0434',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (36,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'0762aa5988787fd5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (37,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'d80168527be7f31a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (38,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'d41c794608ab1605',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (39,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'efd51e3b59f0cfed',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (40,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'ed31197c507715f1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (41,NULL,6,'2021-06-10 20:47:11',50.00,NULL,NULL,'USD',1,'5dc1b2d5ca4c5525',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (42,NULL,6,'2021-06-10 20:47:11',1200.00,NULL,NULL,'USD',1,'023c1d3bad756070',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (43,NULL,6,'2021-06-10 20:47:11',1200.00,NULL,NULL,'USD',1,'1ed15367939dd345',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (44,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'aa77badcabeeb9e0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (45,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'8b62828a3226d9cc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (46,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'a4f295df8eab7355',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (47,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'2d1228acbadf6839',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (48,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'783d82f1e7c74502',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (49,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'99f322caa83d5e6d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (50,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'faa956f935647168',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (51,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'596e85759113dc46',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (52,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'75a57ab7ae4d6707',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (53,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'fc4f22863da1aeca',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (54,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'a13c9ae0ec206c58',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (55,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'6fbe546dac220841',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (56,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'e0722580fc4157d7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (57,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'5a468bb7b6b6bb68',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (58,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'37de6f426f359bd2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (59,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'3d53d6822d6c4005',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (60,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'88746b3f28c58d01',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (61,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'e4662fa255fcab54',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (62,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'59a5e5a89823197d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (63,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'c4c12a9af2fff4ee',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (64,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'35a34b90d08a1e17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (65,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'0c973d4463bb35c3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (66,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'e6ee01ed8f4e1d37',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (67,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'06a7e4450da325ae',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (68,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'0634a826e55b2d45',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (69,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'1d860a759c13421e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (70,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'a69da8779369e62a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (71,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'72149328347ea433',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (72,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'fcbb39a2213da47e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (73,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'5a993ddc0132e579',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (74,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'4113e78404d7c038',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (75,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'98e8d03b37a9d77c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (76,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'3259f51a57f9bcac',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (77,NULL,6,'2021-06-10 20:47:12',800.00,NULL,NULL,'USD',1,'d6510b94103ea3e2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (78,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'db48d1b73f7e2129',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (79,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'ae35c3a093b5d14f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (80,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'44804cc0767c2365',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (81,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'0d5f2bdfb43bf660',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (82,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'e6cabf5b83231efa',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (83,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'ad5709781553b5e8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (84,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'a8e7e70a760615f1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (85,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'482154f519605172',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (86,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'c2df86cb38acf5cd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (87,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'76ed6c8fe2a0d183',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (88,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'026e0db1c8c4aeea',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (89,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'b545a95cd18db373',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (90,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'bdcd5238815847c7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (91,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'c74e50e0a15c9fac',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (92,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'445212dcef683434',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (93,NULL,6,'2021-06-10 20:47:12',50.00,NULL,NULL,'USD',1,'8852a3eb747973ac',NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -544,7 +3729,11 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_type` WRITE; /*!40000 ALTER TABLE `civicrm_financial_type` DISABLE KEYS */; -INSERT INTO `civicrm_financial_type` (`id`, `name`, `description`, `is_deductible`, `is_reserved`, `is_active`) VALUES (1,'Donation',NULL,1,0,1),(2,'Member Dues',NULL,1,0,1),(3,'Campaign Contribution',NULL,0,0,1),(4,'Event Fee',NULL,0,0,1); +INSERT INTO `civicrm_financial_type` (`id`, `name`, `description`, `is_deductible`, `is_reserved`, `is_active`) VALUES + (1,'Donation',NULL,1,0,1), + (2,'Member Dues',NULL,1,0,1), + (3,'Campaign Contribution',NULL,0,0,1), + (4,'Event Fee',NULL,0,0,1); /*!40000 ALTER TABLE `civicrm_financial_type` ENABLE KEYS */; UNLOCK TABLES; @@ -563,7 +3752,11 @@ UNLOCK TABLES; LOCK TABLES `civicrm_group` WRITE; /*!40000 ALTER TABLE `civicrm_group` DISABLE KEYS */; -INSERT INTO `civicrm_group` (`id`, `name`, `title`, `description`, `source`, `saved_search_id`, `is_active`, `visibility`, `where_clause`, `select_tables`, `where_tables`, `group_type`, `cache_date`, `refresh_date`, `parents`, `children`, `is_hidden`, `is_reserved`, `created_id`, `modified_id`, `frontend_title`, `frontend_description`) VALUES (1,'Administrators','Administrators','Contacts in this group are assigned Administrator role permissions.',NULL,NULL,1,'User and User Admin Only',NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL),(2,'Newsletter Subscribers','Newsletter Subscribers',NULL,NULL,NULL,1,'Public Pages',NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL),(3,'Summer Program Volunteers','Summer Program Volunteers',NULL,NULL,NULL,1,'Public Pages',NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL),(4,'Advisory Board','Advisory Board',NULL,NULL,NULL,1,'Public Pages',NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_group` (`id`, `name`, `title`, `description`, `source`, `saved_search_id`, `is_active`, `visibility`, `where_clause`, `select_tables`, `where_tables`, `group_type`, `cache_date`, `refresh_date`, `parents`, `children`, `is_hidden`, `is_reserved`, `created_id`, `modified_id`, `frontend_title`, `frontend_description`) VALUES + (1,'Administrators','Administrators','Contacts in this group are assigned Administrator role permissions.',NULL,NULL,1,'User and User Admin Only',NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL), + (2,'Newsletter Subscribers','Newsletter Subscribers',NULL,NULL,NULL,1,'Public Pages',NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL), + (3,'Summer Program Volunteers','Summer Program Volunteers',NULL,NULL,NULL,1,'Public Pages',NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL), + (4,'Advisory Board','Advisory Board',NULL,NULL,NULL,1,'Public Pages',NULL,NULL,NULL,'12',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_group` ENABLE KEYS */; UNLOCK TABLES; @@ -573,7 +3766,90 @@ UNLOCK TABLES; LOCK TABLES `civicrm_group_contact` WRITE; /*!40000 ALTER TABLE `civicrm_group_contact` DISABLE KEYS */; -INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES (1,2,65,'Added',NULL,NULL),(2,2,93,'Added',NULL,NULL),(3,2,24,'Added',NULL,NULL),(4,2,181,'Added',NULL,NULL),(5,2,102,'Added',NULL,NULL),(6,2,176,'Added',NULL,NULL),(7,2,14,'Added',NULL,NULL),(8,2,30,'Added',NULL,NULL),(9,2,49,'Added',NULL,NULL),(10,2,131,'Added',NULL,NULL),(11,2,90,'Added',NULL,NULL),(12,2,106,'Added',NULL,NULL),(13,2,185,'Added',NULL,NULL),(14,2,157,'Added',NULL,NULL),(15,2,194,'Added',NULL,NULL),(16,2,98,'Added',NULL,NULL),(17,2,193,'Added',NULL,NULL),(18,2,201,'Added',NULL,NULL),(19,2,81,'Added',NULL,NULL),(20,2,88,'Added',NULL,NULL),(21,2,91,'Added',NULL,NULL),(22,2,167,'Added',NULL,NULL),(23,2,95,'Added',NULL,NULL),(24,2,147,'Added',NULL,NULL),(25,2,152,'Added',NULL,NULL),(26,2,64,'Added',NULL,NULL),(27,2,101,'Added',NULL,NULL),(28,2,109,'Added',NULL,NULL),(29,2,73,'Added',NULL,NULL),(30,2,196,'Added',NULL,NULL),(31,2,6,'Added',NULL,NULL),(32,2,199,'Added',NULL,NULL),(33,2,99,'Added',NULL,NULL),(34,2,10,'Added',NULL,NULL),(35,2,139,'Added',NULL,NULL),(36,2,82,'Added',NULL,NULL),(37,2,18,'Added',NULL,NULL),(38,2,46,'Added',NULL,NULL),(39,2,110,'Added',NULL,NULL),(40,2,188,'Added',NULL,NULL),(41,2,76,'Added',NULL,NULL),(42,2,23,'Added',NULL,NULL),(43,2,57,'Added',NULL,NULL),(44,2,68,'Added',NULL,NULL),(45,2,180,'Added',NULL,NULL),(46,2,100,'Added',NULL,NULL),(47,2,52,'Added',NULL,NULL),(48,2,178,'Added',NULL,NULL),(49,2,108,'Added',NULL,NULL),(50,2,171,'Added',NULL,NULL),(51,2,104,'Added',NULL,NULL),(52,2,29,'Added',NULL,NULL),(53,2,195,'Added',NULL,NULL),(54,2,60,'Added',NULL,NULL),(55,2,116,'Added',NULL,NULL),(56,2,74,'Added',NULL,NULL),(57,2,75,'Added',NULL,NULL),(58,2,173,'Added',NULL,NULL),(59,2,27,'Added',NULL,NULL),(60,2,66,'Added',NULL,NULL),(61,3,164,'Added',NULL,NULL),(62,3,187,'Added',NULL,NULL),(63,3,105,'Added',NULL,NULL),(64,3,143,'Added',NULL,NULL),(65,3,12,'Added',NULL,NULL),(66,3,192,'Added',NULL,NULL),(67,3,11,'Added',NULL,NULL),(68,3,39,'Added',NULL,NULL),(69,3,19,'Added',NULL,NULL),(70,3,111,'Added',NULL,NULL),(71,3,16,'Added',NULL,NULL),(72,3,83,'Added',NULL,NULL),(73,3,172,'Added',NULL,NULL),(74,3,59,'Added',NULL,NULL),(75,3,92,'Added',NULL,NULL),(76,4,65,'Added',NULL,NULL),(77,4,30,'Added',NULL,NULL),(78,4,194,'Added',NULL,NULL),(79,4,167,'Added',NULL,NULL),(80,4,73,'Added',NULL,NULL),(81,4,82,'Added',NULL,NULL),(82,4,57,'Added',NULL,NULL),(83,4,171,'Added',NULL,NULL); +INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES + (1,2,31,'Added',NULL,NULL), + (2,2,138,'Added',NULL,NULL), + (3,2,21,'Added',NULL,NULL), + (4,2,85,'Added',NULL,NULL), + (5,2,128,'Added',NULL,NULL), + (6,2,177,'Added',NULL,NULL), + (7,2,93,'Added',NULL,NULL), + (8,2,46,'Added',NULL,NULL), + (9,2,53,'Added',NULL,NULL), + (10,2,84,'Added',NULL,NULL), + (11,2,89,'Added',NULL,NULL), + (12,2,14,'Added',NULL,NULL), + (13,2,191,'Added',NULL,NULL), + (14,2,50,'Added',NULL,NULL), + (15,2,5,'Added',NULL,NULL), + (16,2,173,'Added',NULL,NULL), + (17,2,190,'Added',NULL,NULL), + (18,2,178,'Added',NULL,NULL), + (19,2,16,'Added',NULL,NULL), + (20,2,23,'Added',NULL,NULL), + (21,2,199,'Added',NULL,NULL), + (22,2,25,'Added',NULL,NULL), + (23,2,37,'Added',NULL,NULL), + (24,2,201,'Added',NULL,NULL), + (25,2,179,'Added',NULL,NULL), + (26,2,11,'Added',NULL,NULL), + (27,2,20,'Added',NULL,NULL), + (28,2,117,'Added',NULL,NULL), + (29,2,98,'Added',NULL,NULL), + (30,2,57,'Added',NULL,NULL), + (31,2,125,'Added',NULL,NULL), + (32,2,194,'Added',NULL,NULL), + (33,2,44,'Added',NULL,NULL), + (34,2,27,'Added',NULL,NULL), + (35,2,78,'Added',NULL,NULL), + (36,2,146,'Added',NULL,NULL), + (37,2,90,'Added',NULL,NULL), + (38,2,45,'Added',NULL,NULL), + (39,2,34,'Added',NULL,NULL), + (40,2,41,'Added',NULL,NULL), + (41,2,83,'Added',NULL,NULL), + (42,2,18,'Added',NULL,NULL), + (43,2,154,'Added',NULL,NULL), + (44,2,160,'Added',NULL,NULL), + (45,2,107,'Added',NULL,NULL), + (46,2,192,'Added',NULL,NULL), + (47,2,122,'Added',NULL,NULL), + (48,2,144,'Added',NULL,NULL), + (49,2,67,'Added',NULL,NULL), + (50,2,33,'Added',NULL,NULL), + (51,2,185,'Added',NULL,NULL), + (52,2,59,'Added',NULL,NULL), + (53,2,48,'Added',NULL,NULL), + (54,2,81,'Added',NULL,NULL), + (55,2,149,'Added',NULL,NULL), + (56,2,100,'Added',NULL,NULL), + (57,2,2,'Added',NULL,NULL), + (58,2,26,'Added',NULL,NULL), + (59,2,186,'Added',NULL,NULL), + (60,2,110,'Added',NULL,NULL), + (61,3,71,'Added',NULL,NULL), + (62,3,163,'Added',NULL,NULL), + (63,3,189,'Added',NULL,NULL), + (64,3,196,'Added',NULL,NULL), + (65,3,10,'Added',NULL,NULL), + (66,3,115,'Added',NULL,NULL), + (67,3,38,'Added',NULL,NULL), + (68,3,156,'Added',NULL,NULL), + (69,3,103,'Added',NULL,NULL), + (70,3,68,'Added',NULL,NULL), + (71,3,184,'Added',NULL,NULL), + (72,3,169,'Added',NULL,NULL), + (73,3,127,'Added',NULL,NULL), + (74,3,96,'Added',NULL,NULL), + (75,3,176,'Added',NULL,NULL), + (76,4,31,'Added',NULL,NULL), + (77,4,46,'Added',NULL,NULL), + (78,4,5,'Added',NULL,NULL), + (79,4,25,'Added',NULL,NULL), + (80,4,98,'Added',NULL,NULL), + (81,4,146,'Added',NULL,NULL), + (82,4,154,'Added',NULL,NULL), + (83,4,33,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -619,7 +3895,24 @@ UNLOCK TABLES; LOCK TABLES `civicrm_job` WRITE; /*!40000 ALTER TABLE `civicrm_job` DISABLE KEYS */; -INSERT INTO `civicrm_job` (`id`, `domain_id`, `run_frequency`, `last_run`, `scheduled_run_date`, `name`, `description`, `api_entity`, `api_action`, `parameters`, `is_active`) VALUES (1,1,'Daily',NULL,NULL,'CiviCRM Update Check','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.','job','version_check',NULL,1),(2,1,'Always',NULL,NULL,'Send Scheduled Mailings','Sends out scheduled CiviMail mailings','job','process_mailing',NULL,0),(3,1,'Hourly',NULL,NULL,'Fetch Bounces','Fetches bounces from mailings and writes them to mailing statistics','job','fetch_bounces',NULL,0),(4,1,'Hourly',NULL,NULL,'Process Inbound Emails','Inserts activity for a contact or a case by retrieving inbound emails from a mail directory','job','fetch_activities',NULL,0),(5,1,'Daily',NULL,NULL,'Process Pledges','Updates pledge records and sends out reminders','job','process_pledge','send_reminders=[1 or 0] optional- 1 to send payment reminders',0),(6,1,'Daily',NULL,NULL,'Geocode and Parse Addresses','Retrieves geocodes (lat and long) and / or parses street addresses (populates street number, street name, etc.)','job','geocode','geocoding=[1 or 0] required\nparse=[1 or 0] required\nstart=[contact ID] optional-begin with this contact ID\nend=[contact ID] optional-process contacts with IDs less than this\nthrottle=[1 or 0] optional-1 adds five second sleep',0),(7,1,'Daily',NULL,NULL,'Update Greetings and Addressees','Goes through contact records and updates email and postal greetings, or addressee value','job','update_greeting','ct=[Individual or Household or Organization] required\ngt=[email_greeting or postal_greeting or addressee] required\nforce=[0 or 1] optional-0 update contacts with null value, 1 update all\nlimit=Number optional-Limit the number of contacts to update',0),(8,1,'Daily',NULL,NULL,'Mail Reports','Generates and sends out reports via email','job','mail_report','instanceId=[ID of report instance] required\nformat=[csv or print] optional-output CSV or print-friendly HTML, else PDF',0),(9,1,'Daily',NULL,NULL,'Send Scheduled Reminders','Sends out scheduled reminders via email','job','send_reminder',NULL,0),(10,1,'Always',NULL,NULL,'Update Participant Statuses','Updates pending event participant statuses based on time','job','process_participant',NULL,0),(11,1,'Daily',NULL,NULL,'Update Membership Statuses','Updates membership statuses. WARNING: Membership renewal reminders have been migrated to the Schedule Reminders functionality, which supports multiple renewal reminders.','job','process_membership',NULL,0),(12,1,'Always',NULL,NULL,'Process Survey Respondents','Releases reserved survey respondents when they have been reserved for longer than the Release Frequency days specified for that survey.','job','process_respondent',NULL,0),(13,1,'Hourly',NULL,NULL,'Clean-up Temporary Data and Files','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.','job','cleanup',NULL,0),(14,1,'Always',NULL,NULL,'Send Scheduled SMS','Sends out scheduled SMS','job','process_sms',NULL,0),(15,1,'Always',NULL,NULL,'Rebuild Smart Group Cache','Rebuilds the smart group cache.','job','group_rebuild','limit=Number optional-Limit the number of smart groups rebuild',0),(16,1,'Daily',NULL,NULL,'Disable expired relationships','Disables relationships that have expired (ie. those relationships whose end date is in the past).','job','disable_expired_relationships',NULL,0),(17,1,'Daily',NULL,NULL,'Validate Email Address from Mailings.','Updates the reset_date on an email address to indicate that there was a valid delivery to this email address.','mailing','update_email_resetdate','minDays, maxDays=Consider mailings that have completed between minDays and maxDays',0); +INSERT INTO `civicrm_job` (`id`, `domain_id`, `run_frequency`, `last_run`, `scheduled_run_date`, `name`, `description`, `api_entity`, `api_action`, `parameters`, `is_active`) VALUES + (1,1,'Daily',NULL,NULL,'CiviCRM Update Check','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.','job','version_check',NULL,1), + (2,1,'Always',NULL,NULL,'Send Scheduled Mailings','Sends out scheduled CiviMail mailings','job','process_mailing',NULL,0), + (3,1,'Hourly',NULL,NULL,'Fetch Bounces','Fetches bounces from mailings and writes them to mailing statistics','job','fetch_bounces',NULL,0), + (4,1,'Hourly',NULL,NULL,'Process Inbound Emails','Inserts activity for a contact or a case by retrieving inbound emails from a mail directory','job','fetch_activities',NULL,0), + (5,1,'Daily',NULL,NULL,'Process Pledges','Updates pledge records and sends out reminders','job','process_pledge','send_reminders=[1 or 0] optional- 1 to send payment reminders',0), + (6,1,'Daily',NULL,NULL,'Geocode and Parse Addresses','Retrieves geocodes (lat and long) and / or parses street addresses (populates street number, street name, etc.)','job','geocode','geocoding=[1 or 0] required\nparse=[1 or 0] required\nstart=[contact ID] optional-begin with this contact ID\nend=[contact ID] optional-process contacts with IDs less than this\nthrottle=[1 or 0] optional-1 adds five second sleep',0), + (7,1,'Daily',NULL,NULL,'Update Greetings and Addressees','Goes through contact records and updates email and postal greetings, or addressee value','job','update_greeting','ct=[Individual or Household or Organization] required\ngt=[email_greeting or postal_greeting or addressee] required\nforce=[0 or 1] optional-0 update contacts with null value, 1 update all\nlimit=Number optional-Limit the number of contacts to update',0), + (8,1,'Daily',NULL,NULL,'Mail Reports','Generates and sends out reports via email','job','mail_report','instanceId=[ID of report instance] required\nformat=[csv or print] optional-output CSV or print-friendly HTML, else PDF',0), + (9,1,'Daily',NULL,NULL,'Send Scheduled Reminders','Sends out scheduled reminders via email','job','send_reminder',NULL,0), + (10,1,'Always',NULL,NULL,'Update Participant Statuses','Updates pending event participant statuses based on time','job','process_participant',NULL,0), + (11,1,'Daily',NULL,NULL,'Update Membership Statuses','Updates membership statuses. WARNING: Membership renewal reminders have been migrated to the Schedule Reminders functionality, which supports multiple renewal reminders.','job','process_membership',NULL,0), + (12,1,'Always',NULL,NULL,'Process Survey Respondents','Releases reserved survey respondents when they have been reserved for longer than the Release Frequency days specified for that survey.','job','process_respondent',NULL,0), + (13,1,'Hourly',NULL,NULL,'Clean-up Temporary Data and Files','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.','job','cleanup',NULL,0), + (14,1,'Always',NULL,NULL,'Send Scheduled SMS','Sends out scheduled SMS','job','process_sms',NULL,0), + (15,1,'Always',NULL,NULL,'Rebuild Smart Group Cache','Rebuilds the smart group cache.','job','group_rebuild','limit=Number optional-Limit the number of smart groups rebuild',0), + (16,1,'Daily',NULL,NULL,'Disable expired relationships','Disables relationships that have expired (ie. those relationships whose end date is in the past).','job','disable_expired_relationships',NULL,0), + (17,1,'Daily',NULL,NULL,'Validate Email Address from Mailings.','Updates the reset_date on an email address to indicate that there was a valid delivery to this email address.','mailing','update_email_resetdate','minDays, maxDays=Consider mailings that have completed between minDays and maxDays',0); /*!40000 ALTER TABLE `civicrm_job` ENABLE KEYS */; UNLOCK TABLES; @@ -638,7 +3931,100 @@ UNLOCK TABLES; LOCK TABLES `civicrm_line_item` WRITE; /*!40000 ALTER TABLE `civicrm_line_item` DISABLE KEYS */; -INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contribution_id`, `price_field_id`, `label`, `qty`, `unit_price`, `line_total`, `participant_count`, `price_field_value_id`, `financial_type_id`, `non_deductible_amount`, `tax_amount`) VALUES (1,'civicrm_contribution',1,1,1,'Contribution Amount',1.00,125.00,125.00,0,1,1,0.00,NULL),(2,'civicrm_contribution',2,2,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(3,'civicrm_contribution',3,3,1,'Contribution Amount',1.00,25.00,25.00,0,1,1,0.00,NULL),(4,'civicrm_contribution',4,4,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(5,'civicrm_contribution',5,5,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(6,'civicrm_contribution',6,6,1,'Contribution Amount',1.00,175.00,175.00,0,1,1,0.00,NULL),(7,'civicrm_contribution',7,7,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(8,'civicrm_contribution',8,8,1,'Contribution Amount',1.00,10.00,10.00,0,1,1,0.00,NULL),(9,'civicrm_contribution',9,9,1,'Contribution Amount',1.00,250.00,250.00,0,1,1,0.00,NULL),(10,'civicrm_contribution',10,10,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(11,'civicrm_contribution',11,11,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(17,'civicrm_membership',3,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(18,'civicrm_membership',7,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',9,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',13,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',15,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',17,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',19,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',21,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',23,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',27,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',29,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',30,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(29,'civicrm_membership',2,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(30,'civicrm_membership',4,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(31,'civicrm_membership',5,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(32,'civicrm_membership',6,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(33,'civicrm_membership',8,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(34,'civicrm_membership',10,32,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(35,'civicrm_membership',12,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(36,'civicrm_membership',14,34,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(37,'civicrm_membership',16,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(38,'civicrm_membership',18,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(39,'civicrm_membership',20,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(40,'civicrm_membership',24,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(41,'civicrm_membership',25,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',26,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(44,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(45,'civicrm_membership',22,43,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(47,'civicrm_participant',3,77,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,90,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,49,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,62,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,47,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,59,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(54,'civicrm_participant',24,45,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(55,'civicrm_participant',25,58,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,52,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,86,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,84,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,83,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(61,'civicrm_participant',43,93,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(62,'civicrm_participant',46,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(63,'civicrm_participant',49,87,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,64,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,75,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,71,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,88,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,80,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,85,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(71,'civicrm_participant',19,73,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(72,'civicrm_participant',22,74,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,72,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,89,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,48,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(76,'civicrm_participant',35,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(77,'civicrm_participant',38,69,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,57,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,78,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(80,'civicrm_participant',47,67,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(81,'civicrm_participant',2,54,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,70,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,50,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,65,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,76,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,68,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,92,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,55,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,53,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,63,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,51,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,82,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,46,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,56,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,91,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,61,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL); +INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contribution_id`, `price_field_id`, `label`, `qty`, `unit_price`, `line_total`, `participant_count`, `price_field_value_id`, `financial_type_id`, `non_deductible_amount`, `tax_amount`) VALUES + (1,'civicrm_contribution',1,1,1,'Contribution Amount',1.00,125.00,125.00,0,1,1,0.00,NULL), + (2,'civicrm_contribution',2,2,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL), + (3,'civicrm_contribution',3,3,1,'Contribution Amount',1.00,25.00,25.00,0,1,1,0.00,NULL), + (4,'civicrm_contribution',4,4,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL), + (5,'civicrm_contribution',5,5,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL), + (6,'civicrm_contribution',6,6,1,'Contribution Amount',1.00,175.00,175.00,0,1,1,0.00,NULL), + (7,'civicrm_contribution',7,7,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL), + (8,'civicrm_contribution',8,8,1,'Contribution Amount',1.00,10.00,10.00,0,1,1,0.00,NULL), + (9,'civicrm_contribution',9,9,1,'Contribution Amount',1.00,250.00,250.00,0,1,1,0.00,NULL), + (10,'civicrm_contribution',10,10,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL), + (11,'civicrm_contribution',11,11,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL), + (12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL), + (13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL), + (16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (17,'civicrm_membership',3,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (18,'civicrm_membership',7,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (19,'civicrm_membership',9,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (20,'civicrm_membership',10,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (21,'civicrm_membership',13,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (22,'civicrm_membership',17,30,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (23,'civicrm_membership',19,32,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (24,'civicrm_membership',21,34,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (25,'civicrm_membership',23,36,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (26,'civicrm_membership',25,38,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (27,'civicrm_membership',27,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (28,'civicrm_membership',29,42,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL), + (29,'civicrm_membership',2,15,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (30,'civicrm_membership',4,17,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (31,'civicrm_membership',5,18,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (32,'civicrm_membership',6,19,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (33,'civicrm_membership',8,21,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (34,'civicrm_membership',12,25,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (35,'civicrm_membership',14,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (36,'civicrm_membership',15,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (37,'civicrm_membership',16,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (38,'civicrm_membership',18,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (39,'civicrm_membership',20,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (40,'civicrm_membership',24,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (41,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (42,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (43,'civicrm_membership',30,43,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL), + (44,'civicrm_membership',11,24,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL), + (45,'civicrm_membership',22,35,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL), + (47,'civicrm_participant',3,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (48,'civicrm_participant',6,49,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (49,'civicrm_participant',9,79,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (50,'civicrm_participant',12,81,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (51,'civicrm_participant',15,64,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (52,'civicrm_participant',18,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (53,'civicrm_participant',21,58,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (54,'civicrm_participant',24,45,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (55,'civicrm_participant',25,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (56,'civicrm_participant',28,84,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (57,'civicrm_participant',31,62,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (58,'civicrm_participant',34,78,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (59,'civicrm_participant',37,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (60,'civicrm_participant',40,73,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (61,'civicrm_participant',43,89,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (62,'civicrm_participant',46,74,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (63,'civicrm_participant',49,68,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (64,'civicrm_participant',50,48,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL), + (65,'civicrm_participant',1,70,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (66,'civicrm_participant',4,61,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (67,'civicrm_participant',7,55,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (68,'civicrm_participant',10,87,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (69,'civicrm_participant',13,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (70,'civicrm_participant',16,53,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (71,'civicrm_participant',19,91,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (72,'civicrm_participant',22,46,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (73,'civicrm_participant',26,69,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (74,'civicrm_participant',29,82,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (75,'civicrm_participant',32,86,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (76,'civicrm_participant',35,85,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (77,'civicrm_participant',38,51,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (78,'civicrm_participant',41,92,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (79,'civicrm_participant',44,65,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (80,'civicrm_participant',47,75,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL), + (81,'civicrm_participant',2,72,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (82,'civicrm_participant',5,67,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (83,'civicrm_participant',8,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (84,'civicrm_participant',11,59,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (85,'civicrm_participant',14,88,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (86,'civicrm_participant',17,76,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (87,'civicrm_participant',20,47,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (88,'civicrm_participant',23,57,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (89,'civicrm_participant',27,54,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (90,'civicrm_participant',30,63,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (91,'civicrm_participant',33,50,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (92,'civicrm_participant',36,77,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (93,'civicrm_participant',39,56,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (94,'civicrm_participant',42,52,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (95,'civicrm_participant',45,83,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL), + (96,'civicrm_participant',48,71,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL); /*!40000 ALTER TABLE `civicrm_line_item` ENABLE KEYS */; UNLOCK TABLES; @@ -648,7 +4034,10 @@ UNLOCK TABLES; LOCK TABLES `civicrm_loc_block` WRITE; /*!40000 ALTER TABLE `civicrm_loc_block` DISABLE KEYS */; -INSERT INTO `civicrm_loc_block` (`id`, `address_id`, `email_id`, `phone_id`, `im_id`, `address_2_id`, `email_2_id`, `phone_2_id`, `im_2_id`) VALUES (1,182,182,155,NULL,NULL,NULL,NULL,NULL),(2,183,183,156,NULL,NULL,NULL,NULL,NULL),(3,184,184,157,NULL,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_loc_block` (`id`, `address_id`, `email_id`, `phone_id`, `im_id`, `address_2_id`, `email_2_id`, `phone_2_id`, `im_2_id`) VALUES + (1,176,186,180,NULL,NULL,NULL,NULL,NULL), + (2,177,187,181,NULL,NULL,NULL,NULL,NULL), + (3,178,188,182,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -658,7 +4047,12 @@ UNLOCK TABLES; LOCK TABLES `civicrm_location_type` WRITE; /*!40000 ALTER TABLE `civicrm_location_type` DISABLE KEYS */; -INSERT INTO `civicrm_location_type` (`id`, `name`, `display_name`, `vcard_name`, `description`, `is_reserved`, `is_active`, `is_default`) VALUES (1,'Home','Home','HOME','Place of residence',0,1,1),(2,'Work','Work','WORK','Work location',0,1,NULL),(3,'Main','Main',NULL,'Main office location',0,1,NULL),(4,'Other','Other',NULL,'Other location',0,1,NULL),(5,'Billing','Billing',NULL,'Billing Address location',1,1,NULL); +INSERT INTO `civicrm_location_type` (`id`, `name`, `display_name`, `vcard_name`, `description`, `is_reserved`, `is_active`, `is_default`) VALUES + (1,'Home','Home','HOME','Place of residence',0,1,1), + (2,'Work','Work','WORK','Work location',0,1,NULL), + (3,'Main','Main',NULL,'Main office location',0,1,NULL), + (4,'Other','Other',NULL,'Other location',0,1,NULL), + (5,'Billing','Billing',NULL,'Billing Address location',1,1,NULL); /*!40000 ALTER TABLE `civicrm_location_type` ENABLE KEYS */; UNLOCK TABLES; @@ -677,7 +4071,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_mail_settings` WRITE; /*!40000 ALTER TABLE `civicrm_mail_settings` DISABLE KEYS */; -INSERT INTO `civicrm_mail_settings` (`id`, `domain_id`, `name`, `is_default`, `domain`, `localpart`, `return_path`, `protocol`, `server`, `port`, `username`, `password`, `is_ssl`, `source`, `activity_status`, `is_non_case_email_skipped`, `is_contact_creation_disabled_if_no_match`) VALUES (1,1,'default',1,'EXAMPLE.ORG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0); +INSERT INTO `civicrm_mail_settings` (`id`, `domain_id`, `name`, `is_default`, `domain`, `localpart`, `return_path`, `protocol`, `server`, `port`, `username`, `password`, `is_ssl`, `source`, `activity_status`, `is_non_case_email_skipped`, `is_contact_creation_disabled_if_no_match`) VALUES + (1,1,'default',1,'EXAMPLE.ORG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0); /*!40000 ALTER TABLE `civicrm_mail_settings` ENABLE KEYS */; UNLOCK TABLES; @@ -705,7 +4100,172 @@ UNLOCK TABLES; LOCK TABLES `civicrm_mailing_bounce_pattern` WRITE; /*!40000 ALTER TABLE `civicrm_mailing_bounce_pattern` DISABLE KEYS */; -INSERT INTO `civicrm_mailing_bounce_pattern` (`id`, `bounce_type_id`, `pattern`) VALUES (1,1,'Client TOS Notification'),(2,2,'(be|am)? (out of|away from) (the|my)? (office|computer|town)'),(3,2,'i am on vacation'),(4,3,'name(server entry| lookup failure)'),(5,3,'no (mail server|matches to nameserver query|dns entries)'),(6,3,'reverse dns entry'),(7,3,'Host or domain name not found'),(8,3,'Unable to resolve MX record for'),(9,4,'(unknown|not local) host'),(10,4,'all hosts have been failing'),(11,4,'allowed rcpthosts'),(12,4,'connection (refused|timed out)'),(13,4,'not connected'),(14,4,'couldn\'t find any host named'),(15,4,'error involving remote host'),(16,4,'host unknown'),(17,4,'invalid host name'),(18,4,'isn\'t in my control/locals file'),(19,4,'local configuration error'),(20,4,'not a gateway'),(21,4,'server is (down or unreachable|not responding)'),(22,4,'too many connections'),(23,4,'unable to connect'),(24,4,'lost connection'),(25,4,'conversation with [^ ]* timed out while'),(26,4,'server requires authentication'),(27,4,'authentication (is )?required'),(28,5,'(my )?e-?mail( address)? has changed'),(29,5,'account (inactive|expired|deactivated)'),(30,5,'account is locked'),(31,5,'changed w+( e-?mail)? address'),(32,5,'deactivated mailbox'),(33,5,'disabled or discontinued'),(34,5,'inactive user'),(35,5,'is inactive on this domain'),(36,5,'mail receiving disabled'),(37,5,'mail( ?)address is administrative?ly disabled'),(38,5,'mailbox (temporarily disabled|currently suspended)'),(39,5,'no longer (accepting mail|on server|in use|with|employed|on staff|works for|using this account)'),(40,5,'not accepting (mail|messages)'),(41,5,'please use my new e-?mail address'),(42,5,'this address no longer accepts mail'),(43,5,'user account suspended'),(44,5,'account that you tried to reach is disabled'),(45,5,'User banned'),(46,6,'(user|recipient( name)?) is not recognized'),(47,6,'554 delivery error'),(48,6,'address does not exist'),(49,6,'address(es)?( you (entered|specified))? (could|was)( not|n.t)( be)? found'),(50,6,'address(ee)? (unknown|invalid)'),(51,6,'bad destination'),(52,6,'badly formatted address'),(53,6,'can\'t open mailbox for'),(54,6,'cannot deliver'),(55,6,'delivery to the following recipient(s)? failed'),(56,6,'destination addresses were unknown'),(57,6,'did not reach the following recipient'),(58,6,'does not exist'),(59,6,'does not like recipient'),(60,6,'does not specify a valid notes mail file'),(61,6,'illegal alias'),(62,6,'invalid (mailbox|(e-?mail )?address|recipient|final delivery)'),(63,6,'invalid( or unknown)?( virtual)? user'),(64,6,'(mail )?delivery (to this user )?is not allowed'),(65,6,'mailbox (not found|unavailable|name not allowed)'),(66,6,'message could not be forwarded'),(67,6,'missing or malformed local(-| )part'),(68,6,'no e-?mail address registered'),(69,6,'no such (mail drop|mailbox( \\w+)?|(e-?mail )?address|recipient|(local )?user|person)( here)?'),(70,6,'no mailbox (here )?by that name'),(71,6,'not (listed in|found in directory|known at this site|our customer)'),(72,6,'not a valid( (user|mailbox))?'),(73,6,'not present in directory entry'),(74,6,'recipient (does not exist|(is )?unknown|rejected|denied|not found)'),(75,6,'this user doesn\'t have a yahoo.com address'),(76,6,'unavailable to take delivery of the message'),(77,6,'unavailable mailbox'),(78,6,'unknown (local( |-)part|recipient|address error)'),(79,6,'unknown( or illegal)? user( account)?'),(80,6,'unrecognized recipient'),(81,6,'unregistered address'),(82,6,'user (unknown|(does not|doesn\'t) exist)'),(83,6,'user doesn\'t have an? w+ account'),(84,6,'user(\'s e-?mail name is)? not found'),(85,6,'^Validation failed for:'),(86,6,'5.1.0 Address rejected'),(87,6,'no valid recipients?'),(88,6,'RecipNotFound'),(89,6,'no one at this address'),(90,6,'misconfigured forwarding address'),(91,6,'account is not allowed'),(92,6,'Address .<[^>]*>. not known here'),(93,6,'Recipient address rejected: ([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}'),(94,6,'Non sono riuscito a trovare l.indirizzo e-mail'),(95,6,'nadie con esta direcci..?n'),(96,6,'ni bilo mogo..?e najti prejemnikovega e-po..?tnega naslova'),(97,6,'Elektronski naslov (je ukinjen|ne obstaja)'),(98,6,'nepravilno nastavljen predal'),(99,7,'(mail( forwarding)?|routing).loop'),(100,7,'excessive recursion'),(101,7,'loop detected'),(102,7,'maximum hop count exceeded'),(103,7,'message was forwarded more than the maximum allowed times'),(104,7,'too many (hops|recursive forwards)'),(105,8,'(disk(space)?|over the allowed|exceed(ed|s)?|storage) quota'),(106,8,'522_mailbox_full'),(107,8,'exceeds allowed message count'),(108,8,'file too large'),(109,8,'full mailbox'),(110,8,'(mail|in)(box|folder) ((for user \\w+ )?is )?full'),(111,8,'mailbox (has exceeded|is over) the limit'),(112,8,'mailbox( exceeds allowed)? size'),(113,8,'no space left for this user'),(114,8,'over\\s?quota'),(115,8,'quota (for the mailbox )?has been exceeded'),(116,8,'quota ?(usage|violation|exceeded)'),(117,8,'recipient storage full'),(118,8,'not able to receive more mail'),(119,8,'doesn.t have enough disk space left'),(120,8,'exceeded storage allocation'),(121,8,'running out of disk space'),(122,9,'cannot find your hostname'),(123,9,'ip name lookup'),(124,9,'not configured to relay mail'),(125,9,'relay(ing)? (not permitted|(access )?denied)'),(126,9,'relayed mail to .+? not allowed'),(127,9,'sender ip must resolve'),(128,9,'unable to relay'),(129,9,'No route to host'),(130,9,'Network is unreachable'),(131,9,'unrouteable address'),(132,9,'We don.t handle mail for'),(133,9,'we do not relay'),(134,9,'Rejected by next-hop'),(135,9,'not permitted to( *550)? relay through this server'),(136,10,'(bulk( e-?mail)|content|attachment blocking|virus|mail system) filters?'),(137,10,'(hostile|questionable|unacceptable) content'),(138,10,'address .+? has not been verified'),(139,10,'anti-?spam (policw+|software)'),(140,10,'anti-?virus gateway has detected'),(141,10,'blacklisted'),(142,10,'blocked message'),(143,10,'content control'),(144,10,'delivery not authorized'),(145,10,'does not conform to our e-?mail policy'),(146,10,'excessive spam content'),(147,10,'message looks suspicious'),(148,10,'open relay'),(149,10,'sender was rejected'),(150,10,'spam(check| reduction software| filters?)'),(151,10,'blocked by a user configured filter'),(152,10,'(detected|rejected) (as|due to) spam'),(153,10,'X-HmXmrOriginalRecipient'),(154,10,'Client host .[^ ]*. blocked'),(155,10,'automatic(ally-generated)? messages are not accepted'),(156,10,'denied by policy'),(157,10,'has no corresponding reverse \\(PTR\\) address'),(158,10,'has a policy that( [^ ]*)? prohibited the mail that you sent'),(159,10,'is likely unsolicited mail'),(160,10,'Local Policy Violation'),(161,10,'ni bilo mogo..?e dostaviti zaradi varnostnega pravilnika'),(162,10,'abuse report'),(163,11,'nonstandard smtp line terminator'),(164,11,'syntax error in from address'),(165,11,'unknown smtp code'); +INSERT INTO `civicrm_mailing_bounce_pattern` (`id`, `bounce_type_id`, `pattern`) VALUES + (1,1,'Client TOS Notification'), + (2,2,'(be|am)? (out of|away from) (the|my)? (office|computer|town)'), + (3,2,'i am on vacation'), + (4,3,'name(server entry| lookup failure)'), + (5,3,'no (mail server|matches to nameserver query|dns entries)'), + (6,3,'reverse dns entry'), + (7,3,'Host or domain name not found'), + (8,3,'Unable to resolve MX record for'), + (9,4,'(unknown|not local) host'), + (10,4,'all hosts have been failing'), + (11,4,'allowed rcpthosts'), + (12,4,'connection (refused|timed out)'), + (13,4,'not connected'), + (14,4,'couldn\'t find any host named'), + (15,4,'error involving remote host'), + (16,4,'host unknown'), + (17,4,'invalid host name'), + (18,4,'isn\'t in my control/locals file'), + (19,4,'local configuration error'), + (20,4,'not a gateway'), + (21,4,'server is (down or unreachable|not responding)'), + (22,4,'too many connections'), + (23,4,'unable to connect'), + (24,4,'lost connection'), + (25,4,'conversation with [^ ]* timed out while'), + (26,4,'server requires authentication'), + (27,4,'authentication (is )?required'), + (28,5,'(my )?e-?mail( address)? has changed'), + (29,5,'account (inactive|expired|deactivated)'), + (30,5,'account is locked'), + (31,5,'changed w+( e-?mail)? address'), + (32,5,'deactivated mailbox'), + (33,5,'disabled or discontinued'), + (34,5,'inactive user'), + (35,5,'is inactive on this domain'), + (36,5,'mail receiving disabled'), + (37,5,'mail( ?)address is administrative?ly disabled'), + (38,5,'mailbox (temporarily disabled|currently suspended)'), + (39,5,'no longer (accepting mail|on server|in use|with|employed|on staff|works for|using this account)'), + (40,5,'not accepting (mail|messages)'), + (41,5,'please use my new e-?mail address'), + (42,5,'this address no longer accepts mail'), + (43,5,'user account suspended'), + (44,5,'account that you tried to reach is disabled'), + (45,5,'User banned'), + (46,6,'(user|recipient( name)?) is not recognized'), + (47,6,'554 delivery error'), + (48,6,'address does not exist'), + (49,6,'address(es)?( you (entered|specified))? (could|was)( not|n.t)( be)? found'), + (50,6,'address(ee)? (unknown|invalid)'), + (51,6,'bad destination'), + (52,6,'badly formatted address'), + (53,6,'can\'t open mailbox for'), + (54,6,'cannot deliver'), + (55,6,'delivery to the following recipient(s)? failed'), + (56,6,'destination addresses were unknown'), + (57,6,'did not reach the following recipient'), + (58,6,'does not exist'), + (59,6,'does not like recipient'), + (60,6,'does not specify a valid notes mail file'), + (61,6,'illegal alias'), + (62,6,'invalid (mailbox|(e-?mail )?address|recipient|final delivery)'), + (63,6,'invalid( or unknown)?( virtual)? user'), + (64,6,'(mail )?delivery (to this user )?is not allowed'), + (65,6,'mailbox (not found|unavailable|name not allowed)'), + (66,6,'message could not be forwarded'), + (67,6,'missing or malformed local(-| )part'), + (68,6,'no e-?mail address registered'), + (69,6,'no such (mail drop|mailbox( \\w+)?|(e-?mail )?address|recipient|(local )?user|person)( here)?'), + (70,6,'no mailbox (here )?by that name'), + (71,6,'not (listed in|found in directory|known at this site|our customer)'), + (72,6,'not a valid( (user|mailbox))?'), + (73,6,'not present in directory entry'), + (74,6,'recipient (does not exist|(is )?unknown|rejected|denied|not found)'), + (75,6,'this user doesn\'t have a yahoo.com address'), + (76,6,'unavailable to take delivery of the message'), + (77,6,'unavailable mailbox'), + (78,6,'unknown (local( |-)part|recipient|address error)'), + (79,6,'unknown( or illegal)? user( account)?'), + (80,6,'unrecognized recipient'), + (81,6,'unregistered address'), + (82,6,'user (unknown|(does not|doesn\'t) exist)'), + (83,6,'user doesn\'t have an? w+ account'), + (84,6,'user(\'s e-?mail name is)? not found'), + (85,6,'^Validation failed for:'), + (86,6,'5.1.0 Address rejected'), + (87,6,'no valid recipients?'), + (88,6,'RecipNotFound'), + (89,6,'no one at this address'), + (90,6,'misconfigured forwarding address'), + (91,6,'account is not allowed'), + (92,6,'Address .<[^>]*>. not known here'), + (93,6,'Recipient address rejected: ([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}'), + (94,6,'Non sono riuscito a trovare l.indirizzo e-mail'), + (95,6,'nadie con esta direcci..?n'), + (96,6,'ni bilo mogo..?e najti prejemnikovega e-po..?tnega naslova'), + (97,6,'Elektronski naslov (je ukinjen|ne obstaja)'), + (98,6,'nepravilno nastavljen predal'), + (99,7,'(mail( forwarding)?|routing).loop'), + (100,7,'excessive recursion'), + (101,7,'loop detected'), + (102,7,'maximum hop count exceeded'), + (103,7,'message was forwarded more than the maximum allowed times'), + (104,7,'too many (hops|recursive forwards)'), + (105,8,'(disk(space)?|over the allowed|exceed(ed|s)?|storage) quota'), + (106,8,'522_mailbox_full'), + (107,8,'exceeds allowed message count'), + (108,8,'file too large'), + (109,8,'full mailbox'), + (110,8,'(mail|in)(box|folder) ((for user \\w+ )?is )?full'), + (111,8,'mailbox (has exceeded|is over) the limit'), + (112,8,'mailbox( exceeds allowed)? size'), + (113,8,'no space left for this user'), + (114,8,'over\\s?quota'), + (115,8,'quota (for the mailbox )?has been exceeded'), + (116,8,'quota ?(usage|violation|exceeded)'), + (117,8,'recipient storage full'), + (118,8,'not able to receive more mail'), + (119,8,'doesn.t have enough disk space left'), + (120,8,'exceeded storage allocation'), + (121,8,'running out of disk space'), + (122,9,'cannot find your hostname'), + (123,9,'ip name lookup'), + (124,9,'not configured to relay mail'), + (125,9,'relay(ing)? (not permitted|(access )?denied)'), + (126,9,'relayed mail to .+? not allowed'), + (127,9,'sender ip must resolve'), + (128,9,'unable to relay'), + (129,9,'No route to host'), + (130,9,'Network is unreachable'), + (131,9,'unrouteable address'), + (132,9,'We don.t handle mail for'), + (133,9,'we do not relay'), + (134,9,'Rejected by next-hop'), + (135,9,'not permitted to( *550)? relay through this server'), + (136,10,'(bulk( e-?mail)|content|attachment blocking|virus|mail system) filters?'), + (137,10,'(hostile|questionable|unacceptable) content'), + (138,10,'address .+? has not been verified'), + (139,10,'anti-?spam (policw+|software)'), + (140,10,'anti-?virus gateway has detected'), + (141,10,'blacklisted'), + (142,10,'blocked message'), + (143,10,'content control'), + (144,10,'delivery not authorized'), + (145,10,'does not conform to our e-?mail policy'), + (146,10,'excessive spam content'), + (147,10,'message looks suspicious'), + (148,10,'open relay'), + (149,10,'sender was rejected'), + (150,10,'spam(check| reduction software| filters?)'), + (151,10,'blocked by a user configured filter'), + (152,10,'(detected|rejected) (as|due to) spam'), + (153,10,'X-HmXmrOriginalRecipient'), + (154,10,'Client host .[^ ]*. blocked'), + (155,10,'automatic(ally-generated)? messages are not accepted'), + (156,10,'denied by policy'), + (157,10,'has no corresponding reverse \\(PTR\\) address'), + (158,10,'has a policy that( [^ ]*)? prohibited the mail that you sent'), + (159,10,'is likely unsolicited mail'), + (160,10,'Local Policy Violation'), + (161,10,'ni bilo mogo..?e dostaviti zaradi varnostnega pravilnika'), + (162,10,'abuse report'), + (163,11,'nonstandard smtp line terminator'), + (164,11,'syntax error in from address'), + (165,11,'unknown smtp code'); /*!40000 ALTER TABLE `civicrm_mailing_bounce_pattern` ENABLE KEYS */; UNLOCK TABLES; @@ -715,7 +4275,18 @@ UNLOCK TABLES; LOCK TABLES `civicrm_mailing_bounce_type` WRITE; /*!40000 ALTER TABLE `civicrm_mailing_bounce_type` DISABLE KEYS */; -INSERT INTO `civicrm_mailing_bounce_type` (`id`, `name`, `description`, `hold_threshold`) VALUES (1,'AOL','AOL Terms of Service complaint',1),(2,'Away','Recipient is on vacation',30),(3,'Dns','Unable to resolve recipient domain',3),(4,'Host','Unable to deliver to destintation mail server',3),(5,'Inactive','User account is no longer active',1),(6,'Invalid','Email address is not valid',1),(7,'Loop','Mail routing error',3),(8,'Quota','User inbox is full',3),(9,'Relay','Unable to reach destination mail server',3),(10,'Spam','Message caught by a content filter',1),(11,'Syntax','Error in SMTP transaction',3); +INSERT INTO `civicrm_mailing_bounce_type` (`id`, `name`, `description`, `hold_threshold`) VALUES + (1,'AOL','AOL Terms of Service complaint',1), + (2,'Away','Recipient is on vacation',30), + (3,'Dns','Unable to resolve recipient domain',3), + (4,'Host','Unable to deliver to destintation mail server',3), + (5,'Inactive','User account is no longer active',1), + (6,'Invalid','Email address is not valid',1), + (7,'Loop','Mail routing error',3), + (8,'Quota','User inbox is full',3), + (9,'Relay','Unable to reach destination mail server',3), + (10,'Spam','Message caught by a content filter',1), + (11,'Syntax','Error in SMTP transaction',3); /*!40000 ALTER TABLE `civicrm_mailing_bounce_type` ENABLE KEYS */; UNLOCK TABLES; @@ -725,7 +4296,15 @@ UNLOCK TABLES; LOCK TABLES `civicrm_mailing_component` WRITE; /*!40000 ALTER TABLE `civicrm_mailing_component` DISABLE KEYS */; -INSERT INTO `civicrm_mailing_component` (`id`, `name`, `component_type`, `subject`, `body_html`, `body_text`, `is_default`, `is_active`) VALUES (1,'Mailing Header','Header','Descriptive Title for this Header','Sample Header for HTML formatted content.','Sample Header for TEXT formatted content.',1,1),(2,'Mailing Footer','Footer','Descriptive Title for this Footer.','Sample Footer for HTML formatted content<br/><a href=\"{action.optOutUrl}\">Unsubscribe</a> <br/> {domain.address}','to unsubscribe: {action.optOutUrl}\n{domain.address}',1,1),(3,'Subscribe Message','Subscribe','Subscription Confirmation Request','You have a pending subscription to the {subscribe.group} mailing list. To confirm this subscription, reply to this email or click <a href=\"{subscribe.url}\">here</a>.','You have a pending subscription to the {subscribe.group} mailing list. To confirm this subscription, reply to this email or click on this link: {subscribe.url}',1,1),(4,'Welcome Message','Welcome','Your Subscription has been Activated','Welcome. Your subscription to the {welcome.group} mailing list has been activated.','Welcome. Your subscription to the {welcome.group} mailing list has been activated.',1,1),(5,'Unsubscribe Message','Unsubscribe','Un-subscribe Confirmation','You have been un-subscribed from the following groups: {unsubscribe.group}. You can re-subscribe by mailing {action.resubscribe} or clicking <a href=\"{action.resubscribeUrl}\">here</a>.','You have been un-subscribed from the following groups: {unsubscribe.group}. You can re-subscribe by mailing {action.resubscribe} or clicking {action.resubscribeUrl}',1,1),(6,'Resubscribe Message','Resubscribe','Re-subscribe Confirmation','You have been re-subscribed to the following groups: {resubscribe.group}. You can un-subscribe by mailing {action.unsubscribe} or clicking <a href=\"{action.unsubscribeUrl}\">here</a>.','You have been re-subscribed to the following groups: {resubscribe.group}. You can un-subscribe by mailing {action.unsubscribe} or clicking {action.unsubscribeUrl}',1,1),(7,'Opt-out Message','OptOut','Opt-out Confirmation','Your email address has been removed from {domain.name} mailing lists.','Your email address has been removed from {domain.name} mailing lists.',1,1),(8,'Auto-responder','Reply','Please Send Inquiries to Our Contact Email Address','This is an automated reply from an un-attended mailbox. Please send any inquiries to the contact email address listed on our web-site.','This is an automated reply from an un-attended mailbox. Please send any inquiries to the contact email address listed on our web-site.',1,1); +INSERT INTO `civicrm_mailing_component` (`id`, `name`, `component_type`, `subject`, `body_html`, `body_text`, `is_default`, `is_active`) VALUES + (1,'Mailing Header','Header','Descriptive Title for this Header','Sample Header for HTML formatted content.','Sample Header for TEXT formatted content.',1,1), + (2,'Mailing Footer','Footer','Descriptive Title for this Footer.','Sample Footer for HTML formatted content<br/><a href=\"{action.optOutUrl}\">Unsubscribe</a> <br/> {domain.address}','to unsubscribe: {action.optOutUrl}\n{domain.address}',1,1), + (3,'Subscribe Message','Subscribe','Subscription Confirmation Request','You have a pending subscription to the {subscribe.group} mailing list. To confirm this subscription, reply to this email or click <a href=\"{subscribe.url}\">here</a>.','You have a pending subscription to the {subscribe.group} mailing list. To confirm this subscription, reply to this email or click on this link: {subscribe.url}',1,1), + (4,'Welcome Message','Welcome','Your Subscription has been Activated','Welcome. Your subscription to the {welcome.group} mailing list has been activated.','Welcome. Your subscription to the {welcome.group} mailing list has been activated.',1,1), + (5,'Unsubscribe Message','Unsubscribe','Un-subscribe Confirmation','You have been un-subscribed from the following groups: {unsubscribe.group}. You can re-subscribe by mailing {action.resubscribe} or clicking <a href=\"{action.resubscribeUrl}\">here</a>.','You have been un-subscribed from the following groups: {unsubscribe.group}. You can re-subscribe by mailing {action.resubscribe} or clicking {action.resubscribeUrl}',1,1), + (6,'Resubscribe Message','Resubscribe','Re-subscribe Confirmation','You have been re-subscribed to the following groups: {resubscribe.group}. You can un-subscribe by mailing {action.unsubscribe} or clicking <a href=\"{action.unsubscribeUrl}\">here</a>.','You have been re-subscribed to the following groups: {resubscribe.group}. You can un-subscribe by mailing {action.unsubscribe} or clicking {action.unsubscribeUrl}',1,1), + (7,'Opt-out Message','OptOut','Opt-out Confirmation','Your email address has been removed from {domain.name} mailing lists.','Your email address has been removed from {domain.name} mailing lists.',1,1), + (8,'Auto-responder','Reply','Please Send Inquiries to Our Contact Email Address','This is an automated reply from an un-attended mailbox. Please send any inquiries to the contact email address listed on our web-site.','This is an automated reply from an un-attended mailbox. Please send any inquiries to the contact email address listed on our web-site.',1,1); /*!40000 ALTER TABLE `civicrm_mailing_component` ENABLE KEYS */; UNLOCK TABLES; @@ -897,7 +4476,37 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership` WRITE; /*!40000 ALTER TABLE `civicrm_membership` DISABLE KEYS */; -INSERT INTO `civicrm_membership` (`id`, `contact_id`, `membership_type_id`, `join_date`, `start_date`, `end_date`, `source`, `status_id`, `is_override`, `status_override_end_date`, `owner_membership_id`, `max_related`, `is_test`, `is_pay_later`, `contribution_recur_id`, `campaign_id`) VALUES (1,33,1,'2021-01-12','2021-01-12','2023-01-11','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,66,2,'2021-01-11','2021-01-11','2022-01-10','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,38,1,'2021-01-10','2021-01-10','2023-01-09','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,24,2,'2021-01-09','2021-01-09','2022-01-08','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,98,2,'2020-01-08','2020-01-08','2021-01-07','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,73,2,'2021-01-07','2021-01-07','2022-01-06','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,200,1,'2021-01-06','2021-01-06','2023-01-05','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,102,2,'2021-01-05','2021-01-05','2022-01-04','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,52,1,'2021-01-04','2021-01-04','2023-01-03','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,85,2,'2020-01-03','2020-01-03','2021-01-02','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,118,3,'2021-01-02','2021-01-02',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,12,2,'2021-01-01','2021-01-01','2021-12-31','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,136,1,'2020-12-31','2020-12-31','2022-12-30','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,175,2,'2020-12-30','2020-12-30','2021-12-29','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,199,1,'2018-09-22','2018-09-22','2020-09-21','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,16,2,'2020-12-28','2020-12-28','2021-12-27','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,173,1,'2020-12-27','2020-12-27','2022-12-26','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,61,2,'2020-12-26','2020-12-26','2021-12-25','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,69,1,'2020-12-25','2020-12-25','2022-12-24','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,122,2,'2019-12-24','2019-12-24','2020-12-23','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,137,1,'2020-12-23','2020-12-23','2022-12-22','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,188,3,'2020-12-22','2020-12-22',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,138,1,'2020-12-21','2020-12-21','2022-12-20','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,15,2,'2020-12-20','2020-12-20','2021-12-19','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,190,2,'2019-12-19','2019-12-19','2020-12-18','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,109,2,'2020-12-18','2020-12-18','2021-12-17','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,127,1,'2020-12-17','2020-12-17','2022-12-16','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,124,2,'2020-12-16','2020-12-16','2021-12-15','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,25,1,'2020-12-15','2020-12-15','2022-12-14','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,101,1,'2018-05-25','2018-05-25','2020-05-24','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL); +INSERT INTO `civicrm_membership` (`id`, `contact_id`, `membership_type_id`, `join_date`, `start_date`, `end_date`, `source`, `status_id`, `is_override`, `status_override_end_date`, `owner_membership_id`, `max_related`, `is_test`, `is_pay_later`, `contribution_recur_id`, `campaign_id`) VALUES + (1,15,1,'2021-06-11','2021-06-11','2023-06-10','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (2,145,2,'2021-06-10','2021-06-10','2022-06-09','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (3,58,1,'2021-06-09','2021-06-09','2023-06-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (4,92,2,'2021-06-08','2021-06-08','2022-06-07','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (5,154,2,'2020-06-07','2020-06-07','2021-06-06','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (6,123,2,'2021-06-06','2021-06-06','2022-06-05','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (7,5,1,'2021-06-05','2021-06-05','2023-06-04','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (8,158,2,'2021-06-04','2021-06-04','2022-06-03','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (9,136,1,'2021-06-03','2021-06-03','2023-06-02','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (10,191,1,'2019-03-31','2019-03-31','2021-03-30','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (11,89,3,'2021-06-01','2021-06-01',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (12,165,2,'2021-05-31','2021-05-31','2022-05-30','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (13,42,1,'2021-05-30','2021-05-30','2023-05-29','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (14,76,2,'2021-05-29','2021-05-29','2022-05-28','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (15,124,2,'2020-05-28','2020-05-28','2021-05-27','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (16,104,2,'2021-05-27','2021-05-27','2022-05-26','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (17,7,1,'2021-05-26','2021-05-26','2023-05-25','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (18,170,2,'2021-05-25','2021-05-25','2022-05-24','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (19,129,1,'2021-05-24','2021-05-24','2023-05-23','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (20,27,2,'2020-05-23','2020-05-23','2021-05-22','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (21,131,1,'2021-05-22','2021-05-22','2023-05-21','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (22,103,3,'2021-05-21','2021-05-21',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (23,185,1,'2021-05-20','2021-05-20','2023-05-19','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (24,75,2,'2021-05-19','2021-05-19','2022-05-18','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (25,33,1,'2018-12-01','2018-12-01','2020-11-30','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (26,96,2,'2021-05-17','2021-05-17','2022-05-16','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (27,57,1,'2021-05-16','2021-05-16','2023-05-15','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (28,64,2,'2021-05-15','2021-05-15','2022-05-14','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (29,196,1,'2021-05-14','2021-05-14','2023-05-13','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (30,46,2,'2020-05-13','2020-05-13','2021-05-12','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -907,7 +4516,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_block` WRITE; /*!40000 ALTER TABLE `civicrm_membership_block` DISABLE KEYS */; -INSERT INTO `civicrm_membership_block` (`id`, `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 (1,'civicrm_contribution_page',2,'a:2:{i:1;i:0;i:2;i:0;}',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_membership_block` (`id`, `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 + (1,'civicrm_contribution_page',2,'a:2:{i:1;i:0;i:2;i:0;}',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); /*!40000 ALTER TABLE `civicrm_membership_block` ENABLE KEYS */; UNLOCK TABLES; @@ -917,7 +4527,37 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_log` WRITE; /*!40000 ALTER TABLE `civicrm_membership_log` DISABLE KEYS */; -INSERT INTO `civicrm_membership_log` (`id`, `membership_id`, `status_id`, `start_date`, `end_date`, `modified_id`, `modified_date`, `membership_type_id`, `max_related`) VALUES (1,12,1,'2021-01-01','2021-12-31',12,'2021-01-12',2,NULL),(2,24,1,'2020-12-20','2021-12-19',15,'2021-01-12',2,NULL),(3,16,1,'2020-12-28','2021-12-27',16,'2021-01-12',2,NULL),(4,4,1,'2021-01-09','2022-01-08',24,'2021-01-12',2,NULL),(5,29,1,'2020-12-15','2022-12-14',25,'2021-01-12',1,NULL),(6,1,1,'2021-01-12','2023-01-11',33,'2021-01-12',1,NULL),(7,3,1,'2021-01-10','2023-01-09',38,'2021-01-12',1,NULL),(8,9,1,'2021-01-04','2023-01-03',52,'2021-01-12',1,NULL),(9,18,1,'2020-12-26','2021-12-25',61,'2021-01-12',2,NULL),(10,2,1,'2021-01-11','2022-01-10',66,'2021-01-12',2,NULL),(11,19,1,'2020-12-25','2022-12-24',69,'2021-01-12',1,NULL),(12,6,1,'2021-01-07','2022-01-06',73,'2021-01-12',2,NULL),(13,10,4,'2020-01-03','2021-01-02',85,'2021-01-12',2,NULL),(14,5,4,'2020-01-08','2021-01-07',98,'2021-01-12',2,NULL),(15,30,3,'2018-05-25','2020-05-24',101,'2021-01-12',1,NULL),(16,8,1,'2021-01-05','2022-01-04',102,'2021-01-12',2,NULL),(17,26,1,'2020-12-18','2021-12-17',109,'2021-01-12',2,NULL),(18,11,1,'2021-01-02',NULL,118,'2021-01-12',3,NULL),(19,20,4,'2019-12-24','2020-12-23',122,'2021-01-12',2,NULL),(20,28,1,'2020-12-16','2021-12-15',124,'2021-01-12',2,NULL),(21,27,1,'2020-12-17','2022-12-16',127,'2021-01-12',1,NULL),(22,13,1,'2020-12-31','2022-12-30',136,'2021-01-12',1,NULL),(23,21,1,'2020-12-23','2022-12-22',137,'2021-01-12',1,NULL),(24,23,1,'2020-12-21','2022-12-20',138,'2021-01-12',1,NULL),(25,17,1,'2020-12-27','2022-12-26',173,'2021-01-12',1,NULL),(26,14,1,'2020-12-30','2021-12-29',175,'2021-01-12',2,NULL),(27,22,1,'2020-12-22',NULL,188,'2021-01-12',3,NULL),(28,25,4,'2019-12-19','2020-12-18',190,'2021-01-12',2,NULL),(29,15,3,'2018-09-22','2020-09-21',199,'2021-01-12',1,NULL),(30,7,1,'2021-01-06','2023-01-05',200,'2021-01-12',1,NULL); +INSERT INTO `civicrm_membership_log` (`id`, `membership_id`, `status_id`, `start_date`, `end_date`, `modified_id`, `modified_date`, `membership_type_id`, `max_related`) VALUES + (1,7,1,'2021-06-05','2023-06-04',5,'2021-06-11',1,NULL), + (2,17,1,'2021-05-26','2023-05-25',7,'2021-06-11',1,NULL), + (3,1,1,'2021-06-11','2023-06-10',15,'2021-06-11',1,NULL), + (4,20,4,'2020-05-23','2021-05-22',27,'2021-06-11',2,NULL), + (5,25,3,'2018-12-01','2020-11-30',33,'2021-06-11',1,NULL), + (6,13,1,'2021-05-30','2023-05-29',42,'2021-06-11',1,NULL), + (7,30,4,'2020-05-13','2021-05-12',46,'2021-06-11',2,NULL), + (8,27,1,'2021-05-16','2023-05-15',57,'2021-06-11',1,NULL), + (9,3,1,'2021-06-09','2023-06-08',58,'2021-06-11',1,NULL), + (10,28,1,'2021-05-15','2022-05-14',64,'2021-06-11',2,NULL), + (11,24,1,'2021-05-19','2022-05-18',75,'2021-06-11',2,NULL), + (12,14,1,'2021-05-29','2022-05-28',76,'2021-06-11',2,NULL), + (13,11,1,'2021-06-01',NULL,89,'2021-06-11',3,NULL), + (14,4,1,'2021-06-08','2022-06-07',92,'2021-06-11',2,NULL), + (15,26,1,'2021-05-17','2022-05-16',96,'2021-06-11',2,NULL), + (16,22,1,'2021-05-21',NULL,103,'2021-06-11',3,NULL), + (17,16,1,'2021-05-27','2022-05-26',104,'2021-06-11',2,NULL), + (18,6,1,'2021-06-06','2022-06-05',123,'2021-06-11',2,NULL), + (19,15,4,'2020-05-28','2021-05-27',124,'2021-06-11',2,NULL), + (20,19,1,'2021-05-24','2023-05-23',129,'2021-06-11',1,NULL), + (21,21,1,'2021-05-22','2023-05-21',131,'2021-06-11',1,NULL), + (22,9,1,'2021-06-03','2023-06-02',136,'2021-06-11',1,NULL), + (23,2,1,'2021-06-10','2022-06-09',145,'2021-06-11',2,NULL), + (24,5,4,'2020-06-07','2021-06-06',154,'2021-06-11',2,NULL), + (25,8,1,'2021-06-04','2022-06-03',158,'2021-06-11',2,NULL), + (26,12,1,'2021-05-31','2022-05-30',165,'2021-06-11',2,NULL), + (27,18,1,'2021-05-25','2022-05-24',170,'2021-06-11',2,NULL), + (28,23,1,'2021-05-20','2023-05-19',185,'2021-06-11',1,NULL), + (29,10,3,'2019-03-31','2021-03-30',191,'2021-06-11',1,NULL), + (30,29,1,'2021-05-14','2023-05-13',196,'2021-06-11',1,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -927,7 +4567,37 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_payment` WRITE; /*!40000 ALTER TABLE `civicrm_membership_payment` DISABLE KEYS */; -INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES (1,1,14),(2,3,15),(3,7,16),(4,9,17),(5,13,18),(6,15,19),(7,17,20),(8,19,21),(9,21,22),(10,23,23),(11,27,24),(12,29,25),(13,30,26),(14,2,27),(15,4,28),(16,5,29),(17,6,30),(18,8,31),(19,10,32),(20,12,33),(21,14,34),(22,16,35),(23,18,36),(24,20,37),(25,24,38),(26,25,39),(27,26,40),(28,28,41),(29,11,42),(30,22,43); +INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES + (1,1,14), + (2,2,15), + (3,3,16), + (4,4,17), + (5,5,18), + (6,6,19), + (7,7,20), + (8,8,21), + (9,9,22), + (10,10,23), + (11,11,24), + (12,12,25), + (13,13,26), + (14,14,27), + (15,15,28), + (16,16,29), + (17,17,30), + (18,18,31), + (19,19,32), + (20,20,33), + (21,21,34), + (22,22,35), + (23,23,36), + (24,24,37), + (25,25,38), + (26,26,39), + (27,27,40), + (28,28,41), + (29,29,42), + (30,30,43); /*!40000 ALTER TABLE `civicrm_membership_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -937,7 +4607,14 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_status` WRITE; /*!40000 ALTER TABLE `civicrm_membership_status` DISABLE KEYS */; -INSERT INTO `civicrm_membership_status` (`id`, `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 (1,'New','New','join_date',NULL,NULL,'join_date','month',3,1,0,1,0,1,0),(2,'Current','Current','start_date',NULL,NULL,'end_date',NULL,NULL,1,0,2,1,1,0),(3,'Grace','Grace','end_date',NULL,NULL,'end_date','month',1,1,0,3,0,1,0),(4,'Expired','Expired','end_date','month',1,NULL,NULL,NULL,0,0,4,0,1,0),(5,'Pending','Pending','join_date',NULL,NULL,'join_date',NULL,NULL,0,0,5,0,1,1),(6,'Cancelled','Cancelled','join_date',NULL,NULL,'join_date',NULL,NULL,0,0,6,0,1,1),(7,'Deceased','Deceased',NULL,NULL,NULL,NULL,NULL,NULL,0,1,7,0,1,1); +INSERT INTO `civicrm_membership_status` (`id`, `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 + (1,'New','New','join_date',NULL,NULL,'join_date','month',3,1,0,1,0,1,0), + (2,'Current','Current','start_date',NULL,NULL,'end_date',NULL,NULL,1,0,2,1,1,0), + (3,'Grace','Grace','end_date',NULL,NULL,'end_date','month',1,1,0,3,0,1,0), + (4,'Expired','Expired','end_date','month',1,NULL,NULL,NULL,0,0,4,0,1,0), + (5,'Pending','Pending','join_date',NULL,NULL,'join_date',NULL,NULL,0,0,5,0,1,1), + (6,'Cancelled','Cancelled','join_date',NULL,NULL,'join_date',NULL,NULL,0,0,6,0,1,1), + (7,'Deceased','Deceased',NULL,NULL,NULL,NULL,NULL,NULL,0,1,7,0,1,1); /*!40000 ALTER TABLE `civicrm_membership_status` ENABLE KEYS */; UNLOCK TABLES; @@ -947,7 +4624,10 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_type` WRITE; /*!40000 ALTER TABLE `civicrm_membership_type` DISABLE KEYS */; -INSERT INTO `civicrm_membership_type` (`id`, `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`, `max_related`, `visibility`, `weight`, `receipt_text_signup`, `receipt_text_renewal`, `auto_renew`, `is_active`) VALUES (1,1,'General','Regular annual membership.',1,2,100.000000000,'year',2,'rolling',NULL,NULL,'7','b_a',NULL,'Public',1,NULL,NULL,0,1),(2,1,'Student','Discount membership for full-time students.',1,2,50.000000000,'year',1,'rolling',NULL,NULL,NULL,NULL,NULL,'Public',2,NULL,NULL,0,1),(3,1,'Lifetime','Lifetime membership.',1,2,1200.000000000,'lifetime',1,'rolling',NULL,NULL,'7','b_a',NULL,'Admin',3,NULL,NULL,0,1); +INSERT INTO `civicrm_membership_type` (`id`, `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`, `max_related`, `visibility`, `weight`, `receipt_text_signup`, `receipt_text_renewal`, `auto_renew`, `is_active`) VALUES + (1,1,'General','Regular annual membership.',1,2,100.000000000,'year',2,'rolling',NULL,NULL,'7','b_a',NULL,'Public',1,NULL,NULL,0,1), + (2,1,'Student','Discount membership for full-time students.',1,2,50.000000000,'year',1,'rolling',NULL,NULL,NULL,NULL,NULL,'Public',2,NULL,NULL,0,1), + (3,1,'Lifetime','Lifetime membership.',1,2,1200.000000000,'lifetime',1,'rolling',NULL,NULL,'7','b_a',NULL,'Admin',3,NULL,NULL,0,1); /*!40000 ALTER TABLE `civicrm_membership_type` ENABLE KEYS */; UNLOCK TABLES; @@ -957,7 +4637,452 @@ UNLOCK TABLES; LOCK TABLES `civicrm_menu` WRITE; /*!40000 ALTER TABLE `civicrm_menu` DISABLE KEYS */; -INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title`, `access_callback`, `access_arguments`, `page_callback`, `page_arguments`, `breadcrumb`, `return_url`, `return_url_args`, `component_id`, `is_active`, `is_public`, `is_exposed`, `is_ssl`, `weight`, `type`, `page_type`, `skipBreadcrumb`, `module_data`) VALUES (1,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(2,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(3,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(4,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(5,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(6,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(7,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(8,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(9,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(10,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(11,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(12,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(13,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(14,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(15,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(16,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(17,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(18,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,362,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(19,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(20,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(21,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(22,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(23,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(24,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(25,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(26,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(27,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(28,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(29,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(30,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,9999,1,1,NULL,'a:0:{}'),(31,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(32,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(33,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(34,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(35,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(36,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(37,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(38,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(39,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(40,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(41,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(42,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(43,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(44,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(45,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(46,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(47,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(48,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(49,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(50,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(51,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(52,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(53,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(54,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(55,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(56,1,'civicrm/ajax/l10n-js',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Resources\";i:1;s:20:\"outputLocalizationJS\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(57,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(58,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(59,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(60,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(61,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(62,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(63,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(64,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(65,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(66,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(67,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(68,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(69,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(70,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(71,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,400,1,1,NULL,'a:0:{}'),(72,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,410,1,1,NULL,'a:0:{}'),(73,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'),(74,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'),(75,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(76,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(77,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(78,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(79,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(80,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(81,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,11,1,0,0,'a:0:{}'),(82,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(83,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(84,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(85,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(86,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(87,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,21,1,0,0,'a:0:{}'),(88,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,22,1,0,NULL,'a:0:{}'),(89,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,23,1,0,NULL,'a:0:{}'),(90,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,24,1,0,NULL,'a:0:{}'),(91,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,25,1,0,NULL,'a:0:{}'),(92,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,0,NULL,'a:0:{}'),(93,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(94,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,35,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(95,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(96,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,45,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(97,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(98,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,55,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(99,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(100,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,65,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(101,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(102,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(103,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(104,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(105,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,95,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(106,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(107,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(108,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(109,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(110,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(111,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(112,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(113,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,262,1,0,NULL,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'),(114,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(115,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(116,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(117,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(118,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(119,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(120,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(121,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(122,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(123,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(124,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(125,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(126,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'),(127,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'),(128,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'),(129,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'),(130,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(131,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(132,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(133,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(134,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(135,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(136,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(137,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(138,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(139,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(140,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(141,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(142,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(143,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(144,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(145,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(146,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,130,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(147,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(148,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(149,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(150,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(151,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'),(152,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1370,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(153,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1380,1,0,NULL,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'),(154,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'),(155,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'),(156,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,9000,1,1,NULL,'a:0:{}'),(157,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(158,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(159,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(160,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'),(161,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'),(162,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,0,'a:0:{}'),(163,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(164,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(165,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(166,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,500,1,0,NULL,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(167,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'),(168,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(169,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,399,1,0,NULL,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(170,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(171,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(172,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(173,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,NULL,'a:0:{}'),(174,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'),(175,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(176,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(177,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(178,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,12,1,1,NULL,'a:0:{}'),(179,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,14,1,1,NULL,'a:0:{}'),(180,1,'civicrm/contact/search/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(181,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,16,1,1,NULL,'a:0:{}'),(182,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(183,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(184,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(185,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(186,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(187,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(188,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(189,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(190,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(191,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(192,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(193,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(194,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(195,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(196,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(197,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(198,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(199,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(200,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(201,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(202,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(203,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(204,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(205,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(206,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(207,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(208,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(209,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(210,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(211,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(212,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(213,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(214,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(215,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(216,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(217,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(218,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(219,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(220,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(221,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(222,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(223,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(224,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(225,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(226,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,105,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'),(227,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(228,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(229,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(230,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,110,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'),(231,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(232,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(233,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(234,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(235,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(236,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(237,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(238,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(239,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(240,1,'civicrm/group',NULL,'Manage Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Page_Group\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,30,1,1,NULL,'a:0:{}'),(241,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'),(242,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(243,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(244,1,'civicrm/tag',NULL,'Tags (Categories)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,25,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(245,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(246,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(247,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(248,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(249,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,540,1,1,NULL,'a:0:{}'),(250,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(251,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(252,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,800,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'),(253,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'),(254,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(255,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(256,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(257,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(258,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(259,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(260,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(261,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,375,1,0,NULL,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(262,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(263,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(264,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(265,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,398,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(266,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(267,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,810,1,1,NULL,'a:0:{}'),(268,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,820,1,1,NULL,'a:0:{}'),(269,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(270,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,910,1,0,NULL,'a:0:{}'),(271,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'),(272,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,920,1,0,NULL,'a:0:{}'),(273,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'),(274,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,940,1,0,NULL,'a:0:{}'),(275,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'),(276,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,960,1,0,NULL,'a:0:{}'),(277,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'),(278,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,830,1,0,NULL,'a:0:{}'),(279,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,840,1,1,NULL,'a:0:{}'),(280,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,850,1,1,NULL,'a:0:{}'),(281,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,880,1,1,NULL,'a:0:{}'),(282,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,890,1,1,NULL,'a:0:{}'),(283,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'),(284,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(285,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(286,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(287,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,450,1,0,NULL,'a:0:{}'),(288,1,'civicrm/contribute/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(289,1,'civicrm/contribute',NULL,'CiviContribute Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,500,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(290,1,'civicrm/contribute/add','action=add','New Contribution','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(291,1,'civicrm/contribute/chart',NULL,'Contribution Summary - Chart View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(292,1,'civicrm/contribute/transact',NULL,'CiviContribute','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Controller_Contribution\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,1,0,1,0,NULL,'a:0:{}'),(293,1,'civicrm/admin/contribute',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,360,1,0,NULL,'a:2:{s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(294,1,'civicrm/admin/contribute/settings',NULL,'Title and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_Settings\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:0:{}'),(295,1,'civicrm/admin/contribute/amount',NULL,'Contribution Amounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Amount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:0:{}'),(296,1,'civicrm/admin/contribute/membership',NULL,'Membership Section','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Member_Form_MembershipBlock\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:0:{}'),(297,1,'civicrm/admin/contribute/custom',NULL,'Include Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Custom\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'),(298,1,'civicrm/admin/contribute/thankyou',NULL,'Thank-you and Receipting','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_ThankYou\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'),(299,1,'civicrm/admin/contribute/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Friend_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,440,1,0,NULL,'a:0:{}'),(300,1,'civicrm/admin/contribute/widget',NULL,'Configure Widget','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Widget\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,460,1,0,NULL,'a:0:{}'),(301,1,'civicrm/admin/contribute/premium',NULL,'Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:44:\"CRM_Contribute_Form_ContributionPage_Premium\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,470,1,0,NULL,'a:0:{}'),(302,1,'civicrm/admin/contribute/addProductToPage',NULL,'Add Products to This Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:47:\"CRM_Contribute_Form_ContributionPage_AddProduct\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,480,1,0,NULL,'a:0:{}'),(303,1,'civicrm/admin/contribute/add','action=add','New Contribution Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Contribute_Controller_ContributionPage\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(304,1,'civicrm/admin/contribute/managePremiums',NULL,'Manage Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Page_ManagePremiums\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,365,1,0,NULL,'a:2:{s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(305,1,'civicrm/admin/financial/financialType',NULL,'Financial Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Financial_Page_FinancialType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,580,1,0,NULL,'a:2:{s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(306,1,'civicrm/payment','action=add','New Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Form_AdditionalPayment\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(307,1,'civicrm/admin/financial/financialAccount',NULL,'Financial Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_FinancialAccount\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(308,1,'civicrm/admin/options/payment_instrument',NULL,'Payment Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(309,1,'civicrm/admin/options/accept_creditcard',NULL,'Accepted Credit Cards','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(310,1,'civicrm/admin/options/soft_credit_type',NULL,'Soft Credit Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(311,1,'civicrm/contact/view/contribution',NULL,'Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(312,1,'civicrm/contact/view/contributionrecur',NULL,'Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:37:\"CRM_Contribute_Page_ContributionRecur\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(313,1,'civicrm/contact/view/contribution/additionalinfo',NULL,'Additional Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:13:\"Contributions\";s:3:\"url\";s:42:\"/civicrm/contact/view/contribution?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(314,1,'civicrm/contribute/search',NULL,'Find Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,510,1,1,NULL,'a:0:{}'),(315,1,'civicrm/contribute/searchBatch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Controller_SearchBatch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,588,1,1,NULL,'a:0:{}'),(316,1,'civicrm/contribute/import',NULL,'Import Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"edit contributions\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,520,1,1,NULL,'a:0:{}'),(317,1,'civicrm/contribute/manage',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,530,1,1,NULL,'a:0:{}'),(318,1,'civicrm/contribute/additionalinfo',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(319,1,'civicrm/ajax/permlocation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:23:\"getPermissionedLocation\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(320,1,'civicrm/contribute/unsubscribe',NULL,'Cancel Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_CancelSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(321,1,'civicrm/contribute/onbehalf',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_Contribution_OnBehalfOf\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(322,1,'civicrm/contribute/updatebilling',NULL,'Update Billing Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contribute_Form_UpdateBilling\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(323,1,'civicrm/contribute/updaterecur',NULL,'Update Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_UpdateSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(324,1,'civicrm/contribute/subscriptionstatus',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Page_SubscriptionStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(325,1,'civicrm/admin/financial/financialType/accounts',NULL,'Financial Type Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:39:\"CRM_Financial_Page_FinancialTypeAccount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Financial Types\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,581,1,0,NULL,'a:0:{}'),(326,1,'civicrm/financial/batch',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:33:\"CRM_Financial_Page_FinancialBatch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,585,1,0,NULL,'a:0:{}'),(327,1,'civicrm/financial/financialbatches',NULL,'Accounting Batches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Financial_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,586,1,0,NULL,'a:0:{}'),(328,1,'civicrm/batchtransaction',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_BatchTransaction\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,600,1,0,NULL,'a:0:{}'),(329,1,'civicrm/financial/batch/export',NULL,'Accounting Batch Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:25:\"CRM_Financial_Form_Export\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Accounting Batch\";s:3:\"url\";s:32:\"/civicrm/financial/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,0,NULL,'a:0:{}'),(330,1,'civicrm/payment/view','action=view','View Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contribute_Page_PaymentInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(331,1,'civicrm/admin/setting/preferences/contribute',NULL,'CiviContribute Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Admin_Form_Preferences_Contribute\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(332,1,'civicrm/contribute/invoice',NULL,'PDF Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Contribute_Form_Task_Invoice\";i:1;s:11:\"getPrintPDF\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,620,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(333,1,'civicrm/contribute/invoice/email',NULL,'Email Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Form_Task_Invoice\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"PDF Invoice\";s:3:\"url\";s:35:\"/civicrm/contribute/invoice?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,630,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(334,1,'civicrm/ajax/softcontributionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:24:\"CRM_Contribute_Page_AJAX\";i:1;s:23:\"getSoftContributionRows\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(335,1,'civicrm/contribute/contributionrecur-payments',NULL,'Recurring Contribution\'s Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Page_ContributionRecurPayments\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(336,1,'civicrm/membership/recurring-contributions',NULL,'Membership Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Member_Page_RecurringContributions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(337,1,'civicrm/contribute/widget',NULL,'CiviContribute','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contribute_Page_Widget\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(338,1,'civicrm/member',NULL,'CiviMember Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:25:\"CRM_Member_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,700,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'),(339,1,'civicrm/member/add','action=add','New Membership','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'),(340,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(341,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(342,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'),(343,1,'civicrm/membership/view',NULL,'Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipView\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,390,1,0,NULL,'a:0:{}'),(344,1,'civicrm/member/search',NULL,'Find Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,710,1,1,NULL,'a:0:{}'),(345,1,'civicrm/member/import',NULL,'Import Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:16:\"edit memberships\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,720,1,1,NULL,'a:0:{}'),(346,1,'civicrm/ajax/memType',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Member_Page_AJAX\";i:1;s:21:\"getMemberTypeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(347,1,'civicrm/admin/member/membershipType/add',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:16:\"Membership Types\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(348,1,'civicrm/mailing',NULL,'CiviMail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,600,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'),(349,1,'civicrm/admin/mail',NULL,'Mailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Mail\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(350,1,'civicrm/admin/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(351,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(352,1,'civicrm/admin/mailSettings',NULL,'Mail Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_MailSettings\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(353,1,'civicrm/mailing/send',NULL,'New Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:27:\"CRM_Mailing_Controller_Send\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'),(354,1,'civicrm/mailing/browse/scheduled','scheduled=true','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:5:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";i:4;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'),(355,1,'civicrm/mailing/browse/unscheduled','scheduled=false','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'),(356,1,'civicrm/mailing/browse/archived',NULL,'Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,625,1,1,NULL,'a:0:{}'),(357,1,'civicrm/mailing/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,630,1,1,NULL,'a:0:{}'),(358,1,'civicrm/mailing/unsubscribe',NULL,'Unsubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Form_Unsubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,640,1,0,NULL,'a:0:{}'),(359,1,'civicrm/mailing/resubscribe',NULL,'Resubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Page_Resubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,645,1,0,NULL,'a:0:{}'),(360,1,'civicrm/mailing/optout',NULL,'Opt-out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Form_Optout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,650,1,0,NULL,'a:0:{}'),(361,1,'civicrm/mailing/confirm',NULL,'Confirm','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:24:\"CRM_Mailing_Page_Confirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'),(362,1,'civicrm/mailing/subscribe',NULL,'Subscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Form_Subscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'),(363,1,'civicrm/mailing/preview',NULL,'Preview Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Page_Preview\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,670,1,0,NULL,'a:0:{}'),(364,1,'civicrm/mailing/report','mid=%%mid%%','Mailing Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,680,1,0,NULL,'a:0:{}'),(365,1,'civicrm/mailing/forward',NULL,'Forward Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:31:\"CRM_Mailing_Form_ForwardMailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,685,1,0,NULL,'a:0:{}'),(366,1,'civicrm/mailing/queue',NULL,'Sending Mail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,690,1,0,NULL,'a:0:{}'),(367,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'),(368,1,'civicrm/ajax/template',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:8:\"template\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(369,1,'civicrm/mailing/view',NULL,'View Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:28:\"view public CiviMail content\";i:1;s:15:\"access CiviMail\";i:2;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:21:\"CRM_Mailing_Page_View\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,800,1,0,NULL,'a:0:{}'),(370,1,'civicrm/mailing/approve',NULL,'Approve Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Form_Approve\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,850,1,0,NULL,'a:0:{}'),(371,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(372,1,'civicrm/ajax/contactmailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:18:\"getContactMailings\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(373,1,'civicrm/ajax/setupMailAccount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:5:\"setup\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(374,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(375,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(376,1,'civicrm/grant',NULL,'CiviGrant Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1000,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'),(377,1,'civicrm/grant/info',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(378,1,'civicrm/grant/search',NULL,'Find Grants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:27:\"CRM_Grant_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1010,1,1,NULL,'a:0:{}'),(379,1,'civicrm/grant/add','action=add','New Grant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'),(380,1,'civicrm/contact/view/grant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(381,1,'civicrm/pledge',NULL,'CiviPledge Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:25:\"CRM_Pledge_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,550,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'),(382,1,'civicrm/pledge/search',NULL,'Find Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:28:\"CRM_Pledge_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,560,1,1,NULL,'a:0:{}'),(383,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'),(384,1,'civicrm/pledge/add','action=add','New Pledge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'),(385,1,'civicrm/pledge/payment',NULL,'Pledge Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:23:\"CRM_Pledge_Page_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,580,1,0,NULL,'a:0:{}'),(386,1,'civicrm/ajax/pledgeAmount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviPledge\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Pledge_Page_AJAX\";i:1;s:17:\"getPledgeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(387,1,'civicrm/case',NULL,'CiviCase Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Case_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,900,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'),(388,1,'civicrm/case/add',NULL,'Open Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Case_Form_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'),(389,1,'civicrm/case/search',NULL,'Find Cases','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,910,1,1,NULL,'a:0:{}'),(390,1,'civicrm/case/activity',NULL,'Case Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Case_Form_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(391,1,'civicrm/case/report',NULL,'Case Activity Audit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:20:\"CRM_Case_Form_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(392,1,'civicrm/case/cd/edit',NULL,'Case Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(393,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(394,1,'civicrm/case/activity/view',NULL,'Activity View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Form_ActivityView\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Case Activity\";s:3:\"url\";s:30:\"/civicrm/case/activity?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(395,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(396,1,'civicrm/case/addToCase',NULL,'File on Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Case_Form_ActivityToCase\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(397,1,'civicrm/case/details',NULL,'Case Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Case_Page_CaseDetails\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(398,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(399,1,'civicrm/admin/options/case_type',NULL,'Case Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:24:\"url=civicrm/a/#/caseType\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(400,1,'civicrm/admin/options/redaction_rule',NULL,'Redaction Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(401,1,'civicrm/admin/options/case_status',NULL,'Case Statuses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(402,1,'civicrm/admin/options/encounter_medium',NULL,'Encounter Mediums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(403,1,'civicrm/case/report/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Case_XMLProcessor_Report\";i:1;s:15:\"printCaseReport\";}',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:19:\"Case Activity Audit\";s:3:\"url\";s:28:\"/civicrm/case/report?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(404,1,'civicrm/case/ajax/addclient',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:9:\"addClient\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(405,1,'civicrm/case/ajax/processtags',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"processCaseTags\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(406,1,'civicrm/case/ajax/details',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:11:\"CaseDetails\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(407,1,'civicrm/ajax/delcaserole',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"deleteCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(408,1,'civicrm/ajax/get-cases',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:8:\"getCases\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(409,1,'civicrm/report',NULL,'CiviReport','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:22:\"CRM_Report_Page_Report\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1200,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'),(410,1,'civicrm/report/list',NULL,'CiviCRM Reports','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(411,1,'civicrm/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1220,1,1,NULL,'a:0:{}'),(412,1,'civicrm/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1241,1,1,NULL,'a:0:{}'),(413,1,'civicrm/admin/report/register',NULL,'Register Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:30:\"Register the Report templates.\";}'),(414,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(415,1,'civicrm/admin/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(416,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(417,1,'civicrm/admin/report/list',NULL,'Reports Listing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(418,1,'civicrm/campaign',NULL,'Campaign Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(419,1,'civicrm/campaign/add',NULL,'New Campaign','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(420,1,'civicrm/survey/add',NULL,'New Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(421,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(422,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(423,1,'civicrm/admin/options/campaign_type',NULL,'Campaign Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,2,1,0,NULL,'a:3:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(424,1,'civicrm/admin/options/campaign_status',NULL,'Campaign Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,3,1,0,NULL,'a:3:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(425,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,4,1,0,NULL,'a:3:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(426,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(427,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(428,1,'civicrm/petition/add',NULL,'New Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(429,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(430,1,'civicrm/petition/browse',NULL,'View Petition Signatures','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Campaign_Page_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(431,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(432,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(433,1,'civicrm/campaign/registerInterview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(434,1,'civicrm/survey/configure/main',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(435,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(436,1,'civicrm/survey/configure/results',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(437,1,'civicrm/survey/delete',NULL,'Delete Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(438,1,'civicrm/ajax/event/add_participant_to_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:23:\"add_participant_to_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(439,1,'civicrm/ajax/event/remove_participant_from_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:28:\"remove_participant_from_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(440,1,'civicrm/event/add_to_cart',NULL,'Add Event To Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:29:\"CRM_Event_Cart_Page_AddToCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(441,1,'civicrm/event/cart_checkout',NULL,'Cart Checkout','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Controller_Checkout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(442,1,'civicrm/event/remove_from_cart',NULL,'Remove From Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Page_RemoveFromCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(443,1,'civicrm/event/view_cart',NULL,'View Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Cart_Page_ViewCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(444,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Tags (Categories)\";a:6:{s:5:\"title\";s:17:\"Tags (Categories)\";s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:2:\"id\";s:15:\"Tags_Categories\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:18:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:62:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";a:6:{s:5:\"title\";s:53:\"Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:2:\"id\";s:46:\"Misc_Undelete_PDFs_Limits_Logging_Captcha_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); +INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title`, `access_callback`, `access_arguments`, `page_callback`, `page_arguments`, `breadcrumb`, `return_url`, `return_url_args`, `component_id`, `is_active`, `is_public`, `is_exposed`, `is_ssl`, `weight`, `type`, `page_type`, `skipBreadcrumb`, `module_data`) VALUES + (1,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,400,1,1,NULL,'a:0:{}'), + (2,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,410,1,1,NULL,'a:0:{}'), + (3,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'), + (4,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'), + (5,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (6,1,'civicrm/group',NULL,'Manage Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Page_Group\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,30,1,1,NULL,'a:0:{}'), + (7,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'), + (8,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (9,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (10,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (11,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (12,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (13,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (14,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (15,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (16,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,NULL,'a:0:{}'), + (17,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'), + (18,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (19,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (20,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (21,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,12,1,1,NULL,'a:0:{}'), + (22,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,14,1,1,NULL,'a:0:{}'), + (23,1,'civicrm/contact/search/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (24,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,16,1,1,NULL,'a:0:{}'), + (25,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (26,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (27,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (28,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (29,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (30,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (31,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (32,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (33,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (34,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (35,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (36,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (37,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (38,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (39,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (40,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (41,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (42,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (43,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (44,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (45,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (46,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (47,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (48,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (49,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (50,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (51,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (52,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (53,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (54,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (55,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (56,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (57,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (58,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (59,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (60,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (61,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (62,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (63,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (64,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (65,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (66,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (67,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (68,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (69,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,105,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (70,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (71,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (72,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (73,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,110,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), + (74,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (75,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (76,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (77,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (78,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (79,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (80,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (81,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (82,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (83,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (84,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (85,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (86,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (87,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (88,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (89,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (90,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (91,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (92,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,9999,1,1,NULL,'a:0:{}'), + (93,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (94,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (95,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (96,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (97,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (98,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (99,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (100,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (101,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (102,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (103,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (104,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (105,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (106,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (107,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (108,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (109,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (110,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (111,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (112,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (113,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (114,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (115,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (116,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (117,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (118,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (119,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (120,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (121,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (122,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (123,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (124,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (125,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (126,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (127,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (128,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (129,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (130,1,'civicrm/tag',NULL,'Tags (Categories)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,25,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (131,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (132,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (133,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (134,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (135,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (136,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (137,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,362,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (138,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (139,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,11,1,0,0,'a:0:{}'), + (140,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (141,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (142,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (143,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (144,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (145,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,21,1,0,0,'a:0:{}'), + (146,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,22,1,0,NULL,'a:0:{}'), + (147,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,23,1,0,NULL,'a:0:{}'), + (148,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,24,1,0,NULL,'a:0:{}'), + (149,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,25,1,0,NULL,'a:0:{}'), + (150,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,0,NULL,'a:0:{}'), + (151,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (152,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,35,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (153,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (154,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,45,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (155,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (156,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,55,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (157,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (158,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,65,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (159,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (160,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (161,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (162,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (163,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,95,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (164,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (165,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (166,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (167,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (168,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (169,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (170,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (171,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,262,1,0,NULL,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), + (172,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (173,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (174,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (175,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (176,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (177,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (178,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (179,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (180,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (181,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (182,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (183,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (184,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), + (185,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (186,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), + (187,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (188,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (189,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (190,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (191,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (192,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (193,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (194,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (195,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (196,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (197,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (198,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (199,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (200,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (201,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (202,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (203,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (204,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,130,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (205,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (206,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (207,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (208,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (209,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), + (210,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1370,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (211,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1380,1,0,NULL,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (212,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), + (213,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), + (214,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,9000,1,1,NULL,'a:0:{}'), + (215,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (216,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (217,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (218,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), + (219,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'), + (220,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,0,'a:0:{}'), + (221,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (222,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (223,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (224,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,500,1,0,NULL,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (225,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'), + (226,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (227,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,399,1,0,NULL,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (228,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (229,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (230,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (231,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (232,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (233,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (234,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (235,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (236,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (237,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (238,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (239,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (240,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (241,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (242,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (243,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (244,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (245,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (246,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (247,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (248,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,800,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (249,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (250,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (251,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), + (252,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), + (253,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (254,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (255,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (256,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (257,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,375,1,0,NULL,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (258,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (259,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (260,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (261,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,398,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (262,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (263,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,810,1,1,NULL,'a:0:{}'), + (264,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,820,1,1,NULL,'a:0:{}'), + (265,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (266,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,910,1,0,NULL,'a:0:{}'), + (267,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'), + (268,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,920,1,0,NULL,'a:0:{}'), + (269,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'), + (270,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,940,1,0,NULL,'a:0:{}'), + (271,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'), + (272,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,960,1,0,NULL,'a:0:{}'), + (273,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'), + (274,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,830,1,0,NULL,'a:0:{}'), + (275,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,840,1,1,NULL,'a:0:{}'), + (276,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,850,1,1,NULL,'a:0:{}'), + (277,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,880,1,1,NULL,'a:0:{}'), + (278,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,890,1,1,NULL,'a:0:{}'), + (279,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'), + (280,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (281,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (282,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (283,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,540,1,1,NULL,'a:0:{}'), + (284,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (285,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (286,1,'civicrm/contribute',NULL,'CiviContribute Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,500,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (287,1,'civicrm/contribute/add','action=add','New Contribution','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (288,1,'civicrm/contribute/chart',NULL,'Contribution Summary - Chart View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (289,1,'civicrm/contribute/transact',NULL,'CiviContribute','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Controller_Contribution\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,1,0,1,0,NULL,'a:0:{}'), + (290,1,'civicrm/admin/contribute',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,360,1,0,NULL,'a:2:{s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (291,1,'civicrm/admin/contribute/settings',NULL,'Title and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_Settings\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:0:{}'), + (292,1,'civicrm/admin/contribute/amount',NULL,'Contribution Amounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Amount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:0:{}'), + (293,1,'civicrm/admin/contribute/membership',NULL,'Membership Section','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Member_Form_MembershipBlock\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:0:{}'), + (294,1,'civicrm/admin/contribute/custom',NULL,'Include Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Custom\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'), + (295,1,'civicrm/admin/contribute/thankyou',NULL,'Thank-you and Receipting','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_ThankYou\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'), + (296,1,'civicrm/admin/contribute/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Friend_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,440,1,0,NULL,'a:0:{}'), + (297,1,'civicrm/admin/contribute/widget',NULL,'Configure Widget','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Widget\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,460,1,0,NULL,'a:0:{}'), + (298,1,'civicrm/admin/contribute/premium',NULL,'Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:44:\"CRM_Contribute_Form_ContributionPage_Premium\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,470,1,0,NULL,'a:0:{}'), + (299,1,'civicrm/admin/contribute/addProductToPage',NULL,'Add Products to This Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:47:\"CRM_Contribute_Form_ContributionPage_AddProduct\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,480,1,0,NULL,'a:0:{}'), + (300,1,'civicrm/admin/contribute/add','action=add','New Contribution Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Contribute_Controller_ContributionPage\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (301,1,'civicrm/admin/contribute/managePremiums',NULL,'Manage Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Page_ManagePremiums\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,365,1,0,NULL,'a:2:{s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (302,1,'civicrm/admin/financial/financialType',NULL,'Financial Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Financial_Page_FinancialType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,580,1,0,NULL,'a:2:{s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (303,1,'civicrm/payment','action=add','New Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Form_AdditionalPayment\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (304,1,'civicrm/admin/financial/financialAccount',NULL,'Financial Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_FinancialAccount\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (305,1,'civicrm/admin/options/payment_instrument',NULL,'Payment Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (306,1,'civicrm/admin/options/accept_creditcard',NULL,'Accepted Credit Cards','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (307,1,'civicrm/admin/options/soft_credit_type',NULL,'Soft Credit Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (308,1,'civicrm/contact/view/contribution',NULL,'Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (309,1,'civicrm/contact/view/contributionrecur',NULL,'Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:37:\"CRM_Contribute_Page_ContributionRecur\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (310,1,'civicrm/contact/view/contribution/additionalinfo',NULL,'Additional Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:13:\"Contributions\";s:3:\"url\";s:42:\"/civicrm/contact/view/contribution?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (311,1,'civicrm/contribute/search',NULL,'Find Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,510,1,1,NULL,'a:0:{}'), + (312,1,'civicrm/contribute/searchBatch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Controller_SearchBatch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,588,1,1,NULL,'a:0:{}'), + (313,1,'civicrm/contribute/import',NULL,'Import Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"edit contributions\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,520,1,1,NULL,'a:0:{}'), + (314,1,'civicrm/contribute/manage',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,530,1,1,NULL,'a:0:{}'), + (315,1,'civicrm/contribute/additionalinfo',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (316,1,'civicrm/ajax/permlocation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:23:\"getPermissionedLocation\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (317,1,'civicrm/contribute/unsubscribe',NULL,'Cancel Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_CancelSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (318,1,'civicrm/contribute/onbehalf',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_Contribution_OnBehalfOf\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (319,1,'civicrm/contribute/updatebilling',NULL,'Update Billing Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contribute_Form_UpdateBilling\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (320,1,'civicrm/contribute/updaterecur',NULL,'Update Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_UpdateSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (321,1,'civicrm/contribute/subscriptionstatus',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Page_SubscriptionStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (322,1,'civicrm/admin/financial/financialType/accounts',NULL,'Financial Type Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:39:\"CRM_Financial_Page_FinancialTypeAccount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Financial Types\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,581,1,0,NULL,'a:0:{}'), + (323,1,'civicrm/financial/batch',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:33:\"CRM_Financial_Page_FinancialBatch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,585,1,0,NULL,'a:0:{}'), + (324,1,'civicrm/financial/financialbatches',NULL,'Accounting Batches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Financial_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,586,1,0,NULL,'a:0:{}'), + (325,1,'civicrm/batchtransaction',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_BatchTransaction\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,600,1,0,NULL,'a:0:{}'), + (326,1,'civicrm/financial/batch/export',NULL,'Accounting Batch Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:25:\"CRM_Financial_Form_Export\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Accounting Batch\";s:3:\"url\";s:32:\"/civicrm/financial/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,0,NULL,'a:0:{}'), + (327,1,'civicrm/payment/view','action=view','View Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contribute_Page_PaymentInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (328,1,'civicrm/admin/setting/preferences/contribute',NULL,'CiviContribute Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Admin_Form_Preferences_Contribute\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (329,1,'civicrm/contribute/invoice',NULL,'PDF Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Contribute_Form_Task_Invoice\";i:1;s:11:\"getPrintPDF\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,620,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (330,1,'civicrm/contribute/invoice/email',NULL,'Email Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Form_Task_Invoice\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"PDF Invoice\";s:3:\"url\";s:35:\"/civicrm/contribute/invoice?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,630,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (331,1,'civicrm/ajax/softcontributionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:24:\"CRM_Contribute_Page_AJAX\";i:1;s:23:\"getSoftContributionRows\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (332,1,'civicrm/contribute/contributionrecur-payments',NULL,'Recurring Contribution\'s Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Page_ContributionRecurPayments\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (333,1,'civicrm/membership/recurring-contributions',NULL,'Membership Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Member_Page_RecurringContributions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (334,1,'civicrm/contribute/widget',NULL,'CiviContribute','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contribute_Page_Widget\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (335,1,'civicrm/contribute/task',NULL,'Contribution Task','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contribute_Controller_Task\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (336,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,450,1,0,NULL,'a:0:{}'), + (337,1,'civicrm/contribute/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (338,1,'civicrm/member',NULL,'CiviMember Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:25:\"CRM_Member_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,700,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), + (339,1,'civicrm/member/add','action=add','New Membership','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), + (340,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (341,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (342,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'), + (343,1,'civicrm/membership/view',NULL,'Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipView\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,390,1,0,NULL,'a:0:{}'), + (344,1,'civicrm/member/search',NULL,'Find Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,710,1,1,NULL,'a:0:{}'), + (345,1,'civicrm/member/import',NULL,'Import Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:16:\"edit memberships\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,720,1,1,NULL,'a:0:{}'), + (346,1,'civicrm/ajax/memType',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Member_Page_AJAX\";i:1;s:21:\"getMemberTypeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (347,1,'civicrm/admin/member/membershipType/add',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:16:\"Membership Types\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (348,1,'civicrm/mailing',NULL,'CiviMail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,600,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'), + (349,1,'civicrm/admin/mail',NULL,'Mailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Mail\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (350,1,'civicrm/admin/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (351,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (352,1,'civicrm/admin/mailSettings',NULL,'Mail Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_MailSettings\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (353,1,'civicrm/mailing/send',NULL,'New Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:27:\"CRM_Mailing_Controller_Send\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'), + (354,1,'civicrm/mailing/browse/scheduled','scheduled=true','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:5:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";i:4;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'), + (355,1,'civicrm/mailing/browse/unscheduled','scheduled=false','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'), + (356,1,'civicrm/mailing/browse/archived',NULL,'Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,625,1,1,NULL,'a:0:{}'), + (357,1,'civicrm/mailing/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,630,1,1,NULL,'a:0:{}'), + (358,1,'civicrm/mailing/unsubscribe',NULL,'Unsubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Form_Unsubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,640,1,0,NULL,'a:0:{}'), + (359,1,'civicrm/mailing/resubscribe',NULL,'Resubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Page_Resubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,645,1,0,NULL,'a:0:{}'), + (360,1,'civicrm/mailing/optout',NULL,'Opt-out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Form_Optout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,650,1,0,NULL,'a:0:{}'), + (361,1,'civicrm/mailing/confirm',NULL,'Confirm','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:24:\"CRM_Mailing_Page_Confirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'), + (362,1,'civicrm/mailing/subscribe',NULL,'Subscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Form_Subscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'), + (363,1,'civicrm/mailing/preview',NULL,'Preview Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Page_Preview\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,670,1,0,NULL,'a:0:{}'), + (364,1,'civicrm/mailing/report','mid=%%mid%%','Mailing Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,680,1,0,NULL,'a:0:{}'), + (365,1,'civicrm/mailing/forward',NULL,'Forward Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:31:\"CRM_Mailing_Form_ForwardMailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,685,1,0,NULL,'a:0:{}'), + (366,1,'civicrm/mailing/queue',NULL,'Sending Mail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,690,1,0,NULL,'a:0:{}'), + (367,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'), + (368,1,'civicrm/ajax/template',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:8:\"template\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (369,1,'civicrm/mailing/view',NULL,'View Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:28:\"view public CiviMail content\";i:1;s:15:\"access CiviMail\";i:2;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:21:\"CRM_Mailing_Page_View\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,800,1,0,NULL,'a:0:{}'), + (370,1,'civicrm/mailing/approve',NULL,'Approve Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Form_Approve\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,850,1,0,NULL,'a:0:{}'), + (371,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (372,1,'civicrm/ajax/contactmailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:18:\"getContactMailings\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (373,1,'civicrm/ajax/setupMailAccount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:5:\"setup\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (374,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (375,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (376,1,'civicrm/grant',NULL,'CiviGrant Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1000,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'), + (377,1,'civicrm/grant/info',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (378,1,'civicrm/grant/search',NULL,'Find Grants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:27:\"CRM_Grant_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1010,1,1,NULL,'a:0:{}'), + (379,1,'civicrm/grant/add','action=add','New Grant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'), + (380,1,'civicrm/contact/view/grant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (381,1,'civicrm/pledge',NULL,'CiviPledge Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:25:\"CRM_Pledge_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,550,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), + (382,1,'civicrm/pledge/search',NULL,'Find Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:28:\"CRM_Pledge_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,560,1,1,NULL,'a:0:{}'), + (383,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'), + (384,1,'civicrm/pledge/add','action=add','New Pledge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), + (385,1,'civicrm/pledge/payment',NULL,'Pledge Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:23:\"CRM_Pledge_Page_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,580,1,0,NULL,'a:0:{}'), + (386,1,'civicrm/ajax/pledgeAmount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviPledge\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Pledge_Page_AJAX\";i:1;s:17:\"getPledgeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (387,1,'civicrm/case',NULL,'CiviCase Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Case_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,900,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), + (388,1,'civicrm/case/add',NULL,'Open Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Case_Form_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), + (389,1,'civicrm/case/search',NULL,'Find Cases','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,910,1,1,NULL,'a:0:{}'), + (390,1,'civicrm/case/activity',NULL,'Case Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Case_Form_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (391,1,'civicrm/case/report',NULL,'Case Activity Audit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:20:\"CRM_Case_Form_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (392,1,'civicrm/case/cd/edit',NULL,'Case Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (393,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (394,1,'civicrm/case/activity/view',NULL,'Activity View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Form_ActivityView\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Case Activity\";s:3:\"url\";s:30:\"/civicrm/case/activity?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (395,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (396,1,'civicrm/case/addToCase',NULL,'File on Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Case_Form_ActivityToCase\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (397,1,'civicrm/case/details',NULL,'Case Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Case_Page_CaseDetails\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (398,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (399,1,'civicrm/admin/options/case_type',NULL,'Case Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:24:\"url=civicrm/a/#/caseType\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (400,1,'civicrm/admin/options/redaction_rule',NULL,'Redaction Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (401,1,'civicrm/admin/options/case_status',NULL,'Case Statuses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (402,1,'civicrm/admin/options/encounter_medium',NULL,'Encounter Mediums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (403,1,'civicrm/case/report/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Case_XMLProcessor_Report\";i:1;s:15:\"printCaseReport\";}',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:19:\"Case Activity Audit\";s:3:\"url\";s:28:\"/civicrm/case/report?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (404,1,'civicrm/case/ajax/addclient',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:9:\"addClient\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (405,1,'civicrm/case/ajax/processtags',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"processCaseTags\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (406,1,'civicrm/case/ajax/details',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:11:\"CaseDetails\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (407,1,'civicrm/ajax/delcaserole',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"deleteCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (408,1,'civicrm/ajax/get-cases',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:8:\"getCases\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (409,1,'civicrm/report',NULL,'CiviReport','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:22:\"CRM_Report_Page_Report\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1200,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'), + (410,1,'civicrm/report/list',NULL,'CiviCRM Reports','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (411,1,'civicrm/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1220,1,1,NULL,'a:0:{}'), + (412,1,'civicrm/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1241,1,1,NULL,'a:0:{}'), + (413,1,'civicrm/admin/report/register',NULL,'Register Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:30:\"Register the Report templates.\";}'), + (414,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (415,1,'civicrm/admin/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), + (416,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), + (417,1,'civicrm/admin/report/list',NULL,'Reports Listing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), + (418,1,'civicrm/campaign',NULL,'Campaign Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (419,1,'civicrm/campaign/add',NULL,'New Campaign','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (420,1,'civicrm/survey/add',NULL,'New Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (421,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (422,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (423,1,'civicrm/admin/options/campaign_type',NULL,'Campaign Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,2,1,0,NULL,'a:3:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (424,1,'civicrm/admin/options/campaign_status',NULL,'Campaign Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,3,1,0,NULL,'a:3:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (425,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,4,1,0,NULL,'a:3:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (426,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (427,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (428,1,'civicrm/petition/add',NULL,'New Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (429,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (430,1,'civicrm/petition/browse',NULL,'View Petition Signatures','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Campaign_Page_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (431,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (432,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (433,1,'civicrm/campaign/registerInterview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (434,1,'civicrm/survey/configure/main',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (435,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (436,1,'civicrm/survey/configure/results',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (437,1,'civicrm/survey/delete',NULL,'Delete Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (438,1,'civicrm/ajax/event/add_participant_to_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:23:\"add_participant_to_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (439,1,'civicrm/ajax/event/remove_participant_from_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:28:\"remove_participant_from_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (440,1,'civicrm/event/add_to_cart',NULL,'Add Event To Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:29:\"CRM_Event_Cart_Page_AddToCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (441,1,'civicrm/event/cart_checkout',NULL,'Cart Checkout','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Controller_Checkout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), + (442,1,'civicrm/event/remove_from_cart',NULL,'Remove From Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Page_RemoveFromCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (443,1,'civicrm/event/view_cart',NULL,'View Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Cart_Page_ViewCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (444,1,'civicrm/admin/setting/recaptcha',NULL,'reCAPTCHA Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (445,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:26:\"{weight}.Tags (Categories)\";a:6:{s:5:\"title\";s:17:\"Tags (Categories)\";s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:2:\"id\";s:15:\"Tags_Categories\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:18:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:53:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, etc.)\";a:6:{s:5:\"title\";s:44:\"Misc (Undelete, PDFs, Limits, Logging, etc.)\";s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:2:\"id\";s:38:\"Misc_Undelete_PDFs_Limits_Logging_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); /*!40000 ALTER TABLE `civicrm_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -967,7 +5092,74 @@ UNLOCK TABLES; LOCK TABLES `civicrm_msg_template` WRITE; /*!40000 ALTER TABLE `civicrm_msg_template` DISABLE KEYS */; -INSERT INTO `civicrm_msg_template` (`id`, `msg_title`, `msg_subject`, `msg_text`, `msg_html`, `is_active`, `workflow_id`, `workflow_name`, `is_default`, `is_reserved`, `is_sms`, `pdf_format_id`) VALUES (1,'Cases - Send Copy of an Activity','{if $idHash}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if $isCaseActivity}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $viewActURL}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if $isCaseActivity}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $manageCaseURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if $editActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $viewActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if $field.category}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,'case_activity',1,0,0,NULL),(2,'Cases - Send Copy of an Activity','{if $idHash}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if $isCaseActivity}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $viewActURL}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if $isCaseActivity}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $manageCaseURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if $editActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $viewActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if $field.category}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,'case_activity',0,1,0,NULL),(3,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{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}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <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>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,820,'contribution_dupalert',1,0,0,NULL),(4,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{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}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <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>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,820,'contribution_dupalert',0,1,0,NULL),(5,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $formValues.receipt_text}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $getTaxDetails}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$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\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $getTaxDetails && $dataArray}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy and !$formValues.hidden_CreditCard}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if $formValues.trxn_id}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if $ccContribution}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $softCreditTypes and $softCredits}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $formValues.product_name}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if $fulfilled_date}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $formValues.receipt_text}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n\n {if $lineItem and !$is_quick_config}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $getTaxDetails}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if $getTaxDetails && $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receipt_date}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $formValues.paidBy and !$formValues.hidden_CreditCard}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if $formValues.check_number}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $formValues.trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $ccContribution}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $softCreditTypes and $softCredits}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if $formValues.product_name}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if $fulfilled_date}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,821,'contribution_offline_receipt',1,0,0,NULL),(6,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $formValues.receipt_text}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $getTaxDetails}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$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\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $getTaxDetails && $dataArray}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy and !$formValues.hidden_CreditCard}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if $formValues.trxn_id}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if $ccContribution}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $softCreditTypes and $softCredits}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $formValues.product_name}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if $fulfilled_date}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $formValues.receipt_text}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n\n {if $lineItem and !$is_quick_config}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $getTaxDetails}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if $getTaxDetails && $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receipt_date}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $formValues.paidBy and !$formValues.hidden_CreditCard}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if $formValues.check_number}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $formValues.trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $ccContribution}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $softCreditTypes and $softCredits}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if $formValues.product_name}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if $fulfilled_date}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,821,'contribution_offline_receipt',0,1,0,NULL),(7,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and !$is_quick_config}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$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\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{/if}\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if $is_recur}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif $softCreditTypes and $softCredits}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if $pcpBlock}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if $onBehalfProfile}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if $credit_card_type}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if $selectPremium }\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $price}\n\n{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}\n{/if}\n\n{if $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if $lineItem and $priceSetID and !$is_quick_config}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $dataArray}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $is_monetary and $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $is_recur}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif $softCreditTypes and $softCredits}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if $pcpBlock}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $onBehalfProfile}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $isShare}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if $selectPremium}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $price}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,822,'contribution_online_receipt',1,0,0,NULL),(8,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and !$is_quick_config}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$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\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{/if}\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if $is_recur}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif $softCreditTypes and $softCredits}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if $pcpBlock}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if $onBehalfProfile}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if $credit_card_type}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if $selectPremium }\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $price}\n\n{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}\n{/if}\n\n{if $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if $lineItem and $priceSetID and !$is_quick_config}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $dataArray}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $is_monetary and $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $is_recur}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif $softCreditTypes and $softCredits}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if $pcpBlock}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $onBehalfProfile}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $isShare}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if $selectPremium}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $price}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,822,'contribution_online_receipt',0,1,0,NULL),(9,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{$source}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.tax_rate}%</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{ts 1=$taxTerm}-{/ts}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{ts 1=$taxTerm}TOTAL %1{/ts}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.tax_rate}%</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{ts 1=$taxTerm}No %1{/ts}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <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>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,823,'contribution_invoice_receipt',1,0,0,NULL),(10,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{$source}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.tax_rate}%</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{ts 1=$taxTerm}-{/ts}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{ts 1=$taxTerm}TOTAL %1{/ts}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.tax_rate}%</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{ts 1=$taxTerm}No %1{/ts}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <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>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,823,'contribution_invoice_receipt',0,1,0,NULL),(11,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{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}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{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}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <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>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,824,'contribution_recurring_notify',1,0,0,NULL),(12,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{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}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{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}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <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>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,824,'contribution_recurring_notify',0,1,0,NULL),(13,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_recurring_cancelled',1,0,0,NULL),(14,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_recurring_cancelled',0,1,0,NULL),(15,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_recurring_billing',1,0,0,NULL),(16,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_recurring_billing',0,1,0,NULL),(17,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <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>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,827,'contribution_recurring_edit',1,0,0,NULL),(18,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <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>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,827,'contribution_recurring_edit',0,1,0,NULL),(19,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,828,'pcp_notify',1,0,0,NULL),(20,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,828,'pcp_notify',0,1,0,NULL),(21,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{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}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <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>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'pcp_status_change',1,0,0,NULL),(22,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{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}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <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>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'pcp_status_change',0,1,0,NULL),(23,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{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}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <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>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <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>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'pcp_supporter_notify',1,0,0,NULL),(24,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{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}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <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>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <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>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'pcp_supporter_notify',0,1,0,NULL),(25,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,831,'pcp_owner_notify',1,0,0,NULL),(26,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,831,'pcp_owner_notify',0,1,0,NULL),(27,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n\n\n{if $billingName || $address}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_number}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$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}\n\n{if $event.participant_role}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if $paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if $checkNumber}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $billingName || $address}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n {if $credit_card_number}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if $event.participant_role}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,832,'payment_or_refund_notification',1,0,0,NULL),(28,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n\n\n{if $billingName || $address}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_number}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$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}\n\n{if $event.participant_role}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if $paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if $checkNumber}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $billingName || $address}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n {if $credit_card_number}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if $event.participant_role}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,832,'payment_or_refund_notification',0,1,0,NULL),(29,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $isPrimary}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $isPrimary}\n{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}\n\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.event_title}\n{$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}\n\n{if $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $email}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$email}\n{/if}\n{if $event.is_monetary} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture}\n{$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\"}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$value item=line}\n{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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\"}\n{/foreach}\n{/if}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amount && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary}\n\n{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $balanceAmount}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if $pricesetFieldsCount }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $is_pay_later }\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if $customPre}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if $customPost}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if $event.participant_role neq \'Attendee\' and $defaultRole}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if $event.is_monetary}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $isPrimary}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if $pricesetFieldsCount }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amount && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if $isPrimary}\n <tr>\n <td {$labelStyle}>\n {if $balanceAmount}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $balanceAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $pricesetFieldsCount }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if $is_pay_later}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$pay_later_receipt}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $financialTypeName}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if $checkNumber}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customProfile}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'event_offline_receipt',1,0,0,NULL),(30,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $isPrimary}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $isPrimary}\n{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}\n\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.event_title}\n{$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}\n\n{if $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $email}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$email}\n{/if}\n{if $event.is_monetary} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture}\n{$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\"}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$value item=line}\n{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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\"}\n{/foreach}\n{/if}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amount && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary}\n\n{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $balanceAmount}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if $pricesetFieldsCount }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $is_pay_later }\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if $customPre}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if $customPost}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if $event.participant_role neq \'Attendee\' and $defaultRole}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if $event.is_monetary}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $isPrimary}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if $pricesetFieldsCount }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amount && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if $isPrimary}\n <tr>\n <td {$labelStyle}>\n {if $balanceAmount}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $balanceAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $pricesetFieldsCount }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if $is_pay_later}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$pay_later_receipt}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $financialTypeName}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if $checkNumber}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customProfile}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'event_offline_receipt',0,1,0,NULL),(31,'Events - Registration Confirmation and Receipt (on-line)','{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $isRequireApproval}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $isPrimary}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $isPrimary}\n{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}\n\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.event_title}\n{$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}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $payer.name}\nYou were registered by: {$payer.name}\n{/if}\n{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if $pricesetFieldsCount }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$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\"}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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\"}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{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}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amounts && !$lineItem}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary }\n\n{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $pricesetFieldsCount }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if $customPre}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{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}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if $event.participant_role neq \'Attendee\' and $defaultRole}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $event.is_share}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if $payer.name}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if $event.is_monetary and not $isRequireApproval}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $isPrimary}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {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}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if $dataArray}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if $individual}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amounts && !$lineItem}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if $isPrimary}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $pricesetFieldsCount }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $financialTypeName}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if $checkNumber}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if $customPre}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customProfile}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'event_online_receipt',1,0,0,NULL),(32,'Events - Registration Confirmation and Receipt (on-line)','{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $isRequireApproval}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $isPrimary}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $isPrimary}\n{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}\n\n{/if}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.event_title}\n{$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}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $payer.name}\nYou were registered by: {$payer.name}\n{/if}\n{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if $pricesetFieldsCount }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$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\"}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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\"}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{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}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amounts && !$lineItem}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary }\n\n{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $pricesetFieldsCount }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if $customPre}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{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}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $isPrimary}\n <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>\n {/if}\n {elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if $event.participant_role neq \'Attendee\' and $defaultRole}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $event.is_share}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if $payer.name}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if $event.is_monetary and not $isRequireApproval}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $isPrimary}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {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}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if $dataArray}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if $individual}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amounts && !$lineItem}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if $isPrimary}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $pricesetFieldsCount }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $financialTypeName}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if $checkNumber}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if $customPre}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customProfile}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'event_online_receipt',0,1,0,NULL),(33,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n 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.\n{else}\n 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.\n{/if}\n\n{if $is_pay_later}\n {$pay_later_receipt}\n{/if}\n\n Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if $source}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n 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.\n </p>\n {else}\n <p>\n 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.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if $source}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,835,'event_registration_receipt',1,0,0,NULL),(34,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n 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.\n{else}\n 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.\n{/if}\n\n{if $is_pay_later}\n {$pay_later_receipt}\n{/if}\n\n Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if $source}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n 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.\n </p>\n {else}\n <p>\n 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.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if $source}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,835,'event_registration_receipt',0,1,0,NULL),(35,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,836,'participant_cancelled',1,0,0,NULL),(36,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,836,'participant_cancelled',0,1,0,NULL),(37,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,837,'participant_confirm',1,0,0,NULL),(38,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,837,'participant_confirm',0,1,0,NULL),(39,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'participant_expired',1,0,0,NULL),(40,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'participant_expired',0,1,0,NULL),(41,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,839,'participant_transferred',1,0,0,NULL),(42,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,839,'participant_transferred',0,1,0,NULL),(43,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,840,'friend',1,0,0,NULL),(44,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,840,'friend',0,1,0,NULL),(45,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $formValues.receipt_text_signup}\n{$formValues.receipt_text_signup}\n{elseif $formValues.receipt_text_renewal}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if !$lineItem}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if ! $cancelled}\n{if !$lineItem}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if $formValues.contributionType_name}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{$taxTerm} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if $isPrimary }\n{if $billingName}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if $customValues}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $formValues.receipt_text_signup}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif $formValues.receipt_text_renewal}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !$lineItem}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if ! $cancelled}\n {if !$lineItem}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if $formValues.contributionType_name}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $formValues.paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if $formValues.check_number}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if $isPrimary}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br />\n {$address}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if $customValues}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'membership_offline_receipt',1,0,0,NULL),(46,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $formValues.receipt_text_signup}\n{$formValues.receipt_text_signup}\n{elseif $formValues.receipt_text_renewal}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if !$lineItem}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if ! $cancelled}\n{if !$lineItem}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if $formValues.contributionType_name}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{$taxTerm} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if $isPrimary }\n{if $billingName}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if $customValues}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $formValues.receipt_text_signup}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif $formValues.receipt_text_renewal}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !$lineItem}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if ! $cancelled}\n {if !$lineItem}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if $formValues.contributionType_name}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $formValues.paidBy}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if $formValues.check_number}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if $isPrimary}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br />\n {$address}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if $customValues}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'membership_offline_receipt',0,1,0,NULL),(47,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && $membership_amount && $is_quick_config}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && $lineItem and $priceSetID & !$is_quick_config}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$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\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && !$is_quick_config}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{elseif $membership_amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if $membership_trx_id}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if $is_recur}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if $pcpBlock}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if $onBehalfProfile}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if $credit_card_type}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if $selectPremium }\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $price}\n\n{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}\n{/if}\n\n{if $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and $membership_amount and $is_quick_config}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and !$is_quick_config}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif $membership_amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $is_monetary and $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $membership_trx_id}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if $is_recur}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $pcpBlock}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $onBehalfProfile}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if $selectPremium}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $price}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'membership_online_receipt',1,0,0,NULL),(48,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && $membership_amount && $is_quick_config}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && $lineItem and $priceSetID & !$is_quick_config}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$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\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && !$is_quick_config}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $dataArray}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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\"}\n{/foreach}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{elseif $membership_amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if $membership_trx_id}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if $is_recur}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if $pcpBlock}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if $onBehalfProfile}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if $credit_card_type}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if $selectPremium }\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $price}\n\n{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}\n{/if}\n\n{if $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and $membership_amount and $is_quick_config}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and !$is_quick_config}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if $dataArray}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $line.tax_rate != \"\" || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if $dataArray}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if $totalTaxAmount}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif $membership_amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $is_monetary and $trxn_id}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if $membership_trx_id}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if $is_recur}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $pcpBlock}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $onBehalfProfile}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if $billingName}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if $credit_card_type}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if $selectPremium}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $price}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'membership_online_receipt',0,1,0,NULL),(49,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'membership_autorenew_cancelled',1,0,0,NULL),(50,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'membership_autorenew_cancelled',0,1,0,NULL),(51,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'membership_autorenew_billing',1,0,0,NULL),(52,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'membership_autorenew_billing',0,1,0,NULL),(53,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,845,'test_preview',1,0,0,NULL),(54,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,845,'test_preview',0,1,0,NULL),(55,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{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}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$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}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'pledge_acknowledge',1,0,0,NULL),(56,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{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}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$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}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'pledge_acknowledge',0,1,0,NULL),(57,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{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}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {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}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'pledge_reminder',1,0,0,NULL),(58,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{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}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {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}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'pledge_reminder',0,1,0,NULL),(59,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'uf_notify',1,0,0,NULL),(60,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'uf_notify',0,1,0,NULL),(61,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,849,'petition_sign',1,0,0,NULL),(62,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,849,'petition_sign',0,1,0,NULL),(63,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl} \">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,850,'petition_confirmation_needed',1,0,0,NULL),(64,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl} \">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,850,'petition_confirmation_needed',0,1,0,NULL),(65,'Sample CiviMail Newsletter Template','Sample CiviMail Newsletter','','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<table width=612 cellpadding=0 cellspacing=0 bgcolor=\"#ffffff\">\n <tr>\n <td colspan=\"2\" bgcolor=\"#ffffff\" valign=\"middle\" >\n <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" >\n <tr>\n <td>\n <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>\n </td>\n <td> </td>\n <td>\n <a href=\"https://civicrm.org\" style=\"text-decoration: none;\"><font size=5 face=\"Arial, Verdana, sans-serif\" color=\"#8bc539\">Your Newsletter Title</font></a>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td valign=\"top\" width=\"70%\">\n <!-- left column -->\n <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td style=\"font-family: Arial, Verdana, sans-serif; font-size: 12px;\" >\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n Greetings {contact.display_name},\n <br /><br />\n 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.).\n <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.\n <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.\n <br /><br />\n Edit the color of the links and headers using the color button or by editing the HTML.\n <br /><br />\n 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!\n <br /><br />\n To use CiviMail:\n <ul>\n <li><a href=\"http://book.civicrm.org/user/advanced-configuration/email-system-configuration/\">Configure your Email System</a>.</li>\n <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>\n </ul>\n Sincerely,\n <br /><br />\n Your Team\n <br /><br />\n </font>\n </td>\n </tr>\n </table>\n </td>\n\n <td valign=\"top\" width=\"30%\" bgcolor=\"#ffffff\" style=\"border: 1px solid #056085;\">\n <!-- right column -->\n <table cellpadding=10 cellspacing=0 border=0>\n <tr>\n <td bgcolor=\"#056085\"><font face=\"Arial, Verdana, sans-serif\" size=\"4\" color=\"#ffffff\">News and Events</font></td>\n </tr>\n <tr>\n <td style=\"color: #000; font-family: Arial, Verdana, sans-serif; font-size: 12px;\" >\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <font color=\"#056085\"><strong>Featured Events</strong> </font><br />\n Fundraising Dinner<br />\n Training Meeting<br />\n Board of Directors Annual Meeting<br />\n\n <br /><br />\n <font color=\"#056085\"><strong>Community Events</strong></font><br />\n Bake Sale<br />\n Charity Auction<br />\n Art Exhibit<br />\n\n <br /><br />\n <font color=\"#056085\"><strong>Important Dates</strong></font><br />\n Tuesday August 27<br />\n Wednesday September 8<br />\n Thursday September 29<br />\n Saturday October 1<br />\n Sunday October 20<br />\n </font>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td colspan=\"2\">\n <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td>\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <font color=\"#7dc857\"><strong>Helpful Tips</strong></font>\n <br /><br />\n <font color=\"#3b5187\">Tokens</font><br />\n Click \"Insert Tokens\" to dynamically insert names, addresses, and other contact data of your recipients.\n <br /><br />\n <font color=\"#3b5187\">Plain Text Version</font><br />\n 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!\n <br /><br />\n <font color=\"#3b5187\">Play by the Rules</font><br />\n 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.\n <br /><br />\n <font color=\"#3b5187\">Composing Offline</font><br />\n 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.\n <br /><br />\n <font color=\"#3b5187\">Images</font><br />\n 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.\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" style=\"color: #000; font-family: Arial, Verdana, sans-serif; font-size: 10px;\">\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <hr />\n <a href=\"{action.unsubscribeUrl}\" title=\"click to unsubscribe\">Click here</a> to unsubscribe from this mailing list.<br /><br />\n Our mailing address is:<br />\n {domain.address}\n </td>\n </tr>\n </table>\n\n</body>\n</html>\n',1,NULL,NULL,1,0,0,NULL),(66,'Sample Responsive Design Newsletter - Single Column Template','Sample Responsive Design Newsletter - Single Column','','<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\n <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\n <title></title>\n\n <style type=\"text/css\">\n {literal}\n /* Client-specific Styles */\n #outlook a {padding:0;} /* Force Outlook to provide a \"view in browser\" menu link. */\n body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}\n\n /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */\n .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */\n #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}\n img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;}\n a img {border:none;}\n .image_fix {display:block;}\n p {margin: 0px 0px !important;}\n table td {border-collapse: collapse;}\n table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }\n a {text-decoration: none;text-decoration:none;}\n\n /*STYLES*/\n table[class=full] { width: 100%; clear: both; }\n\n /*IPAD STYLES*/\n @media only screen and (max-width: 640px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color:#136388;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color:#136388;pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 440px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 416px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 416px!important;text-align:center!important;}\n img[class=banner] {width: 440px!important;auto!important;}\n img[class=col2img] {width: 440px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 100px!important;}\n table[class=\"col3img\"] {width: 131px!important;}\n img[class=\"col3img\"] {width: 131px!important;height: auto!important;}\n table[class=\"removeMobile\"]{width:10px!important;}\n img[class=\"blog\"] {width: 440px!important;height: auto!important;}\n }\n\n /*IPHONE STYLES*/\n @media only screen and (max-width: 480px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #136388;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: none;color:#136388;pointer-events: auto;cursor: default;}\n\n table[class=devicewidth] {width: 280px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 260px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 260px!important;text-align:center!important;}\n img[class=banner] {width: 280px!important;height:100px!important;}\n img[class=col2img] {width: 280px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 260px!important;}\n img[class=\"col3img\"] {width: 280px!important;height: auto!important;}\n table[class=\"col3img\"] {width: 280px!important;}\n img[class=\"blog\"] {width: 280px!important;auto!important;}\n td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}\n }\n\n @media only screen and (max-device-width: 800px)\n {td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}}\n @media only screen and (max-device-width: 769px) {\n .devicewidthmob {font-size:16px;}\n }\n\n @media only screen and (max-width: 640px) {\n .desktop-spacer {display:none !important;}\n }\n {/literal}\n </style>\n\n<body>\n <!-- Start of preheader --><!-- Start of preheader -->\n <table bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n </tbody>\n </table>\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"emhide\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of main-banner-->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"93%\">\n <tbody>\n <tr>\n <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>\n <td align=\"right\" width=\"62%\">\n <h6 class=\"collapse\"> </h6>\n </td>\n </tr>\n <tr>\n <td align=\"right\">\n <h5 style=\"font-family: Gill Sans, Gill Sans MT, Myriad Pro, DejaVu Sans Condensed, Helvetica, Arial, sans-serif; color:#136388;\"> </h5>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- hero story -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /hero image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td style=\"padding:0 15px;\">\n <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>\n <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>\n </td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- end of hero image and story --><!-- story 1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td style=\"padding:0 15px;\">\n <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>\n </td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story 2--><!-- banner1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- content --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding:15px;\">\n <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>\n </td>\n </tr>\n <!-- /button --><!-- white button -->\n <!-- /button --><!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /banner 1--><!-- banner 2 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#136388\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- content --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding: 15px;\">\n <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>\n </td>\n </tr>\n <!-- /button --><!-- white button -->\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /banner2 --><!-- footer -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"footer\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td><!-- logo -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"250\">\n <tbody>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --><!-- start of social icons -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\" vaalign=\"middle\" width=\"60\">\n <tbody>\n <tr>\n <td align=\"left\" height=\"22\" width=\"22\">\n <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>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"10\"> </td>\n <td align=\"right\" height=\"22\" width=\"22\">\n <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>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"20\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of social icons --></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n\n</body>\n</html>\n',1,NULL,NULL,1,0,0,NULL),(67,'Sample Responsive Design Newsletter - Two Column Template','Sample Responsive Design Newsletter - Two Column','','<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\n <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\n <title></title>\n <style type=\"text/css\">\n {literal}\n img {height: auto !important;}\n /* Client-specific Styles */\n #outlook a {padding:0;} /* Force Outlook to provide a \"view in browser\" menu link. */\n body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}\n\n /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */\n .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */\n #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}\n img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;}\n a img {border:none;}\n .image_fix {display:block;}\n p {margin: 0px 0px !important;}\n table td {border-collapse: collapse;}\n table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }\n a {/*color: #33b9ff;*/text-decoration: none;text-decoration:none!important;}\n\n\n /*STYLES*/\n table[class=full] { width: 100%; clear: both; }\n\n /*IPAD STYLES*/\n @media only screen and (max-width: 640px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color: #0a8cce !important;pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 440px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 414px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 414px!important;text-align:center!important;}\n img[class=banner] {width: 440px!important;auto!important;}\n img[class=col2img] {width: 440px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 100px!important;}\n table[class=\"col3img\"] {width: 131px!important;}\n img[class=\"col3img\"] {width: 131px!important;height: auto!important;}\n table[class=\"removeMobile\"]{width:10px!important;}\n img[class=\"blog\"] {width: 440px!important;height: auto!important;}\n }\n\n /*IPHONE STYLES*/\n @media only screen and (max-width: 480px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color: #0a8cce !important; pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 280px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 260px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 260px!important;text-align:center!important;}\n img[class=banner] {width: 280px!important;height:100px!important;}\n img[class=col2img] {width: 280px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 260px!important;}\n img[class=\"col3img\"] {width: 280px!important;height: auto!important;}\n table[class=\"col3img\"] {width: 280px!important;}\n img[class=\"blog\"] {width: 280px!important;auto!important;}\n td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}\n }\n\n @media only screen and (max-device-width: 800px)\n {td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}}\n @media only screen and (max-device-width: 769px) {.devicewidthmob {font-size:14px;}}\n\n @media only screen and (max-width: 640px) {.desktop-spacer {display:none !important;}\n }\n {/literal}\n </style>\n <body>\n <!-- Start of preheader --><!-- Start of preheader -->\n <table bgcolor=\"#0B4151\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"360\">\n <tbody>\n <tr>\n <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>\n </tr>\n </tbody>\n </table>\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"emhide\" width=\"320\">\n <tbody>\n <tr>\n <td align=\"right\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px;\" valign=\"middle\">Month Year</td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of preheader --><!-- start of logo -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"93%\">\n <tbody>\n <tr>\n <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>\n <td align=\"right\" >\n <h6 class=\"collapse\"> </h6>\n </td>\n </tr>\n <tr>\n <td align=\"right\">\n\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --> <!-- hero story 1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"101%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#f8f8f8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#f8f8f8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"700\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- hero story -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr><!-- /Spacing -->\n <tr>\n <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>\n </tr>\n\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr><!-- /Spacing -->\n\n <!-- /Spacing --><!-- /hero story -->\n\n <!-- Spacing --> <!-- Spacing -->\n\n\n\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Section Heading -->\n <tr>\n <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>\n </tr>\n <!-- /Section Heading -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /hero story 1 --><!-- story one -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story one -->\n <!-- story two -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story two --><!-- story three -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- Spacing -->\n <tr>\n <td height=\"20\" class=\"desktop-spacer\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story three -->\n\n\n\n\n\n <!-- story four -->\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding: 15px;\">\n <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>\n </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story four -->\n\n <!-- footer -->\n\n <!-- End of footer --><!-- Start of postfooter -->\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"footer\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td><!-- logo -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"250\">\n <tbody>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --><!-- start of social icons -->\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\" vaalign=\"middle\" width=\"60\">\n <tbody>\n <tr>\n <td align=\"left\" height=\"22\" width=\"22\">\n <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>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"10\"> </td>\n <td align=\"right\" height=\"22\" width=\"22\">\n <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>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"20\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of social icons --></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td bgcolor=\"#80C457\" height=\"10\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of footer -->\n </body>\n</html>\n',1,NULL,NULL,1,0,0,NULL); +INSERT INTO `civicrm_msg_template` (`id`, `msg_title`, `msg_subject`, `msg_text`, `msg_html`, `is_active`, `workflow_id`, `workflow_name`, `is_default`, `is_reserved`, `is_sms`, `pdf_format_id`) VALUES + (1,'Cases - Send Copy of an Activity','{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if !empty($isCaseActivity)}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $viewActURL}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if !empty($isCaseActivity)}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $manageCaseURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if $editActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $viewActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if !empty($field.category)}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,'case_activity',1,0,0,NULL), + (2,'Cases - Send Copy of an Activity','{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if !empty($isCaseActivity)}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $viewActURL}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if !empty($isCaseActivity)}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $manageCaseURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if $editActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $viewActURL}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if !empty($field.category)}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,'case_activity',0,1,0,NULL), + (3,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{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}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <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>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,820,'contribution_dupalert',1,0,0,NULL), + (4,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{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}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <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>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,820,'contribution_dupalert',0,1,0,NULL), + (5,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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 !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if !empty($formValues.trxn_id)}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if $fulfilled_date}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if !empty($formValues.contributionType_name)}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receipt_date}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($formValues.trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if $fulfilled_date}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,821,'contribution_offline_receipt',1,0,0,NULL), + (6,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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 !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if !empty($formValues.trxn_id)}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if $fulfilled_date}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if !empty($formValues.contributionType_name)}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if $receipt_date}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($formValues.trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if $fulfilled_date}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,821,'contribution_offline_receipt',0,1,0,NULL), + (7,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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 !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{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}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,822,'contribution_online_receipt',1,0,0,NULL), + (8,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{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 !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{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}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,822,'contribution_online_receipt',0,1,0,NULL), + (9,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <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>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,823,'contribution_invoice_receipt',1,0,0,NULL), + (10,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <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>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,823,'contribution_invoice_receipt',0,1,0,NULL), + (11,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{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}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{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}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <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>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,824,'contribution_recurring_notify',1,0,0,NULL), + (12,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{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}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{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}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <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>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {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}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,824,'contribution_recurring_notify',0,1,0,NULL), + (13,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_recurring_cancelled',1,0,0,NULL), + (14,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_recurring_cancelled',0,1,0,NULL), + (15,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_recurring_billing',1,0,0,NULL), + (16,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_recurring_billing',0,1,0,NULL), + (17,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <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>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,827,'contribution_recurring_edit',1,0,0,NULL), + (18,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <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>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,827,'contribution_recurring_edit',0,1,0,NULL), + (19,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,828,'pcp_notify',1,0,0,NULL), + (20,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,828,'pcp_notify',0,1,0,NULL), + (21,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{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}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <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>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'pcp_status_change',1,0,0,NULL), + (22,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{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}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <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>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'pcp_status_change',0,1,0,NULL), + (23,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{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}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <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>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <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>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'pcp_supporter_notify',1,0,0,NULL), + (24,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{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}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{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}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <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>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <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>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <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>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'pcp_supporter_notify',0,1,0,NULL), + (25,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,831,'pcp_owner_notify',1,0,0,NULL), + (26,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,831,'pcp_owner_notify',0,1,0,NULL), + (27,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{if isset($totalAmount)}\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{/if}\n{if isset($totalPaid)}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{/if}\n{if isset($amountOwed)}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n{/if}\n\n\n{if !empty($billingName) || !empty($address)}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n{if !empty($billingName)}\n{$billingName}\n{/if}\n{if !empty($address)}\n{$address}\n{/if}\n{/if}\n\n{if !empty($credit_card_number)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$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}\n\n{if !empty($event.participant_role)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n {if isset($totalAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($totalPaid)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($amountOwed)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n {/if}\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !empty($billingName) || !empty($address)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if !empty($billingName)}{$billingName}{/if}<br />\n {if !empty($address)}{$address|nl2br}{/if}\n </td>\n </tr>\n {/if}\n {if !empty($credit_card_number)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if !empty($event.participant_role)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,832,'payment_or_refund_notification',1,0,0,NULL), + (28,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{if isset($totalAmount)}\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{/if}\n{if isset($totalPaid)}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{/if}\n{if isset($amountOwed)}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n{/if}\n\n\n{if !empty($billingName) || !empty($address)}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n{if !empty($billingName)}\n{$billingName}\n{/if}\n{if !empty($address)}\n{$address}\n{/if}\n{/if}\n\n{if !empty($credit_card_number)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$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}\n\n{if !empty($event.participant_role)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n {if isset($totalAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($totalPaid)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($amountOwed)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n {/if}\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !empty($billingName) || !empty($address)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if !empty($billingName)}{$billingName}{/if}<br />\n {if !empty($address)}{$address|nl2br}{/if}\n </td>\n </tr>\n {/if}\n {if !empty($credit_card_number)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if !empty($event.participant_role)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,832,'payment_or_refund_notification',0,1,0,NULL), + (29,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{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}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($is_pay_later)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$event.event_title}\n{$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}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($email)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$email}\n{/if}\n{if !empty($event.is_monetary)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n{/if}\n{/foreach}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amount) && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary)}\n\n{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($balanceAmount)}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if !empty($is_pay_later) }\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($is_pay_later)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if !empty($event.is_monetary)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if !empty($pricesetFieldsCount) }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amount) && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {if isset($balanceAmount)}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if isset($balanceAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if !empty($is_pay_later)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customProfile)}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'event_offline_receipt',1,0,0,NULL), + (30,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{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}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($is_pay_later)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$event.event_title}\n{$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}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($email)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$email}\n{/if}\n{if !empty($event.is_monetary)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n{/if}\n{/foreach}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amount) && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary)}\n\n{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($balanceAmount)}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if !empty($is_pay_later) }\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($is_pay_later)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if !empty($event.is_monetary)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if !empty($pricesetFieldsCount) }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amount) && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {if isset($balanceAmount)}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if isset($balanceAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if !empty($is_pay_later)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customProfile)}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'event_offline_receipt',0,1,0,NULL), + (31,'Events - Registration Confirmation and Receipt (on-line)','{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{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}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$event.event_title}\n{$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}\n{if !empty($conference_sessions)}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($payer.name)}\nYou were registered by: {$payer.name}\n{/if}\n{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty ($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if !empty($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}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amounts) && empty($lineItem)}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary) }\n\n{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if !empty($receive_date)}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($event.allow_selfcancelxfer) }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{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}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if !empty($event.is_share)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if !empty($payer.name)}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if !empty($event.is_monetary) and empty($isRequireApproval)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {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}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($dataArray)}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if !empty($individual)}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amounts) && empty($lineItem)}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customProfile)}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if !empty($event.allow_selfcancelxfer) }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'event_online_receipt',1,0,0,NULL), + (32,'Events - Registration Confirmation and Receipt (on-line)','{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{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}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$event.event_title}\n{$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}\n{if !empty($conference_sessions)}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{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}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($payer.name)}\nYou were registered by: {$payer.name}\n{/if}\n{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty ($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if !empty($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}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amounts) && empty($lineItem)}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary) }\n\n{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if !empty($receive_date)}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($event.allow_selfcancelxfer) }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{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}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <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>\n {/if}\n {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if !empty($event.is_share)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if !empty($payer.name)}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if !empty($event.is_monetary) and empty($isRequireApproval)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {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}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($dataArray)}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if !empty($individual)}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amounts) && empty($lineItem)}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customProfile)}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if !empty($event.allow_selfcancelxfer) }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'event_online_receipt',0,1,0,NULL), + (33,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n 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.\n{else}\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n{/if}\n\n{if $is_pay_later}\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n{/if}\n\n Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if !empty($source)}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n 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.\n </p>\n {else}\n <p>\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if !empty($source)}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,835,'event_registration_receipt',1,0,0,NULL), + (34,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n 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.\n{else}\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n{/if}\n\n{if $is_pay_later}\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n{/if}\n\n Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if !empty($source)}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n 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.\n </p>\n {else}\n <p>\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if !empty($source)}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,835,'event_registration_receipt',0,1,0,NULL), + (35,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,836,'participant_cancelled',1,0,0,NULL), + (36,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,836,'participant_cancelled',0,1,0,NULL), + (37,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,837,'participant_confirm',1,0,0,NULL), + (38,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,837,'participant_confirm',0,1,0,NULL), + (39,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'participant_expired',1,0,0,NULL), + (40,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'participant_expired',0,1,0,NULL), + (41,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,839,'participant_transferred',1,0,0,NULL), + (42,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$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}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$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}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,839,'participant_transferred',0,1,0,NULL), + (43,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,840,'friend',1,0,0,NULL), + (44,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,840,'friend',0,1,0,NULL), + (45,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text_signup)}\n{$formValues.receipt_text_signup}\n{elseif !empty($formValues.receipt_text_renewal)}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if empty($lineItem)}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if empty($cancelled)}\n{if empty($lineItem)}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if !empty($lineItem)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if !empty($isPrimary) }\n{if !empty($billingName)}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if !empty($customValues)}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\"\n style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text_signup)}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif !empty($formValues.receipt_text_renewal)}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if empty($lineItem)}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if empty($cancelled)}\n {if empty($lineItem)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if !empty($formValues.contributionType_name)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}\n <div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n {if isset($formValues.total_amount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($formValues.paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if !empty($isPrimary)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br/>\n {$address}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br/>\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if !empty($customValues)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'membership_offline_receipt',1,0,0,NULL), + (46,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text_signup)}\n{$formValues.receipt_text_signup}\n{elseif !empty($formValues.receipt_text_renewal)}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if empty($lineItem)}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if empty($cancelled)}\n{if empty($lineItem)}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if !empty($lineItem)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if !empty($isPrimary) }\n{if !empty($billingName)}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if !empty($customValues)}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\"\n style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text_signup)}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif !empty($formValues.receipt_text_renewal)}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if empty($lineItem)}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if empty($cancelled)}\n {if empty($lineItem)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if !empty($formValues.contributionType_name)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}\n <div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n {if isset($formValues.total_amount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($formValues.paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if !empty($isPrimary)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br/>\n {$address}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br/>\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if !empty($customValues)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'membership_offline_receipt',0,1,0,NULL), + (47,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && isset($membership_amount) && !empty($is_quick_config)}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$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\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{elseif isset($membership_amount)}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if !empty($membership_trx_id)}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if !empty($is_recur)}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{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}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif isset($membership_amount)}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($membership_trx_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'membership_online_receipt',1,0,0,NULL), + (48,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && isset($membership_amount) && !empty($is_quick_config)}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$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\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($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\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($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\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{elseif isset($membership_amount)}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if !empty($membership_trx_id)}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if !empty($is_recur)}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{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}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {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}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif isset($membership_amount)}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($membership_trx_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <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>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'membership_online_receipt',0,1,0,NULL), + (49,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'membership_autorenew_cancelled',1,0,0,NULL), + (50,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{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}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'membership_autorenew_cancelled',0,1,0,NULL), + (51,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'membership_autorenew_billing',1,0,0,NULL), + (52,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'membership_autorenew_billing',0,1,0,NULL), + (53,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,845,'test_preview',1,0,0,NULL), + (54,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,845,'test_preview',0,1,0,NULL), + (55,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{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}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$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}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'pledge_acknowledge',1,0,0,NULL), + (56,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{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}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$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}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'pledge_acknowledge',0,1,0,NULL), + (57,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{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 fe=1}{/capture}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {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 fe=1}{/capture}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'pledge_reminder',1,0,0,NULL), + (58,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{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 fe=1}{/capture}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <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>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {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 fe=1}{/capture}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'pledge_reminder',0,1,0,NULL), + (59,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'uf_notify',1,0,0,NULL), + (60,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'uf_notify',0,1,0,NULL), + (61,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,849,'petition_sign',1,0,0,NULL), + (62,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,849,'petition_sign',0,1,0,NULL), + (63,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl}\">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,850,'petition_confirmation_needed',1,0,0,NULL), + (64,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl}\">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,850,'petition_confirmation_needed',0,1,0,NULL), + (65,'Sample CiviMail Newsletter Template','Sample CiviMail Newsletter','','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<table width=612 cellpadding=0 cellspacing=0 bgcolor=\"#ffffff\">\n <tr>\n <td colspan=\"2\" bgcolor=\"#ffffff\" valign=\"middle\" >\n <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" >\n <tr>\n <td>\n <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>\n </td>\n <td> </td>\n <td>\n <a href=\"https://civicrm.org\" style=\"text-decoration: none;\"><font size=5 face=\"Arial, Verdana, sans-serif\" color=\"#8bc539\">Your Newsletter Title</font></a>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td valign=\"top\" width=\"70%\">\n <!-- left column -->\n <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td style=\"font-family: Arial, Verdana, sans-serif; font-size: 12px;\" >\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n Greetings {contact.display_name},\n <br /><br />\n 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.).\n <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.\n <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.\n <br /><br />\n Edit the color of the links and headers using the color button or by editing the HTML.\n <br /><br />\n 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!\n <br /><br />\n To use CiviMail:\n <ul>\n <li><a href=\"http://book.civicrm.org/user/advanced-configuration/email-system-configuration/\">Configure your Email System</a>.</li>\n <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>\n </ul>\n Sincerely,\n <br /><br />\n Your Team\n <br /><br />\n </font>\n </td>\n </tr>\n </table>\n </td>\n\n <td valign=\"top\" width=\"30%\" bgcolor=\"#ffffff\" style=\"border: 1px solid #056085;\">\n <!-- right column -->\n <table cellpadding=10 cellspacing=0 border=0>\n <tr>\n <td bgcolor=\"#056085\"><font face=\"Arial, Verdana, sans-serif\" size=\"4\" color=\"#ffffff\">News and Events</font></td>\n </tr>\n <tr>\n <td style=\"color: #000; font-family: Arial, Verdana, sans-serif; font-size: 12px;\" >\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <font color=\"#056085\"><strong>Featured Events</strong> </font><br />\n Fundraising Dinner<br />\n Training Meeting<br />\n Board of Directors Annual Meeting<br />\n\n <br /><br />\n <font color=\"#056085\"><strong>Community Events</strong></font><br />\n Bake Sale<br />\n Charity Auction<br />\n Art Exhibit<br />\n\n <br /><br />\n <font color=\"#056085\"><strong>Important Dates</strong></font><br />\n Tuesday August 27<br />\n Wednesday September 8<br />\n Thursday September 29<br />\n Saturday October 1<br />\n Sunday October 20<br />\n </font>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td colspan=\"2\">\n <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td>\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <font color=\"#7dc857\"><strong>Helpful Tips</strong></font>\n <br /><br />\n <font color=\"#3b5187\">Tokens</font><br />\n Click \"Insert Tokens\" to dynamically insert names, addresses, and other contact data of your recipients.\n <br /><br />\n <font color=\"#3b5187\">Plain Text Version</font><br />\n 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!\n <br /><br />\n <font color=\"#3b5187\">Play by the Rules</font><br />\n 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.\n <br /><br />\n <font color=\"#3b5187\">Composing Offline</font><br />\n 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.\n <br /><br />\n <font color=\"#3b5187\">Images</font><br />\n 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.\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" style=\"color: #000; font-family: Arial, Verdana, sans-serif; font-size: 10px;\">\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <hr />\n <a href=\"{action.unsubscribeUrl}\" title=\"click to unsubscribe\">Click here</a> to unsubscribe from this mailing list.<br /><br />\n Our mailing address is:<br />\n {domain.address}\n </td>\n </tr>\n </table>\n\n</body>\n</html>\n',1,NULL,NULL,1,0,0,NULL), + (66,'Sample Responsive Design Newsletter - Single Column Template','Sample Responsive Design Newsletter - Single Column','','<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\n <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\n <title></title>\n\n <style type=\"text/css\">\n {literal}\n /* Client-specific Styles */\n #outlook a {padding:0;} /* Force Outlook to provide a \"view in browser\" menu link. */\n body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}\n\n /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */\n .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */\n #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}\n img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;}\n a img {border:none;}\n .image_fix {display:block;}\n p {margin: 0px 0px !important;}\n table td {border-collapse: collapse;}\n table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }\n a {text-decoration: none;text-decoration:none;}\n\n /*STYLES*/\n table[class=full] { width: 100%; clear: both; }\n\n /*IPAD STYLES*/\n @media only screen and (max-width: 640px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color:#136388;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color:#136388;pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 440px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 416px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 416px!important;text-align:center!important;}\n img[class=banner] {width: 440px!important;auto!important;}\n img[class=col2img] {width: 440px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 100px!important;}\n table[class=\"col3img\"] {width: 131px!important;}\n img[class=\"col3img\"] {width: 131px!important;height: auto!important;}\n table[class=\"removeMobile\"]{width:10px!important;}\n img[class=\"blog\"] {width: 440px!important;height: auto!important;}\n }\n\n /*IPHONE STYLES*/\n @media only screen and (max-width: 480px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #136388;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: none;color:#136388;pointer-events: auto;cursor: default;}\n\n table[class=devicewidth] {width: 280px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 260px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 260px!important;text-align:center!important;}\n img[class=banner] {width: 280px!important;height:100px!important;}\n img[class=col2img] {width: 280px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 260px!important;}\n img[class=\"col3img\"] {width: 280px!important;height: auto!important;}\n table[class=\"col3img\"] {width: 280px!important;}\n img[class=\"blog\"] {width: 280px!important;auto!important;}\n td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}\n }\n\n @media only screen and (max-device-width: 800px)\n {td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}}\n @media only screen and (max-device-width: 769px) {\n .devicewidthmob {font-size:16px;}\n }\n\n @media only screen and (max-width: 640px) {\n .desktop-spacer {display:none !important;}\n }\n {/literal}\n </style>\n\n<body>\n <!-- Start of preheader --><!-- Start of preheader -->\n <table bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n </tbody>\n </table>\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"emhide\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of main-banner-->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"93%\">\n <tbody>\n <tr>\n <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>\n <td align=\"right\" width=\"62%\">\n <h6 class=\"collapse\"> </h6>\n </td>\n </tr>\n <tr>\n <td align=\"right\">\n <h5 style=\"font-family: Gill Sans, Gill Sans MT, Myriad Pro, DejaVu Sans Condensed, Helvetica, Arial, sans-serif; color:#136388;\"> </h5>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- hero story -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /hero image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td style=\"padding:0 15px;\">\n <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>\n <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>\n </td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- end of hero image and story --><!-- story 1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td style=\"padding:0 15px;\">\n <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>\n </td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story 2--><!-- banner1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- content --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding:15px;\">\n <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>\n </td>\n </tr>\n <!-- /button --><!-- white button -->\n <!-- /button --><!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /banner 1--><!-- banner 2 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#136388\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- content --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding: 15px;\">\n <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>\n </td>\n </tr>\n <!-- /button --><!-- white button -->\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /banner2 --><!-- footer -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"footer\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td><!-- logo -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"250\">\n <tbody>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --><!-- start of social icons -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\" vaalign=\"middle\" width=\"60\">\n <tbody>\n <tr>\n <td align=\"left\" height=\"22\" width=\"22\">\n <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>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"10\"> </td>\n <td align=\"right\" height=\"22\" width=\"22\">\n <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>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"20\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of social icons --></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n\n</body>\n</html>\n',1,NULL,NULL,1,0,0,NULL), + (67,'Sample Responsive Design Newsletter - Two Column Template','Sample Responsive Design Newsletter - Two Column','','<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\n <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\n <title></title>\n <style type=\"text/css\">\n {literal}\n img {height: auto !important;}\n /* Client-specific Styles */\n #outlook a {padding:0;} /* Force Outlook to provide a \"view in browser\" menu link. */\n body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}\n\n /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */\n .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */\n #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}\n img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;}\n a img {border:none;}\n .image_fix {display:block;}\n p {margin: 0px 0px !important;}\n table td {border-collapse: collapse;}\n table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }\n a {/*color: #33b9ff;*/text-decoration: none;text-decoration:none!important;}\n\n\n /*STYLES*/\n table[class=full] { width: 100%; clear: both; }\n\n /*IPAD STYLES*/\n @media only screen and (max-width: 640px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color: #0a8cce !important;pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 440px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 414px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 414px!important;text-align:center!important;}\n img[class=banner] {width: 440px!important;auto!important;}\n img[class=col2img] {width: 440px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 100px!important;}\n table[class=\"col3img\"] {width: 131px!important;}\n img[class=\"col3img\"] {width: 131px!important;height: auto!important;}\n table[class=\"removeMobile\"]{width:10px!important;}\n img[class=\"blog\"] {width: 440px!important;height: auto!important;}\n }\n\n /*IPHONE STYLES*/\n @media only screen and (max-width: 480px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color: #0a8cce !important; pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 280px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 260px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 260px!important;text-align:center!important;}\n img[class=banner] {width: 280px!important;height:100px!important;}\n img[class=col2img] {width: 280px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 260px!important;}\n img[class=\"col3img\"] {width: 280px!important;height: auto!important;}\n table[class=\"col3img\"] {width: 280px!important;}\n img[class=\"blog\"] {width: 280px!important;auto!important;}\n td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}\n }\n\n @media only screen and (max-device-width: 800px)\n {td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}}\n @media only screen and (max-device-width: 769px) {.devicewidthmob {font-size:14px;}}\n\n @media only screen and (max-width: 640px) {.desktop-spacer {display:none !important;}\n }\n {/literal}\n </style>\n <body>\n <!-- Start of preheader --><!-- Start of preheader -->\n <table bgcolor=\"#0B4151\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"360\">\n <tbody>\n <tr>\n <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>\n </tr>\n </tbody>\n </table>\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"emhide\" width=\"320\">\n <tbody>\n <tr>\n <td align=\"right\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px;\" valign=\"middle\">Month Year</td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of preheader --><!-- start of logo -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"93%\">\n <tbody>\n <tr>\n <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>\n <td align=\"right\" >\n <h6 class=\"collapse\"> </h6>\n </td>\n </tr>\n <tr>\n <td align=\"right\">\n\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --> <!-- hero story 1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"101%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#f8f8f8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#f8f8f8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- /Spacing -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"700\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <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>\n </td>\n </tr>\n <!-- /image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- hero story -->\n <tr>\n <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>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr><!-- /Spacing -->\n <tr>\n <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>\n </tr>\n\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr><!-- /Spacing -->\n\n <!-- /Spacing --><!-- /hero story -->\n\n <!-- Spacing --> <!-- Spacing -->\n\n\n\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Section Heading -->\n <tr>\n <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>\n </tr>\n <!-- /Section Heading -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /hero story 1 --><!-- story one -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story one -->\n <!-- story two -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story two --><!-- story three -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- Spacing -->\n <tr>\n <td height=\"20\" class=\"desktop-spacer\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story three -->\n\n\n\n\n\n <!-- story four -->\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <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>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <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>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <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\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <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>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding: 15px;\">\n <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>\n </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story four -->\n\n <!-- footer -->\n\n <!-- End of footer --><!-- Start of postfooter -->\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"footer\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td><!-- logo -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"250\">\n <tbody>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n <tr>\n <td width=\"20\"> </td>\n <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>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --><!-- start of social icons -->\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\" vaalign=\"middle\" width=\"60\">\n <tbody>\n <tr>\n <td align=\"left\" height=\"22\" width=\"22\">\n <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>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"10\"> </td>\n <td align=\"right\" height=\"22\" width=\"22\">\n <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>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"20\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of social icons --></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td bgcolor=\"#80C457\" height=\"10\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of footer -->\n </body>\n</html>\n',1,NULL,NULL,1,0,0,NULL); /*!40000 ALTER TABLE `civicrm_msg_template` ENABLE KEYS */; UNLOCK TABLES; @@ -977,7 +5169,271 @@ UNLOCK TABLES; LOCK TABLES `civicrm_navigation` WRITE; /*!40000 ALTER TABLE `civicrm_navigation` DISABLE KEYS */; -INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `icon`, `permission`, `permission_operator`, `parent_id`, `is_active`, `has_separator`, `weight`) VALUES (1,1,'Home','Home','civicrm/dashboard?reset=1',NULL,NULL,'',NULL,1,NULL,0),(2,1,'Search','Search',NULL,'crm-i fa-search',NULL,'',NULL,1,NULL,10),(3,1,'Find Contacts','Find Contacts','civicrm/contact/search?reset=1',NULL,NULL,'',2,1,NULL,1),(4,1,'Advanced Search','Advanced Search','civicrm/contact/search/advanced?reset=1',NULL,NULL,'',2,1,NULL,2),(5,1,'Full-text Search','Full-text Search','civicrm/contact/search/custom?csid=15&reset=1',NULL,NULL,'',2,1,NULL,3),(6,1,'Search Builder','Search Builder','civicrm/contact/search/builder?reset=1',NULL,NULL,'',2,1,1,4),(7,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',2,1,NULL,5),(8,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',2,1,NULL,6),(9,1,'Find Mailings','Find Mailings','civicrm/mailing?reset=1',NULL,'access CiviMail','',2,1,NULL,7),(10,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',2,1,NULL,8),(11,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',2,1,NULL,9),(12,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',2,1,NULL,10),(13,1,'Find Activities','Find Activities','civicrm/activity/search?reset=1',NULL,NULL,'',2,1,1,11),(14,1,'Custom Searches','Custom Searches','civicrm/contact/search/custom/list?reset=1',NULL,NULL,'',2,1,NULL,12),(15,1,'Contacts','Contacts',NULL,'crm-i fa-address-book-o',NULL,'',NULL,1,NULL,20),(16,1,'New Individual','New Individual','civicrm/contact/add?reset=1&ct=Individual',NULL,'add contacts','',15,1,NULL,1),(17,1,'New Household','New Household','civicrm/contact/add?reset=1&ct=Household',NULL,'add contacts','',15,1,NULL,2),(18,1,'New Organization','New Organization','civicrm/contact/add?reset=1&ct=Organization',NULL,'add contacts','',15,1,1,3),(19,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'access CiviReport','',15,1,1,4),(20,1,'New Activity','New Activity','civicrm/activity?reset=1&action=add&context=standalone',NULL,NULL,'',15,1,NULL,5),(21,1,'New Email','New Email','civicrm/activity/email/add?atype=3&action=add&reset=1&context=standalone',NULL,NULL,'',15,1,1,6),(22,1,'Import Contacts','Import Contacts','civicrm/import/contact?reset=1',NULL,'import contacts','',15,1,NULL,7),(23,1,'Import Activities','Import Activities','civicrm/import/activity?reset=1',NULL,'import contacts','',15,1,1,8),(24,1,'New Group','New Group','civicrm/group/add?reset=1',NULL,'edit groups','',15,1,NULL,9),(25,1,'Manage Groups','Manage Groups','civicrm/group?reset=1',NULL,'access CiviCRM','',15,1,1,10),(26,1,'New Tag','New Tag','civicrm/tag?reset=1&action=add',NULL,'manage tags','',15,1,NULL,11),(27,1,'Manage Tags (Categories)','Manage Tags (Categories)','civicrm/tag?reset=1',NULL,'manage tags','',15,1,1,12),(28,1,'Find and Merge Duplicate Contacts','Find and Merge Duplicate Contacts','civicrm/contact/deduperules?reset=1',NULL,'administer dedupe rules,merge duplicate contacts','OR',15,1,NULL,13),(29,1,'Contributions','Contributions',NULL,'crm-i fa-credit-card','access CiviContribute','',NULL,1,NULL,30),(30,1,'Dashboard','Dashboard','civicrm/contribute?reset=1',NULL,'access CiviContribute','',29,1,NULL,1),(31,1,'New Contribution','New Contribution','civicrm/contribute/add?reset=1&action=add&context=standalone',NULL,'access CiviContribute,edit contributions','AND',29,1,NULL,2),(32,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',29,1,NULL,3),(33,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',29,1,1,4),(34,1,'Import Contributions','Import Contributions','civicrm/contribute/import?reset=1',NULL,'access CiviContribute,edit contributions','AND',29,1,1,5),(35,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',29,1,NULL,7),(36,1,'Pledges','Pledges',NULL,NULL,'access CiviPledge','',29,1,1,6),(37,1,'Accounting Batches','Accounting Batches',NULL,NULL,'view own manual batches,view all manual batches','OR',29,1,1,8),(38,1,'Dashboard','Dashboard','civicrm/pledge?reset=1',NULL,'access CiviPledge','',36,1,NULL,1),(39,1,'New Pledge','New Pledge','civicrm/pledge/add?reset=1&action=add&context=standalone',NULL,'access CiviPledge,edit pledges','AND',36,1,NULL,2),(40,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',36,1,NULL,3),(41,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',36,1,0,4),(42,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute/add?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,9),(43,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,10),(44,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,11),(45,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,12),(46,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,13),(47,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,14),(48,1,'New Batch','New Batch','civicrm/financial/batch?reset=1&action=add',NULL,'create manual batch','AND',37,1,NULL,1),(49,1,'Open Batches','Open Batches','civicrm/financial/financialbatches?reset=1&batchStatus=1',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,2),(50,1,'Closed Batches','Closed Batches','civicrm/financial/financialbatches?reset=1&batchStatus=2',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,3),(51,1,'Exported Batches','Exported Batches','civicrm/financial/financialbatches?reset=1&batchStatus=5',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,4),(52,1,'Events','Events',NULL,'crm-i fa-calendar','access CiviEvent','',NULL,1,NULL,40),(53,1,'Dashboard','CiviEvent Dashboard','civicrm/event?reset=1',NULL,'access CiviEvent','',52,1,NULL,1),(54,1,'Register Event Participant','Register Event Participant','civicrm/participant/add?reset=1&action=add&context=standalone',NULL,'access CiviEvent,edit event participants','AND',52,1,NULL,2),(55,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',52,1,NULL,3),(56,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',52,1,1,4),(57,1,'Import Participants','Import Participants','civicrm/event/import?reset=1',NULL,'access CiviEvent,edit event participants','AND',52,1,1,5),(58,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,6),(59,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,7),(60,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',52,1,1,8),(61,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,9),(62,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,10),(63,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,11),(64,1,'Mailings','Mailings',NULL,'crm-i fa-envelope-o','access CiviMail,create mailings,approve mailings,schedule mailings,send SMS','OR',NULL,1,NULL,50),(65,1,'New Mailing','New Mailing','civicrm/mailing/send?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,1),(66,1,'Draft and Unscheduled Mailings','Draft and Unscheduled Mailings','civicrm/mailing/browse/unscheduled?reset=1&scheduled=false',NULL,'access CiviMail,create mailings,schedule mailings','OR',64,1,NULL,2),(67,1,'Scheduled and Sent Mailings','Scheduled and Sent Mailings','civicrm/mailing/browse/scheduled?reset=1&scheduled=true',NULL,'access CiviMail,approve mailings,create mailings,schedule mailings','OR',64,1,NULL,3),(68,1,'Archived Mailings','Archived Mailings','civicrm/mailing/browse/archived?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,4),(69,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',64,1,1,5),(70,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',64,1,NULL,6),(71,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'edit message templates,edit user-driven message templates,edit system workflow message templates','OR',64,1,NULL,7),(72,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',64,1,1,8),(73,1,'New SMS','New SMS','civicrm/sms/send?reset=1',NULL,'send SMS',NULL,64,1,NULL,9),(74,1,'Find Mass SMS','Find Mass SMS','civicrm/mailing/browse?reset=1&sms=1',NULL,'send SMS',NULL,64,1,1,10),(75,1,'New A/B Test','New A/B Test','civicrm/a/#/abtest/new',NULL,'access CiviMail','',64,1,NULL,15),(76,1,'Manage A/B Tests','Manage A/B Tests','civicrm/a/#/abtest',NULL,'access CiviMail','',64,1,1,16),(77,1,'Memberships','Memberships',NULL,'crm-i fa-id-badge','access CiviMember','',NULL,1,NULL,60),(78,1,'Dashboard','Dashboard','civicrm/member?reset=1',NULL,'access CiviMember','',77,1,NULL,1),(79,1,'New Membership','New Membership','civicrm/member/add?reset=1&action=add&context=standalone',NULL,'access CiviMember,edit memberships','AND',77,1,NULL,2),(80,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',77,1,NULL,3),(81,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',77,1,1,4),(82,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',77,1,NULL,5),(83,1,'Import Memberships','Import Members','civicrm/member/import?reset=1',NULL,'access CiviMember,edit memberships','AND',77,1,1,6),(84,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,7),(85,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,8),(86,1,'Campaigns','Campaigns',NULL,'crm-i fa-bullhorn','interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',NULL,1,NULL,70),(87,1,'Dashboard','Dashboard','civicrm/campaign?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,1),(88,1,'Surveys','Survey Dashboard','civicrm/campaign?reset=1&subPage=survey',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,1),(89,1,'Petitions','Petition Dashboard','civicrm/campaign?reset=1&subPage=petition',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,2),(90,1,'Campaigns','Campaign Dashboard','civicrm/campaign?reset=1&subPage=campaign',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,3),(91,1,'New Campaign','New Campaign','civicrm/campaign/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,2),(92,1,'New Survey','New Survey','civicrm/survey/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,3),(93,1,'New Petition','New Petition','civicrm/petition/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,4),(94,1,'Reserve Respondents','Reserve Respondents','civicrm/survey/search?reset=1&op=reserve',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts','OR',86,1,NULL,5),(95,1,'Interview Respondents','Interview Respondents','civicrm/survey/search?reset=1&op=interview',NULL,'administer CiviCampaign,manage campaign,interview campaign contacts','OR',86,1,NULL,6),(96,1,'Release Respondents','Release Respondents','civicrm/survey/search?reset=1&op=release',NULL,'administer CiviCampaign,manage campaign,release campaign contacts','OR',86,1,NULL,7),(97,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',86,1,1,8),(98,1,'Conduct Survey','Conduct Survey','civicrm/campaign/vote?reset=1',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts,interview campaign contacts','OR',86,1,NULL,9),(99,1,'GOTV (Voter Tracking)','Voter Listing','civicrm/campaign/gotv?reset=1',NULL,'administer CiviCampaign,manage campaign,release campaign contacts,gotv campaign contacts','OR',86,1,NULL,10),(100,1,'Cases','Cases',NULL,'crm-i fa-folder-open-o','access my cases and activities,access all cases and activities','OR',NULL,1,NULL,80),(101,1,'Dashboard','Dashboard','civicrm/case?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,NULL,1),(102,1,'New Case','New Case','civicrm/case/add?reset=1&action=add&atype=13&context=standalone',NULL,'add cases,access all cases and activities','OR',100,1,NULL,2),(103,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,1,3),(104,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',100,1,0,4),(105,1,'Grants','Grants',NULL,'crm-i fa-money','access CiviGrant','',NULL,1,NULL,90),(106,1,'Dashboard','Dashboard','civicrm/grant?reset=1',NULL,'access CiviGrant','',105,1,NULL,1),(107,1,'New Grant','New Grant','civicrm/grant/add?reset=1&action=add&context=standalone',NULL,'access CiviGrant,edit grants','AND',105,1,NULL,2),(108,1,'Find Grants','Find Grants','civicrm/grant/search?reset=1',NULL,'access CiviGrant','',105,1,1,3),(109,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',105,1,0,4),(110,1,'Administer','Administer',NULL,'crm-i fa-gears','administer CiviCRM','',NULL,1,NULL,100),(111,1,'Administration Console','Administration Console','civicrm/admin?reset=1',NULL,'administer CiviCRM','',110,1,NULL,1),(112,1,'System Status','System Status','civicrm/a/#/status',NULL,'administer CiviCRM','',111,1,NULL,0),(113,1,'Configuration Checklist','Configuration Checklist','civicrm/admin/configtask?reset=1',NULL,'administer CiviCRM','',111,1,NULL,1),(114,1,'Customize Data and Screens','Customize Data and Screens',NULL,NULL,'administer CiviCRM','',110,1,NULL,3),(115,1,'Custom Fields','Custom Fields','civicrm/admin/custom/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,1),(116,1,'Profiles','Profiles','civicrm/admin/uf/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,2),(117,1,'Tags (Categories)','Tags (Categories)','civicrm/tag?reset=1',NULL,'administer CiviCRM','',114,1,NULL,3),(118,1,'Activity Types','Activity Types','civicrm/admin/options/activity_type?reset=1',NULL,'administer CiviCRM','',114,1,NULL,4),(119,1,'Relationship Types','Relationship Types','civicrm/admin/reltype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,5),(120,1,'Contact Types','Contact Types','civicrm/admin/options/subtype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,6),(121,1,'Display Preferences','Display Preferences','civicrm/admin/setting/preferences/display?reset=1',NULL,'administer CiviCRM','',114,1,NULL,9),(122,1,'Search Preferences','Search Preferences','civicrm/admin/setting/search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,10),(123,1,'Date Preferences','Date Preferences','civicrm/admin/setting/preferences/date?reset=1',NULL,'administer CiviCRM','',114,1,NULL,11),(124,1,'Navigation Menu','Navigation Menu','civicrm/admin/menu?reset=1',NULL,'administer CiviCRM','',114,1,NULL,12),(125,1,'Word Replacements','Word Replacements','civicrm/admin/options/wordreplacements?reset=1',NULL,'administer CiviCRM','',114,1,NULL,13),(126,1,'Manage Custom Searches','Manage Custom Searches','civicrm/admin/options/custom_search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,14),(127,1,'Dropdown Options','Dropdown Options','civicrm/admin/options?action=browse&reset=1',NULL,'administer CiviCRM','',114,1,NULL,8),(128,1,'Gender Options','Gender Options','civicrm/admin/options/gender?reset=1',NULL,'administer CiviCRM','',127,1,NULL,1),(129,1,'Individual Prefixes (Ms, Mr...)','Individual Prefixes (Ms, Mr...)','civicrm/admin/options/individual_prefix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,2),(130,1,'Individual Suffixes (Jr, Sr...)','Individual Suffixes (Jr, Sr...)','civicrm/admin/options/individual_suffix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,3),(131,1,'Instant Messenger Services','Instant Messenger Services','civicrm/admin/options/instant_messenger_service?reset=1',NULL,'administer CiviCRM','',127,1,NULL,4),(132,1,'Location Types (Home, Work...)','Location Types (Home, Work...)','civicrm/admin/locationType?reset=1',NULL,'administer CiviCRM','',127,1,NULL,5),(133,1,'Mobile Phone Providers','Mobile Phone Providers','civicrm/admin/options/mobile_provider?reset=1',NULL,'administer CiviCRM','',127,1,NULL,6),(134,1,'Phone Types','Phone Types','civicrm/admin/options/phone_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,7),(135,1,'Website Types','Website Types','civicrm/admin/options/website_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,8),(136,1,'Communications','Communications',NULL,NULL,'administer CiviCRM','',110,1,NULL,4),(137,1,'Organization Address and Contact Info','Organization Address and Contact Info','civicrm/admin/domain?action=update&reset=1',NULL,'administer CiviCRM','',136,1,NULL,1),(138,1,'FROM Email Addresses','FROM Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',136,1,NULL,2),(139,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',136,1,NULL,3),(140,1,'Schedule Reminders','Schedule Reminders','civicrm/admin/scheduleReminders?reset=1',NULL,'administer CiviCRM','',136,1,NULL,4),(141,1,'Preferred Communication Methods','Preferred Communication Methods','civicrm/admin/options/preferred_communication_method?reset=1',NULL,'administer CiviCRM','',136,1,NULL,5),(142,1,'Label Formats','Label Formats','civicrm/admin/labelFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,6),(143,1,'Print Page (PDF) Formats','Print Page (PDF) Formats','civicrm/admin/pdfFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,7),(144,1,'Communication Style Options','Communication Style Options','civicrm/admin/options/communication_style?reset=1',NULL,'administer CiviCRM','',136,1,NULL,8),(145,1,'Email Greeting Formats','Email Greeting Formats','civicrm/admin/options/email_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,9),(146,1,'Postal Greeting Formats','Postal Greeting Formats','civicrm/admin/options/postal_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,10),(147,1,'Addressee Formats','Addressee Formats','civicrm/admin/options/addressee?reset=1',NULL,'administer CiviCRM','',136,1,NULL,11),(148,1,'Localization','Localization',NULL,NULL,'administer CiviCRM','',110,1,NULL,6),(149,1,'Languages, Currency, Locations','Languages, Currency, Locations','civicrm/admin/setting/localization?reset=1',NULL,'administer CiviCRM','',148,1,NULL,1),(150,1,'Address Settings','Address Settings','civicrm/admin/setting/preferences/address?reset=1',NULL,'administer CiviCRM','',148,1,NULL,2),(151,1,'Date Formats','Date Formats','civicrm/admin/setting/date?reset=1',NULL,'administer CiviCRM','',148,1,NULL,3),(152,1,'Preferred Language Options','Preferred Language Options','civicrm/admin/options/languages?reset=1',NULL,'administer CiviCRM','',148,1,NULL,4),(153,1,'Users and Permissions','Users and Permissions',NULL,NULL,'administer CiviCRM','',110,1,NULL,7),(154,1,'Permissions (Access Control)','Permissions (Access Control)','civicrm/admin/access?reset=1',NULL,'administer CiviCRM','',153,1,NULL,1),(155,1,'Synchronize Users to Contacts','Synchronize Users to Contacts','civicrm/admin/synchUser?reset=1',NULL,'administer CiviCRM','',153,1,NULL,2),(156,1,'System Settings','System Settings',NULL,NULL,'administer CiviCRM','',110,1,NULL,8),(157,1,'Components','Enable Components','civicrm/admin/setting/component?reset=1',NULL,'administer CiviCRM','',156,1,NULL,1),(158,1,'Connections','Connections','civicrm/a/#/cxn',NULL,'administer CiviCRM','',156,1,NULL,2),(159,1,'Extensions','Manage Extensions','civicrm/admin/extensions?reset=1',NULL,'administer CiviCRM','',156,1,1,3),(160,1,'Cleanup Caches and Update Paths','Cleanup Caches and Update Paths','civicrm/admin/setting/updateConfigBackend?reset=1',NULL,'administer CiviCRM','',156,1,NULL,4),(161,1,'CMS Database Integration','CMS Integration','civicrm/admin/setting/uf?reset=1',NULL,'administer CiviCRM','',156,1,NULL,5),(162,1,'Debugging and Error Handling','Debugging and Error Handling','civicrm/admin/setting/debug?reset=1',NULL,'administer CiviCRM','',156,1,NULL,6),(163,1,'Directories','Directories','civicrm/admin/setting/path?reset=1',NULL,'administer CiviCRM','',156,1,NULL,7),(164,1,'Import/Export Mappings','Import/Export Mappings','civicrm/admin/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,8),(165,1,'Mapping and Geocoding','Mapping and Geocoding','civicrm/admin/setting/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,9),(166,1,'Misc (Undelete, PDFs, Limits, Logging, etc.)','misc_admin_settings','civicrm/admin/setting/misc?reset=1',NULL,'administer CiviCRM','',156,1,NULL,10),(167,1,'Multi Site Settings','Multi Site Settings','civicrm/admin/setting/preferences/multisite?reset=1',NULL,'administer CiviCRM','',156,1,NULL,11),(168,1,'Option Groups','Option Groups','civicrm/admin/options?reset=1',NULL,'administer CiviCRM','',156,1,NULL,12),(169,1,'Outbound Email (SMTP/Sendmail)','Outbound Email','civicrm/admin/setting/smtp?reset=1',NULL,'administer CiviCRM','',156,1,NULL,13),(170,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',156,1,NULL,14),(171,1,'Resource URLs','Resource URLs','civicrm/admin/setting/url?reset=1',NULL,'administer CiviCRM','',156,1,NULL,15),(172,1,'Safe File Extensions','Safe File Extensions','civicrm/admin/options/safe_file_extension?reset=1',NULL,'administer CiviCRM','',156,1,NULL,16),(173,1,'Scheduled Jobs','Scheduled Jobs','civicrm/admin/job?reset=1',NULL,'administer CiviCRM','',156,1,NULL,17),(174,1,'SMS Providers','SMS Providers','civicrm/admin/sms/provider?reset=1',NULL,'administer CiviCRM','',156,1,NULL,18),(175,1,'CiviCampaign','CiviCampaign',NULL,NULL,'administer CiviCampaign,administer CiviCRM','AND',110,1,NULL,9),(176,1,'Survey Types','Survey Types','civicrm/admin/campaign/surveyType?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,1),(177,1,'Campaign Types','Campaign Types','civicrm/admin/options/campaign_type?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,2),(178,1,'Campaign Status','Campaign Status','civicrm/admin/options/campaign_status?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,3),(179,1,'Engagement Index','Engagement Index','civicrm/admin/options/engagement_index?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,4),(180,1,'CiviCampaign Component Settings','CiviCampaign Component Settings','civicrm/admin/setting/preferences/campaign?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,5),(181,1,'CiviCase','CiviCase',NULL,NULL,'administer CiviCase',NULL,110,1,NULL,10),(182,1,'CiviCase Settings','CiviCase Settings','civicrm/admin/setting/case?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,1),(183,1,'Case Types','Case Types','civicrm/a/#/caseType',NULL,'administer CiviCase',NULL,181,1,NULL,2),(184,1,'Redaction Rules','Redaction Rules','civicrm/admin/options/redaction_rule?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,3),(185,1,'Case Statuses','Case Statuses','civicrm/admin/options/case_status?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,4),(186,1,'Encounter Medium','Encounter Medium','civicrm/admin/options/encounter_medium?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,5),(187,1,'CiviContribute','CiviContribute',NULL,NULL,'access CiviContribute,administer CiviCRM','AND',110,1,NULL,11),(188,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,6),(189,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,7),(190,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,8),(191,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,9),(192,1,'Financial Types','Financial Types','civicrm/admin/financial/financialType?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,10),(193,1,'Financial Accounts','Financial Accounts','civicrm/admin/financial/financialAccount?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,11),(194,1,'Payment Methods','Payment Instruments','civicrm/admin/options/payment_instrument?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,12),(195,1,'Accepted Credit Cards','Accepted Credit Cards','civicrm/admin/options/accept_creditcard?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,13),(196,1,'Soft Credit Types','Soft Credit Types','civicrm/admin/options/soft_credit_type?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,14),(197,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,15),(198,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,16),(199,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',187,1,NULL,17),(200,1,'CiviContribute Component Settings','CiviContribute Component Settings','civicrm/admin/setting/preferences/contribute?reset=1',NULL,'administer CiviCRM','',187,1,NULL,18),(201,1,'CiviEvent','CiviEvent',NULL,NULL,'access CiviEvent,administer CiviCRM','AND',110,1,NULL,12),(202,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,1),(203,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,2),(204,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,3),(205,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,4),(206,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,5),(207,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,6),(208,1,'Event Types','Event Types','civicrm/admin/options/event_type?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,7),(209,1,'Participant Statuses','Participant Statuses','civicrm/admin/participant_status?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,8),(210,1,'Participant Roles','Participant Roles','civicrm/admin/options/participant_role?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,9),(211,1,'Participant Listing Options','Participant Listing Options','civicrm/admin/options/participant_listing?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,10),(212,1,'Event Name Badge Layouts','Event Name Badge Layouts','civicrm/admin/badgelayout?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,11),(213,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',201,1,NULL,12),(214,1,'CiviEvent Component Settings','CiviEvent Component Settings','civicrm/admin/setting/preferences/event?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,13),(215,1,'CiviGrant','CiviGrant',NULL,NULL,'access CiviGrant,administer CiviCRM','AND',110,1,NULL,13),(216,1,'Grant Types','Grant Types','civicrm/admin/options/grant_type?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,1),(217,1,'Grant Status','Grant Status','civicrm/admin/options/grant_status?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,2),(218,1,'CiviMail','CiviMail',NULL,NULL,'access CiviMail,administer CiviCRM','AND',110,1,NULL,14),(219,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,1),(220,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',218,1,NULL,2),(221,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',218,1,NULL,3),(222,1,'Mail Accounts','Mail Accounts','civicrm/admin/mailSettings?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,4),(223,1,'Mailer Settings','Mailer Settings','civicrm/admin/mail?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,5),(224,1,'CiviMail Component Settings','CiviMail Component Settings','civicrm/admin/setting/preferences/mailing?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,6),(225,1,'CiviMember','CiviMember',NULL,NULL,'access CiviMember,administer CiviCRM','AND',110,1,NULL,15),(226,1,'Membership Types','Membership Types','civicrm/admin/member/membershipType?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,1),(227,1,'Membership Status Rules','Membership Status Rules','civicrm/admin/member/membershipStatus?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,1,2),(228,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,3),(229,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,4),(230,1,'CiviMember Component Settings','CiviMember Component Settings','civicrm/admin/setting/preferences/member?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,5),(231,1,'CiviReport','CiviReport',NULL,NULL,'access CiviReport,administer CiviCRM','AND',110,1,NULL,16),(232,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',231,1,NULL,1),(233,1,'Create New Report from Template','Create New Report from Template','civicrm/admin/report/template/list?reset=1',NULL,'administer Reports','',231,1,NULL,2),(234,1,'Manage Templates','Manage Templates','civicrm/admin/report/options/report_template?reset=1',NULL,'administer Reports','',231,1,NULL,3),(235,1,'Register Report','Register Report','civicrm/admin/report/register?reset=1',NULL,'administer Reports','',231,1,NULL,4),(236,1,'Support','Support',NULL,'crm-i fa-life-ring',NULL,'',NULL,1,NULL,110),(237,1,'Get started','Get started','https://civicrm.org/get-started?src=iam',NULL,NULL,'AND',236,1,NULL,1),(238,1,'Documentation','Documentation','https://civicrm.org/documentation?src=iam',NULL,NULL,'AND',236,1,NULL,2),(239,1,'Ask a question','Ask a question','https://civicrm.org/ask-a-question?src=iam',NULL,NULL,'AND',236,1,NULL,3),(240,1,'Get expert help','Get expert help','https://civicrm.org/experts?src=iam',NULL,NULL,'AND',236,1,NULL,4),(241,1,'About CiviCRM','About CiviCRM','https://civicrm.org/about?src=iam',NULL,NULL,'AND',236,1,1,5),(242,1,'Register your site','Register your site','https://civicrm.org/register-your-site?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,6),(243,1,'Join CiviCRM','Join CiviCRM','https://civicrm.org/become-a-member?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,7),(244,1,'Developer','Developer',NULL,NULL,'administer CiviCRM','',236,1,1,8),(245,1,'Api Explorer v3','API Explorer','civicrm/api3',NULL,'administer CiviCRM','',244,1,NULL,1),(246,1,'Api Explorer v4','Api Explorer v4','civicrm/api4#/explorer',NULL,'administer CiviCRM','',244,1,NULL,2),(247,1,'Developer Docs','Developer Docs','https://civicrm.org/developer-documentation?src=iam',NULL,'administer CiviCRM','',244,1,NULL,3),(248,1,'Reports','Reports',NULL,'crm-i fa-bar-chart','access CiviReport','',NULL,1,NULL,95),(249,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'administer CiviCRM','',248,1,0,1),(250,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',248,1,0,2),(251,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',248,1,0,3),(252,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',248,1,0,4),(253,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',248,1,0,5),(254,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',248,1,0,6),(255,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',248,1,0,7),(256,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',248,1,0,8),(257,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',248,1,0,9),(258,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',248,1,1,10),(259,1,'My Reports','My Reports','civicrm/report/list?myreports=1&reset=1',NULL,'access CiviReport','',248,1,1,11),(260,1,'New Student','New Student','civicrm/contact/add?ct=Individual&cst=Student&reset=1',NULL,'add contacts','',16,1,NULL,1),(261,1,'New Parent','New Parent','civicrm/contact/add?ct=Individual&cst=Parent&reset=1',NULL,'add contacts','',16,1,NULL,2),(262,1,'New Staff','New Staff','civicrm/contact/add?ct=Individual&cst=Staff&reset=1',NULL,'add contacts','',16,1,NULL,3),(263,1,'New Team','New Team','civicrm/contact/add?ct=Organization&cst=Team&reset=1',NULL,'add contacts','',18,1,NULL,1),(264,1,'New Sponsor','New Sponsor','civicrm/contact/add?ct=Organization&cst=Sponsor&reset=1',NULL,'add contacts','',18,1,NULL,2); +INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `icon`, `permission`, `permission_operator`, `parent_id`, `is_active`, `has_separator`, `weight`) VALUES + (1,1,'Home','Home','civicrm/dashboard?reset=1',NULL,NULL,'',NULL,1,NULL,0), + (2,1,'Search','Search',NULL,'crm-i fa-search',NULL,'',NULL,1,NULL,10), + (3,1,'Find Contacts','Find Contacts','civicrm/contact/search?reset=1',NULL,NULL,'',2,1,NULL,1), + (4,1,'Advanced Search','Advanced Search','civicrm/contact/search/advanced?reset=1',NULL,NULL,'',2,1,NULL,2), + (5,1,'Full-text Search','Full-text Search','civicrm/contact/search/custom?csid=15&reset=1',NULL,NULL,'',2,1,NULL,3), + (6,1,'Search Builder','Search Builder','civicrm/contact/search/builder?reset=1',NULL,NULL,'',2,1,1,4), + (7,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',2,1,NULL,5), + (8,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',2,1,NULL,6), + (9,1,'Find Mailings','Find Mailings','civicrm/mailing?reset=1',NULL,'access CiviMail','',2,1,NULL,7), + (10,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',2,1,NULL,8), + (11,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',2,1,NULL,9), + (12,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',2,1,NULL,10), + (13,1,'Find Activities','Find Activities','civicrm/activity/search?reset=1',NULL,NULL,'',2,1,1,11), + (14,1,'Custom Searches','Custom Searches','civicrm/contact/search/custom/list?reset=1',NULL,NULL,'',2,1,NULL,12), + (15,1,'Contacts','Contacts',NULL,'crm-i fa-address-book-o',NULL,'',NULL,1,NULL,20), + (16,1,'New Individual','New Individual','civicrm/contact/add?reset=1&ct=Individual',NULL,'add contacts','',15,1,NULL,1), + (17,1,'New Household','New Household','civicrm/contact/add?reset=1&ct=Household',NULL,'add contacts','',15,1,NULL,2), + (18,1,'New Organization','New Organization','civicrm/contact/add?reset=1&ct=Organization',NULL,'add contacts','',15,1,1,3), + (19,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'access CiviReport','',15,1,1,4), + (20,1,'New Activity','New Activity','civicrm/activity?reset=1&action=add&context=standalone',NULL,NULL,'',15,1,NULL,5), + (21,1,'New Email','New Email','civicrm/activity/email/add?atype=3&action=add&reset=1&context=standalone',NULL,NULL,'',15,1,1,6), + (22,1,'Import Contacts','Import Contacts','civicrm/import/contact?reset=1',NULL,'import contacts','',15,1,NULL,7), + (23,1,'Import Activities','Import Activities','civicrm/import/activity?reset=1',NULL,'import contacts','',15,1,1,8), + (24,1,'New Group','New Group','civicrm/group/add?reset=1',NULL,'edit groups','',15,1,NULL,9), + (25,1,'Manage Groups','Manage Groups','civicrm/group?reset=1',NULL,'access CiviCRM','',15,1,1,10), + (26,1,'New Tag','New Tag','civicrm/tag?reset=1&action=add',NULL,'manage tags','',15,1,NULL,11), + (27,1,'Manage Tags (Categories)','Manage Tags (Categories)','civicrm/tag?reset=1',NULL,'manage tags','',15,1,1,12), + (28,1,'Find and Merge Duplicate Contacts','Find and Merge Duplicate Contacts','civicrm/contact/deduperules?reset=1',NULL,'administer dedupe rules,merge duplicate contacts','OR',15,1,NULL,13), + (29,1,'Contributions','Contributions',NULL,'crm-i fa-credit-card','access CiviContribute','',NULL,1,NULL,30), + (30,1,'Dashboard','Dashboard','civicrm/contribute?reset=1',NULL,'access CiviContribute','',29,1,NULL,1), + (31,1,'New Contribution','New Contribution','civicrm/contribute/add?reset=1&action=add&context=standalone',NULL,'access CiviContribute,edit contributions','AND',29,1,NULL,2), + (32,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',29,1,NULL,3), + (33,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',29,1,1,4), + (34,1,'Import Contributions','Import Contributions','civicrm/contribute/import?reset=1',NULL,'access CiviContribute,edit contributions','AND',29,1,1,5), + (35,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',29,1,NULL,7), + (36,1,'Pledges','Pledges',NULL,NULL,'access CiviPledge','',29,1,1,6), + (37,1,'Accounting Batches','Accounting Batches',NULL,NULL,'view own manual batches,view all manual batches','OR',29,1,1,8), + (38,1,'Dashboard','Dashboard','civicrm/pledge?reset=1',NULL,'access CiviPledge','',36,1,NULL,1), + (39,1,'New Pledge','New Pledge','civicrm/pledge/add?reset=1&action=add&context=standalone',NULL,'access CiviPledge,edit pledges','AND',36,1,NULL,2), + (40,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',36,1,NULL,3), + (41,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',36,1,0,4), + (42,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute/add?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,9), + (43,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,10), + (44,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,11), + (45,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,12), + (46,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,13), + (47,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,14), + (48,1,'New Batch','New Batch','civicrm/financial/batch?reset=1&action=add',NULL,'create manual batch','AND',37,1,NULL,1), + (49,1,'Open Batches','Open Batches','civicrm/financial/financialbatches?reset=1&batchStatus=1',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,2), + (50,1,'Closed Batches','Closed Batches','civicrm/financial/financialbatches?reset=1&batchStatus=2',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,3), + (51,1,'Exported Batches','Exported Batches','civicrm/financial/financialbatches?reset=1&batchStatus=5',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,4), + (52,1,'Events','Events',NULL,'crm-i fa-calendar','access CiviEvent','',NULL,1,NULL,40), + (53,1,'Dashboard','CiviEvent Dashboard','civicrm/event?reset=1',NULL,'access CiviEvent','',52,1,NULL,1), + (54,1,'Register Event Participant','Register Event Participant','civicrm/participant/add?reset=1&action=add&context=standalone',NULL,'access CiviEvent,edit event participants','AND',52,1,NULL,2), + (55,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',52,1,NULL,3), + (56,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',52,1,1,4), + (57,1,'Import Participants','Import Participants','civicrm/event/import?reset=1',NULL,'access CiviEvent,edit event participants','AND',52,1,1,5), + (58,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,6), + (59,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,7), + (60,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',52,1,1,8), + (61,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,9), + (62,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,10), + (63,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,11), + (64,1,'Mailings','Mailings',NULL,'crm-i fa-envelope-o','access CiviMail,create mailings,approve mailings,schedule mailings,send SMS','OR',NULL,1,NULL,50), + (65,1,'New Mailing','New Mailing','civicrm/mailing/send?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,1), + (66,1,'Draft and Unscheduled Mailings','Draft and Unscheduled Mailings','civicrm/mailing/browse/unscheduled?reset=1&scheduled=false',NULL,'access CiviMail,create mailings,schedule mailings','OR',64,1,NULL,2), + (67,1,'Scheduled and Sent Mailings','Scheduled and Sent Mailings','civicrm/mailing/browse/scheduled?reset=1&scheduled=true',NULL,'access CiviMail,approve mailings,create mailings,schedule mailings','OR',64,1,NULL,3), + (68,1,'Archived Mailings','Archived Mailings','civicrm/mailing/browse/archived?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,4), + (69,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',64,1,1,5), + (70,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',64,1,NULL,6), + (71,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'edit message templates,edit user-driven message templates,edit system workflow message templates','OR',64,1,NULL,7), + (72,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',64,1,1,8), + (73,1,'New SMS','New SMS','civicrm/sms/send?reset=1',NULL,'send SMS',NULL,64,1,NULL,9), + (74,1,'Find Mass SMS','Find Mass SMS','civicrm/mailing/browse?reset=1&sms=1',NULL,'send SMS',NULL,64,1,1,10), + (75,1,'New A/B Test','New A/B Test','civicrm/a/#/abtest/new',NULL,'access CiviMail','',64,1,NULL,15), + (76,1,'Manage A/B Tests','Manage A/B Tests','civicrm/a/#/abtest',NULL,'access CiviMail','',64,1,1,16), + (77,1,'Memberships','Memberships',NULL,'crm-i fa-id-badge','access CiviMember','',NULL,1,NULL,60), + (78,1,'Dashboard','Dashboard','civicrm/member?reset=1',NULL,'access CiviMember','',77,1,NULL,1), + (79,1,'New Membership','New Membership','civicrm/member/add?reset=1&action=add&context=standalone',NULL,'access CiviMember,edit memberships','AND',77,1,NULL,2), + (80,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',77,1,NULL,3), + (81,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',77,1,1,4), + (82,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',77,1,NULL,5), + (83,1,'Import Memberships','Import Members','civicrm/member/import?reset=1',NULL,'access CiviMember,edit memberships','AND',77,1,1,6), + (84,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,7), + (85,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,8), + (86,1,'Campaigns','Campaigns',NULL,'crm-i fa-bullhorn','interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',NULL,1,NULL,70), + (87,1,'Dashboard','Dashboard','civicrm/campaign?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,1), + (88,1,'Surveys','Survey Dashboard','civicrm/campaign?reset=1&subPage=survey',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,1), + (89,1,'Petitions','Petition Dashboard','civicrm/campaign?reset=1&subPage=petition',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,2), + (90,1,'Campaigns','Campaign Dashboard','civicrm/campaign?reset=1&subPage=campaign',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,3), + (91,1,'New Campaign','New Campaign','civicrm/campaign/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,2), + (92,1,'New Survey','New Survey','civicrm/survey/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,3), + (93,1,'New Petition','New Petition','civicrm/petition/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,4), + (94,1,'Reserve Respondents','Reserve Respondents','civicrm/survey/search?reset=1&op=reserve',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts','OR',86,1,NULL,5), + (95,1,'Interview Respondents','Interview Respondents','civicrm/survey/search?reset=1&op=interview',NULL,'administer CiviCampaign,manage campaign,interview campaign contacts','OR',86,1,NULL,6), + (96,1,'Release Respondents','Release Respondents','civicrm/survey/search?reset=1&op=release',NULL,'administer CiviCampaign,manage campaign,release campaign contacts','OR',86,1,NULL,7), + (97,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',86,1,1,8), + (98,1,'Conduct Survey','Conduct Survey','civicrm/campaign/vote?reset=1',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts,interview campaign contacts','OR',86,1,NULL,9), + (99,1,'GOTV (Voter Tracking)','Voter Listing','civicrm/campaign/gotv?reset=1',NULL,'administer CiviCampaign,manage campaign,release campaign contacts,gotv campaign contacts','OR',86,1,NULL,10), + (100,1,'Cases','Cases',NULL,'crm-i fa-folder-open-o','access my cases and activities,access all cases and activities','OR',NULL,1,NULL,80), + (101,1,'Dashboard','Dashboard','civicrm/case?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,NULL,1), + (102,1,'New Case','New Case','civicrm/case/add?reset=1&action=add&atype=13&context=standalone',NULL,'add cases,access all cases and activities','OR',100,1,NULL,2), + (103,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,1,3), + (104,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',100,1,0,4), + (105,1,'Grants','Grants',NULL,'crm-i fa-money','access CiviGrant','',NULL,1,NULL,90), + (106,1,'Dashboard','Dashboard','civicrm/grant?reset=1',NULL,'access CiviGrant','',105,1,NULL,1), + (107,1,'New Grant','New Grant','civicrm/grant/add?reset=1&action=add&context=standalone',NULL,'access CiviGrant,edit grants','AND',105,1,NULL,2), + (108,1,'Find Grants','Find Grants','civicrm/grant/search?reset=1',NULL,'access CiviGrant','',105,1,1,3), + (109,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',105,1,0,4), + (110,1,'Administer','Administer',NULL,'crm-i fa-gears','administer CiviCRM','',NULL,1,NULL,100), + (111,1,'Administration Console','Administration Console','civicrm/admin?reset=1',NULL,'administer CiviCRM','',110,1,NULL,1), + (112,1,'System Status','System Status','civicrm/a/#/status',NULL,'administer CiviCRM','',111,1,NULL,0), + (113,1,'Configuration Checklist','Configuration Checklist','civicrm/admin/configtask?reset=1',NULL,'administer CiviCRM','',111,1,NULL,1), + (114,1,'Customize Data and Screens','Customize Data and Screens',NULL,NULL,'administer CiviCRM','',110,1,NULL,3), + (115,1,'Custom Fields','Custom Fields','civicrm/admin/custom/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,1), + (116,1,'Profiles','Profiles','civicrm/admin/uf/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,2), + (117,1,'Tags (Categories)','Tags (Categories)','civicrm/tag?reset=1',NULL,'administer CiviCRM','',114,1,NULL,3), + (118,1,'Activity Types','Activity Types','civicrm/admin/options/activity_type?reset=1',NULL,'administer CiviCRM','',114,1,NULL,4), + (119,1,'Relationship Types','Relationship Types','civicrm/admin/reltype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,5), + (120,1,'Contact Types','Contact Types','civicrm/admin/options/subtype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,6), + (121,1,'Display Preferences','Display Preferences','civicrm/admin/setting/preferences/display?reset=1',NULL,'administer CiviCRM','',114,1,NULL,9), + (122,1,'Search Preferences','Search Preferences','civicrm/admin/setting/search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,10), + (123,1,'Date Preferences','Date Preferences','civicrm/admin/setting/preferences/date?reset=1',NULL,'administer CiviCRM','',114,1,NULL,11), + (124,1,'Navigation Menu','Navigation Menu','civicrm/admin/menu?reset=1',NULL,'administer CiviCRM','',114,1,NULL,12), + (125,1,'Word Replacements','Word Replacements','civicrm/admin/options/wordreplacements?reset=1',NULL,'administer CiviCRM','',114,1,NULL,13), + (126,1,'Manage Custom Searches','Manage Custom Searches','civicrm/admin/options/custom_search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,14), + (127,1,'Dropdown Options','Dropdown Options','civicrm/admin/options?action=browse&reset=1',NULL,'administer CiviCRM','',114,1,NULL,8), + (128,1,'Gender Options','Gender Options','civicrm/admin/options/gender?reset=1',NULL,'administer CiviCRM','',127,1,NULL,1), + (129,1,'Individual Prefixes (Ms, Mr...)','Individual Prefixes (Ms, Mr...)','civicrm/admin/options/individual_prefix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,2), + (130,1,'Individual Suffixes (Jr, Sr...)','Individual Suffixes (Jr, Sr...)','civicrm/admin/options/individual_suffix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,3), + (131,1,'Instant Messenger Services','Instant Messenger Services','civicrm/admin/options/instant_messenger_service?reset=1',NULL,'administer CiviCRM','',127,1,NULL,4), + (132,1,'Location Types (Home, Work...)','Location Types (Home, Work...)','civicrm/admin/locationType?reset=1',NULL,'administer CiviCRM','',127,1,NULL,5), + (133,1,'Mobile Phone Providers','Mobile Phone Providers','civicrm/admin/options/mobile_provider?reset=1',NULL,'administer CiviCRM','',127,1,NULL,6), + (134,1,'Phone Types','Phone Types','civicrm/admin/options/phone_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,7), + (135,1,'Website Types','Website Types','civicrm/admin/options/website_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,8), + (136,1,'Communications','Communications',NULL,NULL,'administer CiviCRM','',110,1,NULL,4), + (137,1,'Organization Address and Contact Info','Organization Address and Contact Info','civicrm/admin/domain?action=update&reset=1',NULL,'administer CiviCRM','',136,1,NULL,1), + (138,1,'FROM Email Addresses','FROM Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',136,1,NULL,2), + (139,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',136,1,NULL,3), + (140,1,'Schedule Reminders','Schedule Reminders','civicrm/admin/scheduleReminders?reset=1',NULL,'administer CiviCRM','',136,1,NULL,4), + (141,1,'Preferred Communication Methods','Preferred Communication Methods','civicrm/admin/options/preferred_communication_method?reset=1',NULL,'administer CiviCRM','',136,1,NULL,5), + (142,1,'Label Formats','Label Formats','civicrm/admin/labelFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,6), + (143,1,'Print Page (PDF) Formats','Print Page (PDF) Formats','civicrm/admin/pdfFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,7), + (144,1,'Communication Style Options','Communication Style Options','civicrm/admin/options/communication_style?reset=1',NULL,'administer CiviCRM','',136,1,NULL,8), + (145,1,'Email Greeting Formats','Email Greeting Formats','civicrm/admin/options/email_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,9), + (146,1,'Postal Greeting Formats','Postal Greeting Formats','civicrm/admin/options/postal_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,10), + (147,1,'Addressee Formats','Addressee Formats','civicrm/admin/options/addressee?reset=1',NULL,'administer CiviCRM','',136,1,NULL,11), + (148,1,'Localization','Localization',NULL,NULL,'administer CiviCRM','',110,1,NULL,6), + (149,1,'Languages, Currency, Locations','Languages, Currency, Locations','civicrm/admin/setting/localization?reset=1',NULL,'administer CiviCRM','',148,1,NULL,1), + (150,1,'Address Settings','Address Settings','civicrm/admin/setting/preferences/address?reset=1',NULL,'administer CiviCRM','',148,1,NULL,2), + (151,1,'Date Formats','Date Formats','civicrm/admin/setting/date?reset=1',NULL,'administer CiviCRM','',148,1,NULL,3), + (152,1,'Preferred Language Options','Preferred Language Options','civicrm/admin/options/languages?reset=1',NULL,'administer CiviCRM','',148,1,NULL,4), + (153,1,'Users and Permissions','Users and Permissions',NULL,NULL,'administer CiviCRM','',110,1,NULL,7), + (154,1,'Permissions (Access Control)','Permissions (Access Control)','civicrm/admin/access?reset=1',NULL,'administer CiviCRM','',153,1,NULL,1), + (155,1,'Synchronize Users to Contacts','Synchronize Users to Contacts','civicrm/admin/synchUser?reset=1',NULL,'administer CiviCRM','',153,1,NULL,2), + (156,1,'System Settings','System Settings',NULL,NULL,'administer CiviCRM','',110,1,NULL,8), + (157,1,'Components','Enable Components','civicrm/admin/setting/component?reset=1',NULL,'administer CiviCRM','',156,1,NULL,1), + (158,1,'Connections','Connections','civicrm/a/#/cxn',NULL,'administer CiviCRM','',156,1,NULL,2), + (159,1,'Extensions','Manage Extensions','civicrm/admin/extensions?reset=1',NULL,'administer CiviCRM','',156,1,1,3), + (160,1,'Cleanup Caches and Update Paths','Cleanup Caches and Update Paths','civicrm/admin/setting/updateConfigBackend?reset=1',NULL,'administer CiviCRM','',156,1,NULL,4), + (161,1,'CMS Database Integration','CMS Integration','civicrm/admin/setting/uf?reset=1',NULL,'administer CiviCRM','',156,1,NULL,5), + (162,1,'Debugging and Error Handling','Debugging and Error Handling','civicrm/admin/setting/debug?reset=1',NULL,'administer CiviCRM','',156,1,NULL,6), + (163,1,'Directories','Directories','civicrm/admin/setting/path?reset=1',NULL,'administer CiviCRM','',156,1,NULL,7), + (164,1,'Import/Export Mappings','Import/Export Mappings','civicrm/admin/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,8), + (165,1,'Mapping and Geocoding','Mapping and Geocoding','civicrm/admin/setting/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,9), + (166,1,'Misc (Undelete, PDFs, Limits, Logging, etc.)','misc_admin_settings','civicrm/admin/setting/misc?reset=1',NULL,'administer CiviCRM','',156,1,NULL,10), + (167,1,'Multi Site Settings','Multi Site Settings','civicrm/admin/setting/preferences/multisite?reset=1',NULL,'administer CiviCRM','',156,1,NULL,11), + (168,1,'Option Groups','Option Groups','civicrm/admin/options?reset=1',NULL,'administer CiviCRM','',156,1,NULL,12), + (169,1,'Outbound Email (SMTP/Sendmail)','Outbound Email','civicrm/admin/setting/smtp?reset=1',NULL,'administer CiviCRM','',156,1,NULL,13), + (170,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',156,1,NULL,14), + (171,1,'Resource URLs','Resource URLs','civicrm/admin/setting/url?reset=1',NULL,'administer CiviCRM','',156,1,NULL,15), + (172,1,'Safe File Extensions','Safe File Extensions','civicrm/admin/options/safe_file_extension?reset=1',NULL,'administer CiviCRM','',156,1,NULL,16), + (173,1,'Scheduled Jobs','Scheduled Jobs','civicrm/admin/job?reset=1',NULL,'administer CiviCRM','',156,1,NULL,17), + (174,1,'SMS Providers','SMS Providers','civicrm/admin/sms/provider?reset=1',NULL,'administer CiviCRM','',156,1,NULL,18), + (175,1,'CiviCampaign','CiviCampaign',NULL,NULL,'administer CiviCampaign,administer CiviCRM','AND',110,1,NULL,9), + (176,1,'Survey Types','Survey Types','civicrm/admin/campaign/surveyType?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,1), + (177,1,'Campaign Types','Campaign Types','civicrm/admin/options/campaign_type?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,2), + (178,1,'Campaign Status','Campaign Status','civicrm/admin/options/campaign_status?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,3), + (179,1,'Engagement Index','Engagement Index','civicrm/admin/options/engagement_index?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,4), + (180,1,'CiviCampaign Component Settings','CiviCampaign Component Settings','civicrm/admin/setting/preferences/campaign?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,5), + (181,1,'CiviCase','CiviCase',NULL,NULL,'administer CiviCase',NULL,110,1,NULL,10), + (182,1,'CiviCase Settings','CiviCase Settings','civicrm/admin/setting/case?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,1), + (183,1,'Case Types','Case Types','civicrm/a/#/caseType',NULL,'administer CiviCase',NULL,181,1,NULL,2), + (184,1,'Redaction Rules','Redaction Rules','civicrm/admin/options/redaction_rule?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,3), + (185,1,'Case Statuses','Case Statuses','civicrm/admin/options/case_status?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,4), + (186,1,'Encounter Medium','Encounter Medium','civicrm/admin/options/encounter_medium?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,5), + (187,1,'CiviContribute','CiviContribute',NULL,NULL,'access CiviContribute,administer CiviCRM','AND',110,1,NULL,11), + (188,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,6), + (189,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,7), + (190,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,8), + (191,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,9), + (192,1,'Financial Types','Financial Types','civicrm/admin/financial/financialType?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,10), + (193,1,'Financial Accounts','Financial Accounts','civicrm/admin/financial/financialAccount?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,11), + (194,1,'Payment Methods','Payment Instruments','civicrm/admin/options/payment_instrument?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,12), + (195,1,'Accepted Credit Cards','Accepted Credit Cards','civicrm/admin/options/accept_creditcard?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,13), + (196,1,'Soft Credit Types','Soft Credit Types','civicrm/admin/options/soft_credit_type?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,14), + (197,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,15), + (198,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,16), + (199,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',187,1,NULL,17), + (200,1,'CiviContribute Component Settings','CiviContribute Component Settings','civicrm/admin/setting/preferences/contribute?reset=1',NULL,'administer CiviCRM','',187,1,NULL,18), + (201,1,'CiviEvent','CiviEvent',NULL,NULL,'access CiviEvent,administer CiviCRM','AND',110,1,NULL,12), + (202,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,1), + (203,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,2), + (204,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,3), + (205,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,4), + (206,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,5), + (207,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,6), + (208,1,'Event Types','Event Types','civicrm/admin/options/event_type?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,7), + (209,1,'Participant Statuses','Participant Statuses','civicrm/admin/participant_status?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,8), + (210,1,'Participant Roles','Participant Roles','civicrm/admin/options/participant_role?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,9), + (211,1,'Participant Listing Options','Participant Listing Options','civicrm/admin/options/participant_listing?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,10), + (212,1,'Event Name Badge Layouts','Event Name Badge Layouts','civicrm/admin/badgelayout?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,11), + (213,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',201,1,NULL,12), + (214,1,'CiviEvent Component Settings','CiviEvent Component Settings','civicrm/admin/setting/preferences/event?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,13), + (215,1,'CiviGrant','CiviGrant',NULL,NULL,'access CiviGrant,administer CiviCRM','AND',110,1,NULL,13), + (216,1,'Grant Types','Grant Types','civicrm/admin/options/grant_type?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,1), + (217,1,'Grant Status','Grant Status','civicrm/admin/options/grant_status?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,2), + (218,1,'CiviMail','CiviMail',NULL,NULL,'access CiviMail,administer CiviCRM','AND',110,1,NULL,14), + (219,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,1), + (220,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',218,1,NULL,2), + (221,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',218,1,NULL,3), + (222,1,'Mail Accounts','Mail Accounts','civicrm/admin/mailSettings?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,4), + (223,1,'Mailer Settings','Mailer Settings','civicrm/admin/mail?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,5), + (224,1,'CiviMail Component Settings','CiviMail Component Settings','civicrm/admin/setting/preferences/mailing?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,6), + (225,1,'CiviMember','CiviMember',NULL,NULL,'access CiviMember,administer CiviCRM','AND',110,1,NULL,15), + (226,1,'Membership Types','Membership Types','civicrm/admin/member/membershipType?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,1), + (227,1,'Membership Status Rules','Membership Status Rules','civicrm/admin/member/membershipStatus?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,1,2), + (228,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,3), + (229,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,4), + (230,1,'CiviMember Component Settings','CiviMember Component Settings','civicrm/admin/setting/preferences/member?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,5), + (231,1,'CiviReport','CiviReport',NULL,NULL,'access CiviReport,administer CiviCRM','AND',110,1,NULL,16), + (232,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',231,1,NULL,1), + (233,1,'Create New Report from Template','Create New Report from Template','civicrm/admin/report/template/list?reset=1',NULL,'administer Reports','',231,1,NULL,2), + (234,1,'Manage Templates','Manage Templates','civicrm/admin/report/options/report_template?reset=1',NULL,'administer Reports','',231,1,NULL,3), + (235,1,'Register Report','Register Report','civicrm/admin/report/register?reset=1',NULL,'administer Reports','',231,1,NULL,4), + (236,1,'Support','Support',NULL,'crm-i fa-life-ring',NULL,'',NULL,1,NULL,110), + (237,1,'Get started','Get started','https://civicrm.org/get-started?src=iam',NULL,NULL,'AND',236,1,NULL,1), + (238,1,'Documentation','Documentation','https://civicrm.org/documentation?src=iam',NULL,NULL,'AND',236,1,NULL,2), + (239,1,'Ask a question','Ask a question','https://civicrm.org/ask-a-question?src=iam',NULL,NULL,'AND',236,1,NULL,3), + (240,1,'Get expert help','Get expert help','https://civicrm.org/experts?src=iam',NULL,NULL,'AND',236,1,NULL,4), + (241,1,'About CiviCRM','About CiviCRM','https://civicrm.org/about?src=iam',NULL,NULL,'AND',236,1,1,5), + (242,1,'Register your site','Register your site','https://civicrm.org/register-your-site?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,6), + (243,1,'Join CiviCRM','Join CiviCRM','https://civicrm.org/become-a-member?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,7), + (244,1,'Developer','Developer',NULL,NULL,'administer CiviCRM','',236,1,1,8), + (245,1,'Api Explorer v3','API Explorer','civicrm/api3',NULL,'administer CiviCRM','',244,1,NULL,1), + (246,1,'Api Explorer v4','Api Explorer v4','civicrm/api4#/explorer',NULL,'administer CiviCRM','',244,1,NULL,2), + (247,1,'Developer Docs','Developer Docs','https://civicrm.org/developer-documentation?src=iam',NULL,'administer CiviCRM','',244,1,NULL,3), + (248,1,'Reports','Reports',NULL,'crm-i fa-bar-chart','access CiviReport','',NULL,1,NULL,95), + (249,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'administer CiviCRM','',248,1,0,1), + (250,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',248,1,0,2), + (251,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',248,1,0,3), + (252,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',248,1,0,4), + (253,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',248,1,0,5), + (254,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',248,1,0,6), + (255,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',248,1,0,7), + (256,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',248,1,0,8), + (257,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',248,1,0,9), + (258,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',248,1,1,10), + (259,1,'My Reports','My Reports','civicrm/report/list?myreports=1&reset=1',NULL,'access CiviReport','',248,1,1,11), + (260,1,'New Student','New Student','civicrm/contact/add?ct=Individual&cst=Student&reset=1',NULL,'add contacts','',16,1,NULL,1), + (261,1,'New Parent','New Parent','civicrm/contact/add?ct=Individual&cst=Parent&reset=1',NULL,'add contacts','',16,1,NULL,2), + (262,1,'New Staff','New Staff','civicrm/contact/add?ct=Individual&cst=Staff&reset=1',NULL,'add contacts','',16,1,NULL,3), + (263,1,'New Team','New Team','civicrm/contact/add?ct=Organization&cst=Team&reset=1',NULL,'add contacts','',18,1,NULL,1), + (264,1,'New Sponsor','New Sponsor','civicrm/contact/add?ct=Organization&cst=Sponsor&reset=1',NULL,'add contacts','',18,1,NULL,2); /*!40000 ALTER TABLE `civicrm_navigation` ENABLE KEYS */; UNLOCK TABLES; @@ -987,7 +5443,27 @@ UNLOCK TABLES; LOCK TABLES `civicrm_note` WRITE; /*!40000 ALTER TABLE `civicrm_note` DISABLE KEYS */; -INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `modified_date`, `subject`, `privacy`) VALUES (1,'civicrm_contact',123,'Arrange collection of funds from members',1,'2020-02-28 11:27:25',NULL,'0'),(2,'civicrm_contact',22,'Chart out route map for next 10k run',1,'2020-08-07 05:48:59',NULL,'0'),(3,'civicrm_contact',41,'Send reminder for annual dinner',1,'2020-08-10 08:26:11',NULL,'0'),(4,'civicrm_contact',26,'Arrange collection of funds from members',1,'2020-01-24 09:29:37',NULL,'0'),(5,'civicrm_contact',196,'Arrange for cricket match with Sunil Gavaskar',1,'2020-11-06 14:16:29',NULL,'0'),(6,'civicrm_contact',116,'Get the registration done for NGO status',1,'2020-10-16 20:10:10',NULL,'0'),(7,'civicrm_contact',86,'Get the registration done for NGO status',1,'2020-05-01 02:41:42',NULL,'0'),(8,'civicrm_contact',171,'Get the registration done for NGO status',1,'2020-11-24 13:22:38',NULL,'0'),(9,'civicrm_contact',194,'Connect for presentation',1,'2020-10-31 06:41:07',NULL,'0'),(10,'civicrm_contact',80,'Connect for presentation',1,'2020-02-08 19:04:26',NULL,'0'),(11,'civicrm_contact',152,'Invite members for the Steve Prefontaine 10k dream run',1,'2020-04-04 17:57:46',NULL,'0'),(12,'civicrm_contact',176,'Reminder screening of \"Black\" on next Friday',1,'2020-02-23 13:49:51',NULL,'0'),(13,'civicrm_contact',70,'Contact the Commissioner of Charities',1,'2020-06-29 01:37:06',NULL,'0'),(14,'civicrm_contact',64,'Chart out route map for next 10k run',1,'2020-12-03 09:20:33',NULL,'0'),(15,'civicrm_contact',132,'Get the registration done for NGO status',1,'2020-04-09 14:34:33',NULL,'0'),(16,'civicrm_contact',115,'Arrange collection of funds from members',1,'2020-09-04 05:11:42',NULL,'0'),(17,'civicrm_contact',132,'Arrange collection of funds from members',1,'2020-07-18 15:53:50',NULL,'0'),(18,'civicrm_contact',131,'Contact the Commissioner of Charities',1,'2020-10-25 21:14:29',NULL,'0'),(19,'civicrm_contact',122,'Chart out route map for next 10k run',1,'2020-08-23 17:01:05',NULL,'0'),(20,'civicrm_contact',163,'Send newsletter for April 2005',1,'2020-05-25 18:10:02',NULL,'0'); +INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `note_date`, `created_date`, `modified_date`, `subject`, `privacy`) VALUES + (1,'civicrm_contact',7,'Organize the Terry Fox run',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-08-10 23:09:57',NULL,'0'), + (2,'civicrm_contact',10,'Reminder screening of \"Black\" on next Friday',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-11-10 22:26:57',NULL,'0'), + (3,'civicrm_contact',110,'Get the registration done for NGO status',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-03-02 00:03:22',NULL,'0'), + (4,'civicrm_contact',94,'Send newsletter for April 2005',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-04-20 12:59:21',NULL,'0'), + (5,'civicrm_contact',140,'Send reminder for annual dinner',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-01-26 08:55:31',NULL,'0'), + (6,'civicrm_contact',179,'Chart out route map for next 10k run',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-01-22 06:44:14',NULL,'0'), + (7,'civicrm_contact',5,'Invite members for the Steve Prefontaine 10k dream run',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-09-16 18:03:32',NULL,'0'), + (8,'civicrm_contact',84,'Arrange collection of funds from members',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-11-28 21:24:31',NULL,'0'), + (9,'civicrm_contact',145,'Arrange collection of funds from members',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-03-17 22:49:38',NULL,'0'), + (10,'civicrm_contact',28,'Arrange for cricket match with Sunil Gavaskar',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-09-10 01:29:49',NULL,'0'), + (11,'civicrm_contact',179,'Send reminder for annual dinner',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-07-07 09:50:50',NULL,'0'), + (12,'civicrm_contact',5,'Contact the Commissioner of Charities',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-04-01 03:09:31',NULL,'0'), + (13,'civicrm_contact',172,'Arrange collection of funds from members',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-02-08 00:49:40',NULL,'0'), + (14,'civicrm_contact',86,'Arrange for cricket match with Sunil Gavaskar',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-02-10 23:24:39',NULL,'0'), + (15,'civicrm_contact',3,'Organize the Terry Fox run',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-10-17 09:33:05',NULL,'0'), + (16,'civicrm_contact',74,'Get the registration done for NGO status',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-12-15 07:50:13',NULL,'0'), + (17,'civicrm_contact',54,'Arrange for cricket match with Sunil Gavaskar',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-09-13 09:39:13',NULL,'0'), + (18,'civicrm_contact',183,'Chart out route map for next 10k run',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2021-02-06 03:45:02',NULL,'0'), + (19,'civicrm_contact',110,'Contact the Commissioner of Charities',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-10-08 20:51:18',NULL,'0'), + (20,'civicrm_contact',106,'Contact the Commissioner of Charities',1,'2021-06-11 00:47:10','2021-06-11 00:47:10','2020-10-04 08:36:18',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -1006,7 +5482,102 @@ UNLOCK TABLES; LOCK TABLES `civicrm_option_group` WRITE; /*!40000 ALTER TABLE `civicrm_option_group` DISABLE KEYS */; -INSERT INTO `civicrm_option_group` (`id`, `name`, `title`, `description`, `data_type`, `is_reserved`, `is_active`, `is_locked`) VALUES (1,'preferred_communication_method','Preferred Communication Method',NULL,NULL,1,1,0),(2,'activity_type','Activity Type',NULL,'Integer',1,1,0),(3,'gender','Gender',NULL,'Integer',1,1,0),(4,'instant_messenger_service','Instant Messenger (IM) screen-names',NULL,NULL,1,1,0),(5,'mobile_provider','Mobile Phone Providers',NULL,NULL,1,1,0),(6,'individual_prefix','Individual contact prefixes',NULL,NULL,1,1,0),(7,'individual_suffix','Individual contact suffixes',NULL,NULL,1,1,0),(8,'acl_role','ACL Role',NULL,NULL,1,1,0),(9,'accept_creditcard','Accepted Credit Cards',NULL,NULL,1,1,0),(10,'payment_instrument','Payment Methods',NULL,'Integer',1,1,0),(11,'contribution_status','Contribution Status',NULL,NULL,1,1,1),(12,'pcp_status','PCP Status',NULL,NULL,1,1,1),(13,'pcp_owner_notify','PCP owner notifications',NULL,NULL,1,1,1),(14,'participant_role','Participant Role',NULL,'Integer',1,1,0),(15,'event_type','Event Type',NULL,'Integer',1,1,0),(16,'contact_view_options','Contact View Options',NULL,NULL,1,1,1),(17,'contact_smart_group_display','Contact Smart Group View Options',NULL,NULL,1,1,1),(18,'contact_edit_options','Contact Edit Options',NULL,NULL,1,1,1),(19,'advanced_search_options','Advanced Search Options',NULL,NULL,1,1,1),(20,'user_dashboard_options','User Dashboard Options',NULL,NULL,1,1,1),(21,'address_options','Addressing Options',NULL,NULL,1,1,0),(22,'group_type','Group Type',NULL,NULL,1,1,0),(23,'grant_status','Grant status',NULL,NULL,1,1,0),(24,'grant_type','Grant Type',NULL,NULL,1,1,0),(25,'custom_search','Custom Search',NULL,NULL,1,1,0),(26,'activity_status','Activity Status',NULL,'Integer',1,1,0),(27,'case_type','Case Type',NULL,NULL,1,1,0),(28,'case_status','Case Status',NULL,NULL,1,1,0),(29,'participant_listing','Participant Listing',NULL,NULL,1,1,0),(30,'safe_file_extension','Safe File Extension',NULL,NULL,1,1,0),(31,'from_email_address','From Email Address',NULL,NULL,1,1,0),(32,'mapping_type','Mapping Type',NULL,NULL,1,1,1),(33,'wysiwyg_editor','WYSIWYG Editor',NULL,NULL,1,1,0),(34,'recur_frequency_units','Recurring Frequency Units',NULL,NULL,1,1,0),(35,'phone_type','Phone Type',NULL,NULL,1,1,0),(36,'custom_data_type','Custom Data Type',NULL,NULL,1,1,0),(37,'visibility','Visibility',NULL,NULL,1,1,0),(38,'mail_protocol','Mail Protocol',NULL,NULL,1,1,0),(39,'priority','Priority',NULL,NULL,1,1,0),(40,'redaction_rule','Redaction Rule',NULL,NULL,1,1,0),(41,'report_template','Report Template',NULL,NULL,1,1,0),(42,'email_greeting','Email Greeting Type',NULL,NULL,1,1,0),(43,'postal_greeting','Postal Greeting Type',NULL,NULL,1,1,0),(44,'addressee','Addressee Type',NULL,NULL,1,1,0),(45,'contact_autocomplete_options','Autocomplete Contact Search',NULL,NULL,1,1,1),(46,'contact_reference_options','Contact Reference Autocomplete Options',NULL,NULL,1,1,1),(47,'website_type','Website Type',NULL,NULL,1,1,0),(48,'tag_used_for','Tag Used For',NULL,NULL,1,1,1),(49,'currencies_enabled','Currencies Enabled',NULL,NULL,1,1,0),(50,'event_badge','Event Name Badge',NULL,NULL,1,1,0),(51,'note_privacy','Privacy levels for notes',NULL,NULL,1,1,0),(52,'campaign_type','Campaign Type',NULL,NULL,1,1,0),(53,'campaign_status','Campaign Status',NULL,NULL,1,1,0),(54,'system_extensions','CiviCRM Extensions',NULL,NULL,1,1,0),(55,'mail_approval_status','CiviMail Approval Status',NULL,NULL,1,1,0),(56,'engagement_index','Engagement Index',NULL,NULL,1,1,0),(57,'cg_extend_objects','Objects a custom group extends to',NULL,NULL,1,1,0),(58,'paper_size','Paper Size',NULL,NULL,1,1,0),(59,'pdf_format','PDF Page Format',NULL,NULL,1,1,0),(60,'label_format','Mailing Label Format',NULL,NULL,1,1,0),(61,'activity_contacts','Activity Contacts',NULL,NULL,1,1,1),(62,'account_relationship','Account Relationship',NULL,NULL,1,1,0),(63,'event_contacts','Event Recipients',NULL,NULL,1,1,0),(64,'conference_slot','Conference Slot',NULL,NULL,1,1,0),(65,'batch_type','Batch Type',NULL,NULL,1,1,1),(66,'batch_mode','Batch Mode',NULL,NULL,1,1,1),(67,'batch_status','Batch Status',NULL,NULL,1,1,1),(68,'sms_api_type','Api Type',NULL,NULL,1,1,0),(69,'sms_provider_name','Sms Provider Internal Name',NULL,NULL,1,1,0),(70,'auto_renew_options','Auto Renew Options',NULL,NULL,1,1,1),(71,'financial_account_type','Financial Account Type',NULL,NULL,1,1,0),(72,'financial_item_status','Financial Item Status',NULL,NULL,1,1,1),(73,'label_type','Label Type',NULL,NULL,1,1,0),(74,'name_badge','Name Badge Format',NULL,NULL,1,1,0),(75,'communication_style','Communication Style',NULL,NULL,1,1,0),(76,'msg_mode','Message Mode',NULL,NULL,1,1,0),(77,'contact_date_reminder_options','Contact Date Reminder Options',NULL,NULL,1,1,1),(78,'wysiwyg_presets','WYSIWYG Editor Presets',NULL,NULL,1,1,0),(79,'relative_date_filters','Relative Date Filters',NULL,NULL,1,1,0),(80,'pledge_status','Pledge Status',NULL,NULL,1,1,1),(81,'contribution_recur_status','Recurring Contribution Status',NULL,NULL,1,1,1),(82,'environment','Environment',NULL,NULL,1,1,0),(83,'activity_default_assignee','Activity default assignee',NULL,NULL,1,1,0),(84,'languages','Languages','List of Languages',NULL,1,1,0),(85,'encounter_medium','Encounter Medium','Encounter medium for case activities (e.g. In Person, By Phone, etc.)',NULL,1,1,0),(86,'msg_tpl_workflow_case','Message Template Workflow for Cases','Message Template Workflow for Cases',NULL,1,1,0),(87,'msg_tpl_workflow_contribution','Message Template Workflow for Contributions','Message Template Workflow for Contributions',NULL,1,1,0),(88,'msg_tpl_workflow_event','Message Template Workflow for Events','Message Template Workflow for Events',NULL,1,1,0),(89,'msg_tpl_workflow_friend','Message Template Workflow for Tell-a-Friend','Message Template Workflow for Tell-a-Friend',NULL,1,1,0),(90,'msg_tpl_workflow_membership','Message Template Workflow for Memberships','Message Template Workflow for Memberships',NULL,1,1,0),(91,'msg_tpl_workflow_meta','Message Template Workflow for Meta Templates','Message Template Workflow for Meta Templates',NULL,1,1,0),(92,'msg_tpl_workflow_pledge','Message Template Workflow for Pledges','Message Template Workflow for Pledges',NULL,1,1,0),(93,'msg_tpl_workflow_uf','Message Template Workflow for Profiles','Message Template Workflow for Profiles',NULL,1,1,0),(94,'msg_tpl_workflow_petition','Message Template Workflow for Petition','Message Template Workflow for Petition',NULL,1,1,0),(95,'soft_credit_type','Soft Credit Types',NULL,NULL,1,1,0); +INSERT INTO `civicrm_option_group` (`id`, `name`, `title`, `description`, `data_type`, `is_reserved`, `is_active`, `is_locked`) VALUES + (1,'preferred_communication_method','Preferred Communication Method',NULL,NULL,1,1,0), + (2,'activity_type','Activity Type',NULL,'Integer',1,1,0), + (3,'gender','Gender',NULL,'Integer',1,1,0), + (4,'instant_messenger_service','Instant Messenger (IM) screen-names',NULL,NULL,1,1,0), + (5,'mobile_provider','Mobile Phone Providers',NULL,NULL,1,1,0), + (6,'individual_prefix','Individual contact prefixes',NULL,NULL,1,1,0), + (7,'individual_suffix','Individual contact suffixes',NULL,NULL,1,1,0), + (8,'acl_role','ACL Role',NULL,NULL,1,1,0), + (9,'accept_creditcard','Accepted Credit Cards',NULL,NULL,1,1,0), + (10,'payment_instrument','Payment Methods',NULL,'Integer',1,1,0), + (11,'contribution_status','Contribution Status',NULL,NULL,1,1,1), + (12,'pcp_status','PCP Status',NULL,NULL,1,1,1), + (13,'pcp_owner_notify','PCP owner notifications',NULL,NULL,1,1,1), + (14,'participant_role','Participant Role',NULL,'Integer',1,1,0), + (15,'event_type','Event Type',NULL,'Integer',1,1,0), + (16,'contact_view_options','Contact View Options',NULL,NULL,1,1,1), + (17,'contact_smart_group_display','Contact Smart Group View Options',NULL,NULL,1,1,1), + (18,'contact_edit_options','Contact Edit Options',NULL,NULL,1,1,1), + (19,'advanced_search_options','Advanced Search Options',NULL,NULL,1,1,1), + (20,'user_dashboard_options','User Dashboard Options',NULL,NULL,1,1,1), + (21,'address_options','Addressing Options',NULL,NULL,1,1,0), + (22,'group_type','Group Type',NULL,NULL,1,1,0), + (23,'grant_status','Grant status',NULL,NULL,1,1,0), + (24,'grant_type','Grant Type',NULL,NULL,1,1,0), + (25,'custom_search','Custom Search',NULL,NULL,1,1,0), + (26,'activity_status','Activity Status',NULL,'Integer',1,1,0), + (27,'case_type','Case Type',NULL,NULL,1,1,0), + (28,'case_status','Case Status',NULL,NULL,1,1,0), + (29,'participant_listing','Participant Listing',NULL,NULL,1,1,0), + (30,'safe_file_extension','Safe File Extension',NULL,NULL,1,1,0), + (31,'from_email_address','From Email Address',NULL,NULL,1,1,0), + (32,'mapping_type','Mapping Type',NULL,NULL,1,1,1), + (33,'wysiwyg_editor','WYSIWYG Editor',NULL,NULL,1,1,0), + (34,'recur_frequency_units','Recurring Frequency Units',NULL,NULL,1,1,0), + (35,'phone_type','Phone Type',NULL,NULL,1,1,0), + (36,'custom_data_type','Custom Data Type',NULL,NULL,1,1,0), + (37,'visibility','Visibility',NULL,NULL,1,1,0), + (38,'mail_protocol','Mail Protocol',NULL,NULL,1,1,0), + (39,'priority','Priority',NULL,NULL,1,1,0), + (40,'redaction_rule','Redaction Rule',NULL,NULL,1,1,0), + (41,'report_template','Report Template',NULL,NULL,1,1,0), + (42,'email_greeting','Email Greeting Type',NULL,NULL,1,1,0), + (43,'postal_greeting','Postal Greeting Type',NULL,NULL,1,1,0), + (44,'addressee','Addressee Type',NULL,NULL,1,1,0), + (45,'contact_autocomplete_options','Autocomplete Contact Search',NULL,NULL,1,1,1), + (46,'contact_reference_options','Contact Reference Autocomplete Options',NULL,NULL,1,1,1), + (47,'website_type','Website Type',NULL,NULL,1,1,0), + (48,'tag_used_for','Tag Used For',NULL,NULL,1,1,1), + (49,'currencies_enabled','Currencies Enabled',NULL,NULL,1,1,0), + (50,'event_badge','Event Name Badge',NULL,NULL,1,1,0), + (51,'note_privacy','Privacy levels for notes',NULL,NULL,1,1,0), + (52,'campaign_type','Campaign Type',NULL,NULL,1,1,0), + (53,'campaign_status','Campaign Status',NULL,NULL,1,1,0), + (54,'system_extensions','CiviCRM Extensions',NULL,NULL,1,1,0), + (55,'mail_approval_status','CiviMail Approval Status',NULL,NULL,1,1,0), + (56,'engagement_index','Engagement Index',NULL,NULL,1,1,0), + (57,'cg_extend_objects','Objects a custom group extends to',NULL,NULL,1,1,0), + (58,'paper_size','Paper Size',NULL,NULL,1,1,0), + (59,'pdf_format','PDF Page Format',NULL,NULL,1,1,0), + (60,'label_format','Mailing Label Format',NULL,NULL,1,1,0), + (61,'activity_contacts','Activity Contacts',NULL,NULL,1,1,1), + (62,'account_relationship','Account Relationship',NULL,NULL,1,1,0), + (63,'event_contacts','Event Recipients',NULL,NULL,1,1,0), + (64,'conference_slot','Conference Slot',NULL,NULL,1,1,0), + (65,'batch_type','Batch Type',NULL,NULL,1,1,1), + (66,'batch_mode','Batch Mode',NULL,NULL,1,1,1), + (67,'batch_status','Batch Status',NULL,NULL,1,1,1), + (68,'sms_api_type','Api Type',NULL,NULL,1,1,0), + (69,'sms_provider_name','Sms Provider Internal Name',NULL,NULL,1,1,0), + (70,'auto_renew_options','Auto Renew Options',NULL,NULL,1,1,1), + (71,'financial_account_type','Financial Account Type',NULL,NULL,1,1,0), + (72,'financial_item_status','Financial Item Status',NULL,NULL,1,1,1), + (73,'label_type','Label Type',NULL,NULL,1,1,0), + (74,'name_badge','Name Badge Format',NULL,NULL,1,1,0), + (75,'communication_style','Communication Style',NULL,NULL,1,1,0), + (76,'msg_mode','Message Mode',NULL,NULL,1,1,0), + (77,'contact_date_reminder_options','Contact Date Reminder Options',NULL,NULL,1,1,1), + (78,'wysiwyg_presets','WYSIWYG Editor Presets',NULL,NULL,1,1,0), + (79,'relative_date_filters','Relative Date Filters',NULL,NULL,1,1,0), + (80,'pledge_status','Pledge Status',NULL,NULL,1,1,1), + (81,'contribution_recur_status','Recurring Contribution Status',NULL,NULL,1,1,1), + (82,'environment','Environment',NULL,NULL,1,1,0), + (83,'activity_default_assignee','Activity default assignee',NULL,NULL,1,1,0), + (84,'languages','Languages','List of Languages',NULL,1,1,0), + (85,'encounter_medium','Encounter Medium','Encounter medium for case activities (e.g. In Person, By Phone, etc.)',NULL,1,1,0), + (86,'msg_tpl_workflow_case','Message Template Workflow for Cases','Message Template Workflow for Cases',NULL,1,1,0), + (87,'msg_tpl_workflow_contribution','Message Template Workflow for Contributions','Message Template Workflow for Contributions',NULL,1,1,0), + (88,'msg_tpl_workflow_event','Message Template Workflow for Events','Message Template Workflow for Events',NULL,1,1,0), + (89,'msg_tpl_workflow_friend','Message Template Workflow for Tell-a-Friend','Message Template Workflow for Tell-a-Friend',NULL,1,1,0), + (90,'msg_tpl_workflow_membership','Message Template Workflow for Memberships','Message Template Workflow for Memberships',NULL,1,1,0), + (91,'msg_tpl_workflow_meta','Message Template Workflow for Meta Templates','Message Template Workflow for Meta Templates',NULL,1,1,0), + (92,'msg_tpl_workflow_pledge','Message Template Workflow for Pledges','Message Template Workflow for Pledges',NULL,1,1,0), + (93,'msg_tpl_workflow_uf','Message Template Workflow for Profiles','Message Template Workflow for Profiles',NULL,1,1,0), + (94,'msg_tpl_workflow_petition','Message Template Workflow for Petition','Message Template Workflow for Petition',NULL,1,1,0), + (95,'soft_credit_type','Soft Credit Types',NULL,NULL,1,1,0); /*!40000 ALTER TABLE `civicrm_option_group` ENABLE KEYS */; UNLOCK TABLES; @@ -1016,7 +5587,869 @@ UNLOCK TABLES; LOCK TABLES `civicrm_option_value` WRITE; /*!40000 ALTER TABLE `civicrm_option_value` DISABLE KEYS */; -INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`, `icon`, `color`) VALUES (1,1,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(2,1,'Email','2','Email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(3,1,'Postal Mail','3','Postal Mail',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(4,1,'SMS','4','SMS',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(5,1,'Fax','5','Fax',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(6,2,'Meeting','1','Meeting',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,'fa-slideshare',NULL),(7,2,'Phone Call','2','Phone Call',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,'fa-phone',NULL),(8,2,'Email','3','Email',NULL,1,NULL,3,'Email sent.',0,1,1,NULL,NULL,NULL,'fa-envelope-o',NULL),(9,2,'Outbound SMS','4','SMS',NULL,1,NULL,4,'Text message (SMS) sent.',0,1,1,NULL,NULL,NULL,'fa-mobile',NULL),(10,2,'Event Registration','5','Event Registration',NULL,1,NULL,5,'Online or offline event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(11,2,'Contribution','6','Contribution',NULL,1,NULL,6,'Online or offline contribution.',0,1,1,2,NULL,NULL,NULL,NULL),(12,2,'Membership Signup','7','Membership Signup',NULL,1,NULL,7,'Online or offline membership signup.',0,1,1,3,NULL,NULL,NULL,NULL),(13,2,'Membership Renewal','8','Membership Renewal',NULL,1,NULL,8,'Online or offline membership renewal.',0,1,1,3,NULL,NULL,NULL,NULL),(14,2,'Tell a Friend','9','Tell a Friend',NULL,1,NULL,9,'Send information about a contribution campaign or event to a friend.',0,1,1,NULL,NULL,NULL,NULL,NULL),(15,2,'Pledge Acknowledgment','10','Pledge Acknowledgment',NULL,1,NULL,10,'Send Pledge Acknowledgment.',0,1,1,6,NULL,NULL,NULL,NULL),(16,2,'Pledge Reminder','11','Pledge Reminder',NULL,1,NULL,11,'Send Pledge Reminder.',0,1,1,6,NULL,NULL,NULL,NULL),(17,2,'Inbound Email','12','Inbound Email',NULL,1,NULL,12,'Inbound Email.',0,1,1,NULL,NULL,NULL,NULL,NULL),(18,2,'Open Case','13','Open Case',NULL,0,0,13,'',0,1,1,7,NULL,NULL,'fa-folder-open-o',NULL),(19,2,'Follow up','14','Follow up',NULL,0,0,14,'',0,1,1,7,NULL,NULL,'fa-share-square-o',NULL),(20,2,'Change Case Type','15','Change Case Type',NULL,0,0,15,'',0,1,1,7,NULL,NULL,'fa-random',NULL),(21,2,'Change Case Status','16','Change Case Status',NULL,0,0,16,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(22,2,'Change Case Subject','53','Change Case Subject',NULL,0,0,53,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(23,2,'Change Custom Data','33','Change Custom Data',NULL,0,0,33,'',0,1,1,7,NULL,NULL,'fa-table',NULL),(24,2,'Membership Renewal Reminder','17','Membership Renewal Reminder',NULL,1,NULL,17,'offline membership renewal reminder.',0,1,1,3,NULL,NULL,NULL,NULL),(25,2,'Change Case Start Date','18','Change Case Start Date',NULL,0,0,18,'',0,1,1,7,NULL,NULL,'fa-calendar',NULL),(26,2,'Bulk Email','19','Bulk Email',NULL,1,NULL,19,'Bulk Email Sent.',0,1,1,NULL,NULL,NULL,NULL,NULL),(27,2,'Assign Case Role','20','Assign Case Role',NULL,0,0,20,'',0,1,1,7,NULL,NULL,'fa-user-plus',NULL),(28,2,'Remove Case Role','21','Remove Case Role',NULL,0,0,21,'',0,1,1,7,NULL,NULL,'fa-user-times',NULL),(29,2,'Print/Merge Document','22','Print PDF Letter',NULL,0,NULL,22,'Export letters and other printable documents.',0,1,1,NULL,NULL,NULL,'fa-file-pdf-o',NULL),(30,2,'Merge Case','23','Merge Case',NULL,0,NULL,23,'',0,1,1,7,NULL,NULL,'fa-compress',NULL),(31,2,'Reassigned Case','24','Reassigned Case',NULL,0,NULL,24,'',0,1,1,7,NULL,NULL,'fa-user-circle-o',NULL),(32,2,'Link Cases','25','Link Cases',NULL,0,NULL,25,'',0,1,1,7,NULL,NULL,'fa-link',NULL),(33,2,'Change Case Tags','26','Change Case Tags',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-tags',NULL),(34,2,'Add Client To Case','27','Add Client To Case',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-users',NULL),(35,2,'Survey','28','Survey',NULL,0,0,27,'',0,1,1,9,NULL,NULL,NULL,NULL),(36,2,'Canvass','29','Canvass',NULL,0,0,28,'',0,1,1,9,NULL,NULL,NULL,NULL),(37,2,'PhoneBank','30','PhoneBank',NULL,0,0,29,'',0,1,1,9,NULL,NULL,NULL,NULL),(38,2,'WalkList','31','WalkList',NULL,0,0,30,'',0,1,1,9,NULL,NULL,NULL,NULL),(39,2,'Petition Signature','32','Petition',NULL,0,0,31,'',0,1,1,9,NULL,NULL,NULL,NULL),(40,2,'Mass SMS','34','Mass SMS',NULL,1,NULL,34,'Mass SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(41,2,'Change Membership Status','35','Change Membership Status',NULL,1,NULL,35,'Change Membership Status.',0,1,1,3,NULL,NULL,NULL,NULL),(42,2,'Change Membership Type','36','Change Membership Type',NULL,1,NULL,36,'Change Membership Type.',0,1,1,3,NULL,NULL,NULL,NULL),(43,2,'Cancel Recurring Contribution','37','Cancel Recurring Contribution',NULL,1,0,37,'',0,1,1,2,NULL,NULL,NULL,NULL),(44,2,'Update Recurring Contribution Billing Details','38','Update Recurring Contribution Billing Details',NULL,1,0,38,'',0,1,1,2,NULL,NULL,NULL,NULL),(45,2,'Update Recurring Contribution','39','Update Recurring Contribution',NULL,1,0,39,'',0,1,1,2,NULL,NULL,NULL,NULL),(46,2,'Reminder Sent','40','Reminder Sent',NULL,1,0,40,'',0,1,1,NULL,NULL,NULL,NULL,NULL),(47,2,'Export Accounting Batch','41','Export Accounting Batch',NULL,1,0,41,'Export Accounting Batch',0,1,1,2,NULL,NULL,NULL,NULL),(48,2,'Create Batch','42','Create Batch',NULL,1,0,42,'Create Batch',0,1,1,2,NULL,NULL,NULL,NULL),(49,2,'Edit Batch','43','Edit Batch',NULL,1,0,43,'Edit Batch',0,1,1,2,NULL,NULL,NULL,NULL),(50,2,'SMS delivery','44','SMS delivery',NULL,1,NULL,44,'SMS delivery',0,1,1,NULL,NULL,NULL,NULL,NULL),(51,2,'Inbound SMS','45','Inbound SMS',NULL,1,NULL,45,'Inbound SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(52,2,'Payment','46','Payment',NULL,1,NULL,46,'Additional payment recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(53,2,'Refund','47','Refund',NULL,1,NULL,47,'Refund recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(54,2,'Change Registration','48','Change Registration',NULL,1,NULL,48,'Changes to an existing event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(55,2,'Downloaded Invoice','49','Downloaded Invoice',NULL,1,NULL,49,'Downloaded Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(56,2,'Emailed Invoice','50','Emailed Invoice',NULL,1,NULL,50,'Emailed Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(57,2,'Contact Merged','51','Contact Merged',NULL,1,NULL,51,'Contact Merged',0,1,1,NULL,NULL,NULL,NULL,NULL),(58,2,'Contact Deleted by Merge','52','Contact Deleted by Merge',NULL,1,NULL,52,'Contact was merged into another contact',0,1,1,NULL,NULL,NULL,NULL,NULL),(59,2,'Failed Payment','54','Failed Payment',NULL,1,0,54,'Failed Payment',0,1,1,2,NULL,NULL,NULL,NULL),(60,3,'Female','1','Female',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(61,3,'Male','2','Male',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(62,3,'Other','3','Other',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(63,4,'Yahoo','1','Yahoo',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(64,4,'MSN','2','Msn',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(65,4,'AIM','3','Aim',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(66,4,'GTalk','4','Gtalk',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(67,4,'Jabber','5','Jabber',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(68,4,'Skype','6','Skype',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(69,5,'Sprint','1','Sprint',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(70,5,'Verizon','2','Verizon',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(71,5,'Cingular','3','Cingular',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(72,6,'Mrs.','1','Mrs.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(73,6,'Ms.','2','Ms.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(74,6,'Mr.','3','Mr.',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(75,6,'Dr.','4','Dr.',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(76,7,'Jr.','1','Jr.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(77,7,'Sr.','2','Sr.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(78,7,'II','3','II',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(79,7,'III','4','III',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(80,7,'IV','5','IV',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(81,7,'V','6','V',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(82,7,'VI','7','VI',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(83,7,'VII','8','VII',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(84,8,'Administrator','1','Admin',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(85,8,'Authenticated','2','Auth',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(86,9,'Visa','1','Visa',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(87,9,'MasterCard','2','MasterCard',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(88,9,'Amex','3','Amex',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(89,9,'Discover','4','Discover',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(90,10,'Credit Card','1','Credit Card',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(91,10,'Debit Card','2','Debit Card',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(92,10,'Cash','3','Cash',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(93,10,'Check','4','Check',NULL,0,1,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(94,10,'EFT','5','EFT',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(95,11,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(96,11,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(97,11,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(98,11,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(99,11,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(100,11,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(101,11,'Refunded','7','Refunded',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(102,11,'Partially paid','8','Partially paid',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(103,11,'Pending refund','9','Pending refund',NULL,0,NULL,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(104,11,'Chargeback','10','Chargeback',NULL,0,NULL,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(105,11,'Template','11','Template',NULL,0,NULL,11,'Status for contribution records which represent a template for a recurring contribution rather than an actual contribution. This status is transitional, to ensure that said contributions don\\\'t appear in reports. The is_template field is the preferred way to find and filter these contributions.',0,1,1,NULL,NULL,NULL,NULL,NULL),(106,12,'Waiting Review','1','Waiting Review',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(107,12,'Approved','2','Approved',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(108,12,'Not Approved','3','Not Approved',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(109,13,'Owner chooses whether to receive notifications','1','owner_chooses',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(110,13,'Notifications are sent to ALL owners','2','all_owners',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(111,13,'Notifications are NOT available','3','no_notifications',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(112,14,'Attendee','1','Attendee',NULL,1,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(113,14,'Volunteer','2','Volunteer',NULL,1,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(114,14,'Host','3','Host',NULL,1,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(115,14,'Speaker','4','Speaker',NULL,1,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(116,15,'Conference','1','Conference',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(117,15,'Exhibition','2','Exhibition',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(118,15,'Fundraiser','3','Fundraiser',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(119,15,'Meeting','4','Meeting',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(120,15,'Performance','5','Performance',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(121,15,'Workshop','6','Workshop',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(122,16,'Activities','1','activity',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(123,16,'Relationships','2','rel',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(124,16,'Groups','3','group',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(125,16,'Notes','4','note',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(126,16,'Tags','5','tag',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(127,16,'Change Log','6','log',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(128,16,'Contributions','7','CiviContribute',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(129,16,'Memberships','8','CiviMember',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(130,16,'Events','9','CiviEvent',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(131,16,'Cases','10','CiviCase',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(132,16,'Grants','11','CiviGrant',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(133,16,'Pledges','13','CiviPledge',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(134,16,'Mailings','14','CiviMail',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(135,17,'Show Smart Groups on Demand','1','showondemand',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(136,17,'Always Show Smart Groups','2','alwaysshow',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(137,17,'Hide Smart Groups','3','hide',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(138,18,'Custom Data','1','CustomData',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(139,18,'Address','2','Address',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(140,18,'Communication Preferences','3','CommunicationPreferences',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(141,18,'Notes','4','Notes',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(142,18,'Demographics','5','Demographics',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(143,18,'Tags and Groups','6','TagsAndGroups',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(144,18,'Email','7','Email',NULL,1,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(145,18,'Phone','8','Phone',NULL,1,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(146,18,'Instant Messenger','9','IM',NULL,1,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(147,18,'Open ID','10','OpenID',NULL,1,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(148,18,'Website','11','Website',NULL,1,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(149,18,'Prefix','12','Prefix',NULL,2,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(150,18,'Formal Title','13','Formal Title',NULL,2,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(151,18,'First Name','14','First Name',NULL,2,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(152,18,'Middle Name','15','Middle Name',NULL,2,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(153,18,'Last Name','16','Last Name',NULL,2,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(154,18,'Suffix','17','Suffix',NULL,2,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(155,19,'Address Fields','1','location',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(156,19,'Custom Fields','2','custom',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(157,19,'Activities','3','activity',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(158,19,'Relationships','4','relationship',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(159,19,'Notes','5','notes',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(160,19,'Change Log','6','changeLog',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(161,19,'Contributions','7','CiviContribute',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(162,19,'Memberships','8','CiviMember',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(163,19,'Events','9','CiviEvent',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(164,19,'Cases','10','CiviCase',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(165,19,'Grants','12','CiviGrant',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(166,19,'Demographics','13','demographics',NULL,0,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(167,19,'Pledges','15','CiviPledge',NULL,0,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(168,19,'Contact Type','16','contactType',NULL,0,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(169,19,'Groups','17','groups',NULL,0,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(170,19,'Tags','18','tags',NULL,0,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(171,19,'Mailing','19','CiviMail',NULL,0,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(172,20,'Groups','1','Groups',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(173,20,'Contributions','2','CiviContribute',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(174,20,'Memberships','3','CiviMember',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(175,20,'Events','4','CiviEvent',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(176,20,'My Contacts / Organizations','5','Permissioned Orgs',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(177,20,'Pledges','7','CiviPledge',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(178,20,'Personal Campaign Pages','8','PCP',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(179,20,'Assigned Activities','9','Assigned Activities',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(180,20,'Invoices / Credit Notes','10','Invoices / Credit Notes',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(181,45,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(182,45,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(183,45,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(184,45,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(185,45,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(186,45,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(187,45,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(188,46,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(189,46,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(190,46,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(191,46,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(192,46,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(193,46,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(194,46,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(195,21,'Street Address','1','street_address',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(196,21,'Supplemental Address 1','2','supplemental_address_1',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(197,21,'Supplemental Address 2','3','supplemental_address_2',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(198,21,'Supplemental Address 3','4','supplemental_address_3',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(199,21,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(200,21,'Postal Code','6','postal_code',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(201,21,'Postal Code Suffix','7','postal_code_suffix',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(202,21,'County','8','county',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(203,21,'State/Province','9','state_province',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(204,21,'Country','10','country',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(205,21,'Latitude','11','geo_code_1',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(206,21,'Longitude','12','geo_code_2',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(207,21,'Address Name','13','address_name',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(208,21,'Street Address Parsing','14','street_address_parsing',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(209,22,'Access Control','1','Access Control',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(210,22,'Mailing List','2','Mailing List',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(211,23,'Submitted','1','Submitted',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(212,23,'Eligible','2','Eligible',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(213,23,'Ineligible','3','Ineligible',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(214,23,'Paid','4','Paid',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(215,23,'Awaiting Information','5','Awaiting Information',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(216,23,'Withdrawn','6','Withdrawn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(217,23,'Approved for Payment','7','Approved for Payment',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(218,25,'CRM_Contact_Form_Search_Custom_Sample','1','CRM_Contact_Form_Search_Custom_Sample',NULL,0,NULL,1,'Household Name and State',0,0,1,NULL,NULL,NULL,NULL,NULL),(219,25,'CRM_Contact_Form_Search_Custom_ContributionAggregate','2','CRM_Contact_Form_Search_Custom_ContributionAggregate',NULL,0,NULL,2,'Contribution Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(220,25,'CRM_Contact_Form_Search_Custom_Group','4','CRM_Contact_Form_Search_Custom_Group',NULL,0,NULL,4,'Include / Exclude Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(221,25,'CRM_Contact_Form_Search_Custom_PostalMailing','5','CRM_Contact_Form_Search_Custom_PostalMailing',NULL,0,NULL,5,'Postal Mailing',0,0,1,NULL,NULL,NULL,NULL,NULL),(222,25,'CRM_Contact_Form_Search_Custom_Proximity','6','CRM_Contact_Form_Search_Custom_Proximity',NULL,0,NULL,6,'Proximity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(223,25,'CRM_Contact_Form_Search_Custom_EventAggregate','7','CRM_Contact_Form_Search_Custom_EventAggregate',NULL,0,NULL,7,'Event Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(224,25,'CRM_Contact_Form_Search_Custom_ActivitySearch','8','CRM_Contact_Form_Search_Custom_ActivitySearch',NULL,0,NULL,8,'Activity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(225,25,'CRM_Contact_Form_Search_Custom_PriceSet','9','CRM_Contact_Form_Search_Custom_PriceSet',NULL,0,NULL,9,'Price Set Details for Event Participants',0,0,1,NULL,NULL,NULL,NULL,NULL),(226,25,'CRM_Contact_Form_Search_Custom_ZipCodeRange','10','CRM_Contact_Form_Search_Custom_ZipCodeRange',NULL,0,NULL,10,'Zip Code Range',0,0,1,NULL,NULL,NULL,NULL,NULL),(227,25,'CRM_Contact_Form_Search_Custom_DateAdded','11','CRM_Contact_Form_Search_Custom_DateAdded',NULL,0,NULL,11,'Date Added to CiviCRM',0,0,1,NULL,NULL,NULL,NULL,NULL),(228,25,'CRM_Contact_Form_Search_Custom_MultipleValues','12','CRM_Contact_Form_Search_Custom_MultipleValues',NULL,0,NULL,12,'Custom Group Multiple Values Listing',0,0,1,NULL,NULL,NULL,NULL,NULL),(229,25,'CRM_Contact_Form_Search_Custom_ContribSYBNT','13','CRM_Contact_Form_Search_Custom_ContribSYBNT',NULL,0,NULL,13,'Contributions made in Year X and not Year Y',0,0,1,NULL,NULL,NULL,NULL,NULL),(230,25,'CRM_Contact_Form_Search_Custom_TagContributions','14','CRM_Contact_Form_Search_Custom_TagContributions',NULL,0,NULL,14,'Find Contribution Amounts by Tag',0,0,1,NULL,NULL,NULL,NULL,NULL),(231,25,'CRM_Contact_Form_Search_Custom_FullText','15','CRM_Contact_Form_Search_Custom_FullText',NULL,0,NULL,15,'Full-text Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(232,41,'Constituent Report (Summary)','contact/summary','CRM_Report_Form_Contact_Summary',NULL,0,NULL,1,'Provides a list of address and telephone information for constituent records in your system.',0,0,1,NULL,NULL,NULL,NULL,NULL),(233,41,'Constituent Report (Detail)','contact/detail','CRM_Report_Form_Contact_Detail',NULL,0,NULL,2,'Provides contact-related information on contributions, memberships, events and activities.',0,0,1,NULL,NULL,NULL,NULL,NULL),(234,41,'Activity Details Report','activity','CRM_Report_Form_Activity',NULL,0,NULL,3,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)',0,0,1,NULL,NULL,NULL,NULL,NULL),(235,41,'Walk / Phone List Report','walklist','CRM_Report_Form_Walklist_Walklist',NULL,0,NULL,4,'Provides a detailed report for your walk/phonelist for targeted contacts',0,0,0,NULL,NULL,NULL,NULL,NULL),(236,41,'Current Employer Report','contact/currentEmployer','CRM_Report_Form_Contact_CurrentEmployer',NULL,0,NULL,5,'Provides detail list of employer employee relationships along with employment details Ex Join Date',0,0,1,NULL,NULL,NULL,NULL,NULL),(237,41,'Contribution Summary Report','contribute/summary','CRM_Report_Form_Contribute_Summary',NULL,0,NULL,6,'Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.',0,0,1,2,NULL,NULL,NULL,NULL),(238,41,'Contribution Detail Report','contribute/detail','CRM_Report_Form_Contribute_Detail',NULL,0,NULL,7,'Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.',0,0,1,2,NULL,NULL,NULL,NULL),(239,41,'Repeat Contributions Report','contribute/repeat','CRM_Report_Form_Contribute_Repeat',NULL,0,NULL,8,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.',0,0,1,2,NULL,NULL,NULL,NULL),(240,41,'Contributions by Organization Report','contribute/organizationSummary','CRM_Report_Form_Contribute_OrganizationSummary',NULL,0,NULL,9,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.',0,0,1,2,NULL,NULL,NULL,NULL),(241,41,'Contributions by Household Report','contribute/householdSummary','CRM_Report_Form_Contribute_HouseholdSummary',NULL,0,NULL,10,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.',0,0,1,2,NULL,NULL,NULL,NULL),(242,41,'Top Donors Report','contribute/topDonor','CRM_Report_Form_Contribute_TopDonor',NULL,0,NULL,11,'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).',0,0,1,2,NULL,NULL,NULL,NULL),(243,41,'SYBUNT Report','contribute/sybunt','CRM_Report_Form_Contribute_Sybunt',NULL,0,NULL,12,'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.',0,0,1,2,NULL,NULL,NULL,NULL),(244,41,'LYBUNT Report','contribute/lybunt','CRM_Report_Form_Contribute_Lybunt',NULL,0,NULL,13,'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.',0,0,1,2,NULL,NULL,NULL,NULL),(245,41,'Soft Credit Report','contribute/softcredit','CRM_Report_Form_Contribute_SoftCredit',NULL,0,NULL,14,'Shows contributions made by contacts that have been soft-credited to other contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(246,41,'Membership Report (Summary)','member/summary','CRM_Report_Form_Member_Summary',NULL,0,NULL,15,'Provides a summary of memberships by type and join date.',0,0,1,3,NULL,NULL,NULL,NULL),(247,41,'Membership Report (Detail)','member/detail','CRM_Report_Form_Member_Detail',NULL,0,NULL,16,'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.',0,0,1,3,NULL,NULL,NULL,NULL),(248,41,'Membership Report (Lapsed)','member/lapse','CRM_Report_Form_Member_Lapse',NULL,0,NULL,17,'Provides a list of memberships that lapsed or will lapse before the date you specify.',0,0,1,3,NULL,NULL,NULL,NULL),(249,41,'Event Participant Report (List)','event/participantListing','CRM_Report_Form_Event_ParticipantListing',NULL,0,NULL,18,'Provides lists of participants for an event.',0,0,1,1,NULL,NULL,NULL,NULL),(250,41,'Event Income Report (Summary)','event/summary','CRM_Report_Form_Event_Summary',NULL,0,NULL,19,'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.',0,0,1,1,NULL,NULL,NULL,NULL),(251,41,'Event Income Report (Detail)','event/income','CRM_Report_Form_Event_Income',NULL,0,NULL,20,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.',0,0,1,1,NULL,NULL,NULL,NULL),(252,41,'Pledge Detail Report','pledge/detail','CRM_Report_Form_Pledge_Detail',NULL,0,NULL,21,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.',0,0,1,6,NULL,NULL,NULL,NULL),(253,41,'Pledged but not Paid Report','pledge/pbnp','CRM_Report_Form_Pledge_Pbnp',NULL,0,NULL,22,'Pledged but not Paid Report',0,0,1,6,NULL,NULL,NULL,NULL),(254,41,'Relationship Report','contact/relationship','CRM_Report_Form_Contact_Relationship',NULL,0,NULL,23,'Relationship Report',0,0,1,NULL,NULL,NULL,NULL,NULL),(255,41,'Case Summary Report','case/summary','CRM_Report_Form_Case_Summary',NULL,0,NULL,24,'Provides a summary of cases and their duration by date range, status, staff member and / or case role.',0,0,1,7,NULL,NULL,NULL,NULL),(256,41,'Case Time Spent Report','case/timespent','CRM_Report_Form_Case_TimeSpent',NULL,0,NULL,25,'Aggregates time spent on case and / or non-case activities by activity type and contact.',0,0,1,7,NULL,NULL,NULL,NULL),(257,41,'Contact Demographics Report','case/demographics','CRM_Report_Form_Case_Demographics',NULL,0,NULL,26,'Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.',0,0,1,7,NULL,NULL,NULL,NULL),(258,41,'Database Log Report','contact/log','CRM_Report_Form_Contact_Log',NULL,0,NULL,27,'Log of contact and activity records created or updated in a given date range.',0,0,1,NULL,NULL,NULL,NULL,NULL),(259,41,'Activity Summary Report','activitySummary','CRM_Report_Form_ActivitySummary',NULL,0,NULL,28,'Shows activity statistics by type / date',0,0,1,NULL,NULL,NULL,NULL,NULL),(260,41,'Bookkeeping Transactions Report','contribute/bookkeeping','CRM_Report_Form_Contribute_Bookkeeping',NULL,0,0,29,'Shows Bookkeeping Transactions Report',0,0,1,2,NULL,NULL,NULL,NULL),(261,41,'Grant Report (Detail)','grant/detail','CRM_Report_Form_Grant_Detail',NULL,0,0,30,'Grant Report Detail',0,0,1,5,NULL,NULL,NULL,NULL),(262,41,'Participant list Count Report','event/participantlist','CRM_Report_Form_Event_ParticipantListCount',NULL,0,0,31,'Shows the Participant list with Participant Count.',0,0,1,1,NULL,NULL,NULL,NULL),(263,41,'Income Count Summary Report','event/incomesummary','CRM_Report_Form_Event_IncomeCountSummary',NULL,0,0,32,'Shows the Income Summary of events with Count.',0,0,1,1,NULL,NULL,NULL,NULL),(264,41,'Case Detail Report','case/detail','CRM_Report_Form_Case_Detail',NULL,0,0,33,'Case Details',0,0,1,7,NULL,NULL,NULL,NULL),(265,41,'Mail Bounce Report','Mailing/bounce','CRM_Report_Form_Mailing_Bounce',NULL,0,NULL,34,'Bounce Report for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(266,41,'Mail Summary Report','Mailing/summary','CRM_Report_Form_Mailing_Summary',NULL,0,NULL,35,'Summary statistics for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(267,41,'Mail Opened Report','Mailing/opened','CRM_Report_Form_Mailing_Opened',NULL,0,NULL,36,'Display contacts who opened emails from a mailing',0,0,1,4,NULL,NULL,NULL,NULL),(268,41,'Mail Click-Through Report','Mailing/clicks','CRM_Report_Form_Mailing_Clicks',NULL,0,NULL,37,'Display clicks from each mailing',0,0,1,4,NULL,NULL,NULL,NULL),(269,41,'Contact Logging Report (Summary)','logging/contact/summary','CRM_Report_Form_Contact_LoggingSummary',NULL,0,NULL,38,'Contact modification report for the logging infrastructure (summary).',0,0,0,NULL,NULL,NULL,NULL,NULL),(270,41,'Contact Logging Report (Detail)','logging/contact/detail','CRM_Report_Form_Contact_LoggingDetail',NULL,0,NULL,39,'Contact modification report for the logging infrastructure (detail).',0,0,0,NULL,NULL,NULL,NULL,NULL),(271,41,'Grant Report (Statistics)','grant/statistics','CRM_Report_Form_Grant_Statistics',NULL,0,NULL,42,'Shows statistics for Grants.',0,0,1,5,NULL,NULL,NULL,NULL),(272,41,'Survey Report (Detail)','survey/detail','CRM_Report_Form_Campaign_SurveyDetails',NULL,0,NULL,43,'Detailed report for canvassing, phone-banking, walk lists or other surveys.',0,0,1,9,NULL,NULL,NULL,NULL),(273,41,'Personal Campaign Page Report','contribute/pcp','CRM_Report_Form_Contribute_PCP',NULL,0,NULL,44,'Summarizes amount raised and number of contributors for each Personal Campaign Page.',0,0,1,2,NULL,NULL,NULL,NULL),(274,41,'Pledge Summary Report','pledge/summary','CRM_Report_Form_Pledge_Summary',NULL,0,NULL,45,'Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.',0,0,1,6,NULL,NULL,NULL,NULL),(275,41,'Contribution Aggregate by Relationship','contribute/history','CRM_Report_Form_Contribute_History',NULL,0,NULL,46,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(276,41,'Mail Detail Report','mailing/detail','CRM_Report_Form_Mailing_Detail',NULL,0,NULL,47,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.',0,0,1,4,NULL,NULL,NULL,NULL),(277,41,'Contribution and Membership Details','member/contributionDetail','CRM_Report_Form_Member_ContributionDetail',NULL,0,NULL,48,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.',0,0,1,3,NULL,NULL,NULL,NULL),(278,41,'Recurring Contributions Report','contribute/recur','CRM_Report_Form_Contribute_Recur',NULL,0,NULL,49,'Provides information about the status of recurring contributions',0,0,1,2,NULL,NULL,NULL,NULL),(279,41,'Recurring Contributions Summary','contribute/recursummary','CRM_Report_Form_Contribute_RecurSummary',NULL,0,NULL,49,'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.',0,0,1,2,NULL,NULL,NULL,NULL),(280,41,'Deferred Revenue Details','contribute/deferredrevenue','CRM_Report_Form_Contribute_DeferredRevenue',NULL,0,NULL,50,'Deferred Revenue Details Report',0,0,1,2,NULL,NULL,NULL,NULL),(281,26,'Scheduled','1','Scheduled',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(282,26,'Completed','2','Completed',NULL,1,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(283,26,'Cancelled','3','Cancelled',NULL,2,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(284,26,'Left Message','4','Left Message',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(285,26,'Unreachable','5','Unreachable',NULL,2,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(286,26,'Not Required','6','Not Required',NULL,2,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(287,26,'Available','7','Available',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(288,26,'No-show','8','No_show',NULL,2,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(289,28,'Ongoing','1','Open','Opened',0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(290,28,'Resolved','2','Closed','Closed',0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(291,28,'Urgent','3','Urgent','Opened',0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(292,29,'Name Only','1','Name Only',NULL,0,0,1,'CRM_Event_Page_ParticipantListing_Name',0,1,1,NULL,NULL,NULL,NULL,NULL),(293,29,'Name and Email','2','Name and Email',NULL,0,0,2,'CRM_Event_Page_ParticipantListing_NameAndEmail',0,1,1,NULL,NULL,NULL,NULL,NULL),(294,29,'Name, Status and Register Date','3','Name, Status and Register Date',NULL,0,0,3,'CRM_Event_Page_ParticipantListing_NameStatusAndDate',0,1,1,NULL,NULL,NULL,NULL,NULL),(295,30,'jpg','1','jpg',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(296,30,'jpeg','2','jpeg',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(297,30,'png','3','png',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(298,30,'gif','4','gif',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(299,30,'txt','5','txt',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(300,30,'pdf','6','pdf',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(301,30,'doc','7','doc',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(302,30,'xls','8','xls',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(303,30,'rtf','9','rtf',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(304,30,'csv','10','csv',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(305,30,'ppt','11','ppt',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(306,30,'docx','12','docx',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(307,30,'xlsx','13','xlsx',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(308,30,'odt','14','odt',NULL,0,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(309,30,'ics','15','ics',NULL,0,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(310,30,'pptx','16','pptx',NULL,0,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(311,33,'Textarea','1','Textarea',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(312,33,'CKEditor','2','CKEditor',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(313,32,'Search Builder','1','Search Builder',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(314,32,'Import Contact','2','Import Contact',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(315,32,'Import Activity','3','Import Activity',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(316,32,'Import Contribution','4','Import Contribution',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(317,32,'Import Membership','5','Import Membership',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(318,32,'Import Participant','6','Import Participant',NULL,0,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(319,32,'Export Contact','7','Export Contact',NULL,0,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(320,32,'Export Contribution','8','Export Contribution',NULL,0,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(321,32,'Export Membership','9','Export Membership',NULL,0,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(322,32,'Export Participant','10','Export Participant',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(323,32,'Export Pledge','11','Export Pledge',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(324,32,'Export Case','12','Export Case',NULL,0,0,12,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(325,32,'Export Grant','13','Export Grant',NULL,0,0,13,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(326,32,'Export Activity','14','Export Activity',NULL,0,0,14,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(327,34,'day','day','day',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(328,34,'week','week','week',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(329,34,'month','month','month',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(330,34,'year','year','year',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(331,35,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(332,35,'Mobile','2','Mobile',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(333,35,'Fax','3','Fax',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(334,35,'Pager','4','Pager',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(335,35,'Voicemail','5','Voicemail',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(336,36,'Participant Role','1','ParticipantRole',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(337,36,'Participant Event Name','2','ParticipantEventName',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(338,36,'Participant Event Type','3','ParticipantEventType',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(339,37,'Public','1','public',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(340,37,'Admin','2','admin',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(341,38,'IMAP','1','IMAP',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(342,38,'Maildir','2','Maildir',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(343,38,'POP3','3','POP3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(344,38,'Localdir','4','Localdir',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(345,39,'Urgent','1','Urgent',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(346,39,'Normal','2','Normal',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(347,39,'Low','3','Low',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(348,40,'Vancouver','city_','city_',NULL,0,NULL,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(349,40,'/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/','date_','date_',NULL,1,NULL,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(350,42,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(351,42,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(352,42,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(353,42,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(354,42,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(355,43,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(356,43,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(357,43,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(358,43,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(359,43,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(360,44,'{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}','1','}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(361,44,'{contact.household_name}','2','{contact.household_name}',NULL,2,1,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(362,44,'{contact.organization_name}','3','{contact.organization_name}',NULL,3,1,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(363,44,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(364,47,'Work','1','Work',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(365,47,'Main','2','Main',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(366,47,'Facebook','3','Facebook',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(367,47,'Instagram','5','Instagram',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(368,47,'LinkedIn','6','LinkedIn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(369,47,'MySpace','7','MySpace',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(370,47,'Pinterest','8','Pinterest',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(371,47,'SnapChat','9','SnapChat',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(372,47,'Tumblr','10','Tumblr',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(373,47,'Twitter','11','Twitter',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(374,47,'Vine','12','Vine ',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(375,48,'Contacts','civicrm_contact','Contacts',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(376,48,'Activities','civicrm_activity','Activities',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(377,48,'Cases','civicrm_case','Cases',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(378,48,'Attachments','civicrm_file','Attachements',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(379,49,'USD ($)','USD','USD',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(380,50,'Name Only','1','CRM_Event_Badge_Simple',NULL,0,0,1,'Simple Event Name Badge',0,1,1,NULL,NULL,NULL,NULL,NULL),(381,50,'Name Tent','2','CRM_Event_Badge_NameTent',NULL,0,0,2,'Name Tent',0,1,1,NULL,NULL,NULL,NULL,NULL),(382,50,'With Logo','3','CRM_Event_Badge_Logo',NULL,0,0,3,'You can set your own background image',0,1,1,NULL,NULL,NULL,NULL,NULL),(383,50,'5395 with Logo','4','CRM_Event_Badge_Logo5395',NULL,0,0,4,'Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm)',0,1,1,NULL,NULL,NULL,NULL,NULL),(384,51,'None','0','None',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(385,51,'Author Only','1','Author Only',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(386,52,'Direct Mail','1','Direct Mail',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(387,52,'Referral Program','2','Referral Program',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(388,52,'Constituent Engagement','3','Constituent Engagement',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(389,53,'Planned','1','Planned',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(390,53,'In Progress','2','In Progress',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(391,53,'Completed','3','Completed',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(392,53,'Cancelled','4','Cancelled',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(393,56,'1','1','1',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(394,56,'2','2','2',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(395,56,'3','3','3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(396,56,'4','4','4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(397,56,'5','5','5',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(398,58,'Letter','{\"metric\":\"in\",\"width\":8.5,\"height\":11}','letter',NULL,NULL,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(399,58,'Legal','{\"metric\":\"in\",\"width\":8.5,\"height\":14}','legal',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(400,58,'Ledger','{\"metric\":\"in\",\"width\":17,\"height\":11}','ledger',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(401,58,'Tabloid','{\"metric\":\"in\",\"width\":11,\"height\":17}','tabloid',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(402,58,'Executive','{\"metric\":\"in\",\"width\":7.25,\"height\":10.5}','executive',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(403,58,'Folio','{\"metric\":\"in\",\"width\":8.5,\"height\":13}','folio',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(404,58,'Envelope #9','{\"metric\":\"pt\",\"width\":638.93,\"height\":278.93}','envelope-9',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(405,58,'Envelope #10','{\"metric\":\"pt\",\"width\":684,\"height\":297}','envelope-10',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(406,58,'Envelope #11','{\"metric\":\"pt\",\"width\":747,\"height\":324}','envelope-11',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(407,58,'Envelope #12','{\"metric\":\"pt\",\"width\":792,\"height\":342}','envelope-12',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(408,58,'Envelope #14','{\"metric\":\"pt\",\"width\":828,\"height\":360}','envelope-14',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(409,58,'Envelope ISO B4','{\"metric\":\"pt\",\"width\":1000.63,\"height\":708.66}','envelope-b4',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(410,58,'Envelope ISO B5','{\"metric\":\"pt\",\"width\":708.66,\"height\":498.9}','envelope-b5',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(411,58,'Envelope ISO B6','{\"metric\":\"pt\",\"width\":498.9,\"height\":354.33}','envelope-b6',NULL,NULL,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(412,58,'Envelope ISO C3','{\"metric\":\"pt\",\"width\":1298.27,\"height\":918.42}','envelope-c3',NULL,NULL,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(413,58,'Envelope ISO C4','{\"metric\":\"pt\",\"width\":918.42,\"height\":649.13}','envelope-c4',NULL,NULL,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(414,58,'Envelope ISO C5','{\"metric\":\"pt\",\"width\":649.13,\"height\":459.21}','envelope-c5',NULL,NULL,0,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(415,58,'Envelope ISO C6','{\"metric\":\"pt\",\"width\":459.21,\"height\":323.15}','envelope-c6',NULL,NULL,0,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(416,58,'Envelope ISO DL','{\"metric\":\"pt\",\"width\":623.622,\"height\":311.811}','envelope-dl',NULL,NULL,0,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(417,58,'ISO A0','{\"metric\":\"pt\",\"width\":2383.94,\"height\":3370.39}','a0',NULL,NULL,0,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(418,58,'ISO A1','{\"metric\":\"pt\",\"width\":1683.78,\"height\":2383.94}','a1',NULL,NULL,0,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(419,58,'ISO A2','{\"metric\":\"pt\",\"width\":1190.55,\"height\":1683.78}','a2',NULL,NULL,0,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(420,58,'ISO A3','{\"metric\":\"pt\",\"width\":841.89,\"height\":1190.55}','a3',NULL,NULL,0,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(421,58,'ISO A4','{\"metric\":\"pt\",\"width\":595.28,\"height\":841.89}','a4',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(422,58,'ISO A5','{\"metric\":\"pt\",\"width\":419.53,\"height\":595.28}','a5',NULL,NULL,0,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(423,58,'ISO A6','{\"metric\":\"pt\",\"width\":297.64,\"height\":419.53}','a6',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(424,58,'ISO A7','{\"metric\":\"pt\",\"width\":209.76,\"height\":297.64}','a7',NULL,NULL,0,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(425,58,'ISO A8','{\"metric\":\"pt\",\"width\":147.4,\"height\":209.76}','a8',NULL,NULL,0,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(426,58,'ISO A9','{\"metric\":\"pt\",\"width\":104.88,\"height\":147.4}','a9',NULL,NULL,0,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(427,58,'ISO A10','{\"metric\":\"pt\",\"width\":73.7,\"height\":104.88}','a10',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(428,58,'ISO B0','{\"metric\":\"pt\",\"width\":2834.65,\"height\":4008.19}','b0',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(429,58,'ISO B1','{\"metric\":\"pt\",\"width\":2004.09,\"height\":2834.65}','b1',NULL,NULL,0,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(430,58,'ISO B2','{\"metric\":\"pt\",\"width\":1417.32,\"height\":2004.09}','b2',NULL,NULL,0,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(431,58,'ISO B3','{\"metric\":\"pt\",\"width\":1000.63,\"height\":1417.32}','b3',NULL,NULL,0,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(432,58,'ISO B4','{\"metric\":\"pt\",\"width\":708.66,\"height\":1000.63}','b4',NULL,NULL,0,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(433,58,'ISO B5','{\"metric\":\"pt\",\"width\":498.9,\"height\":708.66}','b5',NULL,NULL,0,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(434,58,'ISO B6','{\"metric\":\"pt\",\"width\":354.33,\"height\":498.9}','b6',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(435,58,'ISO B7','{\"metric\":\"pt\",\"width\":249.45,\"height\":354.33}','b7',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(436,58,'ISO B8','{\"metric\":\"pt\",\"width\":175.75,\"height\":249.45}','b8',NULL,NULL,0,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(437,58,'ISO B9','{\"metric\":\"pt\",\"width\":124.72,\"height\":175.75}','b9',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(438,58,'ISO B10','{\"metric\":\"pt\",\"width\":87.87,\"height\":124.72}','b10',NULL,NULL,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(439,58,'ISO C0','{\"metric\":\"pt\",\"width\":2599.37,\"height\":3676.54}','c0',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(440,58,'ISO C1','{\"metric\":\"pt\",\"width\":1836.85,\"height\":2599.37}','c1',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(441,58,'ISO C2','{\"metric\":\"pt\",\"width\":1298.27,\"height\":1836.85}','c2',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(442,58,'ISO C3','{\"metric\":\"pt\",\"width\":918.43,\"height\":1298.27}','c3',NULL,NULL,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(443,58,'ISO C4','{\"metric\":\"pt\",\"width\":649.13,\"height\":918.43}','c4',NULL,NULL,0,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(444,58,'ISO C5','{\"metric\":\"pt\",\"width\":459.21,\"height\":649.13}','c5',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(445,58,'ISO C6','{\"metric\":\"pt\",\"width\":323.15,\"height\":459.21}','c6',NULL,NULL,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(446,58,'ISO C7','{\"metric\":\"pt\",\"width\":229.61,\"height\":323.15}','c7',NULL,NULL,0,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(447,58,'ISO C8','{\"metric\":\"pt\",\"width\":161.57,\"height\":229.61}','c8',NULL,NULL,0,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(448,58,'ISO C9','{\"metric\":\"pt\",\"width\":113.39,\"height\":161.57}','c9',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(449,58,'ISO C10','{\"metric\":\"pt\",\"width\":79.37,\"height\":113.39}','c10',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(450,58,'ISO RA0','{\"metric\":\"pt\",\"width\":2437.8,\"height\":3458.27}','ra0',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(451,58,'ISO RA1','{\"metric\":\"pt\",\"width\":1729.13,\"height\":2437.8}','ra1',NULL,NULL,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(452,58,'ISO RA2','{\"metric\":\"pt\",\"width\":1218.9,\"height\":1729.13}','ra2',NULL,NULL,0,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(453,58,'ISO RA3','{\"metric\":\"pt\",\"width\":864.57,\"height\":1218.9}','ra3',NULL,NULL,0,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(454,58,'ISO RA4','{\"metric\":\"pt\",\"width\":609.45,\"height\":864.57}','ra4',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(455,58,'ISO SRA0','{\"metric\":\"pt\",\"width\":2551.18,\"height\":3628.35}','sra0',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(456,58,'ISO SRA1','{\"metric\":\"pt\",\"width\":1814.17,\"height\":2551.18}','sra1',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(457,58,'ISO SRA2','{\"metric\":\"pt\",\"width\":1275.59,\"height\":1814.17}','sra2',NULL,NULL,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(458,58,'ISO SRA3','{\"metric\":\"pt\",\"width\":907.09,\"height\":1275.59}','sra3',NULL,NULL,0,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(459,58,'ISO SRA4','{\"metric\":\"pt\",\"width\":637.8,\"height\":907.09}','sra4',NULL,NULL,0,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(460,61,'Activity Assignees','1','Activity Assignees',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(461,61,'Activity Source','2','Activity Source',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(462,61,'Activity Targets','3','Activity Targets',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(463,71,'Asset','1','Asset',NULL,0,0,1,'Things you own',0,1,1,2,NULL,NULL,NULL,NULL),(464,71,'Liability','2','Liability',NULL,0,0,2,'Things you owe, like a grant still to be disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(465,71,'Revenue','3','Revenue',NULL,0,1,3,'Income from contributions and sales of tickets and memberships',0,1,1,2,NULL,NULL,NULL,NULL),(466,71,'Cost of Sales','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,NULL,NULL),(467,71,'Expenses','5','Expenses',NULL,0,0,5,'Things that are paid for that are consumable, e.g. grants disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(468,62,'Income Account is','1','Income Account is',NULL,0,1,1,'Income Account is',0,1,1,2,NULL,NULL,NULL,NULL),(469,62,'Credit/Contra Revenue Account is','2','Credit/Contra Revenue Account is',NULL,0,0,2,'Credit/Contra Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(470,62,'Accounts Receivable Account is','3','Accounts Receivable Account is',NULL,0,0,3,'Accounts Receivable Account is',0,1,1,2,NULL,NULL,NULL,NULL),(471,62,'Credit Liability Account is','4','Credit Liability Account is',NULL,0,0,4,'Credit Liability Account is',0,1,0,2,NULL,NULL,NULL,NULL),(472,62,'Expense Account is','5','Expense Account is',NULL,0,0,5,'Expense Account is',0,1,1,2,NULL,NULL,NULL,NULL),(473,62,'Asset Account is','6','Asset Account is',NULL,0,0,6,'Asset Account is',0,1,1,2,NULL,NULL,NULL,NULL),(474,62,'Cost of Sales Account is','7','Cost of Sales Account is',NULL,0,0,7,'Cost of Sales Account is',0,1,1,2,NULL,NULL,NULL,NULL),(475,62,'Premiums Inventory Account is','8','Premiums Inventory Account is',NULL,0,0,8,'Premiums Inventory Account is',0,1,1,2,NULL,NULL,NULL,NULL),(476,62,'Discounts Account is','9','Discounts Account is',NULL,0,0,9,'Discounts Account is',0,1,1,2,NULL,NULL,NULL,NULL),(477,62,'Sales Tax Account is','10','Sales Tax Account is',NULL,0,0,10,'Sales Tax Account is',0,1,1,2,NULL,NULL,NULL,NULL),(478,62,'Chargeback Account is','11','Chargeback Account is',NULL,0,0,11,'Chargeback Account is',0,1,1,2,NULL,NULL,NULL,NULL),(479,62,'Deferred Revenue Account is','12','Deferred Revenue Account is',NULL,0,0,12,'Deferred Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(480,63,'Participant Role','1','participant_role',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(481,64,'Morning Sessions','1','Morning Sessions',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(482,64,'Evening Sessions','2','Evening Sessions',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(483,65,'Contribution','1','Contribution',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(484,65,'Membership','2','Membership',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(485,65,'Pledge Payment','3','Pledge Payment',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(486,67,'Open','1','Open',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(487,67,'Closed','2','Closed',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(488,67,'Data Entry','3','Data Entry',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(489,67,'Reopened','4','Reopened',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(490,67,'Exported','5','Exported',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(491,66,'Manual Batch','1','Manual Batch',NULL,0,0,1,'Manual Batch',0,1,1,2,NULL,NULL,NULL,NULL),(492,66,'Automatic Batch','2','Automatic Batch',NULL,0,0,2,'Automatic Batch',0,1,1,2,NULL,NULL,NULL,NULL),(493,72,'Paid','1','Paid',NULL,0,0,1,'Paid',0,1,1,2,NULL,NULL,NULL,NULL),(494,72,'Partially paid','2','Partially paid',NULL,0,0,2,'Partially paid',0,1,1,2,NULL,NULL,NULL,NULL),(495,72,'Unpaid','3','Unpaid',NULL,0,0,1,'Unpaid',0,1,1,2,NULL,NULL,NULL,NULL),(496,68,'http','1','http',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(497,68,'xml','2','xml',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(498,68,'smtp','3','smtp',NULL,NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(499,70,'Renewal Reminder (non-auto-renew memberships only)','1','Renewal Reminder (non-auto-renew memberships only)',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(500,70,'Auto-renew Memberships Only','2','Auto-renew Memberships Only',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(501,70,'Reminder for Both','3','Reminder for Both',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(502,73,'Event Badge','1','Event Badge',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(503,74,'Avery 5395','{\"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}','Avery 5395',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(504,74,'A6 Badge Portrait 150x106','{\"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}','A6 Badge Portrait 150x106',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(505,74,'Fattorini Name Badge 100x65','{\"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}','Fattorini Name Badge 100x65',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(506,74,'Hanging Badge 3-3/4\" x 4-3\"/4','{\"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}','Hanging Badge 3-3/4\" x 4-3\"/4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(507,60,'Avery 3475','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','3475','Avery',NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(508,60,'Avery 5160','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5160','Avery',NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(509,60,'Avery 5161','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5161','Avery',NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(510,60,'Avery 5162','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5162','Avery',NULL,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(511,60,'Avery 5163','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5163','Avery',NULL,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(512,60,'Avery 5164','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5164','Avery',NULL,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(513,60,'Avery 8600','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','8600','Avery',NULL,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(514,60,'Avery L7160','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7160','Avery',NULL,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(515,60,'Avery L7161','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7161','Avery',NULL,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(516,60,'Avery L7162','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7162','Avery',NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(517,60,'Avery L7163','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7163','Avery',NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(518,75,'Formal','1','formal',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(519,75,'Familiar','2','familiar',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(520,76,'Email','Email','Email',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(521,76,'SMS','SMS','SMS',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(522,76,'User Preference','User_Preference','User Preference',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(523,77,'Actual date only','1','Actual date only',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(524,77,'Each anniversary','2','Each anniversary',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(525,78,'Default','1','default',NULL,NULL,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(526,78,'CiviMail','2','civimail',NULL,NULL,0,2,NULL,0,1,1,4,NULL,NULL,NULL,NULL),(527,78,'CiviEvent','3','civievent',NULL,NULL,0,3,NULL,0,1,1,1,NULL,NULL,NULL,NULL),(528,82,'Production','Production','Production',NULL,NULL,1,1,'Production Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(529,82,'Staging','Staging','Staging',NULL,NULL,0,2,'Staging Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(530,82,'Development','Development','Development',NULL,NULL,0,3,'Development Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(531,79,'Today','this.day','this.day',NULL,NULL,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(532,79,'This week','this.week','this.week',NULL,NULL,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(533,79,'This calendar month','this.month','this.month',NULL,NULL,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(534,79,'This quarter','this.quarter','this.quarter',NULL,NULL,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(535,79,'This fiscal year','this.fiscal_year','this.fiscal_year',NULL,NULL,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(536,79,'This calendar year','this.year','this.year',NULL,NULL,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(537,79,'Yesterday','previous.day','previous.day',NULL,NULL,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(538,79,'Previous week','previous.week','previous.week',NULL,NULL,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(539,79,'Previous calendar month','previous.month','previous.month',NULL,NULL,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(540,79,'Previous quarter','previous.quarter','previous.quarter',NULL,NULL,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(541,79,'Previous fiscal year','previous.fiscal_year','previous.fiscal_year',NULL,NULL,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(542,79,'Previous calendar year','previous.year','previous.year',NULL,NULL,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(543,79,'Last 7 days including today','ending.week','ending.week',NULL,NULL,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(544,79,'Last 30 days including today','ending_30.day','ending.month',NULL,NULL,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(545,79,'Last 60 days including today','ending_60.day','ending_2.month',NULL,NULL,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(546,79,'Last 90 days including today','ending_90.day','ending.quarter',NULL,NULL,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(547,79,'Last 12 months including today','ending.year','ending.year',NULL,NULL,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(548,79,'Last 2 years including today','ending_2.year','ending_2.year',NULL,NULL,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(549,79,'Last 3 years including today','ending_3.year','ending_3.year',NULL,NULL,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(550,79,'Tomorrow','starting.day','starting.day',NULL,NULL,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(551,79,'Next week','next.week','next.week',NULL,NULL,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(552,79,'Next calendar month','next.month','next.month',NULL,NULL,NULL,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(553,79,'Next quarter','next.quarter','next.quarter',NULL,NULL,NULL,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(554,79,'Next fiscal year','next.fiscal_year','next.fiscal_year',NULL,NULL,NULL,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(555,79,'Next calendar year','next.year','next.year',NULL,NULL,NULL,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(556,79,'Next 7 days including today','starting.week','starting.week',NULL,NULL,NULL,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(557,79,'Next 30 days including today','starting.month','starting.month',NULL,NULL,NULL,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(558,79,'Next 60 days including today','starting_2.month','starting_2.month',NULL,NULL,NULL,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(559,79,'Next 90 days including today','starting.quarter','starting.quarter',NULL,NULL,NULL,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(560,79,'Next 12 months including today','starting.year','starting.year',NULL,NULL,NULL,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(561,79,'Current week to-date','current.week','current.week',NULL,NULL,NULL,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(562,79,'Current calendar month to-date','current.month','current.month',NULL,NULL,NULL,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(563,79,'Current quarter to-date','current.quarter','current.quarter',NULL,NULL,NULL,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(564,79,'Current calendar year to-date','current.year','current.year',NULL,NULL,NULL,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(565,79,'To end of yesterday','earlier.day','earlier.day',NULL,NULL,NULL,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(566,79,'To end of previous week','earlier.week','earlier.week',NULL,NULL,NULL,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(567,79,'To end of previous calendar month','earlier.month','earlier.month',NULL,NULL,NULL,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(568,79,'To end of previous quarter','earlier.quarter','earlier.quarter',NULL,NULL,NULL,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(569,79,'To end of previous calendar year','earlier.year','earlier.year',NULL,NULL,NULL,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(570,79,'From start of current day','greater.day','greater.day',NULL,NULL,NULL,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(571,79,'From start of current week','greater.week','greater.week',NULL,NULL,NULL,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(572,79,'From start of current calendar month','greater.month','greater.month',NULL,NULL,NULL,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(573,79,'From start of current quarter','greater.quarter','greater.quarter',NULL,NULL,NULL,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(574,79,'From start of current calendar year','greater.year','greater.year',NULL,NULL,NULL,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(575,79,'To end of current week','less.week','less.week',NULL,NULL,NULL,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(576,79,'To end of current calendar month','less.month','less.month',NULL,NULL,NULL,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(577,79,'To end of current quarter','less.quarter','less.quarter',NULL,NULL,NULL,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(578,79,'To end of current calendar year','less.year','less.year',NULL,NULL,NULL,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(579,79,'Previous 2 days','previous_2.day','previous_2.day',NULL,NULL,NULL,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(580,79,'Previous 2 weeks','previous_2.week','previous_2.week',NULL,NULL,NULL,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(581,79,'Previous 2 calendar months','previous_2.month','previous_2.month',NULL,NULL,NULL,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(582,79,'Previous 2 quarters','previous_2.quarter','previous_2.quarter',NULL,NULL,NULL,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(583,79,'Previous 2 calendar years','previous_2.year','previous_2.year',NULL,NULL,NULL,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(584,79,'Day prior to yesterday','previous_before.day','previous_before.day',NULL,NULL,NULL,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(585,79,'Week prior to previous week','previous_before.week','previous_before.week',NULL,NULL,NULL,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(586,79,'Month prior to previous calendar month','previous_before.month','previous_before.month',NULL,NULL,NULL,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(587,79,'Quarter prior to previous quarter','previous_before.quarter','previous_before.quarter',NULL,NULL,NULL,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(588,79,'Year prior to previous calendar year','previous_before.year','previous_before.year',NULL,NULL,NULL,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(589,79,'From end of previous week','greater_previous.week','greater_previous.week',NULL,NULL,NULL,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(590,79,'From end of previous calendar month','greater_previous.month','greater_previous.month',NULL,NULL,NULL,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(591,79,'From end of previous quarter','greater_previous.quarter','greater_previous.quarter',NULL,NULL,NULL,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(592,79,'From end of previous calendar year','greater_previous.year','greater_previous.year',NULL,NULL,NULL,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(593,80,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(594,80,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(595,80,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(596,80,'In Progress','5','In Progress',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(597,80,'Overdue','6','Overdue',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(598,81,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(599,81,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(600,81,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(601,81,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(602,81,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(603,81,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(604,81,'Processing','7','Processing',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(605,81,'Failing','8','Failing',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(606,83,'None','1','NONE',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(607,83,'By relationship to case client','2','BY_RELATIONSHIP',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(608,83,'Specific contact','3','SPECIFIC_CONTACT',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(609,83,'User creating the case','4','USER_CREATING_THE_CASE',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(610,31,'\"FIXME\" <info@EXAMPLE.ORG>','1','\"FIXME\" <info@EXAMPLE.ORG>',NULL,0,1,1,'Default domain email address and from name.',0,0,1,NULL,1,NULL,NULL,NULL),(611,24,'Emergency','1','Emergency',NULL,0,1,1,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(612,24,'Family Support','2','Family Support',NULL,0,NULL,2,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(613,24,'General Protection','3','General Protection',NULL,0,NULL,3,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(614,24,'Impunity','4','Impunity',NULL,0,NULL,4,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(615,55,'Approved','1','Approved',NULL,0,1,1,NULL,0,1,1,4,1,NULL,NULL,NULL),(616,55,'Rejected','2','Rejected',NULL,0,0,2,NULL,0,1,1,4,1,NULL,NULL,NULL),(617,55,'None','3','None',NULL,0,0,3,NULL,0,1,1,4,1,NULL,NULL,NULL),(618,57,'Survey','Survey','civicrm_survey',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(619,57,'Cases','Case','civicrm_case',NULL,0,NULL,2,'CRM_Case_PseudoConstant::caseType;',0,0,1,NULL,NULL,NULL,NULL,NULL),(620,84,'Abkhaz','ab','ab_GE',NULL,0,0,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(621,84,'Afar','aa','aa_ET',NULL,0,0,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(622,84,'Afrikaans','af','af_ZA',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(623,84,'Akan','ak','ak_GH',NULL,0,0,4,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(624,84,'Albanian','sq','sq_AL',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(625,84,'Amharic','am','am_ET',NULL,0,0,6,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(626,84,'Arabic','ar','ar_EG',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(627,84,'Aragonese','an','an_ES',NULL,0,0,8,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(628,84,'Armenian','hy','hy_AM',NULL,0,0,9,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(629,84,'Assamese','as','as_IN',NULL,0,0,10,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(630,84,'Avaric','av','av_RU',NULL,0,0,11,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(631,84,'Avestan','ae','ae_XX',NULL,0,0,12,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(632,84,'Aymara','ay','ay_BO',NULL,0,0,13,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(633,84,'Azerbaijani','az','az_AZ',NULL,0,0,14,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(634,84,'Bambara','bm','bm_ML',NULL,0,0,15,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(635,84,'Bashkir','ba','ba_RU',NULL,0,0,16,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(636,84,'Basque','eu','eu_ES',NULL,0,0,17,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(637,84,'Belarusian','be','be_BY',NULL,0,0,18,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(638,84,'Bengali','bn','bn_BD',NULL,0,0,19,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(639,84,'Bihari','bh','bh_IN',NULL,0,0,20,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(640,84,'Bislama','bi','bi_VU',NULL,0,0,21,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(641,84,'Bosnian','bs','bs_BA',NULL,0,0,22,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(642,84,'Breton','br','br_FR',NULL,0,0,23,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(643,84,'Bulgarian','bg','bg_BG',NULL,0,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(644,84,'Burmese','my','my_MM',NULL,0,0,25,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(645,84,'Catalan; Valencian','ca','ca_ES',NULL,0,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(646,84,'Chamorro','ch','ch_GU',NULL,0,0,27,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(647,84,'Chechen','ce','ce_RU',NULL,0,0,28,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(648,84,'Chichewa; Chewa; Nyanja','ny','ny_MW',NULL,0,0,29,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(649,84,'Chinese (China)','zh','zh_CN',NULL,0,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(650,84,'Chinese (Taiwan)','zh','zh_TW',NULL,0,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(651,84,'Chuvash','cv','cv_RU',NULL,0,0,32,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(652,84,'Cornish','kw','kw_GB',NULL,0,0,33,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(653,84,'Corsican','co','co_FR',NULL,0,0,34,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(654,84,'Cree','cr','cr_CA',NULL,0,0,35,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(655,84,'Croatian','hr','hr_HR',NULL,0,0,36,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(656,84,'Czech','cs','cs_CZ',NULL,0,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(657,84,'Danish','da','da_DK',NULL,0,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(658,84,'Divehi; Dhivehi; Maldivian;','dv','dv_MV',NULL,0,0,39,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(659,84,'Dutch (Netherlands)','nl','nl_NL',NULL,0,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(660,84,'Dutch (Belgium)','nl','nl_BE',NULL,0,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(661,84,'Dzongkha','dz','dz_BT',NULL,0,0,42,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(662,84,'English (Australia)','en','en_AU',NULL,0,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(663,84,'English (Canada)','en','en_CA',NULL,0,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(664,84,'English (United Kingdom)','en','en_GB',NULL,0,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(665,84,'English (United States)','en','en_US',NULL,0,1,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(666,84,'Esperanto','eo','eo_XX',NULL,0,0,47,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(667,84,'Estonian','et','et_EE',NULL,0,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(668,84,'Ewe','ee','ee_GH',NULL,0,0,49,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(669,84,'Faroese','fo','fo_FO',NULL,0,0,50,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(670,84,'Fijian','fj','fj_FJ',NULL,0,0,51,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(671,84,'Finnish','fi','fi_FI',NULL,0,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(672,84,'French (Canada)','fr','fr_CA',NULL,0,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(673,84,'French (France)','fr','fr_FR',NULL,0,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(674,84,'Fula; Fulah; Pulaar; Pular','ff','ff_SN',NULL,0,0,55,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(675,84,'Galician','gl','gl_ES',NULL,0,0,56,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(676,84,'Georgian','ka','ka_GE',NULL,0,0,57,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(677,84,'German','de','de_DE',NULL,0,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(678,84,'German (Swiss)','de','de_CH',NULL,0,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(679,84,'Greek, Modern','el','el_GR',NULL,0,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(680,84,'GuaraniÂ','gn','gn_PY',NULL,0,0,61,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(681,84,'Gujarati','gu','gu_IN',NULL,0,0,62,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(682,84,'Haitian; Haitian Creole','ht','ht_HT',NULL,0,0,63,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(683,84,'Hausa','ha','ha_NG',NULL,0,0,64,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(684,84,'Hebrew (modern)','he','he_IL',NULL,0,0,65,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(685,84,'Herero','hz','hz_NA',NULL,0,0,66,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(686,84,'Hindi','hi','hi_IN',NULL,0,0,67,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(687,84,'Hiri Motu','ho','ho_PG',NULL,0,0,68,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(688,84,'Hungarian','hu','hu_HU',NULL,0,0,69,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(689,84,'Interlingua','ia','ia_XX',NULL,0,0,70,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(690,84,'Indonesian','id','id_ID',NULL,0,0,71,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(691,84,'Interlingue','ie','ie_XX',NULL,0,0,72,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(692,84,'Irish','ga','ga_IE',NULL,0,0,73,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(693,84,'Igbo','ig','ig_NG',NULL,0,0,74,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(694,84,'Inupiaq','ik','ik_US',NULL,0,0,75,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(695,84,'Ido','io','io_XX',NULL,0,0,76,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(696,84,'Icelandic','is','is_IS',NULL,0,0,77,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(697,84,'Italian','it','it_IT',NULL,0,0,78,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(698,84,'Inuktitut','iu','iu_CA',NULL,0,0,79,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(699,84,'Japanese','ja','ja_JP',NULL,0,0,80,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(700,84,'Javanese','jv','jv_ID',NULL,0,0,81,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(701,84,'Kalaallisut, Greenlandic','kl','kl_GL',NULL,0,0,82,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(702,84,'Kannada','kn','kn_IN',NULL,0,0,83,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(703,84,'Kanuri','kr','kr_NE',NULL,0,0,84,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(704,84,'Kashmiri','ks','ks_IN',NULL,0,0,85,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(705,84,'Kazakh','kk','kk_KZ',NULL,0,0,86,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(706,84,'Khmer','km','km_KH',NULL,0,0,87,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(707,84,'Kikuyu, Gikuyu','ki','ki_KE',NULL,0,0,88,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(708,84,'Kinyarwanda','rw','rw_RW',NULL,0,0,89,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(709,84,'Kirghiz, Kyrgyz','ky','ky_KG',NULL,0,0,90,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(710,84,'Komi','kv','kv_RU',NULL,0,0,91,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(711,84,'Kongo','kg','kg_CD',NULL,0,0,92,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(712,84,'Korean','ko','ko_KR',NULL,0,0,93,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(713,84,'Kurdish','ku','ku_IQ',NULL,0,0,94,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(714,84,'Kwanyama, Kuanyama','kj','kj_NA',NULL,0,0,95,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(715,84,'Latin','la','la_VA',NULL,0,0,96,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(716,84,'Luxembourgish, Letzeburgesch','lb','lb_LU',NULL,0,0,97,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(717,84,'Luganda','lg','lg_UG',NULL,0,0,98,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(718,84,'Limburgish, Limburgan, Limburger','li','li_NL',NULL,0,0,99,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(719,84,'Lingala','ln','ln_CD',NULL,0,0,100,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(720,84,'Lao','lo','lo_LA',NULL,0,0,101,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(721,84,'Lithuanian','lt','lt_LT',NULL,0,0,102,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(722,84,'Luba-Katanga','lu','lu_CD',NULL,0,0,103,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(723,84,'Latvian','lv','lv_LV',NULL,0,0,104,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(724,84,'Manx','gv','gv_IM',NULL,0,0,105,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(725,84,'Macedonian','mk','mk_MK',NULL,0,0,106,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(726,84,'Malagasy','mg','mg_MG',NULL,0,0,107,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(727,84,'Malay','ms','ms_MY',NULL,0,0,108,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(728,84,'Malayalam','ml','ml_IN',NULL,0,0,109,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(729,84,'Maltese','mt','mt_MT',NULL,0,0,110,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(730,84,'MÄori','mi','mi_NZ',NULL,0,0,111,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(731,84,'Marathi','mr','mr_IN',NULL,0,0,112,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(732,84,'Marshallese','mh','mh_MH',NULL,0,0,113,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(733,84,'Mongolian','mn','mn_MN',NULL,0,0,114,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(734,84,'Nauru','na','na_NR',NULL,0,0,115,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(735,84,'Navajo, Navaho','nv','nv_US',NULL,0,0,116,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(736,84,'Norwegian BokmÃ¥l','nb','nb_NO',NULL,0,0,117,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(737,84,'North Ndebele','nd','nd_ZW',NULL,0,0,118,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(738,84,'Nepali','ne','ne_NP',NULL,0,0,119,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(739,84,'Ndonga','ng','ng_NA',NULL,0,0,120,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(740,84,'Norwegian Nynorsk','nn','nn_NO',NULL,0,0,121,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(741,84,'Norwegian','no','no_NO',NULL,0,0,122,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(742,84,'Nuosu','ii','ii_CN',NULL,0,0,123,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(743,84,'South Ndebele','nr','nr_ZA',NULL,0,0,124,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(744,84,'Occitan (after 1500)','oc','oc_FR',NULL,0,0,125,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(745,84,'Ojibwa','oj','oj_CA',NULL,0,0,126,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(746,84,'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic','cu','cu_BG',NULL,0,0,127,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(747,84,'Oromo','om','om_ET',NULL,0,0,128,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(748,84,'Oriya','or','or_IN',NULL,0,0,129,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(749,84,'Ossetian, Ossetic','os','os_GE',NULL,0,0,130,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(750,84,'Panjabi, Punjabi','pa','pa_IN',NULL,0,0,131,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(751,84,'Pali','pi','pi_KH',NULL,0,0,132,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(752,84,'Persian (Iran)','fa','fa_IR',NULL,0,0,133,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(753,84,'Polish','pl','pl_PL',NULL,0,0,134,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(754,84,'Pashto, Pushto','ps','ps_AF',NULL,0,0,135,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(755,84,'Portuguese (Brazil)','pt','pt_BR',NULL,0,0,136,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(756,84,'Portuguese (Portugal)','pt','pt_PT',NULL,0,0,137,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(757,84,'Quechua','qu','qu_PE',NULL,0,0,138,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(758,84,'Romansh','rm','rm_CH',NULL,0,0,139,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(759,84,'Kirundi','rn','rn_BI',NULL,0,0,140,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(760,84,'Romanian, Moldavian, Moldovan','ro','ro_RO',NULL,0,0,141,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(761,84,'Russian','ru','ru_RU',NULL,0,0,142,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(762,84,'Sanskrit','sa','sa_IN',NULL,0,0,143,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(763,84,'Sardinian','sc','sc_IT',NULL,0,0,144,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(764,84,'Sindhi','sd','sd_IN',NULL,0,0,145,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(765,84,'Northern Sami','se','se_NO',NULL,0,0,146,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(766,84,'Samoan','sm','sm_WS',NULL,0,0,147,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(767,84,'Sango','sg','sg_CF',NULL,0,0,148,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(768,84,'Serbian','sr','sr_RS',NULL,0,0,149,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(769,84,'Scottish Gaelic; Gaelic','gd','gd_GB',NULL,0,0,150,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(770,84,'Shona','sn','sn_ZW',NULL,0,0,151,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(771,84,'Sinhala, Sinhalese','si','si_LK',NULL,0,0,152,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(772,84,'Slovak','sk','sk_SK',NULL,0,0,153,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(773,84,'Slovene','sl','sl_SI',NULL,0,0,154,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(774,84,'Somali','so','so_SO',NULL,0,0,155,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(775,84,'Southern Sotho','st','st_ZA',NULL,0,0,156,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(776,84,'Spanish; Castilian (Spain)','es','es_ES',NULL,0,0,157,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(777,84,'Spanish; Castilian (Mexico)','es','es_MX',NULL,0,0,158,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(778,84,'Spanish; Castilian (Puerto Rico)','es','es_PR',NULL,0,0,159,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(779,84,'Sundanese','su','su_ID',NULL,0,0,160,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(780,84,'Swahili','sw','sw_TZ',NULL,0,0,161,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(781,84,'Swati','ss','ss_ZA',NULL,0,0,162,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(782,84,'Swedish','sv','sv_SE',NULL,0,0,163,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(783,84,'Tamil','ta','ta_IN',NULL,0,0,164,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(784,84,'Telugu','te','te_IN',NULL,0,0,165,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(785,84,'Tajik','tg','tg_TJ',NULL,0,0,166,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(786,84,'Thai','th','th_TH',NULL,0,0,167,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(787,84,'Tigrinya','ti','ti_ET',NULL,0,0,168,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(788,84,'Tibetan Standard, Tibetan, Central','bo','bo_CN',NULL,0,0,169,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(789,84,'Turkmen','tk','tk_TM',NULL,0,0,170,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(790,84,'Tagalog','tl','tl_PH',NULL,0,0,171,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(791,84,'Tswana','tn','tn_ZA',NULL,0,0,172,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(792,84,'Tonga (Tonga Islands)','to','to_TO',NULL,0,0,173,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(793,84,'Turkish','tr','tr_TR',NULL,0,0,174,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(794,84,'Tsonga','ts','ts_ZA',NULL,0,0,175,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(795,84,'Tatar','tt','tt_RU',NULL,0,0,176,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(796,84,'Twi','tw','tw_GH',NULL,0,0,177,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(797,84,'Tahitian','ty','ty_PF',NULL,0,0,178,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(798,84,'Uighur, Uyghur','ug','ug_CN',NULL,0,0,179,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(799,84,'Ukrainian','uk','uk_UA',NULL,0,0,180,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(800,84,'Urdu','ur','ur_PK',NULL,0,0,181,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(801,84,'Uzbek','uz','uz_UZ',NULL,0,0,182,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(802,84,'Venda','ve','ve_ZA',NULL,0,0,183,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(803,84,'Vietnamese','vi','vi_VN',NULL,0,0,184,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(804,84,'Volapük','vo','vo_XX',NULL,0,0,185,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(805,84,'Walloon','wa','wa_BE',NULL,0,0,186,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(806,84,'Welsh','cy','cy_GB',NULL,0,0,187,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(807,84,'Wolof','wo','wo_SN',NULL,0,0,188,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(808,84,'Western Frisian','fy','fy_NL',NULL,0,0,189,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(809,84,'Xhosa','xh','xh_ZA',NULL,0,0,190,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(810,84,'Yiddish','yi','yi_US',NULL,0,0,191,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(811,84,'Yoruba','yo','yo_NG',NULL,0,0,192,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(812,84,'Zhuang, Chuang','za','za_CN',NULL,0,0,193,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(813,84,'Zulu','zu','zu_ZA',NULL,0,0,194,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(814,85,'In Person','1','in_person',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(815,85,'Phone','2','phone',NULL,0,1,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(816,85,'Email','3','email',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(817,85,'Fax','4','fax',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(818,85,'Letter Mail','5','letter_mail',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(819,86,'Cases - Send Copy of an Activity','1','case_activity',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(820,87,'Contributions - Duplicate Organization Alert','1','contribution_dupalert',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(821,87,'Contributions - Receipt (off-line)','2','contribution_offline_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(822,87,'Contributions - Receipt (on-line)','3','contribution_online_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(823,87,'Contributions - Invoice','4','contribution_invoice_receipt',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(824,87,'Contributions - Recurring Start and End Notification','5','contribution_recurring_notify',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(825,87,'Contributions - Recurring Cancellation Notification','6','contribution_recurring_cancelled',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(826,87,'Contributions - Recurring Billing Updates','7','contribution_recurring_billing',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(827,87,'Contributions - Recurring Updates','8','contribution_recurring_edit',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(828,87,'Personal Campaign Pages - Admin Notification','9','pcp_notify',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(829,87,'Personal Campaign Pages - Supporter Status Change Notification','10','pcp_status_change',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(830,87,'Personal Campaign Pages - Supporter Welcome','11','pcp_supporter_notify',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(831,87,'Personal Campaign Pages - Owner Notification','12','pcp_owner_notify',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(832,87,'Additional Payment Receipt or Refund Notification','13','payment_or_refund_notification',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(833,88,'Events - Registration Confirmation and Receipt (off-line)','1','event_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(834,88,'Events - Registration Confirmation and Receipt (on-line)','2','event_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(835,88,'Events - Receipt only','3','event_registration_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(836,88,'Events - Registration Cancellation Notice','4','participant_cancelled',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(837,88,'Events - Registration Confirmation Invite','5','participant_confirm',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(838,88,'Events - Pending Registration Expiration Notice','6','participant_expired',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(839,88,'Events - Registration Transferred Notice','7','participant_transferred',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(840,89,'Tell-a-Friend Email','1','friend',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(841,90,'Memberships - Signup and Renewal Receipts (off-line)','1','membership_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(842,90,'Memberships - Receipt (on-line)','2','membership_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(843,90,'Memberships - Auto-renew Cancellation Notification','3','membership_autorenew_cancelled',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(844,90,'Memberships - Auto-renew Billing Updates','4','membership_autorenew_billing',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(845,91,'Test-drive - Receipt Header','1','test_preview',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(846,92,'Pledges - Acknowledgement','1','pledge_acknowledge',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(847,92,'Pledges - Payment Reminder','2','pledge_reminder',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(848,93,'Profiles - Admin Notification','1','uf_notify',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(849,94,'Petition - signature added','1','petition_sign',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(850,94,'Petition - need verification','2','petition_confirmation_needed',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(851,95,'In Honor of','1','in_honor_of',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(852,95,'In Memory of','2','in_memory_of',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(853,95,'Solicited','3','solicited',NULL,0,1,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(854,95,'Household','4','household',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(855,95,'Workplace Giving','5','workplace',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(856,95,'Foundation Affiliate','6','foundation_affiliate',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(857,95,'3rd-party Service','7','3rd-party_service',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(858,95,'Donor-advised Fund','8','donor-advised_fund',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(859,95,'Matched Gift','9','matched_gift',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(860,95,'Personal Campaign Page','10','pcp',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(861,95,'Gift','11','gift',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(862,2,'Interview','55','Interview',NULL,0,NULL,55,'Conduct a phone or in person interview.',0,0,1,NULL,NULL,NULL,'fa-comment-o',NULL); +INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`, `icon`, `color`) VALUES + (1,1,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (2,1,'Email','2','Email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (3,1,'Postal Mail','3','Postal Mail',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (4,1,'SMS','4','SMS',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (5,1,'Fax','5','Fax',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (6,2,'Meeting','1','Meeting',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,'fa-slideshare',NULL), + (7,2,'Phone Call','2','Phone Call',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,'fa-phone',NULL), + (8,2,'Email','3','Email',NULL,1,NULL,3,'Email sent.',0,1,1,NULL,NULL,NULL,'fa-envelope-o',NULL), + (9,2,'Outbound SMS','4','SMS',NULL,1,NULL,4,'Text message (SMS) sent.',0,1,1,NULL,NULL,NULL,'fa-mobile',NULL), + (10,2,'Event Registration','5','Event Registration',NULL,1,NULL,5,'Online or offline event registration.',0,1,1,1,NULL,NULL,NULL,NULL), + (11,2,'Contribution','6','Contribution',NULL,1,NULL,6,'Online or offline contribution.',0,1,1,2,NULL,NULL,NULL,NULL), + (12,2,'Membership Signup','7','Membership Signup',NULL,1,NULL,7,'Online or offline membership signup.',0,1,1,3,NULL,NULL,NULL,NULL), + (13,2,'Membership Renewal','8','Membership Renewal',NULL,1,NULL,8,'Online or offline membership renewal.',0,1,1,3,NULL,NULL,NULL,NULL), + (14,2,'Tell a Friend','9','Tell a Friend',NULL,1,NULL,9,'Send information about a contribution campaign or event to a friend.',0,1,1,NULL,NULL,NULL,NULL,NULL), + (15,2,'Pledge Acknowledgment','10','Pledge Acknowledgment',NULL,1,NULL,10,'Send Pledge Acknowledgment.',0,1,1,6,NULL,NULL,NULL,NULL), + (16,2,'Pledge Reminder','11','Pledge Reminder',NULL,1,NULL,11,'Send Pledge Reminder.',0,1,1,6,NULL,NULL,NULL,NULL), + (17,2,'Inbound Email','12','Inbound Email',NULL,1,NULL,12,'Inbound Email.',0,1,1,NULL,NULL,NULL,NULL,NULL), + (18,2,'Open Case','13','Open Case',NULL,0,0,13,'',0,1,1,7,NULL,NULL,'fa-folder-open-o',NULL), + (19,2,'Follow up','14','Follow up',NULL,0,0,14,'',0,1,1,7,NULL,NULL,'fa-share-square-o',NULL), + (20,2,'Change Case Type','15','Change Case Type',NULL,0,0,15,'',0,1,1,7,NULL,NULL,'fa-random',NULL), + (21,2,'Change Case Status','16','Change Case Status',NULL,0,0,16,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL), + (22,2,'Change Case Subject','53','Change Case Subject',NULL,0,0,53,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL), + (23,2,'Change Custom Data','33','Change Custom Data',NULL,0,0,33,'',0,1,1,7,NULL,NULL,'fa-table',NULL), + (24,2,'Membership Renewal Reminder','17','Membership Renewal Reminder',NULL,1,NULL,17,'offline membership renewal reminder.',0,1,1,3,NULL,NULL,NULL,NULL), + (25,2,'Change Case Start Date','18','Change Case Start Date',NULL,0,0,18,'',0,1,1,7,NULL,NULL,'fa-calendar',NULL), + (26,2,'Bulk Email','19','Bulk Email',NULL,1,NULL,19,'Bulk Email Sent.',0,1,1,NULL,NULL,NULL,NULL,NULL), + (27,2,'Assign Case Role','20','Assign Case Role',NULL,0,0,20,'',0,1,1,7,NULL,NULL,'fa-user-plus',NULL), + (28,2,'Remove Case Role','21','Remove Case Role',NULL,0,0,21,'',0,1,1,7,NULL,NULL,'fa-user-times',NULL), + (29,2,'Print/Merge Document','22','Print PDF Letter',NULL,0,NULL,22,'Export letters and other printable documents.',0,1,1,NULL,NULL,NULL,'fa-file-pdf-o',NULL), + (30,2,'Merge Case','23','Merge Case',NULL,0,NULL,23,'',0,1,1,7,NULL,NULL,'fa-compress',NULL), + (31,2,'Reassigned Case','24','Reassigned Case',NULL,0,NULL,24,'',0,1,1,7,NULL,NULL,'fa-user-circle-o',NULL), + (32,2,'Link Cases','25','Link Cases',NULL,0,NULL,25,'',0,1,1,7,NULL,NULL,'fa-link',NULL), + (33,2,'Change Case Tags','26','Change Case Tags',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-tags',NULL), + (34,2,'Add Client To Case','27','Add Client To Case',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-users',NULL), + (35,2,'Survey','28','Survey',NULL,0,0,27,'',0,1,1,9,NULL,NULL,NULL,NULL), + (36,2,'Canvass','29','Canvass',NULL,0,0,28,'',0,1,1,9,NULL,NULL,NULL,NULL), + (37,2,'PhoneBank','30','PhoneBank',NULL,0,0,29,'',0,1,1,9,NULL,NULL,NULL,NULL), + (38,2,'WalkList','31','WalkList',NULL,0,0,30,'',0,1,1,9,NULL,NULL,NULL,NULL), + (39,2,'Petition Signature','32','Petition',NULL,0,0,31,'',0,1,1,9,NULL,NULL,NULL,NULL), + (40,2,'Mass SMS','34','Mass SMS',NULL,1,NULL,34,'Mass SMS',0,1,1,NULL,NULL,NULL,NULL,NULL), + (41,2,'Change Membership Status','35','Change Membership Status',NULL,1,NULL,35,'Change Membership Status.',0,1,1,3,NULL,NULL,NULL,NULL), + (42,2,'Change Membership Type','36','Change Membership Type',NULL,1,NULL,36,'Change Membership Type.',0,1,1,3,NULL,NULL,NULL,NULL), + (43,2,'Cancel Recurring Contribution','37','Cancel Recurring Contribution',NULL,1,0,37,'',0,1,1,2,NULL,NULL,NULL,NULL), + (44,2,'Update Recurring Contribution Billing Details','38','Update Recurring Contribution Billing Details',NULL,1,0,38,'',0,1,1,2,NULL,NULL,NULL,NULL), + (45,2,'Update Recurring Contribution','39','Update Recurring Contribution',NULL,1,0,39,'',0,1,1,2,NULL,NULL,NULL,NULL), + (46,2,'Reminder Sent','40','Reminder Sent',NULL,1,0,40,'',0,1,1,NULL,NULL,NULL,NULL,NULL), + (47,2,'Export Accounting Batch','41','Export Accounting Batch',NULL,1,0,41,'Export Accounting Batch',0,1,1,2,NULL,NULL,NULL,NULL), + (48,2,'Create Batch','42','Create Batch',NULL,1,0,42,'Create Batch',0,1,1,2,NULL,NULL,NULL,NULL), + (49,2,'Edit Batch','43','Edit Batch',NULL,1,0,43,'Edit Batch',0,1,1,2,NULL,NULL,NULL,NULL), + (50,2,'SMS delivery','44','SMS delivery',NULL,1,NULL,44,'SMS delivery',0,1,1,NULL,NULL,NULL,NULL,NULL), + (51,2,'Inbound SMS','45','Inbound SMS',NULL,1,NULL,45,'Inbound SMS',0,1,1,NULL,NULL,NULL,NULL,NULL), + (52,2,'Payment','46','Payment',NULL,1,NULL,46,'Additional payment recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL), + (53,2,'Refund','47','Refund',NULL,1,NULL,47,'Refund recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL), + (54,2,'Change Registration','48','Change Registration',NULL,1,NULL,48,'Changes to an existing event registration.',0,1,1,1,NULL,NULL,NULL,NULL), + (55,2,'Downloaded Invoice','49','Downloaded Invoice',NULL,1,NULL,49,'Downloaded Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL), + (56,2,'Emailed Invoice','50','Emailed Invoice',NULL,1,NULL,50,'Emailed Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL), + (57,2,'Contact Merged','51','Contact Merged',NULL,1,NULL,51,'Contact Merged',0,1,1,NULL,NULL,NULL,NULL,NULL), + (58,2,'Contact Deleted by Merge','52','Contact Deleted by Merge',NULL,1,NULL,52,'Contact was merged into another contact',0,1,1,NULL,NULL,NULL,NULL,NULL), + (59,2,'Failed Payment','54','Failed Payment',NULL,1,0,54,'Failed Payment',0,1,1,2,NULL,NULL,NULL,NULL), + (60,3,'Female','1','Female',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (61,3,'Male','2','Male',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (62,3,'Other','3','Other',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (63,4,'Yahoo','1','Yahoo',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (64,4,'MSN','2','Msn',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (65,4,'AIM','3','Aim',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (66,4,'GTalk','4','Gtalk',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (67,4,'Jabber','5','Jabber',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (68,4,'Skype','6','Skype',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (69,5,'Sprint','1','Sprint',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (70,5,'Verizon','2','Verizon',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (71,5,'Cingular','3','Cingular',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (72,6,'Mrs.','1','Mrs.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (73,6,'Ms.','2','Ms.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (74,6,'Mr.','3','Mr.',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (75,6,'Dr.','4','Dr.',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (76,7,'Jr.','1','Jr.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (77,7,'Sr.','2','Sr.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (78,7,'II','3','II',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (79,7,'III','4','III',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (80,7,'IV','5','IV',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (81,7,'V','6','V',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (82,7,'VI','7','VI',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (83,7,'VII','8','VII',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (84,8,'Administrator','1','Admin',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (85,8,'Authenticated','2','Auth',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (86,9,'Visa','1','Visa',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (87,9,'MasterCard','2','MasterCard',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (88,9,'Amex','3','Amex',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (89,9,'Discover','4','Discover',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (90,10,'Credit Card','1','Credit Card',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (91,10,'Debit Card','2','Debit Card',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (92,10,'Cash','3','Cash',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (93,10,'Check','4','Check',NULL,0,1,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (94,10,'EFT','5','EFT',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (95,11,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (96,11,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (97,11,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (98,11,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (99,11,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (100,11,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (101,11,'Refunded','7','Refunded',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (102,11,'Partially paid','8','Partially paid',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (103,11,'Pending refund','9','Pending refund',NULL,0,NULL,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (104,11,'Chargeback','10','Chargeback',NULL,0,NULL,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (105,11,'Template','11','Template',NULL,0,NULL,11,'Status for contribution records which represent a template for a recurring contribution rather than an actual contribution. This status is transitional, to ensure that said contributions don\\\'t appear in reports. The is_template field is the preferred way to find and filter these contributions.',0,1,1,NULL,NULL,NULL,NULL,NULL), + (106,12,'Waiting Review','1','Waiting Review',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (107,12,'Approved','2','Approved',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (108,12,'Not Approved','3','Not Approved',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (109,13,'Owner chooses whether to receive notifications','1','owner_chooses',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (110,13,'Notifications are sent to ALL owners','2','all_owners',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (111,13,'Notifications are NOT available','3','no_notifications',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (112,14,'Attendee','1','Attendee',NULL,1,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (113,14,'Volunteer','2','Volunteer',NULL,1,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (114,14,'Host','3','Host',NULL,1,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (115,14,'Speaker','4','Speaker',NULL,1,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (116,15,'Conference','1','Conference',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (117,15,'Exhibition','2','Exhibition',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (118,15,'Fundraiser','3','Fundraiser',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (119,15,'Meeting','4','Meeting',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (120,15,'Performance','5','Performance',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (121,15,'Workshop','6','Workshop',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (122,16,'Activities','1','activity',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (123,16,'Relationships','2','rel',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (124,16,'Groups','3','group',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (125,16,'Notes','4','note',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (126,16,'Tags','5','tag',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (127,16,'Change Log','6','log',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (128,16,'Contributions','7','CiviContribute',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (129,16,'Memberships','8','CiviMember',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (130,16,'Events','9','CiviEvent',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (131,16,'Cases','10','CiviCase',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (132,16,'Grants','11','CiviGrant',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (133,16,'Pledges','13','CiviPledge',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (134,16,'Mailings','14','CiviMail',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (135,17,'Show Smart Groups on Demand','1','showondemand',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (136,17,'Always Show Smart Groups','2','alwaysshow',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (137,17,'Hide Smart Groups','3','hide',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (138,18,'Custom Data','1','CustomData',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (139,18,'Address','2','Address',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (140,18,'Communication Preferences','3','CommunicationPreferences',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (141,18,'Notes','4','Notes',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (142,18,'Demographics','5','Demographics',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (143,18,'Tags and Groups','6','TagsAndGroups',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (144,18,'Email','7','Email',NULL,1,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (145,18,'Phone','8','Phone',NULL,1,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (146,18,'Instant Messenger','9','IM',NULL,1,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (147,18,'Open ID','10','OpenID',NULL,1,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (148,18,'Website','11','Website',NULL,1,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (149,18,'Prefix','12','Prefix',NULL,2,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (150,18,'Formal Title','13','Formal Title',NULL,2,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (151,18,'First Name','14','First Name',NULL,2,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (152,18,'Middle Name','15','Middle Name',NULL,2,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (153,18,'Last Name','16','Last Name',NULL,2,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (154,18,'Suffix','17','Suffix',NULL,2,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (155,19,'Address Fields','1','location',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (156,19,'Custom Fields','2','custom',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (157,19,'Activities','3','activity',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (158,19,'Relationships','4','relationship',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (159,19,'Notes','5','notes',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (160,19,'Change Log','6','changeLog',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (161,19,'Contributions','7','CiviContribute',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (162,19,'Memberships','8','CiviMember',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (163,19,'Events','9','CiviEvent',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (164,19,'Cases','10','CiviCase',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (165,19,'Grants','12','CiviGrant',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (166,19,'Demographics','13','demographics',NULL,0,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (167,19,'Pledges','15','CiviPledge',NULL,0,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (168,19,'Contact Type','16','contactType',NULL,0,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (169,19,'Groups','17','groups',NULL,0,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (170,19,'Tags','18','tags',NULL,0,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (171,19,'Mailing','19','CiviMail',NULL,0,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (172,20,'Groups','1','Groups',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (173,20,'Contributions','2','CiviContribute',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (174,20,'Memberships','3','CiviMember',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (175,20,'Events','4','CiviEvent',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (176,20,'My Contacts / Organizations','5','Permissioned Orgs',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (177,20,'Pledges','7','CiviPledge',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (178,20,'Personal Campaign Pages','8','PCP',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (179,20,'Assigned Activities','9','Assigned Activities',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (180,20,'Invoices / Credit Notes','10','Invoices / Credit Notes',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (181,45,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (182,45,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (183,45,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (184,45,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (185,45,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (186,45,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (187,45,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (188,46,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (189,46,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (190,46,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (191,46,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (192,46,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (193,46,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (194,46,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (195,21,'Street Address','1','street_address',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (196,21,'Supplemental Address 1','2','supplemental_address_1',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (197,21,'Supplemental Address 2','3','supplemental_address_2',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (198,21,'Supplemental Address 3','4','supplemental_address_3',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (199,21,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (200,21,'Postal Code','6','postal_code',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (201,21,'Postal Code Suffix','7','postal_code_suffix',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (202,21,'County','8','county',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (203,21,'State/Province','9','state_province',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (204,21,'Country','10','country',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (205,21,'Latitude','11','geo_code_1',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (206,21,'Longitude','12','geo_code_2',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (207,21,'Address Name','13','address_name',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (208,21,'Street Address Parsing','14','street_address_parsing',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (209,22,'Access Control','1','Access Control',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (210,22,'Mailing List','2','Mailing List',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (211,23,'Submitted','1','Submitted',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (212,23,'Eligible','2','Eligible',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (213,23,'Ineligible','3','Ineligible',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (214,23,'Paid','4','Paid',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (215,23,'Awaiting Information','5','Awaiting Information',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (216,23,'Withdrawn','6','Withdrawn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (217,23,'Approved for Payment','7','Approved for Payment',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (218,25,'CRM_Contact_Form_Search_Custom_Sample','1','CRM_Contact_Form_Search_Custom_Sample',NULL,0,NULL,1,'Household Name and State',0,0,1,NULL,NULL,NULL,NULL,NULL), + (219,25,'CRM_Contact_Form_Search_Custom_ContributionAggregate','2','CRM_Contact_Form_Search_Custom_ContributionAggregate',NULL,0,NULL,2,'Contribution Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL), + (220,25,'CRM_Contact_Form_Search_Custom_Group','4','CRM_Contact_Form_Search_Custom_Group',NULL,0,NULL,4,'Include / Exclude Search',0,0,1,NULL,NULL,NULL,NULL,NULL), + (221,25,'CRM_Contact_Form_Search_Custom_PostalMailing','5','CRM_Contact_Form_Search_Custom_PostalMailing',NULL,0,NULL,5,'Postal Mailing',0,0,1,NULL,NULL,NULL,NULL,NULL), + (222,25,'CRM_Contact_Form_Search_Custom_Proximity','6','CRM_Contact_Form_Search_Custom_Proximity',NULL,0,NULL,6,'Proximity Search',0,0,1,NULL,NULL,NULL,NULL,NULL), + (223,25,'CRM_Contact_Form_Search_Custom_EventAggregate','7','CRM_Contact_Form_Search_Custom_EventAggregate',NULL,0,NULL,7,'Event Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL), + (224,25,'CRM_Contact_Form_Search_Custom_ActivitySearch','8','CRM_Contact_Form_Search_Custom_ActivitySearch',NULL,0,NULL,8,'Activity Search',0,0,1,NULL,NULL,NULL,NULL,NULL), + (225,25,'CRM_Contact_Form_Search_Custom_PriceSet','9','CRM_Contact_Form_Search_Custom_PriceSet',NULL,0,NULL,9,'Price Set Details for Event Participants',0,0,1,NULL,NULL,NULL,NULL,NULL), + (226,25,'CRM_Contact_Form_Search_Custom_ZipCodeRange','10','CRM_Contact_Form_Search_Custom_ZipCodeRange',NULL,0,NULL,10,'Zip Code Range',0,0,1,NULL,NULL,NULL,NULL,NULL), + (227,25,'CRM_Contact_Form_Search_Custom_DateAdded','11','CRM_Contact_Form_Search_Custom_DateAdded',NULL,0,NULL,11,'Date Added to CiviCRM',0,0,1,NULL,NULL,NULL,NULL,NULL), + (228,25,'CRM_Contact_Form_Search_Custom_MultipleValues','12','CRM_Contact_Form_Search_Custom_MultipleValues',NULL,0,NULL,12,'Custom Group Multiple Values Listing',0,0,1,NULL,NULL,NULL,NULL,NULL), + (229,25,'CRM_Contact_Form_Search_Custom_ContribSYBNT','13','CRM_Contact_Form_Search_Custom_ContribSYBNT',NULL,0,NULL,13,'Contributions made in Year X and not Year Y',0,0,1,NULL,NULL,NULL,NULL,NULL), + (230,25,'CRM_Contact_Form_Search_Custom_TagContributions','14','CRM_Contact_Form_Search_Custom_TagContributions',NULL,0,NULL,14,'Find Contribution Amounts by Tag',0,0,1,NULL,NULL,NULL,NULL,NULL), + (231,25,'CRM_Contact_Form_Search_Custom_FullText','15','CRM_Contact_Form_Search_Custom_FullText',NULL,0,NULL,15,'Full-text Search',0,0,1,NULL,NULL,NULL,NULL,NULL), + (232,41,'Constituent Report (Summary)','contact/summary','CRM_Report_Form_Contact_Summary',NULL,0,NULL,1,'Provides a list of address and telephone information for constituent records in your system.',0,0,1,NULL,NULL,NULL,NULL,NULL), + (233,41,'Constituent Report (Detail)','contact/detail','CRM_Report_Form_Contact_Detail',NULL,0,NULL,2,'Provides contact-related information on contributions, memberships, events and activities.',0,0,1,NULL,NULL,NULL,NULL,NULL), + (234,41,'Activity Details Report','activity','CRM_Report_Form_Activity',NULL,0,NULL,3,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)',0,0,1,NULL,NULL,NULL,NULL,NULL), + (235,41,'Walk / Phone List Report','walklist','CRM_Report_Form_Walklist_Walklist',NULL,0,NULL,4,'Provides a detailed report for your walk/phonelist for targeted contacts',0,0,0,NULL,NULL,NULL,NULL,NULL), + (236,41,'Current Employer Report','contact/currentEmployer','CRM_Report_Form_Contact_CurrentEmployer',NULL,0,NULL,5,'Provides detail list of employer employee relationships along with employment details Ex Join Date',0,0,1,NULL,NULL,NULL,NULL,NULL), + (237,41,'Contribution Summary Report','contribute/summary','CRM_Report_Form_Contribute_Summary',NULL,0,NULL,6,'Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.',0,0,1,2,NULL,NULL,NULL,NULL), + (238,41,'Contribution Detail Report','contribute/detail','CRM_Report_Form_Contribute_Detail',NULL,0,NULL,7,'Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.',0,0,1,2,NULL,NULL,NULL,NULL), + (239,41,'Repeat Contributions Report','contribute/repeat','CRM_Report_Form_Contribute_Repeat',NULL,0,NULL,8,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.',0,0,1,2,NULL,NULL,NULL,NULL), + (240,41,'Contributions by Organization Report','contribute/organizationSummary','CRM_Report_Form_Contribute_OrganizationSummary',NULL,0,NULL,9,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.',0,0,1,2,NULL,NULL,NULL,NULL), + (241,41,'Contributions by Household Report','contribute/householdSummary','CRM_Report_Form_Contribute_HouseholdSummary',NULL,0,NULL,10,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.',0,0,1,2,NULL,NULL,NULL,NULL), + (242,41,'Top Donors Report','contribute/topDonor','CRM_Report_Form_Contribute_TopDonor',NULL,0,NULL,11,'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).',0,0,1,2,NULL,NULL,NULL,NULL), + (243,41,'SYBUNT Report','contribute/sybunt','CRM_Report_Form_Contribute_Sybunt',NULL,0,NULL,12,'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.',0,0,1,2,NULL,NULL,NULL,NULL), + (244,41,'LYBUNT Report','contribute/lybunt','CRM_Report_Form_Contribute_Lybunt',NULL,0,NULL,13,'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.',0,0,1,2,NULL,NULL,NULL,NULL), + (245,41,'Soft Credit Report','contribute/softcredit','CRM_Report_Form_Contribute_SoftCredit',NULL,0,NULL,14,'Shows contributions made by contacts that have been soft-credited to other contacts.',0,0,1,2,NULL,NULL,NULL,NULL), + (246,41,'Membership Report (Summary)','member/summary','CRM_Report_Form_Member_Summary',NULL,0,NULL,15,'Provides a summary of memberships by type and join date.',0,0,1,3,NULL,NULL,NULL,NULL), + (247,41,'Membership Report (Detail)','member/detail','CRM_Report_Form_Member_Detail',NULL,0,NULL,16,'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.',0,0,1,3,NULL,NULL,NULL,NULL), + (248,41,'Membership Report (Lapsed)','member/lapse','CRM_Report_Form_Member_Lapse',NULL,0,NULL,17,'Provides a list of memberships that lapsed or will lapse before the date you specify.',0,0,1,3,NULL,NULL,NULL,NULL), + (249,41,'Event Participant Report (List)','event/participantListing','CRM_Report_Form_Event_ParticipantListing',NULL,0,NULL,18,'Provides lists of participants for an event.',0,0,1,1,NULL,NULL,NULL,NULL), + (250,41,'Event Income Report (Summary)','event/summary','CRM_Report_Form_Event_Summary',NULL,0,NULL,19,'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.',0,0,1,1,NULL,NULL,NULL,NULL), + (251,41,'Event Income Report (Detail)','event/income','CRM_Report_Form_Event_Income',NULL,0,NULL,20,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.',0,0,1,1,NULL,NULL,NULL,NULL), + (252,41,'Pledge Detail Report','pledge/detail','CRM_Report_Form_Pledge_Detail',NULL,0,NULL,21,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.',0,0,1,6,NULL,NULL,NULL,NULL), + (253,41,'Pledged but not Paid Report','pledge/pbnp','CRM_Report_Form_Pledge_Pbnp',NULL,0,NULL,22,'Pledged but not Paid Report',0,0,1,6,NULL,NULL,NULL,NULL), + (254,41,'Relationship Report','contact/relationship','CRM_Report_Form_Contact_Relationship',NULL,0,NULL,23,'Relationship Report',0,0,1,NULL,NULL,NULL,NULL,NULL), + (255,41,'Case Summary Report','case/summary','CRM_Report_Form_Case_Summary',NULL,0,NULL,24,'Provides a summary of cases and their duration by date range, status, staff member and / or case role.',0,0,1,7,NULL,NULL,NULL,NULL), + (256,41,'Case Time Spent Report','case/timespent','CRM_Report_Form_Case_TimeSpent',NULL,0,NULL,25,'Aggregates time spent on case and / or non-case activities by activity type and contact.',0,0,1,7,NULL,NULL,NULL,NULL), + (257,41,'Contact Demographics Report','case/demographics','CRM_Report_Form_Case_Demographics',NULL,0,NULL,26,'Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.',0,0,1,7,NULL,NULL,NULL,NULL), + (258,41,'Database Log Report','contact/log','CRM_Report_Form_Contact_Log',NULL,0,NULL,27,'Log of contact and activity records created or updated in a given date range.',0,0,1,NULL,NULL,NULL,NULL,NULL), + (259,41,'Activity Summary Report','activitySummary','CRM_Report_Form_ActivitySummary',NULL,0,NULL,28,'Shows activity statistics by type / date',0,0,1,NULL,NULL,NULL,NULL,NULL), + (260,41,'Bookkeeping Transactions Report','contribute/bookkeeping','CRM_Report_Form_Contribute_Bookkeeping',NULL,0,0,29,'Shows Bookkeeping Transactions Report',0,0,1,2,NULL,NULL,NULL,NULL), + (261,41,'Grant Report (Detail)','grant/detail','CRM_Report_Form_Grant_Detail',NULL,0,0,30,'Grant Report Detail',0,0,1,5,NULL,NULL,NULL,NULL), + (262,41,'Participant list Count Report','event/participantlist','CRM_Report_Form_Event_ParticipantListCount',NULL,0,0,31,'Shows the Participant list with Participant Count.',0,0,1,1,NULL,NULL,NULL,NULL), + (263,41,'Income Count Summary Report','event/incomesummary','CRM_Report_Form_Event_IncomeCountSummary',NULL,0,0,32,'Shows the Income Summary of events with Count.',0,0,1,1,NULL,NULL,NULL,NULL), + (264,41,'Case Detail Report','case/detail','CRM_Report_Form_Case_Detail',NULL,0,0,33,'Case Details',0,0,1,7,NULL,NULL,NULL,NULL), + (265,41,'Mail Bounce Report','Mailing/bounce','CRM_Report_Form_Mailing_Bounce',NULL,0,NULL,34,'Bounce Report for mailings',0,0,1,4,NULL,NULL,NULL,NULL), + (266,41,'Mail Summary Report','Mailing/summary','CRM_Report_Form_Mailing_Summary',NULL,0,NULL,35,'Summary statistics for mailings',0,0,1,4,NULL,NULL,NULL,NULL), + (267,41,'Mail Opened Report','Mailing/opened','CRM_Report_Form_Mailing_Opened',NULL,0,NULL,36,'Display contacts who opened emails from a mailing',0,0,1,4,NULL,NULL,NULL,NULL), + (268,41,'Mail Click-Through Report','Mailing/clicks','CRM_Report_Form_Mailing_Clicks',NULL,0,NULL,37,'Display clicks from each mailing',0,0,1,4,NULL,NULL,NULL,NULL), + (269,41,'Contact Logging Report (Summary)','logging/contact/summary','CRM_Report_Form_Contact_LoggingSummary',NULL,0,NULL,38,'Contact modification report for the logging infrastructure (summary).',0,0,0,NULL,NULL,NULL,NULL,NULL), + (270,41,'Contact Logging Report (Detail)','logging/contact/detail','CRM_Report_Form_Contact_LoggingDetail',NULL,0,NULL,39,'Contact modification report for the logging infrastructure (detail).',0,0,0,NULL,NULL,NULL,NULL,NULL), + (271,41,'Grant Report (Statistics)','grant/statistics','CRM_Report_Form_Grant_Statistics',NULL,0,NULL,42,'Shows statistics for Grants.',0,0,1,5,NULL,NULL,NULL,NULL), + (272,41,'Survey Report (Detail)','survey/detail','CRM_Report_Form_Campaign_SurveyDetails',NULL,0,NULL,43,'Detailed report for canvassing, phone-banking, walk lists or other surveys.',0,0,1,9,NULL,NULL,NULL,NULL), + (273,41,'Personal Campaign Page Report','contribute/pcp','CRM_Report_Form_Contribute_PCP',NULL,0,NULL,44,'Summarizes amount raised and number of contributors for each Personal Campaign Page.',0,0,1,2,NULL,NULL,NULL,NULL), + (274,41,'Pledge Summary Report','pledge/summary','CRM_Report_Form_Pledge_Summary',NULL,0,NULL,45,'Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.',0,0,1,6,NULL,NULL,NULL,NULL), + (275,41,'Contribution Aggregate by Relationship','contribute/history','CRM_Report_Form_Contribute_History',NULL,0,NULL,46,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.',0,0,1,2,NULL,NULL,NULL,NULL), + (276,41,'Mail Detail Report','mailing/detail','CRM_Report_Form_Mailing_Detail',NULL,0,NULL,47,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.',0,0,1,4,NULL,NULL,NULL,NULL), + (277,41,'Contribution and Membership Details','member/contributionDetail','CRM_Report_Form_Member_ContributionDetail',NULL,0,NULL,48,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.',0,0,1,3,NULL,NULL,NULL,NULL), + (278,41,'Recurring Contributions Report','contribute/recur','CRM_Report_Form_Contribute_Recur',NULL,0,NULL,49,'Provides information about the status of recurring contributions',0,0,1,2,NULL,NULL,NULL,NULL), + (279,41,'Recurring Contributions Summary','contribute/recursummary','CRM_Report_Form_Contribute_RecurSummary',NULL,0,NULL,49,'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.',0,0,1,2,NULL,NULL,NULL,NULL), + (280,41,'Deferred Revenue Details','contribute/deferredrevenue','CRM_Report_Form_Contribute_DeferredRevenue',NULL,0,NULL,50,'Deferred Revenue Details Report',0,0,1,2,NULL,NULL,NULL,NULL), + (281,26,'Scheduled','1','Scheduled',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (282,26,'Completed','2','Completed',NULL,1,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (283,26,'Cancelled','3','Cancelled',NULL,2,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (284,26,'Left Message','4','Left Message',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (285,26,'Unreachable','5','Unreachable',NULL,2,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (286,26,'Not Required','6','Not Required',NULL,2,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (287,26,'Available','7','Available',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (288,26,'No-show','8','No_show',NULL,2,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (289,28,'Ongoing','1','Open','Opened',0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (290,28,'Resolved','2','Closed','Closed',0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (291,28,'Urgent','3','Urgent','Opened',0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (292,29,'Name Only','1','Name Only',NULL,0,0,1,'CRM_Event_Page_ParticipantListing_Name',0,1,1,NULL,NULL,NULL,NULL,NULL), + (293,29,'Name and Email','2','Name and Email',NULL,0,0,2,'CRM_Event_Page_ParticipantListing_NameAndEmail',0,1,1,NULL,NULL,NULL,NULL,NULL), + (294,29,'Name, Status and Register Date','3','Name, Status and Register Date',NULL,0,0,3,'CRM_Event_Page_ParticipantListing_NameStatusAndDate',0,1,1,NULL,NULL,NULL,NULL,NULL), + (295,30,'jpg','1','jpg',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (296,30,'jpeg','2','jpeg',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (297,30,'png','3','png',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (298,30,'gif','4','gif',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (299,30,'txt','5','txt',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (300,30,'pdf','6','pdf',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (301,30,'doc','7','doc',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (302,30,'xls','8','xls',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (303,30,'rtf','9','rtf',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (304,30,'csv','10','csv',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (305,30,'ppt','11','ppt',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (306,30,'docx','12','docx',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (307,30,'xlsx','13','xlsx',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (308,30,'odt','14','odt',NULL,0,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (309,30,'ics','15','ics',NULL,0,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (310,30,'pptx','16','pptx',NULL,0,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (311,33,'Textarea','1','Textarea',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (312,33,'CKEditor','2','CKEditor',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (313,32,'Search Builder','1','Search Builder',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (314,32,'Import Contact','2','Import Contact',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (315,32,'Import Activity','3','Import Activity',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (316,32,'Import Contribution','4','Import Contribution',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (317,32,'Import Membership','5','Import Membership',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (318,32,'Import Participant','6','Import Participant',NULL,0,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (319,32,'Export Contact','7','Export Contact',NULL,0,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (320,32,'Export Contribution','8','Export Contribution',NULL,0,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (321,32,'Export Membership','9','Export Membership',NULL,0,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (322,32,'Export Participant','10','Export Participant',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (323,32,'Export Pledge','11','Export Pledge',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (324,32,'Export Case','12','Export Case',NULL,0,0,12,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (325,32,'Export Grant','13','Export Grant',NULL,0,0,13,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (326,32,'Export Activity','14','Export Activity',NULL,0,0,14,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (327,34,'day','day','day',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (328,34,'week','week','week',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (329,34,'month','month','month',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (330,34,'year','year','year',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (331,35,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (332,35,'Mobile','2','Mobile',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (333,35,'Fax','3','Fax',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (334,35,'Pager','4','Pager',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (335,35,'Voicemail','5','Voicemail',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (336,36,'Participant Role','1','ParticipantRole',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (337,36,'Participant Event Name','2','ParticipantEventName',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (338,36,'Participant Event Type','3','ParticipantEventType',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (339,37,'Public','1','public',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (340,37,'Admin','2','admin',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (341,38,'IMAP','1','IMAP',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (342,38,'Maildir','2','Maildir',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (343,38,'POP3','3','POP3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (344,38,'Localdir','4','Localdir',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (345,39,'Urgent','1','Urgent',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (346,39,'Normal','2','Normal',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (347,39,'Low','3','Low',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (348,40,'Vancouver','city_','city_',NULL,0,NULL,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (349,40,'/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/','date_','date_',NULL,1,NULL,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (350,42,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (351,42,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (352,42,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (353,42,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (354,42,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (355,43,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (356,43,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (357,43,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (358,43,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (359,43,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (360,44,'{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}','1','}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (361,44,'{contact.household_name}','2','{contact.household_name}',NULL,2,1,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (362,44,'{contact.organization_name}','3','{contact.organization_name}',NULL,3,1,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (363,44,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (364,47,'Work','1','Work',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (365,47,'Main','2','Main',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (366,47,'Facebook','3','Facebook',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (367,47,'Instagram','5','Instagram',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (368,47,'LinkedIn','6','LinkedIn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (369,47,'MySpace','7','MySpace',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (370,47,'Pinterest','8','Pinterest',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (371,47,'SnapChat','9','SnapChat',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (372,47,'Tumblr','10','Tumblr',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (373,47,'Twitter','11','Twitter',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (374,47,'Vine','12','Vine ',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (375,48,'Contacts','civicrm_contact','Contacts',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (376,48,'Activities','civicrm_activity','Activities',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (377,48,'Cases','civicrm_case','Cases',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (378,48,'Attachments','civicrm_file','Attachements',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (379,49,'USD ($)','USD','USD',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (380,50,'Name Only','1','CRM_Event_Badge_Simple',NULL,0,0,1,'Simple Event Name Badge',0,1,1,NULL,NULL,NULL,NULL,NULL), + (381,50,'Name Tent','2','CRM_Event_Badge_NameTent',NULL,0,0,2,'Name Tent',0,1,1,NULL,NULL,NULL,NULL,NULL), + (382,50,'With Logo','3','CRM_Event_Badge_Logo',NULL,0,0,3,'You can set your own background image',0,1,1,NULL,NULL,NULL,NULL,NULL), + (383,50,'5395 with Logo','4','CRM_Event_Badge_Logo5395',NULL,0,0,4,'Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm)',0,1,1,NULL,NULL,NULL,NULL,NULL), + (384,51,'None','0','None',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (385,51,'Author Only','1','Author Only',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (386,52,'Direct Mail','1','Direct Mail',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (387,52,'Referral Program','2','Referral Program',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (388,52,'Constituent Engagement','3','Constituent Engagement',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (389,53,'Planned','1','Planned',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (390,53,'In Progress','2','In Progress',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (391,53,'Completed','3','Completed',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (392,53,'Cancelled','4','Cancelled',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (393,56,'1','1','1',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (394,56,'2','2','2',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (395,56,'3','3','3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (396,56,'4','4','4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (397,56,'5','5','5',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (398,58,'Letter','{\"metric\":\"in\",\"width\":8.5,\"height\":11}','letter',NULL,NULL,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (399,58,'Legal','{\"metric\":\"in\",\"width\":8.5,\"height\":14}','legal',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (400,58,'Ledger','{\"metric\":\"in\",\"width\":17,\"height\":11}','ledger',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (401,58,'Tabloid','{\"metric\":\"in\",\"width\":11,\"height\":17}','tabloid',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (402,58,'Executive','{\"metric\":\"in\",\"width\":7.25,\"height\":10.5}','executive',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (403,58,'Folio','{\"metric\":\"in\",\"width\":8.5,\"height\":13}','folio',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (404,58,'Envelope #9','{\"metric\":\"pt\",\"width\":638.93,\"height\":278.93}','envelope-9',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (405,58,'Envelope #10','{\"metric\":\"pt\",\"width\":684,\"height\":297}','envelope-10',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (406,58,'Envelope #11','{\"metric\":\"pt\",\"width\":747,\"height\":324}','envelope-11',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (407,58,'Envelope #12','{\"metric\":\"pt\",\"width\":792,\"height\":342}','envelope-12',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (408,58,'Envelope #14','{\"metric\":\"pt\",\"width\":828,\"height\":360}','envelope-14',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (409,58,'Envelope ISO B4','{\"metric\":\"pt\",\"width\":1000.63,\"height\":708.66}','envelope-b4',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (410,58,'Envelope ISO B5','{\"metric\":\"pt\",\"width\":708.66,\"height\":498.9}','envelope-b5',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (411,58,'Envelope ISO B6','{\"metric\":\"pt\",\"width\":498.9,\"height\":354.33}','envelope-b6',NULL,NULL,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (412,58,'Envelope ISO C3','{\"metric\":\"pt\",\"width\":1298.27,\"height\":918.42}','envelope-c3',NULL,NULL,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (413,58,'Envelope ISO C4','{\"metric\":\"pt\",\"width\":918.42,\"height\":649.13}','envelope-c4',NULL,NULL,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (414,58,'Envelope ISO C5','{\"metric\":\"pt\",\"width\":649.13,\"height\":459.21}','envelope-c5',NULL,NULL,0,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (415,58,'Envelope ISO C6','{\"metric\":\"pt\",\"width\":459.21,\"height\":323.15}','envelope-c6',NULL,NULL,0,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (416,58,'Envelope ISO DL','{\"metric\":\"pt\",\"width\":623.622,\"height\":311.811}','envelope-dl',NULL,NULL,0,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (417,58,'ISO A0','{\"metric\":\"pt\",\"width\":2383.94,\"height\":3370.39}','a0',NULL,NULL,0,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (418,58,'ISO A1','{\"metric\":\"pt\",\"width\":1683.78,\"height\":2383.94}','a1',NULL,NULL,0,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (419,58,'ISO A2','{\"metric\":\"pt\",\"width\":1190.55,\"height\":1683.78}','a2',NULL,NULL,0,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (420,58,'ISO A3','{\"metric\":\"pt\",\"width\":841.89,\"height\":1190.55}','a3',NULL,NULL,0,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (421,58,'ISO A4','{\"metric\":\"pt\",\"width\":595.28,\"height\":841.89}','a4',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (422,58,'ISO A5','{\"metric\":\"pt\",\"width\":419.53,\"height\":595.28}','a5',NULL,NULL,0,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (423,58,'ISO A6','{\"metric\":\"pt\",\"width\":297.64,\"height\":419.53}','a6',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (424,58,'ISO A7','{\"metric\":\"pt\",\"width\":209.76,\"height\":297.64}','a7',NULL,NULL,0,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (425,58,'ISO A8','{\"metric\":\"pt\",\"width\":147.4,\"height\":209.76}','a8',NULL,NULL,0,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (426,58,'ISO A9','{\"metric\":\"pt\",\"width\":104.88,\"height\":147.4}','a9',NULL,NULL,0,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (427,58,'ISO A10','{\"metric\":\"pt\",\"width\":73.7,\"height\":104.88}','a10',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (428,58,'ISO B0','{\"metric\":\"pt\",\"width\":2834.65,\"height\":4008.19}','b0',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (429,58,'ISO B1','{\"metric\":\"pt\",\"width\":2004.09,\"height\":2834.65}','b1',NULL,NULL,0,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (430,58,'ISO B2','{\"metric\":\"pt\",\"width\":1417.32,\"height\":2004.09}','b2',NULL,NULL,0,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (431,58,'ISO B3','{\"metric\":\"pt\",\"width\":1000.63,\"height\":1417.32}','b3',NULL,NULL,0,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (432,58,'ISO B4','{\"metric\":\"pt\",\"width\":708.66,\"height\":1000.63}','b4',NULL,NULL,0,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (433,58,'ISO B5','{\"metric\":\"pt\",\"width\":498.9,\"height\":708.66}','b5',NULL,NULL,0,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (434,58,'ISO B6','{\"metric\":\"pt\",\"width\":354.33,\"height\":498.9}','b6',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (435,58,'ISO B7','{\"metric\":\"pt\",\"width\":249.45,\"height\":354.33}','b7',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (436,58,'ISO B8','{\"metric\":\"pt\",\"width\":175.75,\"height\":249.45}','b8',NULL,NULL,0,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (437,58,'ISO B9','{\"metric\":\"pt\",\"width\":124.72,\"height\":175.75}','b9',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (438,58,'ISO B10','{\"metric\":\"pt\",\"width\":87.87,\"height\":124.72}','b10',NULL,NULL,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (439,58,'ISO C0','{\"metric\":\"pt\",\"width\":2599.37,\"height\":3676.54}','c0',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (440,58,'ISO C1','{\"metric\":\"pt\",\"width\":1836.85,\"height\":2599.37}','c1',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (441,58,'ISO C2','{\"metric\":\"pt\",\"width\":1298.27,\"height\":1836.85}','c2',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (442,58,'ISO C3','{\"metric\":\"pt\",\"width\":918.43,\"height\":1298.27}','c3',NULL,NULL,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (443,58,'ISO C4','{\"metric\":\"pt\",\"width\":649.13,\"height\":918.43}','c4',NULL,NULL,0,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (444,58,'ISO C5','{\"metric\":\"pt\",\"width\":459.21,\"height\":649.13}','c5',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (445,58,'ISO C6','{\"metric\":\"pt\",\"width\":323.15,\"height\":459.21}','c6',NULL,NULL,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (446,58,'ISO C7','{\"metric\":\"pt\",\"width\":229.61,\"height\":323.15}','c7',NULL,NULL,0,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (447,58,'ISO C8','{\"metric\":\"pt\",\"width\":161.57,\"height\":229.61}','c8',NULL,NULL,0,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (448,58,'ISO C9','{\"metric\":\"pt\",\"width\":113.39,\"height\":161.57}','c9',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (449,58,'ISO C10','{\"metric\":\"pt\",\"width\":79.37,\"height\":113.39}','c10',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (450,58,'ISO RA0','{\"metric\":\"pt\",\"width\":2437.8,\"height\":3458.27}','ra0',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (451,58,'ISO RA1','{\"metric\":\"pt\",\"width\":1729.13,\"height\":2437.8}','ra1',NULL,NULL,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (452,58,'ISO RA2','{\"metric\":\"pt\",\"width\":1218.9,\"height\":1729.13}','ra2',NULL,NULL,0,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (453,58,'ISO RA3','{\"metric\":\"pt\",\"width\":864.57,\"height\":1218.9}','ra3',NULL,NULL,0,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (454,58,'ISO RA4','{\"metric\":\"pt\",\"width\":609.45,\"height\":864.57}','ra4',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (455,58,'ISO SRA0','{\"metric\":\"pt\",\"width\":2551.18,\"height\":3628.35}','sra0',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (456,58,'ISO SRA1','{\"metric\":\"pt\",\"width\":1814.17,\"height\":2551.18}','sra1',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (457,58,'ISO SRA2','{\"metric\":\"pt\",\"width\":1275.59,\"height\":1814.17}','sra2',NULL,NULL,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (458,58,'ISO SRA3','{\"metric\":\"pt\",\"width\":907.09,\"height\":1275.59}','sra3',NULL,NULL,0,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (459,58,'ISO SRA4','{\"metric\":\"pt\",\"width\":637.8,\"height\":907.09}','sra4',NULL,NULL,0,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (460,61,'Activity Assignees','1','Activity Assignees',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (461,61,'Activity Source','2','Activity Source',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (462,61,'Activity Targets','3','Activity Targets',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (463,71,'Asset','1','Asset',NULL,0,0,1,'Things you own',0,1,1,2,NULL,NULL,NULL,NULL), + (464,71,'Liability','2','Liability',NULL,0,0,2,'Things you owe, like a grant still to be disbursed',0,1,1,2,NULL,NULL,NULL,NULL), + (465,71,'Revenue','3','Revenue',NULL,0,1,3,'Income from contributions and sales of tickets and memberships',0,1,1,2,NULL,NULL,NULL,NULL), + (466,71,'Cost of Sales','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,NULL,NULL), + (467,71,'Expenses','5','Expenses',NULL,0,0,5,'Things that are paid for that are consumable, e.g. grants disbursed',0,1,1,2,NULL,NULL,NULL,NULL), + (468,62,'Income Account is','1','Income Account is',NULL,0,1,1,'Income Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (469,62,'Credit/Contra Revenue Account is','2','Credit/Contra Revenue Account is',NULL,0,0,2,'Credit/Contra Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (470,62,'Accounts Receivable Account is','3','Accounts Receivable Account is',NULL,0,0,3,'Accounts Receivable Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (471,62,'Credit Liability Account is','4','Credit Liability Account is',NULL,0,0,4,'Credit Liability Account is',0,1,0,2,NULL,NULL,NULL,NULL), + (472,62,'Expense Account is','5','Expense Account is',NULL,0,0,5,'Expense Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (473,62,'Asset Account is','6','Asset Account is',NULL,0,0,6,'Asset Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (474,62,'Cost of Sales Account is','7','Cost of Sales Account is',NULL,0,0,7,'Cost of Sales Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (475,62,'Premiums Inventory Account is','8','Premiums Inventory Account is',NULL,0,0,8,'Premiums Inventory Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (476,62,'Discounts Account is','9','Discounts Account is',NULL,0,0,9,'Discounts Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (477,62,'Sales Tax Account is','10','Sales Tax Account is',NULL,0,0,10,'Sales Tax Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (478,62,'Chargeback Account is','11','Chargeback Account is',NULL,0,0,11,'Chargeback Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (479,62,'Deferred Revenue Account is','12','Deferred Revenue Account is',NULL,0,0,12,'Deferred Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL), + (480,63,'Participant Role','1','participant_role',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (481,64,'Morning Sessions','1','Morning Sessions',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (482,64,'Evening Sessions','2','Evening Sessions',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (483,65,'Contribution','1','Contribution',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (484,65,'Membership','2','Membership',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (485,65,'Pledge Payment','3','Pledge Payment',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (486,67,'Open','1','Open',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (487,67,'Closed','2','Closed',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (488,67,'Data Entry','3','Data Entry',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (489,67,'Reopened','4','Reopened',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (490,67,'Exported','5','Exported',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (491,66,'Manual Batch','1','Manual Batch',NULL,0,0,1,'Manual Batch',0,1,1,2,NULL,NULL,NULL,NULL), + (492,66,'Automatic Batch','2','Automatic Batch',NULL,0,0,2,'Automatic Batch',0,1,1,2,NULL,NULL,NULL,NULL), + (493,72,'Paid','1','Paid',NULL,0,0,1,'Paid',0,1,1,2,NULL,NULL,NULL,NULL), + (494,72,'Partially paid','2','Partially paid',NULL,0,0,2,'Partially paid',0,1,1,2,NULL,NULL,NULL,NULL), + (495,72,'Unpaid','3','Unpaid',NULL,0,0,1,'Unpaid',0,1,1,2,NULL,NULL,NULL,NULL), + (496,68,'http','1','http',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (497,68,'xml','2','xml',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (498,68,'smtp','3','smtp',NULL,NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (499,70,'Renewal Reminder (non-auto-renew memberships only)','1','Renewal Reminder (non-auto-renew memberships only)',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (500,70,'Auto-renew Memberships Only','2','Auto-renew Memberships Only',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (501,70,'Reminder for Both','3','Reminder for Both',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (502,73,'Event Badge','1','Event Badge',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (503,74,'Avery 5395','{\"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}','Avery 5395',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (504,74,'A6 Badge Portrait 150x106','{\"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}','A6 Badge Portrait 150x106',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (505,74,'Fattorini Name Badge 100x65','{\"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}','Fattorini Name Badge 100x65',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (506,74,'Hanging Badge 3-3/4\" x 4-3\"/4','{\"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}','Hanging Badge 3-3/4\" x 4-3\"/4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (507,60,'Avery 3475','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','3475','Avery',NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (508,60,'Avery 5160','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5160','Avery',NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (509,60,'Avery 5161','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5161','Avery',NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (510,60,'Avery 5162','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5162','Avery',NULL,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (511,60,'Avery 5163','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5163','Avery',NULL,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (512,60,'Avery 5164','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','5164','Avery',NULL,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (513,60,'Avery 8600','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','8600','Avery',NULL,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (514,60,'Avery L7160','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7160','Avery',NULL,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (515,60,'Avery L7161','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7161','Avery',NULL,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (516,60,'Avery L7162','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7162','Avery',NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (517,60,'Avery L7163','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"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}','L7163','Avery',NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (518,75,'Formal','1','formal',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (519,75,'Familiar','2','familiar',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (520,76,'Email','Email','Email',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (521,76,'SMS','SMS','SMS',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (522,76,'User Preference','User_Preference','User Preference',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (523,77,'Actual date only','1','Actual date only',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (524,77,'Each anniversary','2','Each anniversary',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (525,78,'Default','1','default',NULL,NULL,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (526,78,'CiviMail','2','civimail',NULL,NULL,0,2,NULL,0,1,1,4,NULL,NULL,NULL,NULL), + (527,78,'CiviEvent','3','civievent',NULL,NULL,0,3,NULL,0,1,1,1,NULL,NULL,NULL,NULL), + (528,82,'Production','Production','Production',NULL,NULL,1,1,'Production Environment',0,1,1,NULL,NULL,NULL,NULL,NULL), + (529,82,'Staging','Staging','Staging',NULL,NULL,0,2,'Staging Environment',0,1,1,NULL,NULL,NULL,NULL,NULL), + (530,82,'Development','Development','Development',NULL,NULL,0,3,'Development Environment',0,1,1,NULL,NULL,NULL,NULL,NULL), + (531,79,'Today','this.day','this.day',NULL,NULL,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (532,79,'This week','this.week','this.week',NULL,NULL,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (533,79,'This calendar month','this.month','this.month',NULL,NULL,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (534,79,'This quarter','this.quarter','this.quarter',NULL,NULL,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (535,79,'This fiscal year','this.fiscal_year','this.fiscal_year',NULL,NULL,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (536,79,'This calendar year','this.year','this.year',NULL,NULL,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (537,79,'Yesterday','previous.day','previous.day',NULL,NULL,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (538,79,'Previous week','previous.week','previous.week',NULL,NULL,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (539,79,'Previous calendar month','previous.month','previous.month',NULL,NULL,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (540,79,'Previous quarter','previous.quarter','previous.quarter',NULL,NULL,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (541,79,'Previous fiscal year','previous.fiscal_year','previous.fiscal_year',NULL,NULL,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (542,79,'Previous calendar year','previous.year','previous.year',NULL,NULL,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (543,79,'Last 7 days including today','ending.week','ending.week',NULL,NULL,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (544,79,'Last 30 days including today','ending_30.day','ending.month',NULL,NULL,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (545,79,'Last 60 days including today','ending_60.day','ending_2.month',NULL,NULL,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (546,79,'Last 90 days including today','ending_90.day','ending.quarter',NULL,NULL,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (547,79,'Last 12 months including today','ending.year','ending.year',NULL,NULL,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (548,79,'Last 2 years including today','ending_2.year','ending_2.year',NULL,NULL,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (549,79,'Last 3 years including today','ending_3.year','ending_3.year',NULL,NULL,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (550,79,'Tomorrow','starting.day','starting.day',NULL,NULL,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (551,79,'Next week','next.week','next.week',NULL,NULL,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (552,79,'Next calendar month','next.month','next.month',NULL,NULL,NULL,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (553,79,'Next quarter','next.quarter','next.quarter',NULL,NULL,NULL,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (554,79,'Next fiscal year','next.fiscal_year','next.fiscal_year',NULL,NULL,NULL,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (555,79,'Next calendar year','next.year','next.year',NULL,NULL,NULL,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (556,79,'Next 7 days including today','starting.week','starting.week',NULL,NULL,NULL,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (557,79,'Next 30 days including today','starting.month','starting.month',NULL,NULL,NULL,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (558,79,'Next 60 days including today','starting_2.month','starting_2.month',NULL,NULL,NULL,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (559,79,'Next 90 days including today','starting.quarter','starting.quarter',NULL,NULL,NULL,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (560,79,'Next 12 months including today','starting.year','starting.year',NULL,NULL,NULL,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (561,79,'Current week to-date','current.week','current.week',NULL,NULL,NULL,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (562,79,'Current calendar month to-date','current.month','current.month',NULL,NULL,NULL,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (563,79,'Current quarter to-date','current.quarter','current.quarter',NULL,NULL,NULL,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (564,79,'Current calendar year to-date','current.year','current.year',NULL,NULL,NULL,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (565,79,'To end of yesterday','earlier.day','earlier.day',NULL,NULL,NULL,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (566,79,'To end of previous week','earlier.week','earlier.week',NULL,NULL,NULL,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (567,79,'To end of previous calendar month','earlier.month','earlier.month',NULL,NULL,NULL,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (568,79,'To end of previous quarter','earlier.quarter','earlier.quarter',NULL,NULL,NULL,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (569,79,'To end of previous calendar year','earlier.year','earlier.year',NULL,NULL,NULL,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (570,79,'From start of current day','greater.day','greater.day',NULL,NULL,NULL,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (571,79,'From start of current week','greater.week','greater.week',NULL,NULL,NULL,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (572,79,'From start of current calendar month','greater.month','greater.month',NULL,NULL,NULL,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (573,79,'From start of current quarter','greater.quarter','greater.quarter',NULL,NULL,NULL,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (574,79,'From start of current calendar year','greater.year','greater.year',NULL,NULL,NULL,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (575,79,'To end of current week','less.week','less.week',NULL,NULL,NULL,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (576,79,'To end of current calendar month','less.month','less.month',NULL,NULL,NULL,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (577,79,'To end of current quarter','less.quarter','less.quarter',NULL,NULL,NULL,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (578,79,'To end of current calendar year','less.year','less.year',NULL,NULL,NULL,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (579,79,'Previous 2 days','previous_2.day','previous_2.day',NULL,NULL,NULL,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (580,79,'Previous 2 weeks','previous_2.week','previous_2.week',NULL,NULL,NULL,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (581,79,'Previous 2 calendar months','previous_2.month','previous_2.month',NULL,NULL,NULL,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (582,79,'Previous 2 quarters','previous_2.quarter','previous_2.quarter',NULL,NULL,NULL,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (583,79,'Previous 2 calendar years','previous_2.year','previous_2.year',NULL,NULL,NULL,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (584,79,'Day prior to yesterday','previous_before.day','previous_before.day',NULL,NULL,NULL,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (585,79,'Week prior to previous week','previous_before.week','previous_before.week',NULL,NULL,NULL,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (586,79,'Month prior to previous calendar month','previous_before.month','previous_before.month',NULL,NULL,NULL,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (587,79,'Quarter prior to previous quarter','previous_before.quarter','previous_before.quarter',NULL,NULL,NULL,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (588,79,'Year prior to previous calendar year','previous_before.year','previous_before.year',NULL,NULL,NULL,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (589,79,'From end of previous week','greater_previous.week','greater_previous.week',NULL,NULL,NULL,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (590,79,'From end of previous calendar month','greater_previous.month','greater_previous.month',NULL,NULL,NULL,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (591,79,'From end of previous quarter','greater_previous.quarter','greater_previous.quarter',NULL,NULL,NULL,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (592,79,'From end of previous calendar year','greater_previous.year','greater_previous.year',NULL,NULL,NULL,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (593,80,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (594,80,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (595,80,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (596,80,'In Progress','5','In Progress',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (597,80,'Overdue','6','Overdue',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (598,81,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (599,81,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (600,81,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (601,81,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (602,81,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (603,81,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (604,81,'Processing','7','Processing',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (605,81,'Failing','8','Failing',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (606,83,'None','1','NONE',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (607,83,'By relationship to case client','2','BY_RELATIONSHIP',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (608,83,'Specific contact','3','SPECIFIC_CONTACT',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (609,83,'User creating the case','4','USER_CREATING_THE_CASE',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (610,31,'\"FIXME\" <info@EXAMPLE.ORG>','1','\"FIXME\" <info@EXAMPLE.ORG>',NULL,0,1,1,'Default domain email address and from name.',0,0,1,NULL,1,NULL,NULL,NULL), + (611,24,'Emergency','1','Emergency',NULL,0,1,1,NULL,0,0,1,NULL,1,NULL,NULL,NULL), + (612,24,'Family Support','2','Family Support',NULL,0,NULL,2,NULL,0,0,1,NULL,1,NULL,NULL,NULL), + (613,24,'General Protection','3','General Protection',NULL,0,NULL,3,NULL,0,0,1,NULL,1,NULL,NULL,NULL), + (614,24,'Impunity','4','Impunity',NULL,0,NULL,4,NULL,0,0,1,NULL,1,NULL,NULL,NULL), + (615,55,'Approved','1','Approved',NULL,0,1,1,NULL,0,1,1,4,1,NULL,NULL,NULL), + (616,55,'Rejected','2','Rejected',NULL,0,0,2,NULL,0,1,1,4,1,NULL,NULL,NULL), + (617,55,'None','3','None',NULL,0,0,3,NULL,0,1,1,4,1,NULL,NULL,NULL), + (618,57,'Survey','Survey','civicrm_survey',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (619,57,'Cases','Case','civicrm_case',NULL,0,NULL,2,'CRM_Case_PseudoConstant::caseType;',0,0,1,NULL,NULL,NULL,NULL,NULL), + (620,84,'Abkhaz','ab','ab_GE',NULL,0,0,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (621,84,'Afar','aa','aa_ET',NULL,0,0,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (622,84,'Afrikaans','af','af_ZA',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (623,84,'Akan','ak','ak_GH',NULL,0,0,4,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (624,84,'Albanian','sq','sq_AL',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (625,84,'Amharic','am','am_ET',NULL,0,0,6,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (626,84,'Arabic','ar','ar_EG',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (627,84,'Aragonese','an','an_ES',NULL,0,0,8,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (628,84,'Armenian','hy','hy_AM',NULL,0,0,9,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (629,84,'Assamese','as','as_IN',NULL,0,0,10,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (630,84,'Avaric','av','av_RU',NULL,0,0,11,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (631,84,'Avestan','ae','ae_XX',NULL,0,0,12,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (632,84,'Aymara','ay','ay_BO',NULL,0,0,13,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (633,84,'Azerbaijani','az','az_AZ',NULL,0,0,14,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (634,84,'Bambara','bm','bm_ML',NULL,0,0,15,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (635,84,'Bashkir','ba','ba_RU',NULL,0,0,16,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (636,84,'Basque','eu','eu_ES',NULL,0,0,17,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (637,84,'Belarusian','be','be_BY',NULL,0,0,18,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (638,84,'Bengali','bn','bn_BD',NULL,0,0,19,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (639,84,'Bihari','bh','bh_IN',NULL,0,0,20,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (640,84,'Bislama','bi','bi_VU',NULL,0,0,21,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (641,84,'Bosnian','bs','bs_BA',NULL,0,0,22,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (642,84,'Breton','br','br_FR',NULL,0,0,23,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (643,84,'Bulgarian','bg','bg_BG',NULL,0,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (644,84,'Burmese','my','my_MM',NULL,0,0,25,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (645,84,'Catalan; Valencian','ca','ca_ES',NULL,0,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (646,84,'Chamorro','ch','ch_GU',NULL,0,0,27,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (647,84,'Chechen','ce','ce_RU',NULL,0,0,28,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (648,84,'Chichewa; Chewa; Nyanja','ny','ny_MW',NULL,0,0,29,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (649,84,'Chinese (China)','zh','zh_CN',NULL,0,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (650,84,'Chinese (Taiwan)','zh','zh_TW',NULL,0,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (651,84,'Chuvash','cv','cv_RU',NULL,0,0,32,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (652,84,'Cornish','kw','kw_GB',NULL,0,0,33,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (653,84,'Corsican','co','co_FR',NULL,0,0,34,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (654,84,'Cree','cr','cr_CA',NULL,0,0,35,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (655,84,'Croatian','hr','hr_HR',NULL,0,0,36,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (656,84,'Czech','cs','cs_CZ',NULL,0,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (657,84,'Danish','da','da_DK',NULL,0,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (658,84,'Divehi; Dhivehi; Maldivian;','dv','dv_MV',NULL,0,0,39,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (659,84,'Dutch (Netherlands)','nl','nl_NL',NULL,0,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (660,84,'Dutch (Belgium)','nl','nl_BE',NULL,0,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (661,84,'Dzongkha','dz','dz_BT',NULL,0,0,42,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (662,84,'English (Australia)','en','en_AU',NULL,0,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (663,84,'English (Canada)','en','en_CA',NULL,0,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (664,84,'English (United Kingdom)','en','en_GB',NULL,0,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (665,84,'English (United States)','en','en_US',NULL,0,1,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (666,84,'Esperanto','eo','eo_XX',NULL,0,0,47,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (667,84,'Estonian','et','et_EE',NULL,0,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (668,84,'Ewe','ee','ee_GH',NULL,0,0,49,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (669,84,'Faroese','fo','fo_FO',NULL,0,0,50,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (670,84,'Fijian','fj','fj_FJ',NULL,0,0,51,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (671,84,'Finnish','fi','fi_FI',NULL,0,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (672,84,'French (Canada)','fr','fr_CA',NULL,0,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (673,84,'French (France)','fr','fr_FR',NULL,0,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (674,84,'Fula; Fulah; Pulaar; Pular','ff','ff_SN',NULL,0,0,55,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (675,84,'Galician','gl','gl_ES',NULL,0,0,56,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (676,84,'Georgian','ka','ka_GE',NULL,0,0,57,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (677,84,'German','de','de_DE',NULL,0,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (678,84,'German (Swiss)','de','de_CH',NULL,0,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (679,84,'Greek, Modern','el','el_GR',NULL,0,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (680,84,'GuaraniÂ','gn','gn_PY',NULL,0,0,61,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (681,84,'Gujarati','gu','gu_IN',NULL,0,0,62,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (682,84,'Haitian; Haitian Creole','ht','ht_HT',NULL,0,0,63,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (683,84,'Hausa','ha','ha_NG',NULL,0,0,64,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (684,84,'Hebrew (modern)','he','he_IL',NULL,0,0,65,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (685,84,'Herero','hz','hz_NA',NULL,0,0,66,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (686,84,'Hindi','hi','hi_IN',NULL,0,0,67,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (687,84,'Hiri Motu','ho','ho_PG',NULL,0,0,68,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (688,84,'Hungarian','hu','hu_HU',NULL,0,0,69,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (689,84,'Interlingua','ia','ia_XX',NULL,0,0,70,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (690,84,'Indonesian','id','id_ID',NULL,0,0,71,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (691,84,'Interlingue','ie','ie_XX',NULL,0,0,72,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (692,84,'Irish','ga','ga_IE',NULL,0,0,73,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (693,84,'Igbo','ig','ig_NG',NULL,0,0,74,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (694,84,'Inupiaq','ik','ik_US',NULL,0,0,75,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (695,84,'Ido','io','io_XX',NULL,0,0,76,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (696,84,'Icelandic','is','is_IS',NULL,0,0,77,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (697,84,'Italian','it','it_IT',NULL,0,0,78,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (698,84,'Inuktitut','iu','iu_CA',NULL,0,0,79,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (699,84,'Japanese','ja','ja_JP',NULL,0,0,80,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (700,84,'Javanese','jv','jv_ID',NULL,0,0,81,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (701,84,'Kalaallisut, Greenlandic','kl','kl_GL',NULL,0,0,82,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (702,84,'Kannada','kn','kn_IN',NULL,0,0,83,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (703,84,'Kanuri','kr','kr_NE',NULL,0,0,84,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (704,84,'Kashmiri','ks','ks_IN',NULL,0,0,85,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (705,84,'Kazakh','kk','kk_KZ',NULL,0,0,86,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (706,84,'Khmer','km','km_KH',NULL,0,0,87,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (707,84,'Kikuyu, Gikuyu','ki','ki_KE',NULL,0,0,88,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (708,84,'Kinyarwanda','rw','rw_RW',NULL,0,0,89,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (709,84,'Kirghiz, Kyrgyz','ky','ky_KG',NULL,0,0,90,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (710,84,'Komi','kv','kv_RU',NULL,0,0,91,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (711,84,'Kongo','kg','kg_CD',NULL,0,0,92,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (712,84,'Korean','ko','ko_KR',NULL,0,0,93,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (713,84,'Kurdish','ku','ku_IQ',NULL,0,0,94,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (714,84,'Kwanyama, Kuanyama','kj','kj_NA',NULL,0,0,95,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (715,84,'Latin','la','la_VA',NULL,0,0,96,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (716,84,'Luxembourgish, Letzeburgesch','lb','lb_LU',NULL,0,0,97,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (717,84,'Luganda','lg','lg_UG',NULL,0,0,98,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (718,84,'Limburgish, Limburgan, Limburger','li','li_NL',NULL,0,0,99,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (719,84,'Lingala','ln','ln_CD',NULL,0,0,100,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (720,84,'Lao','lo','lo_LA',NULL,0,0,101,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (721,84,'Lithuanian','lt','lt_LT',NULL,0,0,102,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (722,84,'Luba-Katanga','lu','lu_CD',NULL,0,0,103,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (723,84,'Latvian','lv','lv_LV',NULL,0,0,104,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (724,84,'Manx','gv','gv_IM',NULL,0,0,105,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (725,84,'Macedonian','mk','mk_MK',NULL,0,0,106,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (726,84,'Malagasy','mg','mg_MG',NULL,0,0,107,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (727,84,'Malay','ms','ms_MY',NULL,0,0,108,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (728,84,'Malayalam','ml','ml_IN',NULL,0,0,109,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (729,84,'Maltese','mt','mt_MT',NULL,0,0,110,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (730,84,'MÄori','mi','mi_NZ',NULL,0,0,111,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (731,84,'Marathi','mr','mr_IN',NULL,0,0,112,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (732,84,'Marshallese','mh','mh_MH',NULL,0,0,113,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (733,84,'Mongolian','mn','mn_MN',NULL,0,0,114,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (734,84,'Nauru','na','na_NR',NULL,0,0,115,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (735,84,'Navajo, Navaho','nv','nv_US',NULL,0,0,116,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (736,84,'Norwegian BokmÃ¥l','nb','nb_NO',NULL,0,0,117,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (737,84,'North Ndebele','nd','nd_ZW',NULL,0,0,118,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (738,84,'Nepali','ne','ne_NP',NULL,0,0,119,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (739,84,'Ndonga','ng','ng_NA',NULL,0,0,120,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (740,84,'Norwegian Nynorsk','nn','nn_NO',NULL,0,0,121,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (741,84,'Norwegian','no','no_NO',NULL,0,0,122,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (742,84,'Nuosu','ii','ii_CN',NULL,0,0,123,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (743,84,'South Ndebele','nr','nr_ZA',NULL,0,0,124,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (744,84,'Occitan (after 1500)','oc','oc_FR',NULL,0,0,125,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (745,84,'Ojibwa','oj','oj_CA',NULL,0,0,126,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (746,84,'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic','cu','cu_BG',NULL,0,0,127,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (747,84,'Oromo','om','om_ET',NULL,0,0,128,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (748,84,'Oriya','or','or_IN',NULL,0,0,129,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (749,84,'Ossetian, Ossetic','os','os_GE',NULL,0,0,130,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (750,84,'Panjabi, Punjabi','pa','pa_IN',NULL,0,0,131,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (751,84,'Pali','pi','pi_KH',NULL,0,0,132,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (752,84,'Persian (Iran)','fa','fa_IR',NULL,0,0,133,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (753,84,'Polish','pl','pl_PL',NULL,0,0,134,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (754,84,'Pashto, Pushto','ps','ps_AF',NULL,0,0,135,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (755,84,'Portuguese (Brazil)','pt','pt_BR',NULL,0,0,136,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (756,84,'Portuguese (Portugal)','pt','pt_PT',NULL,0,0,137,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (757,84,'Quechua','qu','qu_PE',NULL,0,0,138,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (758,84,'Romansh','rm','rm_CH',NULL,0,0,139,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (759,84,'Kirundi','rn','rn_BI',NULL,0,0,140,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (760,84,'Romanian, Moldavian, Moldovan','ro','ro_RO',NULL,0,0,141,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (761,84,'Russian','ru','ru_RU',NULL,0,0,142,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (762,84,'Sanskrit','sa','sa_IN',NULL,0,0,143,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (763,84,'Sardinian','sc','sc_IT',NULL,0,0,144,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (764,84,'Sindhi','sd','sd_IN',NULL,0,0,145,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (765,84,'Northern Sami','se','se_NO',NULL,0,0,146,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (766,84,'Samoan','sm','sm_WS',NULL,0,0,147,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (767,84,'Sango','sg','sg_CF',NULL,0,0,148,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (768,84,'Serbian','sr','sr_RS',NULL,0,0,149,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (769,84,'Scottish Gaelic; Gaelic','gd','gd_GB',NULL,0,0,150,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (770,84,'Shona','sn','sn_ZW',NULL,0,0,151,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (771,84,'Sinhala, Sinhalese','si','si_LK',NULL,0,0,152,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (772,84,'Slovak','sk','sk_SK',NULL,0,0,153,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (773,84,'Slovene','sl','sl_SI',NULL,0,0,154,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (774,84,'Somali','so','so_SO',NULL,0,0,155,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (775,84,'Southern Sotho','st','st_ZA',NULL,0,0,156,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (776,84,'Spanish; Castilian (Spain)','es','es_ES',NULL,0,0,157,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (777,84,'Spanish; Castilian (Mexico)','es','es_MX',NULL,0,0,158,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (778,84,'Spanish; Castilian (Puerto Rico)','es','es_PR',NULL,0,0,159,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (779,84,'Sundanese','su','su_ID',NULL,0,0,160,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (780,84,'Swahili','sw','sw_TZ',NULL,0,0,161,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (781,84,'Swati','ss','ss_ZA',NULL,0,0,162,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (782,84,'Swedish','sv','sv_SE',NULL,0,0,163,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (783,84,'Tamil','ta','ta_IN',NULL,0,0,164,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (784,84,'Telugu','te','te_IN',NULL,0,0,165,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (785,84,'Tajik','tg','tg_TJ',NULL,0,0,166,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (786,84,'Thai','th','th_TH',NULL,0,0,167,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (787,84,'Tigrinya','ti','ti_ET',NULL,0,0,168,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (788,84,'Tibetan Standard, Tibetan, Central','bo','bo_CN',NULL,0,0,169,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (789,84,'Turkmen','tk','tk_TM',NULL,0,0,170,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (790,84,'Tagalog','tl','tl_PH',NULL,0,0,171,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (791,84,'Tswana','tn','tn_ZA',NULL,0,0,172,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (792,84,'Tonga (Tonga Islands)','to','to_TO',NULL,0,0,173,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (793,84,'Turkish','tr','tr_TR',NULL,0,0,174,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (794,84,'Tsonga','ts','ts_ZA',NULL,0,0,175,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (795,84,'Tatar','tt','tt_RU',NULL,0,0,176,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (796,84,'Twi','tw','tw_GH',NULL,0,0,177,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (797,84,'Tahitian','ty','ty_PF',NULL,0,0,178,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (798,84,'Uighur, Uyghur','ug','ug_CN',NULL,0,0,179,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (799,84,'Ukrainian','uk','uk_UA',NULL,0,0,180,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (800,84,'Urdu','ur','ur_PK',NULL,0,0,181,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (801,84,'Uzbek','uz','uz_UZ',NULL,0,0,182,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (802,84,'Venda','ve','ve_ZA',NULL,0,0,183,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (803,84,'Vietnamese','vi','vi_VN',NULL,0,0,184,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (804,84,'Volapük','vo','vo_XX',NULL,0,0,185,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (805,84,'Walloon','wa','wa_BE',NULL,0,0,186,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (806,84,'Welsh','cy','cy_GB',NULL,0,0,187,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (807,84,'Wolof','wo','wo_SN',NULL,0,0,188,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (808,84,'Western Frisian','fy','fy_NL',NULL,0,0,189,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (809,84,'Xhosa','xh','xh_ZA',NULL,0,0,190,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (810,84,'Yiddish','yi','yi_US',NULL,0,0,191,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (811,84,'Yoruba','yo','yo_NG',NULL,0,0,192,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (812,84,'Zhuang, Chuang','za','za_CN',NULL,0,0,193,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (813,84,'Zulu','zu','zu_ZA',NULL,0,0,194,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), + (814,85,'In Person','1','in_person',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (815,85,'Phone','2','phone',NULL,0,1,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (816,85,'Email','3','email',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (817,85,'Fax','4','fax',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (818,85,'Letter Mail','5','letter_mail',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (819,86,'Cases - Send Copy of an Activity','1','case_activity',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (820,87,'Contributions - Duplicate Organization Alert','1','contribution_dupalert',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (821,87,'Contributions - Receipt (off-line)','2','contribution_offline_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (822,87,'Contributions - Receipt (on-line)','3','contribution_online_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (823,87,'Contributions - Invoice','4','contribution_invoice_receipt',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (824,87,'Contributions - Recurring Start and End Notification','5','contribution_recurring_notify',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (825,87,'Contributions - Recurring Cancellation Notification','6','contribution_recurring_cancelled',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (826,87,'Contributions - Recurring Billing Updates','7','contribution_recurring_billing',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (827,87,'Contributions - Recurring Updates','8','contribution_recurring_edit',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (828,87,'Personal Campaign Pages - Admin Notification','9','pcp_notify',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (829,87,'Personal Campaign Pages - Supporter Status Change Notification','10','pcp_status_change',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (830,87,'Personal Campaign Pages - Supporter Welcome','11','pcp_supporter_notify',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (831,87,'Personal Campaign Pages - Owner Notification','12','pcp_owner_notify',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (832,87,'Additional Payment Receipt or Refund Notification','13','payment_or_refund_notification',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (833,88,'Events - Registration Confirmation and Receipt (off-line)','1','event_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (834,88,'Events - Registration Confirmation and Receipt (on-line)','2','event_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (835,88,'Events - Receipt only','3','event_registration_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (836,88,'Events - Registration Cancellation Notice','4','participant_cancelled',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (837,88,'Events - Registration Confirmation Invite','5','participant_confirm',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (838,88,'Events - Pending Registration Expiration Notice','6','participant_expired',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (839,88,'Events - Registration Transferred Notice','7','participant_transferred',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (840,89,'Tell-a-Friend Email','1','friend',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (841,90,'Memberships - Signup and Renewal Receipts (off-line)','1','membership_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (842,90,'Memberships - Receipt (on-line)','2','membership_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (843,90,'Memberships - Auto-renew Cancellation Notification','3','membership_autorenew_cancelled',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (844,90,'Memberships - Auto-renew Billing Updates','4','membership_autorenew_billing',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (845,91,'Test-drive - Receipt Header','1','test_preview',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (846,92,'Pledges - Acknowledgement','1','pledge_acknowledge',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (847,92,'Pledges - Payment Reminder','2','pledge_reminder',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (848,93,'Profiles - Admin Notification','1','uf_notify',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (849,94,'Petition - signature added','1','petition_sign',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (850,94,'Petition - need verification','2','petition_confirmation_needed',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (851,95,'In Honor of','1','in_honor_of',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (852,95,'In Memory of','2','in_memory_of',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (853,95,'Solicited','3','solicited',NULL,0,1,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (854,95,'Household','4','household',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (855,95,'Workplace Giving','5','workplace',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (856,95,'Foundation Affiliate','6','foundation_affiliate',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (857,95,'3rd-party Service','7','3rd-party_service',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (858,95,'Donor-advised Fund','8','donor-advised_fund',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (859,95,'Matched Gift','9','matched_gift',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (860,95,'Personal Campaign Page','10','pcp',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (861,95,'Gift','11','gift',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), + (862,2,'Interview','55','Interview',NULL,0,NULL,55,'Conduct a phone or in person interview.',0,0,1,NULL,NULL,NULL,'fa-comment-o',NULL); /*!40000 ALTER TABLE `civicrm_option_value` ENABLE KEYS */; UNLOCK TABLES; @@ -1026,7 +6459,57 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant` WRITE; /*!40000 ALTER TABLE `civicrm_participant` DISABLE KEYS */; -INSERT INTO `civicrm_participant` (`id`, `contact_id`, `event_id`, `status_id`, `role_id`, `register_date`, `source`, `fee_level`, `is_test`, `is_pay_later`, `fee_amount`, `registered_by_id`, `discount_id`, `fee_currency`, `campaign_id`, `discount_amount`, `cart_id`, `must_wait`, `transferred_to_contact_id`) VALUES (1,118,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,31,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(3,120,3,3,'3','2008-05-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(4,98,1,4,'4','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(5,97,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,170,3,2,'2','2008-03-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(7,159,1,3,'3','2009-07-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(8,25,2,4,'4','2009-03-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(9,21,3,1,'1','2008-02-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(10,127,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,75,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(12,68,3,4,'4','2009-03-06 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(13,128,1,1,'2','2008-06-04 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(14,119,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(15,57,3,4,'1','2008-07-04 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(16,137,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(17,84,2,2,'3','2008-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(18,18,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(19,113,1,2,'1','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(20,187,2,4,'1','2009-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(21,50,3,1,'4','2008-03-25 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(22,115,1,2,'3','2009-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(23,40,2,4,'1','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(24,4,3,3,'1','2008-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(25,45,3,2,'2','2008-04-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(26,102,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,28,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(28,27,3,3,'3','2009-12-12 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(29,163,1,4,'4','2009-12-13 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(30,73,2,1,'1','2009-12-14 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(31,194,3,2,'2','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(32,20,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,26,2,4,'4','2009-03-07 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(34,143,3,1,'1','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(35,126,1,2,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(36,131,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(37,136,3,4,'4','2009-03-06 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(38,93,1,1,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(39,12,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(40,132,3,4,'1','2009-12-14 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(41,44,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(42,43,2,2,'3','2009-12-15 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(43,193,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(44,124,1,2,'1','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(45,181,2,4,'1','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(46,78,3,1,'4','2009-12-13 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(47,82,1,2,'3','2009-10-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(48,62,2,4,'1','2009-12-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(49,148,3,3,'1','2009-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(50,74,3,2,'2','2009-04-05 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_participant` (`id`, `contact_id`, `event_id`, `status_id`, `role_id`, `register_date`, `source`, `fee_level`, `is_test`, `is_pay_later`, `fee_amount`, `registered_by_id`, `discount_id`, `fee_currency`, `campaign_id`, `discount_amount`, `cart_id`, `must_wait`, `transferred_to_contact_id`) VALUES + (1,118,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (2,125,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (3,201,3,3,'3','2008-05-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (4,79,1,4,'4','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (5,101,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (6,30,3,2,'2','2008-03-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (7,43,1,3,'3','2009-07-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (8,183,2,4,'4','2009-03-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (9,146,3,1,'1','2008-02-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (10,172,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (11,56,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (12,148,3,4,'4','2009-03-06 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (13,180,1,1,'2','2008-06-04 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (14,173,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (15,92,3,4,'1','2008-07-04 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (16,35,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (17,140,2,2,'3','2008-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (18,74,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (19,181,1,2,'1','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (20,23,2,4,'1','2009-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (21,52,3,1,'4','2008-03-25 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (22,20,1,2,'3','2009-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (23,48,2,4,'1','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (24,9,3,3,'1','2008-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (25,99,3,2,'2','2008-04-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (26,106,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (27,40,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (28,161,3,3,'3','2009-12-12 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (29,152,1,4,'4','2009-12-13 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (30,89,2,1,'1','2009-12-14 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (31,86,3,2,'2','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (32,171,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (33,32,2,4,'4','2009-03-07 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (34,145,3,1,'1','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (35,170,1,2,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (36,144,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (37,147,3,4,'4','2009-03-06 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (38,33,1,1,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (39,45,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (40,127,3,4,'1','2009-12-14 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (41,182,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (42,34,2,2,'3','2009-12-15 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (43,179,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (44,96,1,2,'1','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (45,157,2,4,'1','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (46,129,3,1,'4','2009-12-13 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (47,135,1,2,'3','2009-10-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (48,122,2,4,'1','2009-12-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (49,105,3,3,'1','2009-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (50,27,3,2,'2','2009-04-05 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_participant` ENABLE KEYS */; UNLOCK TABLES; @@ -1036,7 +6519,57 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant_payment` WRITE; /*!40000 ALTER TABLE `civicrm_participant_payment` DISABLE KEYS */; -INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES (1,24,45),(2,39,46),(3,18,47),(4,32,48),(5,9,49),(6,8,50),(7,33,51),(8,28,52),(9,27,53),(10,2,54),(11,23,55),(12,42,56),(13,41,57),(14,25,58),(15,21,59),(16,15,60),(17,48,61),(18,12,62),(19,30,63),(20,50,64),(21,11,65),(22,46,66),(23,47,67),(24,17,68),(25,38,69),(26,5,70),(27,4,71),(28,26,72),(29,19,73),(30,22,74),(31,1,75),(32,14,76),(33,3,77),(34,44,78),(35,35,79),(36,10,80),(37,13,81),(38,36,82),(39,40,83),(40,37,84),(41,16,85),(42,34,86),(43,49,87),(44,7,88),(45,29,89),(46,6,90),(47,45,91),(48,20,92),(49,43,93),(50,31,94); +INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES + (1,24,45), + (2,22,46), + (3,20,47), + (4,50,48), + (5,6,49), + (6,33,50), + (7,38,51), + (8,42,52), + (9,16,53), + (10,27,54), + (11,7,55), + (12,39,56), + (13,23,57), + (14,21,58), + (15,11,59), + (16,18,60), + (17,4,61), + (18,31,62), + (19,30,63), + (20,15,64), + (21,44,65), + (22,25,66), + (23,5,67), + (24,49,68), + (25,26,69), + (26,1,70), + (27,48,71), + (28,2,72), + (29,40,73), + (30,46,74), + (31,47,75), + (32,17,76), + (33,36,77), + (34,34,78), + (35,9,79), + (36,37,80), + (37,12,81), + (38,29,82), + (39,45,83), + (40,28,84), + (41,35,85), + (42,32,86), + (43,10,87), + (44,14,88), + (45,43,89), + (46,13,90), + (47,19,91), + (48,41,92), + (49,8,93), + (50,3,94); /*!40000 ALTER TABLE `civicrm_participant_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -1046,7 +6579,23 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant_status_type` WRITE; /*!40000 ALTER TABLE `civicrm_participant_status_type` DISABLE KEYS */; -INSERT INTO `civicrm_participant_status_type` (`id`, `name`, `label`, `class`, `is_reserved`, `is_active`, `is_counted`, `weight`, `visibility_id`) VALUES (1,'Registered','Registered','Positive',1,1,1,1,1),(2,'Attended','Attended','Positive',0,1,1,2,2),(3,'No-show','No-show','Negative',0,1,0,3,2),(4,'Cancelled','Cancelled','Negative',1,1,0,4,2),(5,'Pending from pay later','Pending (pay later)','Pending',1,1,1,5,2),(6,'Pending from incomplete transaction','Pending (incomplete transaction)','Pending',1,1,0,6,2),(7,'On waitlist','On waitlist','Waiting',1,0,0,7,2),(8,'Awaiting approval','Awaiting approval','Waiting',1,0,1,8,2),(9,'Pending from waitlist','Pending from waitlist','Pending',1,0,1,9,2),(10,'Pending from approval','Pending from approval','Pending',1,0,1,10,2),(11,'Rejected','Rejected','Negative',1,0,0,11,2),(12,'Expired','Expired','Negative',1,1,0,12,2),(13,'Pending in cart','Pending in cart','Pending',1,1,0,13,2),(14,'Partially paid','Partially paid','Positive',1,1,1,14,2),(15,'Pending refund','Pending refund','Positive',1,1,1,15,2),(16,'Transferred','Transferred','Negative',1,1,0,16,2); +INSERT INTO `civicrm_participant_status_type` (`id`, `name`, `label`, `class`, `is_reserved`, `is_active`, `is_counted`, `weight`, `visibility_id`) VALUES + (1,'Registered','Registered','Positive',1,1,1,1,1), + (2,'Attended','Attended','Positive',0,1,1,2,2), + (3,'No-show','No-show','Negative',0,1,0,3,2), + (4,'Cancelled','Cancelled','Negative',1,1,0,4,2), + (5,'Pending from pay later','Pending (pay later)','Pending',1,1,1,5,2), + (6,'Pending from incomplete transaction','Pending (incomplete transaction)','Pending',1,1,0,6,2), + (7,'On waitlist','On waitlist','Waiting',1,0,0,7,2), + (8,'Awaiting approval','Awaiting approval','Waiting',1,0,1,8,2), + (9,'Pending from waitlist','Pending from waitlist','Pending',1,0,1,9,2), + (10,'Pending from approval','Pending from approval','Pending',1,0,1,10,2), + (11,'Rejected','Rejected','Negative',1,0,0,11,2), + (12,'Expired','Expired','Negative',1,1,0,12,2), + (13,'Pending in cart','Pending in cart','Pending',1,1,0,13,2), + (14,'Partially paid','Partially paid','Positive',1,1,1,14,2), + (15,'Pending refund','Pending refund','Positive',1,1,1,15,2), + (16,'Transferred','Transferred','Negative',1,1,0,16,2); /*!40000 ALTER TABLE `civicrm_participant_status_type` ENABLE KEYS */; UNLOCK TABLES; @@ -1065,7 +6614,16 @@ UNLOCK TABLES; LOCK TABLES `civicrm_payment_processor_type` WRITE; /*!40000 ALTER TABLE `civicrm_payment_processor_type` DISABLE KEYS */; -INSERT INTO `civicrm_payment_processor_type` (`id`, `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`, `payment_type`, `payment_instrument_id`) VALUES (1,'PayPal_Standard','PayPal - Website Payments Standard',NULL,1,0,'Merchant Account Email',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,1,1),(2,'PayPal','PayPal - Website Payments Pro',NULL,1,0,'User Name','Password','Signature',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,1,1),(3,'PayPal_Express','PayPal - Express',NULL,1,0,'User Name','Password','Signature',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,1,1),(4,'AuthNet','Authorize.Net',NULL,1,0,'API Login','Payment Key','MD5 Hash',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,1,1),(5,'PayJunction','PayJunction',NULL,0,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,1,1),(6,'Dummy','Dummy Payment Processor',NULL,1,1,'User Name',NULL,NULL,NULL,'Payment_Dummy',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,1),(7,'Elavon','Elavon Payment Processor','Elavon / Nova Virtual Merchant',0,0,'SSL Merchant ID ','SSL User ID','SSL PIN',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,1,1),(8,'Realex','Realex Payment',NULL,0,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,1,1),(9,'FirstData','FirstData (aka linkpoint)','FirstData (aka linkpoint)',0,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,1,1); +INSERT INTO `civicrm_payment_processor_type` (`id`, `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`, `payment_type`, `payment_instrument_id`) VALUES + (1,'PayPal_Standard','PayPal - Website Payments Standard',NULL,1,0,'Merchant Account Email',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,1,1), + (2,'PayPal','PayPal - Website Payments Pro',NULL,1,0,'User Name','Password','Signature',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,1,1), + (3,'PayPal_Express','PayPal - Express',NULL,1,0,'User Name','Password','Signature',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,1,1), + (4,'AuthNet','Authorize.Net',NULL,1,0,'API Login','Payment Key','MD5 Hash',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,1,1), + (5,'PayJunction','PayJunction',NULL,0,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,1,1), + (6,'Dummy','Dummy Payment Processor',NULL,1,1,'User Name',NULL,NULL,NULL,'Payment_Dummy',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,1), + (7,'Elavon','Elavon Payment Processor','Elavon / Nova Virtual Merchant',0,0,'SSL Merchant ID ','SSL User ID','SSL PIN',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,1,1), + (8,'Realex','Realex Payment',NULL,0,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,1,1), + (9,'FirstData','FirstData (aka linkpoint)','FirstData (aka linkpoint)',0,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,1,1); /*!40000 ALTER TABLE `civicrm_payment_processor_type` ENABLE KEYS */; UNLOCK TABLES; @@ -1084,7 +6642,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pcp` WRITE; /*!40000 ALTER TABLE `civicrm_pcp` DISABLE KEYS */; -INSERT INTO `civicrm_pcp` (`id`, `contact_id`, `status_id`, `title`, `intro_text`, `page_text`, `donate_link_text`, `page_id`, `page_type`, `pcp_block_id`, `is_thermometer`, `is_honor_roll`, `goal_amount`, `currency`, `is_active`, `is_notify`) VALUES (1,181,2,'My Personal Civi Fundraiser','I\'m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.','<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>','Contribute Now',1,'contribute',1,1,1,5000.00,'USD',1,1); +INSERT INTO `civicrm_pcp` (`id`, `contact_id`, `status_id`, `title`, `intro_text`, `page_text`, `donate_link_text`, `page_id`, `page_type`, `pcp_block_id`, `is_thermometer`, `is_honor_roll`, `goal_amount`, `currency`, `is_active`, `is_notify`) VALUES + (1,85,2,'My Personal Civi Fundraiser','I\'m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.','<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>','Contribute Now',1,'contribute',1,1,1,5000.00,'USD',1,1); /*!40000 ALTER TABLE `civicrm_pcp` ENABLE KEYS */; UNLOCK TABLES; @@ -1094,7 +6653,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pcp_block` WRITE; /*!40000 ALTER TABLE `civicrm_pcp_block` DISABLE KEYS */; -INSERT INTO `civicrm_pcp_block` (`id`, `entity_table`, `entity_id`, `target_entity_type`, `target_entity_id`, `supporter_profile_id`, `owner_notify_id`, `is_approval_needed`, `is_tellfriend_enabled`, `tellfriend_limit`, `link_text`, `is_active`, `notify_email`) VALUES (1,'civicrm_contribution_page',1,'contribute',1,2,1,1,1,5,'Create your own Personal Campaign Page!',1,NULL); +INSERT INTO `civicrm_pcp_block` (`id`, `entity_table`, `entity_id`, `target_entity_type`, `target_entity_id`, `supporter_profile_id`, `owner_notify_id`, `is_approval_needed`, `is_tellfriend_enabled`, `tellfriend_limit`, `link_text`, `is_active`, `notify_email`) VALUES + (1,'civicrm_contribution_page',1,'contribute',1,2,1,1,1,5,'Create your own Personal Campaign Page!',1,NULL); /*!40000 ALTER TABLE `civicrm_pcp_block` ENABLE KEYS */; UNLOCK TABLES; @@ -1104,7 +6664,189 @@ UNLOCK TABLES; LOCK TABLES `civicrm_phone` WRITE; /*!40000 ALTER TABLE `civicrm_phone` DISABLE KEYS */; -INSERT INTO `civicrm_phone` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `mobile_provider_id`, `phone`, `phone_ext`, `phone_numeric`, `phone_type_id`) VALUES (1,93,1,1,0,NULL,'358-6208',NULL,'3586208',2),(2,93,1,0,0,NULL,'(765) 605-6826',NULL,'7656056826',1),(3,24,1,1,0,NULL,'(880) 543-6881',NULL,'8805436881',1),(4,181,1,1,0,NULL,'(887) 430-6974',NULL,'8874306974',2),(5,181,1,0,0,NULL,'(852) 358-4899',NULL,'8523584899',1),(6,102,1,1,0,NULL,'305-7231',NULL,'3057231',2),(7,102,1,0,0,NULL,'230-7757',NULL,'2307757',2),(8,176,1,1,0,NULL,'(289) 599-1387',NULL,'2895991387',1),(9,176,1,0,0,NULL,'478-6253',NULL,'4786253',1),(10,14,1,1,0,NULL,'(685) 865-1073',NULL,'6858651073',1),(11,30,1,1,0,NULL,'544-9848',NULL,'5449848',1),(12,30,1,0,0,NULL,'656-7546',NULL,'6567546',2),(13,49,1,1,0,NULL,'(208) 700-2937',NULL,'2087002937',1),(14,131,1,1,0,NULL,'439-4095',NULL,'4394095',2),(15,90,1,1,0,NULL,'725-5517',NULL,'7255517',2),(16,90,1,0,0,NULL,'(870) 440-8729',NULL,'8704408729',1),(17,106,1,1,0,NULL,'(852) 357-8685',NULL,'8523578685',2),(18,185,1,1,0,NULL,'697-6328',NULL,'6976328',2),(19,194,1,1,0,NULL,'415-1562',NULL,'4151562',1),(20,193,1,1,0,NULL,'488-8009',NULL,'4888009',2),(21,201,1,1,0,NULL,'446-3519',NULL,'4463519',1),(22,81,1,1,0,NULL,'(251) 724-5109',NULL,'2517245109',2),(23,81,1,0,0,NULL,'661-1250',NULL,'6611250',2),(24,88,1,1,0,NULL,'(782) 606-8640',NULL,'7826068640',1),(25,91,1,1,0,NULL,'(214) 572-1525',NULL,'2145721525',2),(26,167,1,1,0,NULL,'288-5608',NULL,'2885608',2),(27,95,1,1,0,NULL,'(704) 877-8768',NULL,'7048778768',1),(28,152,1,1,0,NULL,'695-5292',NULL,'6955292',2),(29,196,1,1,0,NULL,'(411) 836-6219',NULL,'4118366219',1),(30,196,1,0,0,NULL,'(584) 454-2232',NULL,'5844542232',1),(31,6,1,1,0,NULL,'341-1663',NULL,'3411663',1),(32,6,1,0,0,NULL,'865-8399',NULL,'8658399',1),(33,99,1,1,0,NULL,'306-1502',NULL,'3061502',1),(34,139,1,1,0,NULL,'244-8853',NULL,'2448853',1),(35,82,1,1,0,NULL,'(886) 716-7752',NULL,'8867167752',1),(36,82,1,0,0,NULL,'(849) 843-3958',NULL,'8498433958',2),(37,18,1,1,0,NULL,'499-2218',NULL,'4992218',2),(38,18,1,0,0,NULL,'(569) 730-3963',NULL,'5697303963',2),(39,46,1,1,0,NULL,'576-3992',NULL,'5763992',1),(40,46,1,0,0,NULL,'508-2363',NULL,'5082363',2),(41,110,1,1,0,NULL,'(576) 600-5710',NULL,'5766005710',1),(42,110,1,0,0,NULL,'747-4267',NULL,'7474267',2),(43,188,1,1,0,NULL,'650-9514',NULL,'6509514',2),(44,76,1,1,0,NULL,'502-4200',NULL,'5024200',1),(45,76,1,0,0,NULL,'(859) 456-4279',NULL,'8594564279',2),(46,68,1,1,0,NULL,'(642) 458-3103',NULL,'6424583103',1),(47,68,1,0,0,NULL,'(418) 652-8912',NULL,'4186528912',1),(48,100,1,1,0,NULL,'(269) 509-4014',NULL,'2695094014',2),(49,100,1,0,0,NULL,'821-3345',NULL,'8213345',2),(50,52,1,1,0,NULL,'(647) 623-3358',NULL,'6476233358',2),(51,52,1,0,0,NULL,'(738) 649-3123',NULL,'7386493123',1),(52,171,1,1,0,NULL,'(302) 269-2837',NULL,'3022692837',2),(53,104,1,1,0,NULL,'771-4118',NULL,'7714118',1),(54,104,1,0,0,NULL,'804-3066',NULL,'8043066',1),(55,195,1,1,0,NULL,'(493) 255-8649',NULL,'4932558649',2),(56,116,1,1,0,NULL,'784-3554',NULL,'7843554',2),(57,74,1,1,0,NULL,'(434) 571-1394',NULL,'4345711394',1),(58,75,1,1,0,NULL,'(513) 843-1104',NULL,'5138431104',2),(59,75,1,0,0,NULL,'506-5002',NULL,'5065002',1),(60,164,1,1,0,NULL,'389-1935',NULL,'3891935',2),(61,187,1,1,0,NULL,'(873) 706-5360',NULL,'8737065360',2),(62,187,1,0,0,NULL,'(830) 409-9225',NULL,'8304099225',1),(63,105,1,1,0,NULL,'(257) 422-1954',NULL,'2574221954',2),(64,12,1,1,0,NULL,'867-3585',NULL,'8673585',2),(65,39,1,1,0,NULL,'(333) 639-7530',NULL,'3336397530',1),(66,39,1,0,0,NULL,'646-4009',NULL,'6464009',1),(67,16,1,1,0,NULL,'(671) 867-8870',NULL,'6718678870',2),(68,16,1,0,0,NULL,'(485) 389-2428',NULL,'4853892428',2),(69,172,1,1,0,NULL,'685-6748',NULL,'6856748',2),(70,172,1,0,0,NULL,'(491) 715-5500',NULL,'4917155500',1),(71,59,1,1,0,NULL,'808-1569',NULL,'8081569',2),(72,92,1,1,0,NULL,'(329) 897-5192',NULL,'3298975192',2),(73,119,1,1,0,NULL,'(287) 483-6087',NULL,'2874836087',2),(74,119,1,0,0,NULL,'(687) 209-3141',NULL,'6872093141',1),(75,78,1,1,0,NULL,'382-8422',NULL,'3828422',2),(76,78,1,0,0,NULL,'(486) 889-2938',NULL,'4868892938',2),(77,154,1,1,0,NULL,'(500) 466-9711',NULL,'5004669711',1),(78,154,1,0,0,NULL,'830-5614',NULL,'8305614',2),(79,166,1,1,0,NULL,'896-8512',NULL,'8968512',1),(80,146,1,1,0,NULL,'(625) 614-1199',NULL,'6256141199',1),(81,156,1,1,0,NULL,'(794) 855-5807',NULL,'7948555807',2),(82,198,1,1,0,NULL,'754-5887',NULL,'7545887',2),(83,5,1,1,0,NULL,'832-1604',NULL,'8321604',1),(84,5,1,0,0,NULL,'391-6421',NULL,'3916421',2),(85,145,1,1,0,NULL,'711-6287',NULL,'7116287',1),(86,145,1,0,0,NULL,'485-2528',NULL,'4852528',2),(87,136,1,1,0,NULL,'(516) 324-9627',NULL,'5163249627',2),(88,114,1,1,0,NULL,'558-2544',NULL,'5582544',2),(89,137,1,1,0,NULL,'(691) 322-1526',NULL,'6913221526',2),(90,20,1,1,0,NULL,'456-6810',NULL,'4566810',1),(91,58,1,1,0,NULL,'(805) 613-9101',NULL,'8056139101',1),(92,58,1,0,0,NULL,'(771) 203-5702',NULL,'7712035702',1),(93,3,1,1,0,NULL,'(637) 241-9220',NULL,'6372419220',1),(94,70,1,1,0,NULL,'669-6769',NULL,'6696769',2),(95,155,1,1,0,NULL,'556-8222',NULL,'5568222',1),(96,155,1,0,0,NULL,'(324) 546-2203',NULL,'3245462203',2),(97,22,1,1,0,NULL,'382-8180',NULL,'3828180',1),(98,22,1,0,0,NULL,'(516) 389-5252',NULL,'5163895252',2),(99,124,1,1,0,NULL,'(287) 415-3558',NULL,'2874153558',2),(100,56,1,1,0,NULL,'(616) 497-5257',NULL,'6164975257',2),(101,56,1,0,0,NULL,'(605) 475-2033',NULL,'6054752033',1),(102,170,1,1,0,NULL,'(581) 402-4181',NULL,'5814024181',2),(103,170,1,0,0,NULL,'304-3935',NULL,'3043935',1),(104,71,1,1,0,NULL,'(298) 674-7263',NULL,'2986747263',2),(105,71,1,0,0,NULL,'(665) 335-1453',NULL,'6653351453',1),(106,120,1,1,0,NULL,'(313) 261-2088',NULL,'3132612088',2),(107,120,1,0,0,NULL,'222-2011',NULL,'2222011',2),(108,40,1,1,0,NULL,'384-5450',NULL,'3845450',2),(109,135,1,1,0,NULL,'(804) 404-4520',NULL,'8044044520',2),(110,135,1,0,0,NULL,'882-6196',NULL,'8826196',2),(111,140,1,1,0,NULL,'425-8382',NULL,'4258382',2),(112,140,1,0,0,NULL,'(470) 781-5334',NULL,'4707815334',2),(113,86,1,1,0,NULL,'(286) 781-8969',NULL,'2867818969',1),(114,86,1,0,0,NULL,'(521) 499-3893',NULL,'5214993893',1),(115,125,1,1,0,NULL,'733-5867',NULL,'7335867',1),(116,35,1,1,0,NULL,'(464) 872-9910',NULL,'4648729910',2),(117,162,1,1,0,NULL,'(863) 842-6401',NULL,'8638426401',1),(118,177,1,1,0,NULL,'468-9820',NULL,'4689820',2),(119,177,1,0,0,NULL,'(216) 730-1723',NULL,'2167301723',2),(120,129,1,1,0,NULL,'(882) 754-3388',NULL,'8827543388',1),(121,129,1,0,0,NULL,'672-6531',NULL,'6726531',1),(122,118,1,1,0,NULL,'536-5799',NULL,'5365799',2),(123,17,1,1,0,NULL,'241-7146',NULL,'2417146',1),(124,17,1,0,0,NULL,'358-7613',NULL,'3587613',1),(125,159,1,1,0,NULL,'213-1522',NULL,'2131522',2),(126,151,1,1,0,NULL,'308-7152',NULL,'3087152',2),(127,168,1,1,0,NULL,'(378) 850-5316',NULL,'3788505316',1),(128,25,1,1,0,NULL,'(347) 496-6415',NULL,'3474966415',2),(129,25,1,0,0,NULL,'(785) 302-8645',NULL,'7853028645',2),(130,191,1,1,0,NULL,'(842) 543-6448',NULL,'8425436448',1),(131,138,1,1,0,NULL,'(725) 607-3947',NULL,'7256073947',1),(132,138,1,0,0,NULL,'319-1089',NULL,'3191089',2),(133,127,1,1,0,NULL,'(307) 639-3556',NULL,'3076393556',2),(134,72,1,1,0,NULL,'711-5918',NULL,'7115918',2),(135,200,1,1,0,NULL,'(797) 354-1833',NULL,'7973541833',2),(136,112,1,1,0,NULL,'537-1283',NULL,'5371283',2),(137,190,1,1,0,NULL,'848-3579',NULL,'8483579',2),(138,190,1,0,0,NULL,'317-6812',NULL,'3176812',1),(139,85,1,1,0,NULL,'504-1665',NULL,'5041665',1),(140,85,1,0,0,NULL,'379-8790',NULL,'3798790',1),(141,38,1,1,0,NULL,'885-5351',NULL,'8855351',2),(142,77,1,1,0,NULL,'456-6148',NULL,'4566148',2),(143,13,1,1,0,NULL,'706-2728',NULL,'7062728',2),(144,33,1,1,0,NULL,'359-2905',NULL,'3592905',2),(145,121,1,1,0,NULL,'561-7803',NULL,'5617803',1),(146,103,1,1,0,NULL,'(761) 837-3484',NULL,'7618373484',1),(147,103,1,0,0,NULL,'(570) 849-8638',NULL,'5708498638',2),(148,175,1,1,0,NULL,'669-5664',NULL,'6695664',2),(149,133,1,1,0,NULL,'(587) 239-6783',NULL,'5872396783',2),(150,133,1,0,0,NULL,'(553) 842-8072',NULL,'5538428072',1),(151,15,1,1,0,NULL,'671-3709',NULL,'6713709',1),(152,15,1,0,0,NULL,'500-2604',NULL,'5002604',1),(153,37,1,1,0,NULL,'(376) 479-4937',NULL,'3764794937',1),(154,51,1,1,0,NULL,'(491) 400-9123',NULL,'4914009123',1),(155,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(156,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(157,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); +INSERT INTO `civicrm_phone` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `mobile_provider_id`, `phone`, `phone_ext`, `phone_numeric`, `phone_type_id`) VALUES + (1,31,1,1,0,NULL,'(344) 892-1917',NULL,'3448921917',2), + (2,138,1,1,0,NULL,'(682) 706-8806',NULL,'6827068806',1), + (3,21,1,1,0,NULL,'(485) 811-7996',NULL,'4858117996',2), + (4,128,1,1,0,NULL,'(643) 766-7085',NULL,'6437667085',2), + (5,177,1,1,0,NULL,'599-8579',NULL,'5998579',2), + (6,46,1,1,0,NULL,'(812) 831-2102',NULL,'8128312102',1), + (7,53,1,1,0,NULL,'(215) 416-2334',NULL,'2154162334',1), + (8,89,1,1,0,NULL,'835-5231',NULL,'8355231',1), + (9,89,1,0,0,NULL,'(726) 629-9649',NULL,'7266299649',1), + (10,14,1,1,0,NULL,'(697) 769-7741',NULL,'6977697741',1), + (11,191,1,1,0,NULL,'(459) 453-9486',NULL,'4594539486',1), + (12,50,1,1,0,NULL,'(762) 212-7611',NULL,'7622127611',2), + (13,50,1,0,0,NULL,'(203) 524-5787',NULL,'2035245787',1), + (14,5,1,1,0,NULL,'(847) 510-9163',NULL,'8475109163',1), + (15,173,1,1,0,NULL,'336-8988',NULL,'3368988',2), + (16,173,1,0,0,NULL,'438-6336',NULL,'4386336',1), + (17,190,1,1,0,NULL,'469-8484',NULL,'4698484',1), + (18,190,1,0,0,NULL,'(564) 641-8915',NULL,'5646418915',1), + (19,178,1,1,0,NULL,'424-5271',NULL,'4245271',1), + (20,16,1,1,0,NULL,'754-4779',NULL,'7544779',2), + (21,16,1,0,0,NULL,'628-9302',NULL,'6289302',1), + (22,199,1,1,0,NULL,'347-4207',NULL,'3474207',2), + (23,199,1,0,0,NULL,'(841) 863-2809',NULL,'8418632809',1), + (24,25,1,1,0,NULL,'(878) 592-3342',NULL,'8785923342',1), + (25,37,1,1,0,NULL,'869-7120',NULL,'8697120',2), + (26,37,1,0,0,NULL,'303-7079',NULL,'3037079',2), + (27,201,1,1,0,NULL,'(870) 427-4113',NULL,'8704274113',1), + (28,201,1,0,0,NULL,'804-7329',NULL,'8047329',1), + (29,11,1,1,0,NULL,'(205) 858-3988',NULL,'2058583988',1), + (30,20,1,1,0,NULL,'(700) 274-6443',NULL,'7002746443',1), + (31,117,1,1,0,NULL,'571-6764',NULL,'5716764',2), + (32,117,1,0,0,NULL,'365-6946',NULL,'3656946',2), + (33,98,1,1,0,NULL,'(437) 789-5250',NULL,'4377895250',2), + (34,98,1,0,0,NULL,'(763) 896-4932',NULL,'7638964932',2), + (35,57,1,1,0,NULL,'799-6516',NULL,'7996516',1), + (36,57,1,0,0,NULL,'863-4864',NULL,'8634864',1), + (37,125,1,1,0,NULL,'(362) 873-2797',NULL,'3628732797',2), + (38,125,1,0,0,NULL,'564-3343',NULL,'5643343',2), + (39,194,1,1,0,NULL,'788-7274',NULL,'7887274',1), + (40,194,1,0,0,NULL,'470-1581',NULL,'4701581',1), + (41,44,1,1,0,NULL,'(352) 359-4477',NULL,'3523594477',2), + (42,44,1,0,0,NULL,'556-7875',NULL,'5567875',1), + (43,78,1,1,0,NULL,'258-2719',NULL,'2582719',1), + (44,78,1,0,0,NULL,'(608) 545-3334',NULL,'6085453334',1), + (45,90,1,1,0,NULL,'(525) 667-7879',NULL,'5256677879',2), + (46,90,1,0,0,NULL,'(345) 512-7192',NULL,'3455127192',1), + (47,83,1,1,0,NULL,'(316) 565-5447',NULL,'3165655447',2), + (48,18,1,1,0,NULL,'(598) 791-1294',NULL,'5987911294',2), + (49,18,1,0,0,NULL,'694-4995',NULL,'6944995',2), + (50,154,1,1,0,NULL,'307-2755',NULL,'3072755',2), + (51,154,1,0,0,NULL,'646-6141',NULL,'6466141',1), + (52,160,1,1,0,NULL,'(848) 293-7058',NULL,'8482937058',2), + (53,107,1,1,0,NULL,'244-6164',NULL,'2446164',2), + (54,144,1,1,0,NULL,'864-8933',NULL,'8648933',1), + (55,33,1,1,0,NULL,'(447) 302-9909',NULL,'4473029909',2), + (56,185,1,1,0,NULL,'(508) 288-2611',NULL,'5082882611',1), + (57,185,1,0,0,NULL,'328-5896',NULL,'3285896',2), + (58,59,1,1,0,NULL,'(496) 482-3320',NULL,'4964823320',1), + (59,48,1,1,0,NULL,'715-3391',NULL,'7153391',1), + (60,81,1,1,0,NULL,'(645) 378-1434',NULL,'6453781434',2), + (61,2,1,1,0,NULL,'(766) 893-3655',NULL,'7668933655',1), + (62,26,1,1,0,NULL,'849-1312',NULL,'8491312',2), + (63,110,1,1,0,NULL,'338-6358',NULL,'3386358',2), + (64,71,1,1,0,NULL,'230-3320',NULL,'2303320',2), + (65,163,1,1,0,NULL,'232-9526',NULL,'2329526',1), + (66,196,1,1,0,NULL,'(444) 876-5578',NULL,'4448765578',1), + (67,10,1,1,0,NULL,'310-1356',NULL,'3101356',1), + (68,115,1,1,0,NULL,'585-5380',NULL,'5855380',1), + (69,38,1,1,0,NULL,'(680) 258-5315',NULL,'6802585315',2), + (70,38,1,0,0,NULL,'366-7880',NULL,'3667880',1), + (71,103,1,1,0,NULL,'(432) 777-2020',NULL,'4327772020',2), + (72,103,1,0,0,NULL,'(320) 610-2259',NULL,'3206102259',2), + (73,184,1,1,0,NULL,'796-2427',NULL,'7962427',1), + (74,169,1,1,0,NULL,'(329) 261-6411',NULL,'3292616411',1), + (75,169,1,0,0,NULL,'513-4286',NULL,'5134286',1), + (76,127,1,1,0,NULL,'(875) 414-8101',NULL,'8754148101',1), + (77,96,1,1,0,NULL,'633-1715',NULL,'6331715',1), + (78,96,1,0,0,NULL,'(399) 438-7056',NULL,'3994387056',1), + (79,176,1,1,0,NULL,'720-2299',NULL,'7202299',1), + (80,176,1,0,0,NULL,'704-1758',NULL,'7041758',1), + (81,49,1,1,0,NULL,'(497) 609-6800',NULL,'4976096800',2), + (82,49,1,0,0,NULL,'(514) 430-4120',NULL,'5144304120',1), + (83,162,1,1,0,NULL,'659-4819',NULL,'6594819',1), + (84,58,1,1,0,NULL,'225-9008',NULL,'2259008',1), + (85,58,1,0,0,NULL,'(776) 449-9460',NULL,'7764499460',2), + (86,35,1,1,0,NULL,'(743) 767-4315',NULL,'7437674315',1), + (87,92,1,1,0,NULL,'(741) 243-3995',NULL,'7412433995',2), + (88,130,1,1,0,NULL,'475-1931',NULL,'4751931',1), + (89,130,1,0,0,NULL,'688-8166',NULL,'6888166',2), + (90,55,1,1,0,NULL,'459-7352',NULL,'4597352',2), + (91,123,1,1,0,NULL,'(510) 318-2458',NULL,'5103182458',2), + (92,40,1,1,0,NULL,'(427) 671-2434',NULL,'4276712434',1), + (93,40,1,0,0,NULL,'326-2967',NULL,'3262967',2), + (94,118,1,1,0,NULL,'364-9186',NULL,'3649186',1), + (95,118,1,0,0,NULL,'(563) 557-6227',NULL,'5635576227',1), + (96,101,1,1,0,NULL,'(294) 734-6557',NULL,'2947346557',1), + (97,101,1,0,0,NULL,'(751) 829-6565',NULL,'7518296565',1), + (98,142,1,1,0,NULL,'579-3725',NULL,'5793725',2), + (99,142,1,0,0,NULL,'891-6076',NULL,'8916076',1), + (100,135,1,1,0,NULL,'(380) 829-2039',NULL,'3808292039',2), + (101,135,1,0,0,NULL,'(827) 871-9975',NULL,'8278719975',1), + (102,111,1,1,0,NULL,'(827) 306-7565',NULL,'8273067565',2), + (103,111,1,0,0,NULL,'315-2929',NULL,'3152929',2), + (104,116,1,1,0,NULL,'(529) 899-6295',NULL,'5298996295',2), + (105,116,1,0,0,NULL,'699-1209',NULL,'6991209',1), + (106,95,1,1,0,NULL,'584-7297',NULL,'5847297',1), + (107,195,1,1,0,NULL,'262-8997',NULL,'2628997',2), + (108,183,1,1,0,NULL,'(618) 877-6176',NULL,'6188776176',1), + (109,183,1,0,0,NULL,'(214) 431-9125',NULL,'2144319125',1), + (110,24,1,1,0,NULL,'773-4555',NULL,'7734555',2), + (111,24,1,0,0,NULL,'(662) 788-3894',NULL,'6627883894',1), + (112,124,1,1,0,NULL,'506-4442',NULL,'5064442',2), + (113,124,1,0,0,NULL,'549-1748',NULL,'5491748',1), + (114,47,1,1,0,NULL,'(356) 385-3554',NULL,'3563853554',1), + (115,99,1,1,0,NULL,'268-7787',NULL,'2687787',1), + (116,99,1,0,0,NULL,'(436) 647-1487',NULL,'4366471487',2), + (117,77,1,1,0,NULL,'298-2145',NULL,'2982145',2), + (118,77,1,0,0,NULL,'(278) 375-7730',NULL,'2783757730',1), + (119,175,1,1,0,NULL,'(591) 897-6798',NULL,'5918976798',2), + (120,175,1,0,0,NULL,'307-4058',NULL,'3074058',2), + (121,94,1,1,0,NULL,'(683) 624-5304',NULL,'6836245304',2), + (122,94,1,0,0,NULL,'587-5948',NULL,'5875948',1), + (123,80,1,1,0,NULL,'(734) 513-9029',NULL,'7345139029',2), + (124,187,1,1,0,NULL,'(566) 517-9803',NULL,'5665179803',2), + (125,145,1,1,0,NULL,'(791) 539-9648',NULL,'7915399648',2), + (126,145,1,0,0,NULL,'771-5922',NULL,'7715922',2), + (127,105,1,1,0,NULL,'(233) 272-5370',NULL,'2332725370',2), + (128,105,1,0,0,NULL,'(626) 635-4821',NULL,'6266354821',1), + (129,22,1,1,0,NULL,'(618) 602-7597',NULL,'6186027597',2), + (130,22,1,0,0,NULL,'(614) 853-1145',NULL,'6148531145',2), + (131,43,1,1,0,NULL,'827-2475',NULL,'8272475',2), + (132,88,1,1,0,NULL,'(358) 811-8480',NULL,'3588118480',1), + (133,88,1,0,0,NULL,'(203) 863-4661',NULL,'2038634661',1), + (134,150,1,1,0,NULL,'384-7938',NULL,'3847938',1), + (135,150,1,0,0,NULL,'774-7681',NULL,'7747681',2), + (136,106,1,1,0,NULL,'595-3752',NULL,'5953752',1), + (137,136,1,1,0,NULL,'(653) 376-5753',NULL,'6533765753',2), + (138,56,1,1,0,NULL,'878-9808',NULL,'8789808',1), + (139,56,1,0,0,NULL,'733-7854',NULL,'7337854',2), + (140,200,1,1,0,NULL,'(377) 874-3661',NULL,'3778743661',2), + (141,114,1,1,0,NULL,'223-6882',NULL,'2236882',2), + (142,114,1,0,0,NULL,'(207) 321-9561',NULL,'2073219561',1), + (143,152,1,1,0,NULL,'828-4424',NULL,'8284424',2), + (144,152,1,0,0,NULL,'(389) 352-5043',NULL,'3893525043',1), + (145,112,1,1,0,NULL,'(807) 539-3427',NULL,'8075393427',1), + (146,112,1,0,0,NULL,'429-6464',NULL,'4296464',2), + (147,197,1,1,0,NULL,'(540) 737-6943',NULL,'5407376943',1), + (148,170,1,1,0,NULL,'(308) 547-1960',NULL,'3085471960',1), + (149,170,1,0,0,NULL,'(595) 560-6614',NULL,'5955606614',2), + (150,166,1,1,0,NULL,'496-6120',NULL,'4966120',2), + (151,166,1,0,0,NULL,'(592) 567-9419',NULL,'5925679419',1), + (152,76,1,1,0,NULL,'638-6411',NULL,'6386411',1), + (153,15,1,1,0,NULL,'758-1977',NULL,'7581977',1), + (154,15,1,0,0,NULL,'(362) 605-4238',NULL,'3626054238',2), + (155,7,1,1,0,NULL,'(612) 700-1230',NULL,'6127001230',1), + (156,158,1,1,0,NULL,'(508) 385-2997',NULL,'5083852997',1), + (157,158,1,0,0,NULL,'542-7638',NULL,'5427638',2), + (158,134,1,1,0,NULL,'862-6796',NULL,'8626796',1), + (159,151,1,1,0,NULL,'373-8943',NULL,'3738943',2), + (160,129,1,1,0,NULL,'217-2789',NULL,'2172789',1), + (161,129,1,0,0,NULL,'(432) 685-7857',NULL,'4326857857',2), + (162,54,1,1,0,NULL,'870-4137',NULL,'8704137',1), + (163,198,1,1,0,NULL,'(850) 522-9552',NULL,'8505229552',2), + (164,153,1,1,0,NULL,'(509) 428-5608',NULL,'5094285608',2), + (165,153,1,0,0,NULL,'(297) 592-3262',NULL,'2975923262',2), + (166,52,1,1,0,NULL,'(316) 430-2614',NULL,'3164302614',2), + (167,52,1,0,0,NULL,'282-8405',NULL,'2828405',2), + (168,120,1,1,0,NULL,'(532) 631-4781',NULL,'5326314781',2), + (169,120,1,0,0,NULL,'521-9821',NULL,'5219821',2), + (170,139,1,1,0,NULL,'(248) 719-3941',NULL,'2487193941',2), + (171,139,1,0,0,NULL,'405-4153',NULL,'4054153',1), + (172,86,1,1,0,NULL,'(497) 354-1043',NULL,'4973541043',2), + (173,131,1,1,0,NULL,'(405) 884-1135',NULL,'4058841135',2), + (174,131,1,0,0,NULL,'303-1932',NULL,'3031932',1), + (175,66,1,1,0,NULL,'853-2169',NULL,'8532169',1), + (176,66,1,0,0,NULL,'(675) 342-2869',NULL,'6753422869',1), + (177,121,1,1,0,NULL,'(863) 204-8182',NULL,'8632048182',1), + (178,121,1,0,0,NULL,'(443) 355-1000',NULL,'4433551000',2), + (179,172,1,1,0,NULL,'406-6084',NULL,'4066084',1), + (180,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), + (181,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), + (182,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */; UNLOCK TABLES; @@ -1114,7 +6856,10 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pledge` WRITE; /*!40000 ALTER TABLE `civicrm_pledge` DISABLE KEYS */; -INSERT INTO `civicrm_pledge` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `amount`, `original_installment_amount`, `currency`, `frequency_unit`, `frequency_interval`, `frequency_day`, `installments`, `start_date`, `create_date`, `acknowledge_date`, `modified_date`, `cancel_date`, `end_date`, `max_reminders`, `initial_reminder_day`, `additional_reminder_day`, `status_id`, `is_test`, `campaign_id`) VALUES (1,71,1,1,500.00,500.00,'USD','month',1,1,1,'2009-07-01 00:00:00','2009-06-26 00:00:00',NULL,NULL,NULL,'2009-07-01 00:00:00',1,5,5,1,0,NULL),(2,43,1,1,800.00,200.00,'USD','month',3,1,4,'2009-07-01 00:00:00','2009-06-23 00:00:00','2009-06-23 00:00:00',NULL,NULL,'2009-04-01 10:11:40',1,5,5,5,0,NULL),(3,32,1,1,600.00,200.00,'USD','month',1,1,3,'2009-10-01 00:00:00','2009-09-14 00:00:00','2009-09-14 00:00:00',NULL,NULL,'2009-12-01 00:00:00',1,5,5,5,0,NULL); +INSERT INTO `civicrm_pledge` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `amount`, `original_installment_amount`, `currency`, `frequency_unit`, `frequency_interval`, `frequency_day`, `installments`, `start_date`, `create_date`, `acknowledge_date`, `modified_date`, `cancel_date`, `end_date`, `max_reminders`, `initial_reminder_day`, `additional_reminder_day`, `status_id`, `is_test`, `campaign_id`) VALUES + (1,71,1,1,500.00,500.00,'USD','month',1,1,1,'2009-07-01 00:00:00','2009-06-26 00:00:00',NULL,NULL,NULL,'2009-07-01 00:00:00',1,5,5,1,0,NULL), + (2,43,1,1,800.00,200.00,'USD','month',3,1,4,'2009-07-01 00:00:00','2009-06-23 00:00:00','2009-06-23 00:00:00',NULL,NULL,'2009-04-01 10:11:40',1,5,5,5,0,NULL), + (3,32,1,1,600.00,200.00,'USD','month',1,1,3,'2009-10-01 00:00:00','2009-09-14 00:00:00','2009-09-14 00:00:00',NULL,NULL,'2009-12-01 00:00:00',1,5,5,5,0,NULL); /*!40000 ALTER TABLE `civicrm_pledge` ENABLE KEYS */; UNLOCK TABLES; @@ -1124,7 +6869,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pledge_block` WRITE; /*!40000 ALTER TABLE `civicrm_pledge_block` DISABLE KEYS */; -INSERT INTO `civicrm_pledge_block` (`id`, `entity_table`, `entity_id`, `pledge_frequency_unit`, `is_pledge_interval`, `max_reminders`, `initial_reminder_day`, `additional_reminder_day`, `pledge_start_date`, `is_pledge_start_date_visible`, `is_pledge_start_date_editable`) VALUES (1,'civicrm_contribution_page',3,'weekmonthyear',1,1,5,5,NULL,0,0),(2,'civicrm_contribution_page',1,'weekmonthyear',0,2,5,5,NULL,0,0); +INSERT INTO `civicrm_pledge_block` (`id`, `entity_table`, `entity_id`, `pledge_frequency_unit`, `is_pledge_interval`, `max_reminders`, `initial_reminder_day`, `additional_reminder_day`, `pledge_start_date`, `is_pledge_start_date_visible`, `is_pledge_start_date_editable`) VALUES + (1,'civicrm_contribution_page',3,'weekmonthyear',1,1,5,5,NULL,0,0), + (2,'civicrm_contribution_page',1,'weekmonthyear',0,2,5,5,NULL,0,0); /*!40000 ALTER TABLE `civicrm_pledge_block` ENABLE KEYS */; UNLOCK TABLES; @@ -1134,7 +6881,15 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pledge_payment` WRITE; /*!40000 ALTER TABLE `civicrm_pledge_payment` DISABLE KEYS */; -INSERT INTO `civicrm_pledge_payment` (`id`, `pledge_id`, `contribution_id`, `scheduled_amount`, `actual_amount`, `currency`, `scheduled_date`, `reminder_date`, `reminder_count`, `status_id`) VALUES (1,1,10,500.00,500.00,'USD','2009-07-01 00:00:00',NULL,0,1),(2,2,11,200.00,200.00,'USD','2009-07-01 00:00:00',NULL,0,1),(3,2,NULL,200.00,NULL,'USD','2009-10-01 00:00:00',NULL,0,2),(4,2,NULL,200.00,NULL,'USD','2009-01-01 00:00:00',NULL,0,2),(5,2,NULL,200.00,NULL,'USD','2009-04-01 00:00:00',NULL,0,2),(6,3,12,200.00,200.00,'USD','2009-10-01 00:00:00',NULL,0,1),(7,3,13,200.00,200.00,'USD','2009-11-01 00:00:00','2009-10-28 00:00:00',1,1),(8,3,NULL,200.00,NULL,'USD','2009-12-01 00:00:00',NULL,0,2); +INSERT INTO `civicrm_pledge_payment` (`id`, `pledge_id`, `contribution_id`, `scheduled_amount`, `actual_amount`, `currency`, `scheduled_date`, `reminder_date`, `reminder_count`, `status_id`) VALUES + (1,1,10,500.00,500.00,'USD','2009-07-01 00:00:00',NULL,0,1), + (2,2,11,200.00,200.00,'USD','2009-07-01 00:00:00',NULL,0,1), + (3,2,NULL,200.00,NULL,'USD','2009-10-01 00:00:00',NULL,0,2), + (4,2,NULL,200.00,NULL,'USD','2009-01-01 00:00:00',NULL,0,2), + (5,2,NULL,200.00,NULL,'USD','2009-04-01 00:00:00',NULL,0,2), + (6,3,12,200.00,200.00,'USD','2009-10-01 00:00:00',NULL,0,1), + (7,3,13,200.00,200.00,'USD','2009-11-01 00:00:00','2009-10-28 00:00:00',1,1), + (8,3,NULL,200.00,NULL,'USD','2009-12-01 00:00:00',NULL,0,2); /*!40000 ALTER TABLE `civicrm_pledge_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -1144,7 +6899,14 @@ UNLOCK TABLES; LOCK TABLES `civicrm_preferences_date` WRITE; /*!40000 ALTER TABLE `civicrm_preferences_date` DISABLE KEYS */; -INSERT INTO `civicrm_preferences_date` (`id`, `name`, `description`, `start`, `end`, `date_format`, `time_format`) VALUES (1,'activityDate','Date for activities including contributions: receive, receipt, cancel. membership: join, start, renew. case: start, end.',20,10,'',''),(2,'activityDateTime','Date and time for activity: scheduled. participant: registered.',20,10,'','1'),(3,'birth','Birth and deceased dates. Only year, month and day fields are supported.',100,0,'',''),(4,'creditCard','Month and year only for credit card expiration.',0,10,'M Y',''),(5,'custom','Uses date range passed in by form field. Can pass in a posix date part parameter. Start and end offsets defined here are ignored.',20,20,'',''),(6,'mailing','Date and time. Used for scheduling mailings.',0,1,'',''),(7,'searchDate','Used in search forms and for relationships.',20,20,'',''); +INSERT INTO `civicrm_preferences_date` (`id`, `name`, `description`, `start`, `end`, `date_format`, `time_format`) VALUES + (1,'activityDate','Date for activities including contributions: receive, receipt, cancel. membership: join, start, renew. case: start, end.',20,10,'',''), + (2,'activityDateTime','Date and time for activity: scheduled. participant: registered.',20,10,'','1'), + (3,'birth','Birth and deceased dates. Only year, month and day fields are supported.',100,0,'',''), + (4,'creditCard','Month and year only for credit card expiration.',0,10,'M Y',''), + (5,'custom','Uses date range passed in by form field. Can pass in a posix date part parameter. Start and end offsets defined here are ignored.',20,20,'',''), + (6,'mailing','Date and time. Used for scheduling mailings.',0,1,'',''), + (7,'searchDate','Used in search forms and for relationships.',20,20,'',''); /*!40000 ALTER TABLE `civicrm_preferences_date` ENABLE KEYS */; UNLOCK TABLES; @@ -1154,7 +6916,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_premiums` WRITE; /*!40000 ALTER TABLE `civicrm_premiums` DISABLE KEYS */; -INSERT INTO `civicrm_premiums` (`id`, `entity_table`, `entity_id`, `premiums_active`, `premiums_intro_title`, `premiums_intro_text`, `premiums_contact_email`, `premiums_contact_phone`, `premiums_display_min_contribution`, `premiums_nothankyou_label`, `premiums_nothankyou_position`) 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_premiums` (`id`, `entity_table`, `entity_id`, `premiums_active`, `premiums_intro_title`, `premiums_intro_text`, `premiums_contact_email`, `premiums_contact_phone`, `premiums_display_min_contribution`, `premiums_nothankyou_label`, `premiums_nothankyou_position`) 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); /*!40000 ALTER TABLE `civicrm_premiums` ENABLE KEYS */; UNLOCK TABLES; @@ -1164,7 +6927,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_premiums_product` WRITE; /*!40000 ALTER TABLE `civicrm_premiums_product` DISABLE KEYS */; -INSERT INTO `civicrm_premiums_product` (`id`, `premiums_id`, `product_id`, `weight`, `financial_type_id`) VALUES (1,1,1,1,NULL); +INSERT INTO `civicrm_premiums_product` (`id`, `premiums_id`, `product_id`, `weight`, `financial_type_id`) VALUES + (1,1,1,1,NULL); /*!40000 ALTER TABLE `civicrm_premiums_product` ENABLE KEYS */; UNLOCK TABLES; @@ -1183,7 +6947,16 @@ UNLOCK TABLES; LOCK TABLES `civicrm_price_field` WRITE; /*!40000 ALTER TABLE `civicrm_price_field` DISABLE KEYS */; -INSERT INTO `civicrm_price_field` (`id`, `price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `help_pre`, `help_post`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `active_on`, `expire_on`, `javascript`, `visibility_id`) VALUES (1,1,'contribution_amount','Contribution Amount','Text',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1),(2,3,'contribution_amount','Contribution Amount','Radio',0,NULL,NULL,2,1,1,1,0,NULL,NULL,NULL,1),(3,3,'other_amount','Other Amount','Text',0,NULL,NULL,3,0,1,1,0,NULL,NULL,NULL,1),(4,2,'1','Membership Amount','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1),(5,4,'membership_amount','Membership','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1),(6,5,'other_amount','Contribution Amount','Text',0,NULL,NULL,3,0,1,1,1,NULL,NULL,NULL,1),(7,6,'tournament_fees','Tournament Fees','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1),(8,7,'dinner_contribution','Dinner Contribution','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1),(9,8,'festival_fee','Festival Fee','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1); +INSERT INTO `civicrm_price_field` (`id`, `price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `help_pre`, `help_post`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `active_on`, `expire_on`, `javascript`, `visibility_id`) VALUES + (1,1,'contribution_amount','Contribution Amount','Text',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1), + (2,3,'contribution_amount','Contribution Amount','Radio',0,NULL,NULL,2,1,1,1,0,NULL,NULL,NULL,1), + (3,3,'other_amount','Other Amount','Text',0,NULL,NULL,3,0,1,1,0,NULL,NULL,NULL,1), + (4,2,'1','Membership Amount','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1), + (5,4,'membership_amount','Membership','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1), + (6,5,'other_amount','Contribution Amount','Text',0,NULL,NULL,3,0,1,1,1,NULL,NULL,NULL,1), + (7,6,'tournament_fees','Tournament Fees','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1), + (8,7,'dinner_contribution','Dinner Contribution','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1), + (9,8,'festival_fee','Festival Fee','Radio',0,NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,1); /*!40000 ALTER TABLE `civicrm_price_field` ENABLE KEYS */; UNLOCK TABLES; @@ -1193,7 +6966,28 @@ UNLOCK TABLES; LOCK TABLES `civicrm_price_field_value` WRITE; /*!40000 ALTER TABLE `civicrm_price_field_value` DISABLE KEYS */; -INSERT INTO `civicrm_price_field_value` (`id`, `price_field_id`, `name`, `label`, `description`, `help_pre`, `help_post`, `amount`, `count`, `max_value`, `weight`, `membership_type_id`, `membership_num_terms`, `is_default`, `is_active`, `financial_type_id`, `non_deductible_amount`, `visibility_id`) VALUES (1,1,'contribution_amount','Contribution Amount',NULL,NULL,NULL,1.000000000,NULL,NULL,1,NULL,NULL,0,1,1,0.00,1),(2,2,'friend','Friend',NULL,NULL,NULL,1.000000000,NULL,NULL,1,NULL,NULL,0,1,1,0.00,1),(3,2,'supporter','Supporter',NULL,NULL,NULL,5.000000000,NULL,NULL,2,NULL,NULL,0,1,1,0.00,1),(4,2,'booster','Booster',NULL,NULL,NULL,10.000000000,NULL,NULL,3,NULL,NULL,1,1,1,0.00,1),(5,2,'sustainer','Sustainer',NULL,NULL,NULL,50.000000000,NULL,NULL,4,NULL,NULL,0,1,1,0.00,1),(6,3,'other_amount','Other Amount',NULL,NULL,NULL,1.000000000,NULL,NULL,3,NULL,NULL,0,1,1,0.00,1),(7,4,'general','General','Regular annual membership.',NULL,NULL,100.000000000,NULL,NULL,1,1,NULL,0,1,2,0.00,1),(8,4,'student','Student','Discount membership for full-time students.',NULL,NULL,50.000000000,NULL,NULL,2,2,NULL,0,1,2,0.00,1),(9,4,'lifetime','Lifetime','Lifetime membership.',NULL,NULL,1200.000000000,NULL,NULL,3,3,NULL,0,1,2,0.00,1),(10,5,'General','General',NULL,NULL,NULL,100.000000000,NULL,NULL,1,1,NULL,1,1,2,0.00,1),(11,5,'Student','Student',NULL,NULL,NULL,50.000000000,NULL,NULL,1,2,NULL,0,1,2,0.00,1),(12,6,'other_amount','Contribution Amount',NULL,NULL,NULL,1.000000000,NULL,NULL,1,NULL,NULL,0,1,1,0.00,1),(13,7,'tiny_tots__ages_5_8_','Tiny-tots (ages 5-8)',NULL,NULL,NULL,800.000000000,NULL,NULL,1,NULL,NULL,1,1,4,0.00,1),(14,7,'junior_Stars__ages_9_12_','Junior Stars (ages 9-12)',NULL,NULL,NULL,1000.000000000,NULL,NULL,2,NULL,NULL,0,1,4,0.00,1),(15,7,'super_Stars__ages_13_18_','Super Stars (ages 13-18)',NULL,NULL,NULL,1500.000000000,NULL,NULL,3,NULL,NULL,0,1,4,0.00,1),(16,8,'single','Single',NULL,NULL,NULL,50.000000000,NULL,NULL,1,NULL,NULL,1,1,4,0.00,1),(17,8,'couple','Couple',NULL,NULL,NULL,100.000000000,NULL,NULL,2,NULL,NULL,0,1,4,0.00,1),(18,8,'family','Family',NULL,NULL,NULL,200.000000000,NULL,NULL,3,NULL,NULL,0,1,4,0.00,1),(19,9,'bass','Bass',NULL,NULL,NULL,25.000000000,NULL,NULL,1,NULL,NULL,1,1,2,0.00,1),(20,9,'tenor','Tenor',NULL,NULL,NULL,40.000000000,NULL,NULL,2,NULL,NULL,0,1,2,0.00,1),(21,9,'soprano','Soprano',NULL,NULL,NULL,50.000000000,NULL,NULL,3,NULL,NULL,0,1,2,0.00,1); +INSERT INTO `civicrm_price_field_value` (`id`, `price_field_id`, `name`, `label`, `description`, `help_pre`, `help_post`, `amount`, `count`, `max_value`, `weight`, `membership_type_id`, `membership_num_terms`, `is_default`, `is_active`, `financial_type_id`, `non_deductible_amount`, `visibility_id`) VALUES + (1,1,'contribution_amount','Contribution Amount',NULL,NULL,NULL,1.000000000,NULL,NULL,1,NULL,NULL,0,1,1,0.00,1), + (2,2,'friend','Friend',NULL,NULL,NULL,1.000000000,NULL,NULL,1,NULL,NULL,0,1,1,0.00,1), + (3,2,'supporter','Supporter',NULL,NULL,NULL,5.000000000,NULL,NULL,2,NULL,NULL,0,1,1,0.00,1), + (4,2,'booster','Booster',NULL,NULL,NULL,10.000000000,NULL,NULL,3,NULL,NULL,1,1,1,0.00,1), + (5,2,'sustainer','Sustainer',NULL,NULL,NULL,50.000000000,NULL,NULL,4,NULL,NULL,0,1,1,0.00,1), + (6,3,'other_amount','Other Amount',NULL,NULL,NULL,1.000000000,NULL,NULL,3,NULL,NULL,0,1,1,0.00,1), + (7,4,'general','General','Regular annual membership.',NULL,NULL,100.000000000,NULL,NULL,1,1,NULL,0,1,2,0.00,1), + (8,4,'student','Student','Discount membership for full-time students.',NULL,NULL,50.000000000,NULL,NULL,2,2,NULL,0,1,2,0.00,1), + (9,4,'lifetime','Lifetime','Lifetime membership.',NULL,NULL,1200.000000000,NULL,NULL,3,3,NULL,0,1,2,0.00,1), + (10,5,'General','General',NULL,NULL,NULL,100.000000000,NULL,NULL,1,1,NULL,1,1,2,0.00,1), + (11,5,'Student','Student',NULL,NULL,NULL,50.000000000,NULL,NULL,1,2,NULL,0,1,2,0.00,1), + (12,6,'other_amount','Contribution Amount',NULL,NULL,NULL,1.000000000,NULL,NULL,1,NULL,NULL,0,1,1,0.00,1), + (13,7,'tiny_tots__ages_5_8_','Tiny-tots (ages 5-8)',NULL,NULL,NULL,800.000000000,NULL,NULL,1,NULL,NULL,1,1,4,0.00,1), + (14,7,'junior_Stars__ages_9_12_','Junior Stars (ages 9-12)',NULL,NULL,NULL,1000.000000000,NULL,NULL,2,NULL,NULL,0,1,4,0.00,1), + (15,7,'super_Stars__ages_13_18_','Super Stars (ages 13-18)',NULL,NULL,NULL,1500.000000000,NULL,NULL,3,NULL,NULL,0,1,4,0.00,1), + (16,8,'single','Single',NULL,NULL,NULL,50.000000000,NULL,NULL,1,NULL,NULL,1,1,4,0.00,1), + (17,8,'couple','Couple',NULL,NULL,NULL,100.000000000,NULL,NULL,2,NULL,NULL,0,1,4,0.00,1), + (18,8,'family','Family',NULL,NULL,NULL,200.000000000,NULL,NULL,3,NULL,NULL,0,1,4,0.00,1), + (19,9,'bass','Bass',NULL,NULL,NULL,25.000000000,NULL,NULL,1,NULL,NULL,1,1,2,0.00,1), + (20,9,'tenor','Tenor',NULL,NULL,NULL,40.000000000,NULL,NULL,2,NULL,NULL,0,1,2,0.00,1), + (21,9,'soprano','Soprano',NULL,NULL,NULL,50.000000000,NULL,NULL,3,NULL,NULL,0,1,2,0.00,1); /*!40000 ALTER TABLE `civicrm_price_field_value` ENABLE KEYS */; UNLOCK TABLES; @@ -1203,7 +6997,15 @@ UNLOCK TABLES; LOCK TABLES `civicrm_price_set` WRITE; /*!40000 ALTER TABLE `civicrm_price_set` DISABLE KEYS */; -INSERT INTO `civicrm_price_set` (`id`, `domain_id`, `name`, `title`, `is_active`, `help_pre`, `help_post`, `javascript`, `extends`, `financial_type_id`, `is_quick_config`, `is_reserved`, `min_amount`) VALUES (1,NULL,'default_contribution_amount','Contribution Amount',1,NULL,NULL,NULL,'2',NULL,1,1,0.00),(2,NULL,'default_membership_type_amount','Membership Amount',1,NULL,NULL,NULL,'3',2,1,1,0.00),(3,NULL,'help_support_civicrm_amount','Help Support CiviCRM!',1,NULL,NULL,NULL,'2',NULL,1,0,0.00),(4,NULL,'member_signup_and_renewal','Member Signup and Renewal',1,NULL,NULL,NULL,'3',2,1,0,0.00),(5,NULL,'pledge_for_civicrm','Pledge for CiviCRM!',1,NULL,NULL,NULL,'2',NULL,1,0,0.00),(6,NULL,'rain_forest_cup_youth_soccer_tournament','Rain-forest Cup Youth Soccer Tournament',1,NULL,NULL,NULL,'1',NULL,1,0,0.00),(7,NULL,'fall_fundraiser_dinner','Fall Fundraiser Dinner',1,NULL,NULL,NULL,'1',NULL,1,0,0.00),(8,NULL,'summer_solstice_festival_day_concert','Summer Solstice Festival Day Concert',1,NULL,NULL,NULL,'1',NULL,1,0,0.00); +INSERT INTO `civicrm_price_set` (`id`, `domain_id`, `name`, `title`, `is_active`, `help_pre`, `help_post`, `javascript`, `extends`, `financial_type_id`, `is_quick_config`, `is_reserved`, `min_amount`) VALUES + (1,NULL,'default_contribution_amount','Contribution Amount',1,NULL,NULL,NULL,'2',NULL,1,1,0.00), + (2,NULL,'default_membership_type_amount','Membership Amount',1,NULL,NULL,NULL,'3',2,1,1,0.00), + (3,NULL,'help_support_civicrm_amount','Help Support CiviCRM!',1,NULL,NULL,NULL,'2',NULL,1,0,0.00), + (4,NULL,'member_signup_and_renewal','Member Signup and Renewal',1,NULL,NULL,NULL,'3',2,1,0,0.00), + (5,NULL,'pledge_for_civicrm','Pledge for CiviCRM!',1,NULL,NULL,NULL,'2',NULL,1,0,0.00), + (6,NULL,'rain_forest_cup_youth_soccer_tournament','Rain-forest Cup Youth Soccer Tournament',1,NULL,NULL,NULL,'1',NULL,1,0,0.00), + (7,NULL,'fall_fundraiser_dinner','Fall Fundraiser Dinner',1,NULL,NULL,NULL,'1',NULL,1,0,0.00), + (8,NULL,'summer_solstice_festival_day_concert','Summer Solstice Festival Day Concert',1,NULL,NULL,NULL,'1',NULL,1,0,0.00); /*!40000 ALTER TABLE `civicrm_price_set` ENABLE KEYS */; UNLOCK TABLES; @@ -1213,7 +7015,13 @@ UNLOCK TABLES; LOCK TABLES `civicrm_price_set_entity` WRITE; /*!40000 ALTER TABLE `civicrm_price_set_entity` DISABLE KEYS */; -INSERT INTO `civicrm_price_set_entity` (`id`, `entity_table`, `entity_id`, `price_set_id`) VALUES (1,'civicrm_contribution_page',1,3),(2,'civicrm_contribution_page',2,4),(3,'civicrm_contribution_page',3,5),(4,'civicrm_event',3,6),(5,'civicrm_event',1,7),(6,'civicrm_event',2,8); +INSERT INTO `civicrm_price_set_entity` (`id`, `entity_table`, `entity_id`, `price_set_id`) VALUES + (1,'civicrm_contribution_page',1,3), + (2,'civicrm_contribution_page',2,4), + (3,'civicrm_contribution_page',3,5), + (4,'civicrm_event',3,6), + (5,'civicrm_event',1,7), + (6,'civicrm_event',2,8); /*!40000 ALTER TABLE `civicrm_price_set_entity` ENABLE KEYS */; UNLOCK TABLES; @@ -1223,7 +7031,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_print_label` WRITE; /*!40000 ALTER TABLE `civicrm_print_label` DISABLE KEYS */; -INSERT INTO `civicrm_print_label` (`id`, `title`, `name`, `description`, `label_format_name`, `label_type_id`, `data`, `is_default`, `is_active`, `is_reserved`, `created_id`) VALUES (1,'Annual Conference Hanging Badge (Avery 5395)','Annual_Conference_Hanging_Badge','For our annual conference','Avery 5395',1,'{\"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\"}',1,1,1,NULL); +INSERT INTO `civicrm_print_label` (`id`, `title`, `name`, `description`, `label_format_name`, `label_type_id`, `data`, `is_default`, `is_active`, `is_reserved`, `created_id`) VALUES + (1,'Annual Conference Hanging Badge (Avery 5395)','Annual_Conference_Hanging_Badge','For our annual conference','Avery 5395',1,'{\"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\"}',1,1,1,NULL); /*!40000 ALTER TABLE `civicrm_print_label` ENABLE KEYS */; UNLOCK TABLES; @@ -1233,7 +7042,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_product` WRITE; /*!40000 ALTER TABLE `civicrm_product` DISABLE KEYS */; -INSERT INTO `civicrm_product` (`id`, `name`, `description`, `sku`, `options`, `image`, `thumbnail`, `price`, `currency`, `financial_type_id`, `min_contribution`, `cost`, `is_active`, `period_type`, `fixed_period_start_day`, `duration_unit`, `duration_interval`, `frequency_unit`, `frequency_interval`) 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_product` (`id`, `name`, `description`, `sku`, `options`, `image`, `thumbnail`, `price`, `currency`, `financial_type_id`, `min_contribution`, `cost`, `is_active`, `period_type`, `fixed_period_start_day`, `duration_unit`, `duration_interval`, `frequency_unit`, `frequency_interval`) 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); /*!40000 ALTER TABLE `civicrm_product` ENABLE KEYS */; UNLOCK TABLES; @@ -1261,7 +7071,221 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship` WRITE; /*!40000 ALTER TABLE `civicrm_relationship` DISABLE KEYS */; -INSERT INTO `civicrm_relationship` (`id`, `contact_id_a`, `contact_id_b`, `relationship_type_id`, `start_date`, `end_date`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`, `case_id`) VALUES (1,146,150,1,NULL,NULL,1,NULL,0,0,NULL),(2,169,150,1,NULL,NULL,1,NULL,0,0,NULL),(3,146,61,1,NULL,NULL,1,NULL,0,0,NULL),(4,169,61,1,NULL,NULL,1,NULL,0,0,NULL),(5,169,146,4,NULL,NULL,1,NULL,0,0,NULL),(6,61,182,8,NULL,NULL,1,NULL,0,0,NULL),(7,146,182,8,NULL,NULL,1,NULL,0,0,NULL),(8,169,182,8,NULL,NULL,1,NULL,0,0,NULL),(9,150,182,7,NULL,NULL,1,NULL,0,0,NULL),(10,61,150,2,NULL,NULL,1,NULL,0,0,NULL),(11,5,156,1,NULL,NULL,1,NULL,0,0,NULL),(12,145,156,1,NULL,NULL,1,NULL,0,0,NULL),(13,5,198,1,NULL,NULL,1,NULL,0,0,NULL),(14,145,198,1,NULL,NULL,1,NULL,0,0,NULL),(15,145,5,4,NULL,NULL,1,NULL,0,0,NULL),(16,198,26,8,NULL,NULL,1,NULL,0,0,NULL),(17,5,26,8,NULL,NULL,1,NULL,0,0,NULL),(18,145,26,8,NULL,NULL,1,NULL,0,0,NULL),(19,156,26,7,NULL,NULL,0,NULL,0,0,NULL),(20,198,156,2,NULL,NULL,0,NULL,0,0,NULL),(21,114,136,1,NULL,NULL,1,NULL,0,0,NULL),(22,137,136,1,NULL,NULL,1,NULL,0,0,NULL),(23,114,36,1,NULL,NULL,1,NULL,0,0,NULL),(24,137,36,1,NULL,NULL,1,NULL,0,0,NULL),(25,137,114,4,NULL,NULL,1,NULL,0,0,NULL),(26,36,4,8,NULL,NULL,1,NULL,0,0,NULL),(27,114,4,8,NULL,NULL,1,NULL,0,0,NULL),(28,137,4,8,NULL,NULL,1,NULL,0,0,NULL),(29,136,4,7,NULL,NULL,1,NULL,0,0,NULL),(30,36,136,2,NULL,NULL,1,NULL,0,0,NULL),(31,142,20,1,NULL,NULL,1,NULL,0,0,NULL),(32,2,20,1,NULL,NULL,1,NULL,0,0,NULL),(33,142,179,1,NULL,NULL,1,NULL,0,0,NULL),(34,2,179,1,NULL,NULL,1,NULL,0,0,NULL),(35,2,142,4,NULL,NULL,1,NULL,0,0,NULL),(36,179,128,8,NULL,NULL,1,NULL,0,0,NULL),(37,142,128,8,NULL,NULL,1,NULL,0,0,NULL),(38,2,128,8,NULL,NULL,1,NULL,0,0,NULL),(39,20,128,7,NULL,NULL,0,NULL,0,0,NULL),(40,179,20,2,NULL,NULL,0,NULL,0,0,NULL),(41,50,58,1,NULL,NULL,1,NULL,0,0,NULL),(42,70,58,1,NULL,NULL,1,NULL,0,0,NULL),(43,50,3,1,NULL,NULL,1,NULL,0,0,NULL),(44,70,3,1,NULL,NULL,1,NULL,0,0,NULL),(45,70,50,4,NULL,NULL,1,NULL,0,0,NULL),(46,3,43,8,NULL,NULL,1,NULL,0,0,NULL),(47,50,43,8,NULL,NULL,1,NULL,0,0,NULL),(48,70,43,8,NULL,NULL,1,NULL,0,0,NULL),(49,58,43,7,NULL,NULL,0,NULL,0,0,NULL),(50,3,58,2,NULL,NULL,0,NULL,0,0,NULL),(51,22,42,1,NULL,NULL,1,NULL,0,0,NULL),(52,124,42,1,NULL,NULL,1,NULL,0,0,NULL),(53,22,155,1,NULL,NULL,1,NULL,0,0,NULL),(54,124,155,1,NULL,NULL,1,NULL,0,0,NULL),(55,124,22,4,NULL,NULL,1,NULL,0,0,NULL),(56,155,186,8,NULL,NULL,1,NULL,0,0,NULL),(57,22,186,8,NULL,NULL,1,NULL,0,0,NULL),(58,124,186,8,NULL,NULL,1,NULL,0,0,NULL),(59,42,186,7,NULL,NULL,1,NULL,0,0,NULL),(60,155,42,2,NULL,NULL,1,NULL,0,0,NULL),(61,170,56,1,NULL,NULL,1,NULL,0,0,NULL),(62,71,56,1,NULL,NULL,1,NULL,0,0,NULL),(63,170,67,1,NULL,NULL,1,NULL,0,0,NULL),(64,71,67,1,NULL,NULL,1,NULL,0,0,NULL),(65,71,170,4,NULL,NULL,1,NULL,0,0,NULL),(66,67,158,8,NULL,NULL,1,NULL,0,0,NULL),(67,170,158,8,NULL,NULL,1,NULL,0,0,NULL),(68,71,158,8,NULL,NULL,1,NULL,0,0,NULL),(69,56,158,7,NULL,NULL,1,NULL,0,0,NULL),(70,67,56,2,NULL,NULL,1,NULL,0,0,NULL),(71,80,120,1,NULL,NULL,1,NULL,0,0,NULL),(72,135,120,1,NULL,NULL,1,NULL,0,0,NULL),(73,80,40,1,NULL,NULL,1,NULL,0,0,NULL),(74,135,40,1,NULL,NULL,1,NULL,0,0,NULL),(75,135,80,4,NULL,NULL,1,NULL,0,0,NULL),(76,40,174,8,NULL,NULL,1,NULL,0,0,NULL),(77,80,174,8,NULL,NULL,1,NULL,0,0,NULL),(78,135,174,8,NULL,NULL,1,NULL,0,0,NULL),(79,120,174,7,NULL,NULL,0,NULL,0,0,NULL),(80,40,120,2,NULL,NULL,0,NULL,0,0,NULL),(81,125,140,1,NULL,NULL,1,NULL,0,0,NULL),(82,35,140,1,NULL,NULL,1,NULL,0,0,NULL),(83,125,86,1,NULL,NULL,1,NULL,0,0,NULL),(84,35,86,1,NULL,NULL,1,NULL,0,0,NULL),(85,35,125,4,NULL,NULL,1,NULL,0,0,NULL),(86,86,148,8,NULL,NULL,1,NULL,0,0,NULL),(87,125,148,8,NULL,NULL,1,NULL,0,0,NULL),(88,35,148,8,NULL,NULL,1,NULL,0,0,NULL),(89,140,148,7,NULL,NULL,1,NULL,0,0,NULL),(90,86,140,2,NULL,NULL,1,NULL,0,0,NULL),(91,177,122,1,NULL,NULL,1,NULL,0,0,NULL),(92,129,122,1,NULL,NULL,1,NULL,0,0,NULL),(93,177,162,1,NULL,NULL,1,NULL,0,0,NULL),(94,129,162,1,NULL,NULL,1,NULL,0,0,NULL),(95,129,177,4,NULL,NULL,1,NULL,0,0,NULL),(96,162,165,8,NULL,NULL,1,NULL,0,0,NULL),(97,177,165,8,NULL,NULL,1,NULL,0,0,NULL),(98,129,165,8,NULL,NULL,1,NULL,0,0,NULL),(99,122,165,7,NULL,NULL,0,NULL,0,0,NULL),(100,162,122,2,NULL,NULL,0,NULL,0,0,NULL),(101,159,118,1,NULL,NULL,1,NULL,0,0,NULL),(102,189,118,1,NULL,NULL,1,NULL,0,0,NULL),(103,159,17,1,NULL,NULL,1,NULL,0,0,NULL),(104,189,17,1,NULL,NULL,1,NULL,0,0,NULL),(105,189,159,4,NULL,NULL,1,NULL,0,0,NULL),(106,17,97,8,NULL,NULL,1,NULL,0,0,NULL),(107,159,97,8,NULL,NULL,1,NULL,0,0,NULL),(108,189,97,8,NULL,NULL,1,NULL,0,0,NULL),(109,118,97,7,NULL,NULL,1,NULL,0,0,NULL),(110,17,118,2,NULL,NULL,1,NULL,0,0,NULL),(111,168,161,1,NULL,NULL,1,NULL,0,0,NULL),(112,7,161,1,NULL,NULL,1,NULL,0,0,NULL),(113,168,151,1,NULL,NULL,1,NULL,0,0,NULL),(114,7,151,1,NULL,NULL,1,NULL,0,0,NULL),(115,7,168,4,NULL,NULL,1,NULL,0,0,NULL),(116,151,8,8,NULL,NULL,1,NULL,0,0,NULL),(117,168,8,8,NULL,NULL,1,NULL,0,0,NULL),(118,7,8,8,NULL,NULL,1,NULL,0,0,NULL),(119,161,8,7,NULL,NULL,0,NULL,0,0,NULL),(120,151,161,2,NULL,NULL,0,NULL,0,0,NULL),(121,138,25,1,NULL,NULL,1,NULL,0,0,NULL),(122,117,25,1,NULL,NULL,1,NULL,0,0,NULL),(123,138,191,1,NULL,NULL,1,NULL,0,0,NULL),(124,117,191,1,NULL,NULL,1,NULL,0,0,NULL),(125,117,138,4,NULL,NULL,1,NULL,0,0,NULL),(126,191,144,8,NULL,NULL,1,NULL,0,0,NULL),(127,138,144,8,NULL,NULL,1,NULL,0,0,NULL),(128,117,144,8,NULL,NULL,1,NULL,0,0,NULL),(129,25,144,7,NULL,NULL,0,NULL,0,0,NULL),(130,191,25,2,NULL,NULL,0,NULL,0,0,NULL),(131,79,184,1,NULL,NULL,1,NULL,0,0,NULL),(132,28,184,1,NULL,NULL,1,NULL,0,0,NULL),(133,79,54,1,NULL,NULL,1,NULL,0,0,NULL),(134,28,54,1,NULL,NULL,1,NULL,0,0,NULL),(135,28,79,4,NULL,NULL,1,NULL,0,0,NULL),(136,54,134,8,NULL,NULL,1,NULL,0,0,NULL),(137,79,134,8,NULL,NULL,1,NULL,0,0,NULL),(138,28,134,8,NULL,NULL,1,NULL,0,0,NULL),(139,184,134,7,NULL,NULL,1,NULL,0,0,NULL),(140,54,184,2,NULL,NULL,1,NULL,0,0,NULL),(141,200,127,1,NULL,NULL,1,NULL,0,0,NULL),(142,112,127,1,NULL,NULL,1,NULL,0,0,NULL),(143,200,72,1,NULL,NULL,1,NULL,0,0,NULL),(144,112,72,1,NULL,NULL,1,NULL,0,0,NULL),(145,112,200,4,NULL,NULL,1,NULL,0,0,NULL),(146,72,96,8,NULL,NULL,1,NULL,0,0,NULL),(147,200,96,8,NULL,NULL,1,NULL,0,0,NULL),(148,112,96,8,NULL,NULL,1,NULL,0,0,NULL),(149,127,96,7,NULL,NULL,1,NULL,0,0,NULL),(150,72,127,2,NULL,NULL,1,NULL,0,0,NULL),(151,38,190,1,NULL,NULL,1,NULL,0,0,NULL),(152,77,190,1,NULL,NULL,1,NULL,0,0,NULL),(153,38,85,1,NULL,NULL,1,NULL,0,0,NULL),(154,77,85,1,NULL,NULL,1,NULL,0,0,NULL),(155,77,38,4,NULL,NULL,1,NULL,0,0,NULL),(156,85,107,8,NULL,NULL,1,NULL,0,0,NULL),(157,38,107,8,NULL,NULL,1,NULL,0,0,NULL),(158,77,107,8,NULL,NULL,1,NULL,0,0,NULL),(159,190,107,7,NULL,NULL,1,NULL,0,0,NULL),(160,85,190,2,NULL,NULL,1,NULL,0,0,NULL),(161,121,13,1,NULL,NULL,1,NULL,0,0,NULL),(162,103,13,1,NULL,NULL,1,NULL,0,0,NULL),(163,121,33,1,NULL,NULL,1,NULL,0,0,NULL),(164,103,33,1,NULL,NULL,1,NULL,0,0,NULL),(165,103,121,4,NULL,NULL,1,NULL,0,0,NULL),(166,33,183,8,NULL,NULL,1,NULL,0,0,NULL),(167,121,183,8,NULL,NULL,1,NULL,0,0,NULL),(168,103,183,8,NULL,NULL,1,NULL,0,0,NULL),(169,13,183,7,NULL,NULL,1,NULL,0,0,NULL),(170,33,13,2,NULL,NULL,1,NULL,0,0,NULL),(171,63,175,1,NULL,NULL,1,NULL,0,0,NULL),(172,69,175,1,NULL,NULL,1,NULL,0,0,NULL),(173,63,126,1,NULL,NULL,1,NULL,0,0,NULL),(174,69,126,1,NULL,NULL,1,NULL,0,0,NULL),(175,69,63,4,NULL,NULL,1,NULL,0,0,NULL),(176,126,31,8,NULL,NULL,1,NULL,0,0,NULL),(177,63,31,8,NULL,NULL,1,NULL,0,0,NULL),(178,69,31,8,NULL,NULL,1,NULL,0,0,NULL),(179,175,31,7,NULL,NULL,0,NULL,0,0,NULL),(180,126,175,2,NULL,NULL,0,NULL,0,0,NULL),(181,15,84,1,NULL,NULL,1,NULL,0,0,NULL),(182,37,84,1,NULL,NULL,1,NULL,0,0,NULL),(183,15,133,1,NULL,NULL,1,NULL,0,0,NULL),(184,37,133,1,NULL,NULL,1,NULL,0,0,NULL),(185,37,15,4,NULL,NULL,1,NULL,0,0,NULL),(186,133,32,8,NULL,NULL,1,NULL,0,0,NULL),(187,15,32,8,NULL,NULL,1,NULL,0,0,NULL),(188,37,32,8,NULL,NULL,1,NULL,0,0,NULL),(189,84,32,7,NULL,NULL,0,NULL,0,0,NULL),(190,133,84,2,NULL,NULL,0,NULL,0,0,NULL),(191,132,34,1,NULL,NULL,1,NULL,0,0,NULL),(192,41,34,1,NULL,NULL,1,NULL,0,0,NULL),(193,132,51,1,NULL,NULL,1,NULL,0,0,NULL),(194,41,51,1,NULL,NULL,1,NULL,0,0,NULL),(195,41,132,4,NULL,NULL,1,NULL,0,0,NULL),(196,51,94,8,NULL,NULL,1,NULL,0,0,NULL),(197,132,94,8,NULL,NULL,1,NULL,0,0,NULL),(198,41,94,8,NULL,NULL,1,NULL,0,0,NULL),(199,34,94,7,NULL,NULL,1,NULL,0,0,NULL),(200,51,34,2,NULL,NULL,1,NULL,0,0,NULL),(201,135,21,5,NULL,NULL,1,NULL,0,0,NULL),(202,176,45,5,NULL,NULL,1,NULL,0,0,NULL),(203,201,48,5,NULL,NULL,1,NULL,0,0,NULL),(204,37,53,5,NULL,NULL,1,NULL,0,0,NULL),(205,161,55,5,NULL,NULL,1,NULL,0,0,NULL),(206,139,62,5,NULL,NULL,1,NULL,0,0,NULL),(207,68,87,5,NULL,NULL,1,NULL,0,0,NULL),(208,132,89,5,NULL,NULL,1,NULL,0,0,NULL),(209,5,113,5,NULL,NULL,1,NULL,0,0,NULL),(210,137,123,5,NULL,NULL,1,NULL,0,0,NULL),(211,181,130,5,NULL,NULL,1,NULL,0,0,NULL),(212,16,141,5,NULL,NULL,1,NULL,0,0,NULL),(213,29,153,5,NULL,NULL,1,NULL,0,0,NULL),(214,103,160,5,NULL,NULL,1,NULL,0,0,NULL),(215,49,163,5,NULL,NULL,1,NULL,0,0,NULL); +INSERT INTO `civicrm_relationship` (`id`, `contact_id_a`, `contact_id_b`, `relationship_type_id`, `start_date`, `end_date`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`, `case_id`) VALUES + (1,130,35,1,NULL,NULL,1,NULL,0,0,NULL), + (2,55,35,1,NULL,NULL,1,NULL,0,0,NULL), + (3,130,92,1,NULL,NULL,1,NULL,0,0,NULL), + (4,55,92,1,NULL,NULL,1,NULL,0,0,NULL), + (5,55,130,4,NULL,NULL,1,NULL,0,0,NULL), + (6,92,51,8,NULL,NULL,1,NULL,0,0,NULL), + (7,130,51,8,NULL,NULL,1,NULL,0,0,NULL), + (8,55,51,8,NULL,NULL,1,NULL,0,0,NULL), + (9,35,51,7,NULL,NULL,1,NULL,0,0,NULL), + (10,92,35,2,NULL,NULL,1,NULL,0,0,NULL), + (11,123,3,1,NULL,NULL,1,NULL,0,0,NULL), + (12,108,3,1,NULL,NULL,1,NULL,0,0,NULL), + (13,123,42,1,NULL,NULL,1,NULL,0,0,NULL), + (14,108,42,1,NULL,NULL,1,NULL,0,0,NULL), + (15,108,123,4,NULL,NULL,1,NULL,0,0,NULL), + (16,42,62,8,NULL,NULL,1,NULL,0,0,NULL), + (17,123,62,8,NULL,NULL,1,NULL,0,0,NULL), + (18,108,62,8,NULL,NULL,1,NULL,0,0,NULL), + (19,3,62,7,NULL,NULL,1,NULL,0,0,NULL), + (20,42,3,2,NULL,NULL,1,NULL,0,0,NULL), + (21,118,40,1,NULL,NULL,1,NULL,0,0,NULL), + (22,101,40,1,NULL,NULL,1,NULL,0,0,NULL), + (23,118,113,1,NULL,NULL,1,NULL,0,0,NULL), + (24,101,113,1,NULL,NULL,1,NULL,0,0,NULL), + (25,101,118,4,NULL,NULL,1,NULL,0,0,NULL), + (26,113,126,8,NULL,NULL,1,NULL,0,0,NULL), + (27,118,126,8,NULL,NULL,1,NULL,0,0,NULL), + (28,101,126,8,NULL,NULL,1,NULL,0,0,NULL), + (29,40,126,7,NULL,NULL,1,NULL,0,0,NULL), + (30,113,40,2,NULL,NULL,1,NULL,0,0,NULL), + (31,142,132,1,NULL,NULL,1,NULL,0,0,NULL), + (32,135,132,1,NULL,NULL,1,NULL,0,0,NULL), + (33,142,140,1,NULL,NULL,1,NULL,0,0,NULL), + (34,135,140,1,NULL,NULL,1,NULL,0,0,NULL), + (35,135,142,4,NULL,NULL,1,NULL,0,0,NULL), + (36,140,180,8,NULL,NULL,1,NULL,0,0,NULL), + (37,142,180,8,NULL,NULL,1,NULL,0,0,NULL), + (38,135,180,8,NULL,NULL,1,NULL,0,0,NULL), + (39,132,180,7,NULL,NULL,1,NULL,0,0,NULL), + (40,140,132,2,NULL,NULL,1,NULL,0,0,NULL), + (41,102,111,1,NULL,NULL,1,NULL,0,0,NULL), + (42,29,111,1,NULL,NULL,1,NULL,0,0,NULL), + (43,102,116,1,NULL,NULL,1,NULL,0,0,NULL), + (44,29,116,1,NULL,NULL,1,NULL,0,0,NULL), + (45,29,102,4,NULL,NULL,1,NULL,0,0,NULL), + (46,116,28,8,NULL,NULL,1,NULL,0,0,NULL), + (47,102,28,8,NULL,NULL,1,NULL,0,0,NULL), + (48,29,28,8,NULL,NULL,1,NULL,0,0,NULL), + (49,111,28,7,NULL,NULL,1,NULL,0,0,NULL), + (50,116,111,2,NULL,NULL,1,NULL,0,0,NULL), + (51,183,95,1,NULL,NULL,1,NULL,0,0,NULL), + (52,24,95,1,NULL,NULL,1,NULL,0,0,NULL), + (53,183,195,1,NULL,NULL,1,NULL,0,0,NULL), + (54,24,195,1,NULL,NULL,1,NULL,0,0,NULL), + (55,24,183,4,NULL,NULL,1,NULL,0,0,NULL), + (56,195,155,8,NULL,NULL,1,NULL,0,0,NULL), + (57,183,155,8,NULL,NULL,1,NULL,0,0,NULL), + (58,24,155,8,NULL,NULL,1,NULL,0,0,NULL), + (59,95,155,7,NULL,NULL,0,NULL,0,0,NULL), + (60,195,95,2,NULL,NULL,0,NULL,0,0,NULL), + (61,30,104,1,NULL,NULL,1,NULL,0,0,NULL), + (62,47,104,1,NULL,NULL,1,NULL,0,0,NULL), + (63,30,124,1,NULL,NULL,1,NULL,0,0,NULL), + (64,47,124,1,NULL,NULL,1,NULL,0,0,NULL), + (65,47,30,4,NULL,NULL,1,NULL,0,0,NULL), + (66,124,60,8,NULL,NULL,1,NULL,0,0,NULL), + (67,30,60,8,NULL,NULL,1,NULL,0,0,NULL), + (68,47,60,8,NULL,NULL,1,NULL,0,0,NULL), + (69,104,60,7,NULL,NULL,0,NULL,0,0,NULL), + (70,124,104,2,NULL,NULL,0,NULL,0,0,NULL), + (71,175,99,1,NULL,NULL,1,NULL,0,0,NULL), + (72,94,99,1,NULL,NULL,1,NULL,0,0,NULL), + (73,175,77,1,NULL,NULL,1,NULL,0,0,NULL), + (74,94,77,1,NULL,NULL,1,NULL,0,0,NULL), + (75,94,175,4,NULL,NULL,1,NULL,0,0,NULL), + (76,77,70,8,NULL,NULL,1,NULL,0,0,NULL), + (77,175,70,8,NULL,NULL,1,NULL,0,0,NULL), + (78,94,70,8,NULL,NULL,1,NULL,0,0,NULL), + (79,99,70,7,NULL,NULL,1,NULL,0,0,NULL), + (80,77,99,2,NULL,NULL,1,NULL,0,0,NULL), + (81,148,80,1,NULL,NULL,1,NULL,0,0,NULL), + (82,187,80,1,NULL,NULL,1,NULL,0,0,NULL), + (83,148,82,1,NULL,NULL,1,NULL,0,0,NULL), + (84,187,82,1,NULL,NULL,1,NULL,0,0,NULL), + (85,187,148,4,NULL,NULL,1,NULL,0,0,NULL), + (86,82,97,8,NULL,NULL,1,NULL,0,0,NULL), + (87,148,97,8,NULL,NULL,1,NULL,0,0,NULL), + (88,187,97,8,NULL,NULL,1,NULL,0,0,NULL), + (89,80,97,7,NULL,NULL,0,NULL,0,0,NULL), + (90,82,80,2,NULL,NULL,0,NULL,0,0,NULL), + (91,105,193,1,NULL,NULL,1,NULL,0,0,NULL), + (92,22,193,1,NULL,NULL,1,NULL,0,0,NULL), + (93,105,145,1,NULL,NULL,1,NULL,0,0,NULL), + (94,22,145,1,NULL,NULL,1,NULL,0,0,NULL), + (95,22,105,4,NULL,NULL,1,NULL,0,0,NULL), + (96,145,17,8,NULL,NULL,1,NULL,0,0,NULL), + (97,105,17,8,NULL,NULL,1,NULL,0,0,NULL), + (98,22,17,8,NULL,NULL,1,NULL,0,0,NULL), + (99,193,17,7,NULL,NULL,0,NULL,0,0,NULL), + (100,145,193,2,NULL,NULL,0,NULL,0,0,NULL), + (101,141,43,1,NULL,NULL,1,NULL,0,0,NULL), + (102,150,43,1,NULL,NULL,1,NULL,0,0,NULL), + (103,141,88,1,NULL,NULL,1,NULL,0,0,NULL), + (104,150,88,1,NULL,NULL,1,NULL,0,0,NULL), + (105,150,141,4,NULL,NULL,1,NULL,0,0,NULL), + (106,88,147,8,NULL,NULL,1,NULL,0,0,NULL), + (107,141,147,8,NULL,NULL,1,NULL,0,0,NULL), + (108,150,147,8,NULL,NULL,1,NULL,0,0,NULL), + (109,43,147,7,NULL,NULL,0,NULL,0,0,NULL), + (110,88,43,2,NULL,NULL,0,NULL,0,0,NULL), + (111,56,106,1,NULL,NULL,1,NULL,0,0,NULL), + (112,200,106,1,NULL,NULL,1,NULL,0,0,NULL), + (113,56,136,1,NULL,NULL,1,NULL,0,0,NULL), + (114,200,136,1,NULL,NULL,1,NULL,0,0,NULL), + (115,200,56,4,NULL,NULL,1,NULL,0,0,NULL), + (116,136,63,8,NULL,NULL,1,NULL,0,0,NULL), + (117,56,63,8,NULL,NULL,1,NULL,0,0,NULL), + (118,200,63,8,NULL,NULL,1,NULL,0,0,NULL), + (119,106,63,7,NULL,NULL,1,NULL,0,0,NULL), + (120,136,106,2,NULL,NULL,1,NULL,0,0,NULL), + (121,112,114,1,NULL,NULL,1,NULL,0,0,NULL), + (122,197,114,1,NULL,NULL,1,NULL,0,0,NULL), + (123,112,152,1,NULL,NULL,1,NULL,0,0,NULL), + (124,197,152,1,NULL,NULL,1,NULL,0,0,NULL), + (125,197,112,4,NULL,NULL,1,NULL,0,0,NULL), + (126,152,167,8,NULL,NULL,1,NULL,0,0,NULL), + (127,112,167,8,NULL,NULL,1,NULL,0,0,NULL), + (128,197,167,8,NULL,NULL,1,NULL,0,0,NULL), + (129,114,167,7,NULL,NULL,1,NULL,0,0,NULL), + (130,152,114,2,NULL,NULL,1,NULL,0,0,NULL), + (131,76,170,1,NULL,NULL,1,NULL,0,0,NULL), + (132,15,170,1,NULL,NULL,1,NULL,0,0,NULL), + (133,76,166,1,NULL,NULL,1,NULL,0,0,NULL), + (134,15,166,1,NULL,NULL,1,NULL,0,0,NULL), + (135,15,76,4,NULL,NULL,1,NULL,0,0,NULL), + (136,166,161,8,NULL,NULL,1,NULL,0,0,NULL), + (137,76,161,8,NULL,NULL,1,NULL,0,0,NULL), + (138,15,161,8,NULL,NULL,1,NULL,0,0,NULL), + (139,170,161,7,NULL,NULL,1,NULL,0,0,NULL), + (140,166,170,2,NULL,NULL,1,NULL,0,0,NULL), + (141,158,133,1,NULL,NULL,1,NULL,0,0,NULL), + (142,134,133,1,NULL,NULL,1,NULL,0,0,NULL), + (143,158,7,1,NULL,NULL,1,NULL,0,0,NULL), + (144,134,7,1,NULL,NULL,1,NULL,0,0,NULL), + (145,134,158,4,NULL,NULL,1,NULL,0,0,NULL), + (146,7,39,8,NULL,NULL,1,NULL,0,0,NULL), + (147,158,39,8,NULL,NULL,1,NULL,0,0,NULL), + (148,134,39,8,NULL,NULL,1,NULL,0,0,NULL), + (149,133,39,7,NULL,NULL,0,NULL,0,0,NULL), + (150,7,133,2,NULL,NULL,0,NULL,0,0,NULL), + (151,164,151,1,NULL,NULL,1,NULL,0,0,NULL), + (152,54,151,1,NULL,NULL,1,NULL,0,0,NULL), + (153,164,129,1,NULL,NULL,1,NULL,0,0,NULL), + (154,54,129,1,NULL,NULL,1,NULL,0,0,NULL), + (155,54,164,4,NULL,NULL,1,NULL,0,0,NULL), + (156,129,109,8,NULL,NULL,1,NULL,0,0,NULL), + (157,164,109,8,NULL,NULL,1,NULL,0,0,NULL), + (158,54,109,8,NULL,NULL,1,NULL,0,0,NULL), + (159,151,109,7,NULL,NULL,1,NULL,0,0,NULL), + (160,129,151,2,NULL,NULL,1,NULL,0,0,NULL), + (161,165,8,1,NULL,NULL,1,NULL,0,0,NULL), + (162,153,8,1,NULL,NULL,1,NULL,0,0,NULL), + (163,165,198,1,NULL,NULL,1,NULL,0,0,NULL), + (164,153,198,1,NULL,NULL,1,NULL,0,0,NULL), + (165,153,165,4,NULL,NULL,1,NULL,0,0,NULL), + (166,198,171,8,NULL,NULL,1,NULL,0,0,NULL), + (167,165,171,8,NULL,NULL,1,NULL,0,0,NULL), + (168,153,171,8,NULL,NULL,1,NULL,0,0,NULL), + (169,8,171,7,NULL,NULL,1,NULL,0,0,NULL), + (170,198,8,2,NULL,NULL,1,NULL,0,0,NULL), + (171,119,52,1,NULL,NULL,1,NULL,0,0,NULL), + (172,9,52,1,NULL,NULL,1,NULL,0,0,NULL), + (173,119,120,1,NULL,NULL,1,NULL,0,0,NULL), + (174,9,120,1,NULL,NULL,1,NULL,0,0,NULL), + (175,9,119,4,NULL,NULL,1,NULL,0,0,NULL), + (176,120,159,8,NULL,NULL,1,NULL,0,0,NULL), + (177,119,159,8,NULL,NULL,1,NULL,0,0,NULL), + (178,9,159,8,NULL,NULL,1,NULL,0,0,NULL), + (179,52,159,7,NULL,NULL,1,NULL,0,0,NULL), + (180,120,52,2,NULL,NULL,1,NULL,0,0,NULL), + (181,131,139,1,NULL,NULL,1,NULL,0,0,NULL), + (182,73,139,1,NULL,NULL,1,NULL,0,0,NULL), + (183,131,86,1,NULL,NULL,1,NULL,0,0,NULL), + (184,73,86,1,NULL,NULL,1,NULL,0,0,NULL), + (185,73,131,4,NULL,NULL,1,NULL,0,0,NULL), + (186,86,12,8,NULL,NULL,1,NULL,0,0,NULL), + (187,131,12,8,NULL,NULL,1,NULL,0,0,NULL), + (188,73,12,8,NULL,NULL,1,NULL,0,0,NULL), + (189,139,12,7,NULL,NULL,1,NULL,0,0,NULL), + (190,86,139,2,NULL,NULL,1,NULL,0,0,NULL), + (191,121,66,1,NULL,NULL,1,NULL,0,0,NULL), + (192,172,66,1,NULL,NULL,1,NULL,0,0,NULL), + (193,121,137,1,NULL,NULL,1,NULL,0,0,NULL), + (194,172,137,1,NULL,NULL,1,NULL,0,0,NULL), + (195,172,121,4,NULL,NULL,1,NULL,0,0,NULL), + (196,137,188,8,NULL,NULL,1,NULL,0,0,NULL), + (197,121,188,8,NULL,NULL,1,NULL,0,0,NULL), + (198,172,188,8,NULL,NULL,1,NULL,0,0,NULL), + (199,66,188,7,NULL,NULL,0,NULL,0,0,NULL), + (200,137,66,2,NULL,NULL,0,NULL,0,0,NULL), + (201,66,4,5,NULL,NULL,1,NULL,0,0,NULL), + (202,53,6,5,NULL,NULL,1,NULL,0,0,NULL), + (203,16,36,5,NULL,NULL,1,NULL,0,0,NULL), + (204,153,61,5,NULL,NULL,1,NULL,0,0,NULL), + (205,73,69,5,NULL,NULL,1,NULL,0,0,NULL), + (206,100,72,5,NULL,NULL,1,NULL,0,0,NULL), + (207,78,74,5,NULL,NULL,1,NULL,0,0,NULL), + (208,3,79,5,NULL,NULL,1,NULL,0,0,NULL), + (209,41,87,5,NULL,NULL,1,NULL,0,0,NULL), + (210,170,143,5,NULL,NULL,1,NULL,0,0,NULL), + (211,18,168,5,NULL,NULL,1,NULL,0,0,NULL), + (212,47,174,5,NULL,NULL,1,NULL,0,0,NULL), + (213,59,181,5,NULL,NULL,1,NULL,0,0,NULL), + (214,138,182,5,NULL,NULL,1,NULL,0,0,NULL); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -1271,7 +7295,435 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship_cache` WRITE; /*!40000 ALTER TABLE `civicrm_relationship_cache` DISABLE KEYS */; -INSERT INTO `civicrm_relationship_cache` (`id`, `relationship_id`, `relationship_type_id`, `orientation`, `near_contact_id`, `near_relation`, `far_contact_id`, `far_relation`, `is_active`, `start_date`, `end_date`) VALUES (1,1,1,'a_b',146,'Child of',150,'Parent of',1,NULL,NULL),(2,1,1,'b_a',150,'Parent of',146,'Child of',1,NULL,NULL),(3,2,1,'a_b',169,'Child of',150,'Parent of',1,NULL,NULL),(4,2,1,'b_a',150,'Parent of',169,'Child of',1,NULL,NULL),(5,3,1,'a_b',146,'Child of',61,'Parent of',1,NULL,NULL),(6,3,1,'b_a',61,'Parent of',146,'Child of',1,NULL,NULL),(7,4,1,'a_b',169,'Child of',61,'Parent of',1,NULL,NULL),(8,4,1,'b_a',61,'Parent of',169,'Child of',1,NULL,NULL),(9,5,4,'a_b',169,'Sibling of',146,'Sibling of',1,NULL,NULL),(10,5,4,'b_a',146,'Sibling of',169,'Sibling of',1,NULL,NULL),(11,6,8,'a_b',61,'Household Member of',182,'Household Member is',1,NULL,NULL),(12,6,8,'b_a',182,'Household Member is',61,'Household Member of',1,NULL,NULL),(13,7,8,'a_b',146,'Household Member of',182,'Household Member is',1,NULL,NULL),(14,7,8,'b_a',182,'Household Member is',146,'Household Member of',1,NULL,NULL),(15,8,8,'a_b',169,'Household Member of',182,'Household Member is',1,NULL,NULL),(16,8,8,'b_a',182,'Household Member is',169,'Household Member of',1,NULL,NULL),(17,9,7,'a_b',150,'Head of Household for',182,'Head of Household is',1,NULL,NULL),(18,9,7,'b_a',182,'Head of Household is',150,'Head of Household for',1,NULL,NULL),(19,10,2,'a_b',61,'Spouse of',150,'Spouse of',1,NULL,NULL),(20,10,2,'b_a',150,'Spouse of',61,'Spouse of',1,NULL,NULL),(21,11,1,'a_b',5,'Child of',156,'Parent of',1,NULL,NULL),(22,11,1,'b_a',156,'Parent of',5,'Child of',1,NULL,NULL),(23,12,1,'a_b',145,'Child of',156,'Parent of',1,NULL,NULL),(24,12,1,'b_a',156,'Parent of',145,'Child of',1,NULL,NULL),(25,13,1,'a_b',5,'Child of',198,'Parent of',1,NULL,NULL),(26,13,1,'b_a',198,'Parent of',5,'Child of',1,NULL,NULL),(27,14,1,'a_b',145,'Child of',198,'Parent of',1,NULL,NULL),(28,14,1,'b_a',198,'Parent of',145,'Child of',1,NULL,NULL),(29,15,4,'a_b',145,'Sibling of',5,'Sibling of',1,NULL,NULL),(30,15,4,'b_a',5,'Sibling of',145,'Sibling of',1,NULL,NULL),(31,16,8,'a_b',198,'Household Member of',26,'Household Member is',1,NULL,NULL),(32,16,8,'b_a',26,'Household Member is',198,'Household Member of',1,NULL,NULL),(33,17,8,'a_b',5,'Household Member of',26,'Household Member is',1,NULL,NULL),(34,17,8,'b_a',26,'Household Member is',5,'Household Member of',1,NULL,NULL),(35,18,8,'a_b',145,'Household Member of',26,'Household Member is',1,NULL,NULL),(36,18,8,'b_a',26,'Household Member is',145,'Household Member of',1,NULL,NULL),(37,19,7,'a_b',156,'Head of Household for',26,'Head of Household is',0,NULL,NULL),(38,19,7,'b_a',26,'Head of Household is',156,'Head of Household for',0,NULL,NULL),(39,20,2,'a_b',198,'Spouse of',156,'Spouse of',0,NULL,NULL),(40,20,2,'b_a',156,'Spouse of',198,'Spouse of',0,NULL,NULL),(41,21,1,'a_b',114,'Child of',136,'Parent of',1,NULL,NULL),(42,21,1,'b_a',136,'Parent of',114,'Child of',1,NULL,NULL),(43,22,1,'a_b',137,'Child of',136,'Parent of',1,NULL,NULL),(44,22,1,'b_a',136,'Parent of',137,'Child of',1,NULL,NULL),(45,23,1,'a_b',114,'Child of',36,'Parent of',1,NULL,NULL),(46,23,1,'b_a',36,'Parent of',114,'Child of',1,NULL,NULL),(47,24,1,'a_b',137,'Child of',36,'Parent of',1,NULL,NULL),(48,24,1,'b_a',36,'Parent of',137,'Child of',1,NULL,NULL),(49,25,4,'a_b',137,'Sibling of',114,'Sibling of',1,NULL,NULL),(50,25,4,'b_a',114,'Sibling of',137,'Sibling of',1,NULL,NULL),(51,26,8,'a_b',36,'Household Member of',4,'Household Member is',1,NULL,NULL),(52,26,8,'b_a',4,'Household Member is',36,'Household Member of',1,NULL,NULL),(53,27,8,'a_b',114,'Household Member of',4,'Household Member is',1,NULL,NULL),(54,27,8,'b_a',4,'Household Member is',114,'Household Member of',1,NULL,NULL),(55,28,8,'a_b',137,'Household Member of',4,'Household Member is',1,NULL,NULL),(56,28,8,'b_a',4,'Household Member is',137,'Household Member of',1,NULL,NULL),(57,29,7,'a_b',136,'Head of Household for',4,'Head of Household is',1,NULL,NULL),(58,29,7,'b_a',4,'Head of Household is',136,'Head of Household for',1,NULL,NULL),(59,30,2,'a_b',36,'Spouse of',136,'Spouse of',1,NULL,NULL),(60,30,2,'b_a',136,'Spouse of',36,'Spouse of',1,NULL,NULL),(61,31,1,'a_b',142,'Child of',20,'Parent of',1,NULL,NULL),(62,31,1,'b_a',20,'Parent of',142,'Child of',1,NULL,NULL),(63,32,1,'a_b',2,'Child of',20,'Parent of',1,NULL,NULL),(64,32,1,'b_a',20,'Parent of',2,'Child of',1,NULL,NULL),(65,33,1,'a_b',142,'Child of',179,'Parent of',1,NULL,NULL),(66,33,1,'b_a',179,'Parent of',142,'Child of',1,NULL,NULL),(67,34,1,'a_b',2,'Child of',179,'Parent of',1,NULL,NULL),(68,34,1,'b_a',179,'Parent of',2,'Child of',1,NULL,NULL),(69,35,4,'a_b',2,'Sibling of',142,'Sibling of',1,NULL,NULL),(70,35,4,'b_a',142,'Sibling of',2,'Sibling of',1,NULL,NULL),(71,36,8,'a_b',179,'Household Member of',128,'Household Member is',1,NULL,NULL),(72,36,8,'b_a',128,'Household Member is',179,'Household Member of',1,NULL,NULL),(73,37,8,'a_b',142,'Household Member of',128,'Household Member is',1,NULL,NULL),(74,37,8,'b_a',128,'Household Member is',142,'Household Member of',1,NULL,NULL),(75,38,8,'a_b',2,'Household Member of',128,'Household Member is',1,NULL,NULL),(76,38,8,'b_a',128,'Household Member is',2,'Household Member of',1,NULL,NULL),(77,39,7,'a_b',20,'Head of Household for',128,'Head of Household is',0,NULL,NULL),(78,39,7,'b_a',128,'Head of Household is',20,'Head of Household for',0,NULL,NULL),(79,40,2,'a_b',179,'Spouse of',20,'Spouse of',0,NULL,NULL),(80,40,2,'b_a',20,'Spouse of',179,'Spouse of',0,NULL,NULL),(81,41,1,'a_b',50,'Child of',58,'Parent of',1,NULL,NULL),(82,41,1,'b_a',58,'Parent of',50,'Child of',1,NULL,NULL),(83,42,1,'a_b',70,'Child of',58,'Parent of',1,NULL,NULL),(84,42,1,'b_a',58,'Parent of',70,'Child of',1,NULL,NULL),(85,43,1,'a_b',50,'Child of',3,'Parent of',1,NULL,NULL),(86,43,1,'b_a',3,'Parent of',50,'Child of',1,NULL,NULL),(87,44,1,'a_b',70,'Child of',3,'Parent of',1,NULL,NULL),(88,44,1,'b_a',3,'Parent of',70,'Child of',1,NULL,NULL),(89,45,4,'a_b',70,'Sibling of',50,'Sibling of',1,NULL,NULL),(90,45,4,'b_a',50,'Sibling of',70,'Sibling of',1,NULL,NULL),(91,46,8,'a_b',3,'Household Member of',43,'Household Member is',1,NULL,NULL),(92,46,8,'b_a',43,'Household Member is',3,'Household Member of',1,NULL,NULL),(93,47,8,'a_b',50,'Household Member of',43,'Household Member is',1,NULL,NULL),(94,47,8,'b_a',43,'Household Member is',50,'Household Member of',1,NULL,NULL),(95,48,8,'a_b',70,'Household Member of',43,'Household Member is',1,NULL,NULL),(96,48,8,'b_a',43,'Household Member is',70,'Household Member of',1,NULL,NULL),(97,49,7,'a_b',58,'Head of Household for',43,'Head of Household is',0,NULL,NULL),(98,49,7,'b_a',43,'Head of Household is',58,'Head of Household for',0,NULL,NULL),(99,50,2,'a_b',3,'Spouse of',58,'Spouse of',0,NULL,NULL),(100,50,2,'b_a',58,'Spouse of',3,'Spouse of',0,NULL,NULL),(101,51,1,'a_b',22,'Child of',42,'Parent of',1,NULL,NULL),(102,51,1,'b_a',42,'Parent of',22,'Child of',1,NULL,NULL),(103,52,1,'a_b',124,'Child of',42,'Parent of',1,NULL,NULL),(104,52,1,'b_a',42,'Parent of',124,'Child of',1,NULL,NULL),(105,53,1,'a_b',22,'Child of',155,'Parent of',1,NULL,NULL),(106,53,1,'b_a',155,'Parent of',22,'Child of',1,NULL,NULL),(107,54,1,'a_b',124,'Child of',155,'Parent of',1,NULL,NULL),(108,54,1,'b_a',155,'Parent of',124,'Child of',1,NULL,NULL),(109,55,4,'a_b',124,'Sibling of',22,'Sibling of',1,NULL,NULL),(110,55,4,'b_a',22,'Sibling of',124,'Sibling of',1,NULL,NULL),(111,56,8,'a_b',155,'Household Member of',186,'Household Member is',1,NULL,NULL),(112,56,8,'b_a',186,'Household Member is',155,'Household Member of',1,NULL,NULL),(113,57,8,'a_b',22,'Household Member of',186,'Household Member is',1,NULL,NULL),(114,57,8,'b_a',186,'Household Member is',22,'Household Member of',1,NULL,NULL),(115,58,8,'a_b',124,'Household Member of',186,'Household Member is',1,NULL,NULL),(116,58,8,'b_a',186,'Household Member is',124,'Household Member of',1,NULL,NULL),(117,59,7,'a_b',42,'Head of Household for',186,'Head of Household is',1,NULL,NULL),(118,59,7,'b_a',186,'Head of Household is',42,'Head of Household for',1,NULL,NULL),(119,60,2,'a_b',155,'Spouse of',42,'Spouse of',1,NULL,NULL),(120,60,2,'b_a',42,'Spouse of',155,'Spouse of',1,NULL,NULL),(121,61,1,'a_b',170,'Child of',56,'Parent of',1,NULL,NULL),(122,61,1,'b_a',56,'Parent of',170,'Child of',1,NULL,NULL),(123,62,1,'a_b',71,'Child of',56,'Parent of',1,NULL,NULL),(124,62,1,'b_a',56,'Parent of',71,'Child of',1,NULL,NULL),(125,63,1,'a_b',170,'Child of',67,'Parent of',1,NULL,NULL),(126,63,1,'b_a',67,'Parent of',170,'Child of',1,NULL,NULL),(127,64,1,'a_b',71,'Child of',67,'Parent of',1,NULL,NULL),(128,64,1,'b_a',67,'Parent of',71,'Child of',1,NULL,NULL),(129,65,4,'a_b',71,'Sibling of',170,'Sibling of',1,NULL,NULL),(130,65,4,'b_a',170,'Sibling of',71,'Sibling of',1,NULL,NULL),(131,66,8,'a_b',67,'Household Member of',158,'Household Member is',1,NULL,NULL),(132,66,8,'b_a',158,'Household Member is',67,'Household Member of',1,NULL,NULL),(133,67,8,'a_b',170,'Household Member of',158,'Household Member is',1,NULL,NULL),(134,67,8,'b_a',158,'Household Member is',170,'Household Member of',1,NULL,NULL),(135,68,8,'a_b',71,'Household Member of',158,'Household Member is',1,NULL,NULL),(136,68,8,'b_a',158,'Household Member is',71,'Household Member of',1,NULL,NULL),(137,69,7,'a_b',56,'Head of Household for',158,'Head of Household is',1,NULL,NULL),(138,69,7,'b_a',158,'Head of Household is',56,'Head of Household for',1,NULL,NULL),(139,70,2,'a_b',67,'Spouse of',56,'Spouse of',1,NULL,NULL),(140,70,2,'b_a',56,'Spouse of',67,'Spouse of',1,NULL,NULL),(141,71,1,'a_b',80,'Child of',120,'Parent of',1,NULL,NULL),(142,71,1,'b_a',120,'Parent of',80,'Child of',1,NULL,NULL),(143,72,1,'a_b',135,'Child of',120,'Parent of',1,NULL,NULL),(144,72,1,'b_a',120,'Parent of',135,'Child of',1,NULL,NULL),(145,73,1,'a_b',80,'Child of',40,'Parent of',1,NULL,NULL),(146,73,1,'b_a',40,'Parent of',80,'Child of',1,NULL,NULL),(147,74,1,'a_b',135,'Child of',40,'Parent of',1,NULL,NULL),(148,74,1,'b_a',40,'Parent of',135,'Child of',1,NULL,NULL),(149,75,4,'a_b',135,'Sibling of',80,'Sibling of',1,NULL,NULL),(150,75,4,'b_a',80,'Sibling of',135,'Sibling of',1,NULL,NULL),(151,76,8,'a_b',40,'Household Member of',174,'Household Member is',1,NULL,NULL),(152,76,8,'b_a',174,'Household Member is',40,'Household Member of',1,NULL,NULL),(153,77,8,'a_b',80,'Household Member of',174,'Household Member is',1,NULL,NULL),(154,77,8,'b_a',174,'Household Member is',80,'Household Member of',1,NULL,NULL),(155,78,8,'a_b',135,'Household Member of',174,'Household Member is',1,NULL,NULL),(156,78,8,'b_a',174,'Household Member is',135,'Household Member of',1,NULL,NULL),(157,79,7,'a_b',120,'Head of Household for',174,'Head of Household is',0,NULL,NULL),(158,79,7,'b_a',174,'Head of Household is',120,'Head of Household for',0,NULL,NULL),(159,80,2,'a_b',40,'Spouse of',120,'Spouse of',0,NULL,NULL),(160,80,2,'b_a',120,'Spouse of',40,'Spouse of',0,NULL,NULL),(161,81,1,'a_b',125,'Child of',140,'Parent of',1,NULL,NULL),(162,81,1,'b_a',140,'Parent of',125,'Child of',1,NULL,NULL),(163,82,1,'a_b',35,'Child of',140,'Parent of',1,NULL,NULL),(164,82,1,'b_a',140,'Parent of',35,'Child of',1,NULL,NULL),(165,83,1,'a_b',125,'Child of',86,'Parent of',1,NULL,NULL),(166,83,1,'b_a',86,'Parent of',125,'Child of',1,NULL,NULL),(167,84,1,'a_b',35,'Child of',86,'Parent of',1,NULL,NULL),(168,84,1,'b_a',86,'Parent of',35,'Child of',1,NULL,NULL),(169,85,4,'a_b',35,'Sibling of',125,'Sibling of',1,NULL,NULL),(170,85,4,'b_a',125,'Sibling of',35,'Sibling of',1,NULL,NULL),(171,86,8,'a_b',86,'Household Member of',148,'Household Member is',1,NULL,NULL),(172,86,8,'b_a',148,'Household Member is',86,'Household Member of',1,NULL,NULL),(173,87,8,'a_b',125,'Household Member of',148,'Household Member is',1,NULL,NULL),(174,87,8,'b_a',148,'Household Member is',125,'Household Member of',1,NULL,NULL),(175,88,8,'a_b',35,'Household Member of',148,'Household Member is',1,NULL,NULL),(176,88,8,'b_a',148,'Household Member is',35,'Household Member of',1,NULL,NULL),(177,89,7,'a_b',140,'Head of Household for',148,'Head of Household is',1,NULL,NULL),(178,89,7,'b_a',148,'Head of Household is',140,'Head of Household for',1,NULL,NULL),(179,90,2,'a_b',86,'Spouse of',140,'Spouse of',1,NULL,NULL),(180,90,2,'b_a',140,'Spouse of',86,'Spouse of',1,NULL,NULL),(181,91,1,'a_b',177,'Child of',122,'Parent of',1,NULL,NULL),(182,91,1,'b_a',122,'Parent of',177,'Child of',1,NULL,NULL),(183,92,1,'a_b',129,'Child of',122,'Parent of',1,NULL,NULL),(184,92,1,'b_a',122,'Parent of',129,'Child of',1,NULL,NULL),(185,93,1,'a_b',177,'Child of',162,'Parent of',1,NULL,NULL),(186,93,1,'b_a',162,'Parent of',177,'Child of',1,NULL,NULL),(187,94,1,'a_b',129,'Child of',162,'Parent of',1,NULL,NULL),(188,94,1,'b_a',162,'Parent of',129,'Child of',1,NULL,NULL),(189,95,4,'a_b',129,'Sibling of',177,'Sibling of',1,NULL,NULL),(190,95,4,'b_a',177,'Sibling of',129,'Sibling of',1,NULL,NULL),(191,96,8,'a_b',162,'Household Member of',165,'Household Member is',1,NULL,NULL),(192,96,8,'b_a',165,'Household Member is',162,'Household Member of',1,NULL,NULL),(193,97,8,'a_b',177,'Household Member of',165,'Household Member is',1,NULL,NULL),(194,97,8,'b_a',165,'Household Member is',177,'Household Member of',1,NULL,NULL),(195,98,8,'a_b',129,'Household Member of',165,'Household Member is',1,NULL,NULL),(196,98,8,'b_a',165,'Household Member is',129,'Household Member of',1,NULL,NULL),(197,99,7,'a_b',122,'Head of Household for',165,'Head of Household is',0,NULL,NULL),(198,99,7,'b_a',165,'Head of Household is',122,'Head of Household for',0,NULL,NULL),(199,100,2,'a_b',162,'Spouse of',122,'Spouse of',0,NULL,NULL),(200,100,2,'b_a',122,'Spouse of',162,'Spouse of',0,NULL,NULL),(201,101,1,'a_b',159,'Child of',118,'Parent of',1,NULL,NULL),(202,101,1,'b_a',118,'Parent of',159,'Child of',1,NULL,NULL),(203,102,1,'a_b',189,'Child of',118,'Parent of',1,NULL,NULL),(204,102,1,'b_a',118,'Parent of',189,'Child of',1,NULL,NULL),(205,103,1,'a_b',159,'Child of',17,'Parent of',1,NULL,NULL),(206,103,1,'b_a',17,'Parent of',159,'Child of',1,NULL,NULL),(207,104,1,'a_b',189,'Child of',17,'Parent of',1,NULL,NULL),(208,104,1,'b_a',17,'Parent of',189,'Child of',1,NULL,NULL),(209,105,4,'a_b',189,'Sibling of',159,'Sibling of',1,NULL,NULL),(210,105,4,'b_a',159,'Sibling of',189,'Sibling of',1,NULL,NULL),(211,106,8,'a_b',17,'Household Member of',97,'Household Member is',1,NULL,NULL),(212,106,8,'b_a',97,'Household Member is',17,'Household Member of',1,NULL,NULL),(213,107,8,'a_b',159,'Household Member of',97,'Household Member is',1,NULL,NULL),(214,107,8,'b_a',97,'Household Member is',159,'Household Member of',1,NULL,NULL),(215,108,8,'a_b',189,'Household Member of',97,'Household Member is',1,NULL,NULL),(216,108,8,'b_a',97,'Household Member is',189,'Household Member of',1,NULL,NULL),(217,109,7,'a_b',118,'Head of Household for',97,'Head of Household is',1,NULL,NULL),(218,109,7,'b_a',97,'Head of Household is',118,'Head of Household for',1,NULL,NULL),(219,110,2,'a_b',17,'Spouse of',118,'Spouse of',1,NULL,NULL),(220,110,2,'b_a',118,'Spouse of',17,'Spouse of',1,NULL,NULL),(221,111,1,'a_b',168,'Child of',161,'Parent of',1,NULL,NULL),(222,111,1,'b_a',161,'Parent of',168,'Child of',1,NULL,NULL),(223,112,1,'a_b',7,'Child of',161,'Parent of',1,NULL,NULL),(224,112,1,'b_a',161,'Parent of',7,'Child of',1,NULL,NULL),(225,113,1,'a_b',168,'Child of',151,'Parent of',1,NULL,NULL),(226,113,1,'b_a',151,'Parent of',168,'Child of',1,NULL,NULL),(227,114,1,'a_b',7,'Child of',151,'Parent of',1,NULL,NULL),(228,114,1,'b_a',151,'Parent of',7,'Child of',1,NULL,NULL),(229,115,4,'a_b',7,'Sibling of',168,'Sibling of',1,NULL,NULL),(230,115,4,'b_a',168,'Sibling of',7,'Sibling of',1,NULL,NULL),(231,116,8,'a_b',151,'Household Member of',8,'Household Member is',1,NULL,NULL),(232,116,8,'b_a',8,'Household Member is',151,'Household Member of',1,NULL,NULL),(233,117,8,'a_b',168,'Household Member of',8,'Household Member is',1,NULL,NULL),(234,117,8,'b_a',8,'Household Member is',168,'Household Member of',1,NULL,NULL),(235,118,8,'a_b',7,'Household Member of',8,'Household Member is',1,NULL,NULL),(236,118,8,'b_a',8,'Household Member is',7,'Household Member of',1,NULL,NULL),(237,119,7,'a_b',161,'Head of Household for',8,'Head of Household is',0,NULL,NULL),(238,119,7,'b_a',8,'Head of Household is',161,'Head of Household for',0,NULL,NULL),(239,120,2,'a_b',151,'Spouse of',161,'Spouse of',0,NULL,NULL),(240,120,2,'b_a',161,'Spouse of',151,'Spouse of',0,NULL,NULL),(241,121,1,'a_b',138,'Child of',25,'Parent of',1,NULL,NULL),(242,121,1,'b_a',25,'Parent of',138,'Child of',1,NULL,NULL),(243,122,1,'a_b',117,'Child of',25,'Parent of',1,NULL,NULL),(244,122,1,'b_a',25,'Parent of',117,'Child of',1,NULL,NULL),(245,123,1,'a_b',138,'Child of',191,'Parent of',1,NULL,NULL),(246,123,1,'b_a',191,'Parent of',138,'Child of',1,NULL,NULL),(247,124,1,'a_b',117,'Child of',191,'Parent of',1,NULL,NULL),(248,124,1,'b_a',191,'Parent of',117,'Child of',1,NULL,NULL),(249,125,4,'a_b',117,'Sibling of',138,'Sibling of',1,NULL,NULL),(250,125,4,'b_a',138,'Sibling of',117,'Sibling of',1,NULL,NULL),(251,126,8,'a_b',191,'Household Member of',144,'Household Member is',1,NULL,NULL),(252,126,8,'b_a',144,'Household Member is',191,'Household Member of',1,NULL,NULL),(253,127,8,'a_b',138,'Household Member of',144,'Household Member is',1,NULL,NULL),(254,127,8,'b_a',144,'Household Member is',138,'Household Member of',1,NULL,NULL),(255,128,8,'a_b',117,'Household Member of',144,'Household Member is',1,NULL,NULL),(256,128,8,'b_a',144,'Household Member is',117,'Household Member of',1,NULL,NULL),(257,129,7,'a_b',25,'Head of Household for',144,'Head of Household is',0,NULL,NULL),(258,129,7,'b_a',144,'Head of Household is',25,'Head of Household for',0,NULL,NULL),(259,130,2,'a_b',191,'Spouse of',25,'Spouse of',0,NULL,NULL),(260,130,2,'b_a',25,'Spouse of',191,'Spouse of',0,NULL,NULL),(261,131,1,'a_b',79,'Child of',184,'Parent of',1,NULL,NULL),(262,131,1,'b_a',184,'Parent of',79,'Child of',1,NULL,NULL),(263,132,1,'a_b',28,'Child of',184,'Parent of',1,NULL,NULL),(264,132,1,'b_a',184,'Parent of',28,'Child of',1,NULL,NULL),(265,133,1,'a_b',79,'Child of',54,'Parent of',1,NULL,NULL),(266,133,1,'b_a',54,'Parent of',79,'Child of',1,NULL,NULL),(267,134,1,'a_b',28,'Child of',54,'Parent of',1,NULL,NULL),(268,134,1,'b_a',54,'Parent of',28,'Child of',1,NULL,NULL),(269,135,4,'a_b',28,'Sibling of',79,'Sibling of',1,NULL,NULL),(270,135,4,'b_a',79,'Sibling of',28,'Sibling of',1,NULL,NULL),(271,136,8,'a_b',54,'Household Member of',134,'Household Member is',1,NULL,NULL),(272,136,8,'b_a',134,'Household Member is',54,'Household Member of',1,NULL,NULL),(273,137,8,'a_b',79,'Household Member of',134,'Household Member is',1,NULL,NULL),(274,137,8,'b_a',134,'Household Member is',79,'Household Member of',1,NULL,NULL),(275,138,8,'a_b',28,'Household Member of',134,'Household Member is',1,NULL,NULL),(276,138,8,'b_a',134,'Household Member is',28,'Household Member of',1,NULL,NULL),(277,139,7,'a_b',184,'Head of Household for',134,'Head of Household is',1,NULL,NULL),(278,139,7,'b_a',134,'Head of Household is',184,'Head of Household for',1,NULL,NULL),(279,140,2,'a_b',54,'Spouse of',184,'Spouse of',1,NULL,NULL),(280,140,2,'b_a',184,'Spouse of',54,'Spouse of',1,NULL,NULL),(281,141,1,'a_b',200,'Child of',127,'Parent of',1,NULL,NULL),(282,141,1,'b_a',127,'Parent of',200,'Child of',1,NULL,NULL),(283,142,1,'a_b',112,'Child of',127,'Parent of',1,NULL,NULL),(284,142,1,'b_a',127,'Parent of',112,'Child of',1,NULL,NULL),(285,143,1,'a_b',200,'Child of',72,'Parent of',1,NULL,NULL),(286,143,1,'b_a',72,'Parent of',200,'Child of',1,NULL,NULL),(287,144,1,'a_b',112,'Child of',72,'Parent of',1,NULL,NULL),(288,144,1,'b_a',72,'Parent of',112,'Child of',1,NULL,NULL),(289,145,4,'a_b',112,'Sibling of',200,'Sibling of',1,NULL,NULL),(290,145,4,'b_a',200,'Sibling of',112,'Sibling of',1,NULL,NULL),(291,146,8,'a_b',72,'Household Member of',96,'Household Member is',1,NULL,NULL),(292,146,8,'b_a',96,'Household Member is',72,'Household Member of',1,NULL,NULL),(293,147,8,'a_b',200,'Household Member of',96,'Household Member is',1,NULL,NULL),(294,147,8,'b_a',96,'Household Member is',200,'Household Member of',1,NULL,NULL),(295,148,8,'a_b',112,'Household Member of',96,'Household Member is',1,NULL,NULL),(296,148,8,'b_a',96,'Household Member is',112,'Household Member of',1,NULL,NULL),(297,149,7,'a_b',127,'Head of Household for',96,'Head of Household is',1,NULL,NULL),(298,149,7,'b_a',96,'Head of Household is',127,'Head of Household for',1,NULL,NULL),(299,150,2,'a_b',72,'Spouse of',127,'Spouse of',1,NULL,NULL),(300,150,2,'b_a',127,'Spouse of',72,'Spouse of',1,NULL,NULL),(301,151,1,'a_b',38,'Child of',190,'Parent of',1,NULL,NULL),(302,151,1,'b_a',190,'Parent of',38,'Child of',1,NULL,NULL),(303,152,1,'a_b',77,'Child of',190,'Parent of',1,NULL,NULL),(304,152,1,'b_a',190,'Parent of',77,'Child of',1,NULL,NULL),(305,153,1,'a_b',38,'Child of',85,'Parent of',1,NULL,NULL),(306,153,1,'b_a',85,'Parent of',38,'Child of',1,NULL,NULL),(307,154,1,'a_b',77,'Child of',85,'Parent of',1,NULL,NULL),(308,154,1,'b_a',85,'Parent of',77,'Child of',1,NULL,NULL),(309,155,4,'a_b',77,'Sibling of',38,'Sibling of',1,NULL,NULL),(310,155,4,'b_a',38,'Sibling of',77,'Sibling of',1,NULL,NULL),(311,156,8,'a_b',85,'Household Member of',107,'Household Member is',1,NULL,NULL),(312,156,8,'b_a',107,'Household Member is',85,'Household Member of',1,NULL,NULL),(313,157,8,'a_b',38,'Household Member of',107,'Household Member is',1,NULL,NULL),(314,157,8,'b_a',107,'Household Member is',38,'Household Member of',1,NULL,NULL),(315,158,8,'a_b',77,'Household Member of',107,'Household Member is',1,NULL,NULL),(316,158,8,'b_a',107,'Household Member is',77,'Household Member of',1,NULL,NULL),(317,159,7,'a_b',190,'Head of Household for',107,'Head of Household is',1,NULL,NULL),(318,159,7,'b_a',107,'Head of Household is',190,'Head of Household for',1,NULL,NULL),(319,160,2,'a_b',85,'Spouse of',190,'Spouse of',1,NULL,NULL),(320,160,2,'b_a',190,'Spouse of',85,'Spouse of',1,NULL,NULL),(321,161,1,'a_b',121,'Child of',13,'Parent of',1,NULL,NULL),(322,161,1,'b_a',13,'Parent of',121,'Child of',1,NULL,NULL),(323,162,1,'a_b',103,'Child of',13,'Parent of',1,NULL,NULL),(324,162,1,'b_a',13,'Parent of',103,'Child of',1,NULL,NULL),(325,163,1,'a_b',121,'Child of',33,'Parent of',1,NULL,NULL),(326,163,1,'b_a',33,'Parent of',121,'Child of',1,NULL,NULL),(327,164,1,'a_b',103,'Child of',33,'Parent of',1,NULL,NULL),(328,164,1,'b_a',33,'Parent of',103,'Child of',1,NULL,NULL),(329,165,4,'a_b',103,'Sibling of',121,'Sibling of',1,NULL,NULL),(330,165,4,'b_a',121,'Sibling of',103,'Sibling of',1,NULL,NULL),(331,166,8,'a_b',33,'Household Member of',183,'Household Member is',1,NULL,NULL),(332,166,8,'b_a',183,'Household Member is',33,'Household Member of',1,NULL,NULL),(333,167,8,'a_b',121,'Household Member of',183,'Household Member is',1,NULL,NULL),(334,167,8,'b_a',183,'Household Member is',121,'Household Member of',1,NULL,NULL),(335,168,8,'a_b',103,'Household Member of',183,'Household Member is',1,NULL,NULL),(336,168,8,'b_a',183,'Household Member is',103,'Household Member of',1,NULL,NULL),(337,169,7,'a_b',13,'Head of Household for',183,'Head of Household is',1,NULL,NULL),(338,169,7,'b_a',183,'Head of Household is',13,'Head of Household for',1,NULL,NULL),(339,170,2,'a_b',33,'Spouse of',13,'Spouse of',1,NULL,NULL),(340,170,2,'b_a',13,'Spouse of',33,'Spouse of',1,NULL,NULL),(341,171,1,'a_b',63,'Child of',175,'Parent of',1,NULL,NULL),(342,171,1,'b_a',175,'Parent of',63,'Child of',1,NULL,NULL),(343,172,1,'a_b',69,'Child of',175,'Parent of',1,NULL,NULL),(344,172,1,'b_a',175,'Parent of',69,'Child of',1,NULL,NULL),(345,173,1,'a_b',63,'Child of',126,'Parent of',1,NULL,NULL),(346,173,1,'b_a',126,'Parent of',63,'Child of',1,NULL,NULL),(347,174,1,'a_b',69,'Child of',126,'Parent of',1,NULL,NULL),(348,174,1,'b_a',126,'Parent of',69,'Child of',1,NULL,NULL),(349,175,4,'a_b',69,'Sibling of',63,'Sibling of',1,NULL,NULL),(350,175,4,'b_a',63,'Sibling of',69,'Sibling of',1,NULL,NULL),(351,176,8,'a_b',126,'Household Member of',31,'Household Member is',1,NULL,NULL),(352,176,8,'b_a',31,'Household Member is',126,'Household Member of',1,NULL,NULL),(353,177,8,'a_b',63,'Household Member of',31,'Household Member is',1,NULL,NULL),(354,177,8,'b_a',31,'Household Member is',63,'Household Member of',1,NULL,NULL),(355,178,8,'a_b',69,'Household Member of',31,'Household Member is',1,NULL,NULL),(356,178,8,'b_a',31,'Household Member is',69,'Household Member of',1,NULL,NULL),(357,179,7,'a_b',175,'Head of Household for',31,'Head of Household is',0,NULL,NULL),(358,179,7,'b_a',31,'Head of Household is',175,'Head of Household for',0,NULL,NULL),(359,180,2,'a_b',126,'Spouse of',175,'Spouse of',0,NULL,NULL),(360,180,2,'b_a',175,'Spouse of',126,'Spouse of',0,NULL,NULL),(361,181,1,'a_b',15,'Child of',84,'Parent of',1,NULL,NULL),(362,181,1,'b_a',84,'Parent of',15,'Child of',1,NULL,NULL),(363,182,1,'a_b',37,'Child of',84,'Parent of',1,NULL,NULL),(364,182,1,'b_a',84,'Parent of',37,'Child of',1,NULL,NULL),(365,183,1,'a_b',15,'Child of',133,'Parent of',1,NULL,NULL),(366,183,1,'b_a',133,'Parent of',15,'Child of',1,NULL,NULL),(367,184,1,'a_b',37,'Child of',133,'Parent of',1,NULL,NULL),(368,184,1,'b_a',133,'Parent of',37,'Child of',1,NULL,NULL),(369,185,4,'a_b',37,'Sibling of',15,'Sibling of',1,NULL,NULL),(370,185,4,'b_a',15,'Sibling of',37,'Sibling of',1,NULL,NULL),(371,186,8,'a_b',133,'Household Member of',32,'Household Member is',1,NULL,NULL),(372,186,8,'b_a',32,'Household Member is',133,'Household Member of',1,NULL,NULL),(373,187,8,'a_b',15,'Household Member of',32,'Household Member is',1,NULL,NULL),(374,187,8,'b_a',32,'Household Member is',15,'Household Member of',1,NULL,NULL),(375,188,8,'a_b',37,'Household Member of',32,'Household Member is',1,NULL,NULL),(376,188,8,'b_a',32,'Household Member is',37,'Household Member of',1,NULL,NULL),(377,189,7,'a_b',84,'Head of Household for',32,'Head of Household is',0,NULL,NULL),(378,189,7,'b_a',32,'Head of Household is',84,'Head of Household for',0,NULL,NULL),(379,190,2,'a_b',133,'Spouse of',84,'Spouse of',0,NULL,NULL),(380,190,2,'b_a',84,'Spouse of',133,'Spouse of',0,NULL,NULL),(381,191,1,'a_b',132,'Child of',34,'Parent of',1,NULL,NULL),(382,191,1,'b_a',34,'Parent of',132,'Child of',1,NULL,NULL),(383,192,1,'a_b',41,'Child of',34,'Parent of',1,NULL,NULL),(384,192,1,'b_a',34,'Parent of',41,'Child of',1,NULL,NULL),(385,193,1,'a_b',132,'Child of',51,'Parent of',1,NULL,NULL),(386,193,1,'b_a',51,'Parent of',132,'Child of',1,NULL,NULL),(387,194,1,'a_b',41,'Child of',51,'Parent of',1,NULL,NULL),(388,194,1,'b_a',51,'Parent of',41,'Child of',1,NULL,NULL),(389,195,4,'a_b',41,'Sibling of',132,'Sibling of',1,NULL,NULL),(390,195,4,'b_a',132,'Sibling of',41,'Sibling of',1,NULL,NULL),(391,196,8,'a_b',51,'Household Member of',94,'Household Member is',1,NULL,NULL),(392,196,8,'b_a',94,'Household Member is',51,'Household Member of',1,NULL,NULL),(393,197,8,'a_b',132,'Household Member of',94,'Household Member is',1,NULL,NULL),(394,197,8,'b_a',94,'Household Member is',132,'Household Member of',1,NULL,NULL),(395,198,8,'a_b',41,'Household Member of',94,'Household Member is',1,NULL,NULL),(396,198,8,'b_a',94,'Household Member is',41,'Household Member of',1,NULL,NULL),(397,199,7,'a_b',34,'Head of Household for',94,'Head of Household is',1,NULL,NULL),(398,199,7,'b_a',94,'Head of Household is',34,'Head of Household for',1,NULL,NULL),(399,200,2,'a_b',51,'Spouse of',34,'Spouse of',1,NULL,NULL),(400,200,2,'b_a',34,'Spouse of',51,'Spouse of',1,NULL,NULL),(401,201,5,'a_b',135,'Employee of',21,'Employer of',1,NULL,NULL),(402,201,5,'b_a',21,'Employer of',135,'Employee of',1,NULL,NULL),(403,202,5,'a_b',176,'Employee of',45,'Employer of',1,NULL,NULL),(404,202,5,'b_a',45,'Employer of',176,'Employee of',1,NULL,NULL),(405,203,5,'a_b',201,'Employee of',48,'Employer of',1,NULL,NULL),(406,203,5,'b_a',48,'Employer of',201,'Employee of',1,NULL,NULL),(407,204,5,'a_b',37,'Employee of',53,'Employer of',1,NULL,NULL),(408,204,5,'b_a',53,'Employer of',37,'Employee of',1,NULL,NULL),(409,205,5,'a_b',161,'Employee of',55,'Employer of',1,NULL,NULL),(410,205,5,'b_a',55,'Employer of',161,'Employee of',1,NULL,NULL),(411,206,5,'a_b',139,'Employee of',62,'Employer of',1,NULL,NULL),(412,206,5,'b_a',62,'Employer of',139,'Employee of',1,NULL,NULL),(413,207,5,'a_b',68,'Employee of',87,'Employer of',1,NULL,NULL),(414,207,5,'b_a',87,'Employer of',68,'Employee of',1,NULL,NULL),(415,208,5,'a_b',132,'Employee of',89,'Employer of',1,NULL,NULL),(416,208,5,'b_a',89,'Employer of',132,'Employee of',1,NULL,NULL),(417,209,5,'a_b',5,'Employee of',113,'Employer of',1,NULL,NULL),(418,209,5,'b_a',113,'Employer of',5,'Employee of',1,NULL,NULL),(419,210,5,'a_b',137,'Employee of',123,'Employer of',1,NULL,NULL),(420,210,5,'b_a',123,'Employer of',137,'Employee of',1,NULL,NULL),(421,211,5,'a_b',181,'Employee of',130,'Employer of',1,NULL,NULL),(422,211,5,'b_a',130,'Employer of',181,'Employee of',1,NULL,NULL),(423,212,5,'a_b',16,'Employee of',141,'Employer of',1,NULL,NULL),(424,212,5,'b_a',141,'Employer of',16,'Employee of',1,NULL,NULL),(425,213,5,'a_b',29,'Employee of',153,'Employer of',1,NULL,NULL),(426,213,5,'b_a',153,'Employer of',29,'Employee of',1,NULL,NULL),(427,214,5,'a_b',103,'Employee of',160,'Employer of',1,NULL,NULL),(428,214,5,'b_a',160,'Employer of',103,'Employee of',1,NULL,NULL),(429,215,5,'a_b',49,'Employee of',163,'Employer of',1,NULL,NULL),(430,215,5,'b_a',163,'Employer of',49,'Employee of',1,NULL,NULL); +INSERT INTO `civicrm_relationship_cache` (`id`, `relationship_id`, `relationship_type_id`, `orientation`, `near_contact_id`, `near_relation`, `far_contact_id`, `far_relation`, `is_active`, `start_date`, `end_date`) VALUES + (1,1,1,'a_b',130,'Child of',35,'Parent of',1,NULL,NULL), + (2,1,1,'b_a',35,'Parent of',130,'Child of',1,NULL,NULL), + (3,2,1,'a_b',55,'Child of',35,'Parent of',1,NULL,NULL), + (4,2,1,'b_a',35,'Parent of',55,'Child of',1,NULL,NULL), + (5,3,1,'a_b',130,'Child of',92,'Parent of',1,NULL,NULL), + (6,3,1,'b_a',92,'Parent of',130,'Child of',1,NULL,NULL), + (7,4,1,'a_b',55,'Child of',92,'Parent of',1,NULL,NULL), + (8,4,1,'b_a',92,'Parent of',55,'Child of',1,NULL,NULL), + (9,5,4,'a_b',55,'Sibling of',130,'Sibling of',1,NULL,NULL), + (10,5,4,'b_a',130,'Sibling of',55,'Sibling of',1,NULL,NULL), + (11,6,8,'a_b',92,'Household Member of',51,'Household Member is',1,NULL,NULL), + (12,6,8,'b_a',51,'Household Member is',92,'Household Member of',1,NULL,NULL), + (13,7,8,'a_b',130,'Household Member of',51,'Household Member is',1,NULL,NULL), + (14,7,8,'b_a',51,'Household Member is',130,'Household Member of',1,NULL,NULL), + (15,8,8,'a_b',55,'Household Member of',51,'Household Member is',1,NULL,NULL), + (16,8,8,'b_a',51,'Household Member is',55,'Household Member of',1,NULL,NULL), + (17,9,7,'a_b',35,'Head of Household for',51,'Head of Household is',1,NULL,NULL), + (18,9,7,'b_a',51,'Head of Household is',35,'Head of Household for',1,NULL,NULL), + (19,10,2,'a_b',92,'Spouse of',35,'Spouse of',1,NULL,NULL), + (20,10,2,'b_a',35,'Spouse of',92,'Spouse of',1,NULL,NULL), + (21,11,1,'a_b',123,'Child of',3,'Parent of',1,NULL,NULL), + (22,11,1,'b_a',3,'Parent of',123,'Child of',1,NULL,NULL), + (23,12,1,'a_b',108,'Child of',3,'Parent of',1,NULL,NULL), + (24,12,1,'b_a',3,'Parent of',108,'Child of',1,NULL,NULL), + (25,13,1,'a_b',123,'Child of',42,'Parent of',1,NULL,NULL), + (26,13,1,'b_a',42,'Parent of',123,'Child of',1,NULL,NULL), + (27,14,1,'a_b',108,'Child of',42,'Parent of',1,NULL,NULL), + (28,14,1,'b_a',42,'Parent of',108,'Child of',1,NULL,NULL), + (29,15,4,'a_b',108,'Sibling of',123,'Sibling of',1,NULL,NULL), + (30,15,4,'b_a',123,'Sibling of',108,'Sibling of',1,NULL,NULL), + (31,16,8,'a_b',42,'Household Member of',62,'Household Member is',1,NULL,NULL), + (32,16,8,'b_a',62,'Household Member is',42,'Household Member of',1,NULL,NULL), + (33,17,8,'a_b',123,'Household Member of',62,'Household Member is',1,NULL,NULL), + (34,17,8,'b_a',62,'Household Member is',123,'Household Member of',1,NULL,NULL), + (35,18,8,'a_b',108,'Household Member of',62,'Household Member is',1,NULL,NULL), + (36,18,8,'b_a',62,'Household Member is',108,'Household Member of',1,NULL,NULL), + (37,19,7,'a_b',3,'Head of Household for',62,'Head of Household is',1,NULL,NULL), + (38,19,7,'b_a',62,'Head of Household is',3,'Head of Household for',1,NULL,NULL), + (39,20,2,'a_b',42,'Spouse of',3,'Spouse of',1,NULL,NULL), + (40,20,2,'b_a',3,'Spouse of',42,'Spouse of',1,NULL,NULL), + (41,21,1,'a_b',118,'Child of',40,'Parent of',1,NULL,NULL), + (42,21,1,'b_a',40,'Parent of',118,'Child of',1,NULL,NULL), + (43,22,1,'a_b',101,'Child of',40,'Parent of',1,NULL,NULL), + (44,22,1,'b_a',40,'Parent of',101,'Child of',1,NULL,NULL), + (45,23,1,'a_b',118,'Child of',113,'Parent of',1,NULL,NULL), + (46,23,1,'b_a',113,'Parent of',118,'Child of',1,NULL,NULL), + (47,24,1,'a_b',101,'Child of',113,'Parent of',1,NULL,NULL), + (48,24,1,'b_a',113,'Parent of',101,'Child of',1,NULL,NULL), + (49,25,4,'a_b',101,'Sibling of',118,'Sibling of',1,NULL,NULL), + (50,25,4,'b_a',118,'Sibling of',101,'Sibling of',1,NULL,NULL), + (51,26,8,'a_b',113,'Household Member of',126,'Household Member is',1,NULL,NULL), + (52,26,8,'b_a',126,'Household Member is',113,'Household Member of',1,NULL,NULL), + (53,27,8,'a_b',118,'Household Member of',126,'Household Member is',1,NULL,NULL), + (54,27,8,'b_a',126,'Household Member is',118,'Household Member of',1,NULL,NULL), + (55,28,8,'a_b',101,'Household Member of',126,'Household Member is',1,NULL,NULL), + (56,28,8,'b_a',126,'Household Member is',101,'Household Member of',1,NULL,NULL), + (57,29,7,'a_b',40,'Head of Household for',126,'Head of Household is',1,NULL,NULL), + (58,29,7,'b_a',126,'Head of Household is',40,'Head of Household for',1,NULL,NULL), + (59,30,2,'a_b',113,'Spouse of',40,'Spouse of',1,NULL,NULL), + (60,30,2,'b_a',40,'Spouse of',113,'Spouse of',1,NULL,NULL), + (61,31,1,'a_b',142,'Child of',132,'Parent of',1,NULL,NULL), + (62,31,1,'b_a',132,'Parent of',142,'Child of',1,NULL,NULL), + (63,32,1,'a_b',135,'Child of',132,'Parent of',1,NULL,NULL), + (64,32,1,'b_a',132,'Parent of',135,'Child of',1,NULL,NULL), + (65,33,1,'a_b',142,'Child of',140,'Parent of',1,NULL,NULL), + (66,33,1,'b_a',140,'Parent of',142,'Child of',1,NULL,NULL), + (67,34,1,'a_b',135,'Child of',140,'Parent of',1,NULL,NULL), + (68,34,1,'b_a',140,'Parent of',135,'Child of',1,NULL,NULL), + (69,35,4,'a_b',135,'Sibling of',142,'Sibling of',1,NULL,NULL), + (70,35,4,'b_a',142,'Sibling of',135,'Sibling of',1,NULL,NULL), + (71,36,8,'a_b',140,'Household Member of',180,'Household Member is',1,NULL,NULL), + (72,36,8,'b_a',180,'Household Member is',140,'Household Member of',1,NULL,NULL), + (73,37,8,'a_b',142,'Household Member of',180,'Household Member is',1,NULL,NULL), + (74,37,8,'b_a',180,'Household Member is',142,'Household Member of',1,NULL,NULL), + (75,38,8,'a_b',135,'Household Member of',180,'Household Member is',1,NULL,NULL), + (76,38,8,'b_a',180,'Household Member is',135,'Household Member of',1,NULL,NULL), + (77,39,7,'a_b',132,'Head of Household for',180,'Head of Household is',1,NULL,NULL), + (78,39,7,'b_a',180,'Head of Household is',132,'Head of Household for',1,NULL,NULL), + (79,40,2,'a_b',140,'Spouse of',132,'Spouse of',1,NULL,NULL), + (80,40,2,'b_a',132,'Spouse of',140,'Spouse of',1,NULL,NULL), + (81,41,1,'a_b',102,'Child of',111,'Parent of',1,NULL,NULL), + (82,41,1,'b_a',111,'Parent of',102,'Child of',1,NULL,NULL), + (83,42,1,'a_b',29,'Child of',111,'Parent of',1,NULL,NULL), + (84,42,1,'b_a',111,'Parent of',29,'Child of',1,NULL,NULL), + (85,43,1,'a_b',102,'Child of',116,'Parent of',1,NULL,NULL), + (86,43,1,'b_a',116,'Parent of',102,'Child of',1,NULL,NULL), + (87,44,1,'a_b',29,'Child of',116,'Parent of',1,NULL,NULL), + (88,44,1,'b_a',116,'Parent of',29,'Child of',1,NULL,NULL), + (89,45,4,'a_b',29,'Sibling of',102,'Sibling of',1,NULL,NULL), + (90,45,4,'b_a',102,'Sibling of',29,'Sibling of',1,NULL,NULL), + (91,46,8,'a_b',116,'Household Member of',28,'Household Member is',1,NULL,NULL), + (92,46,8,'b_a',28,'Household Member is',116,'Household Member of',1,NULL,NULL), + (93,47,8,'a_b',102,'Household Member of',28,'Household Member is',1,NULL,NULL), + (94,47,8,'b_a',28,'Household Member is',102,'Household Member of',1,NULL,NULL), + (95,48,8,'a_b',29,'Household Member of',28,'Household Member is',1,NULL,NULL), + (96,48,8,'b_a',28,'Household Member is',29,'Household Member of',1,NULL,NULL), + (97,49,7,'a_b',111,'Head of Household for',28,'Head of Household is',1,NULL,NULL), + (98,49,7,'b_a',28,'Head of Household is',111,'Head of Household for',1,NULL,NULL), + (99,50,2,'a_b',116,'Spouse of',111,'Spouse of',1,NULL,NULL), + (100,50,2,'b_a',111,'Spouse of',116,'Spouse of',1,NULL,NULL), + (101,51,1,'a_b',183,'Child of',95,'Parent of',1,NULL,NULL), + (102,51,1,'b_a',95,'Parent of',183,'Child of',1,NULL,NULL), + (103,52,1,'a_b',24,'Child of',95,'Parent of',1,NULL,NULL), + (104,52,1,'b_a',95,'Parent of',24,'Child of',1,NULL,NULL), + (105,53,1,'a_b',183,'Child of',195,'Parent of',1,NULL,NULL), + (106,53,1,'b_a',195,'Parent of',183,'Child of',1,NULL,NULL), + (107,54,1,'a_b',24,'Child of',195,'Parent of',1,NULL,NULL), + (108,54,1,'b_a',195,'Parent of',24,'Child of',1,NULL,NULL), + (109,55,4,'a_b',24,'Sibling of',183,'Sibling of',1,NULL,NULL), + (110,55,4,'b_a',183,'Sibling of',24,'Sibling of',1,NULL,NULL), + (111,56,8,'a_b',195,'Household Member of',155,'Household Member is',1,NULL,NULL), + (112,56,8,'b_a',155,'Household Member is',195,'Household Member of',1,NULL,NULL), + (113,57,8,'a_b',183,'Household Member of',155,'Household Member is',1,NULL,NULL), + (114,57,8,'b_a',155,'Household Member is',183,'Household Member of',1,NULL,NULL), + (115,58,8,'a_b',24,'Household Member of',155,'Household Member is',1,NULL,NULL), + (116,58,8,'b_a',155,'Household Member is',24,'Household Member of',1,NULL,NULL), + (117,59,7,'a_b',95,'Head of Household for',155,'Head of Household is',0,NULL,NULL), + (118,59,7,'b_a',155,'Head of Household is',95,'Head of Household for',0,NULL,NULL), + (119,60,2,'a_b',195,'Spouse of',95,'Spouse of',0,NULL,NULL), + (120,60,2,'b_a',95,'Spouse of',195,'Spouse of',0,NULL,NULL), + (121,61,1,'a_b',30,'Child of',104,'Parent of',1,NULL,NULL), + (122,61,1,'b_a',104,'Parent of',30,'Child of',1,NULL,NULL), + (123,62,1,'a_b',47,'Child of',104,'Parent of',1,NULL,NULL), + (124,62,1,'b_a',104,'Parent of',47,'Child of',1,NULL,NULL), + (125,63,1,'a_b',30,'Child of',124,'Parent of',1,NULL,NULL), + (126,63,1,'b_a',124,'Parent of',30,'Child of',1,NULL,NULL), + (127,64,1,'a_b',47,'Child of',124,'Parent of',1,NULL,NULL), + (128,64,1,'b_a',124,'Parent of',47,'Child of',1,NULL,NULL), + (129,65,4,'a_b',47,'Sibling of',30,'Sibling of',1,NULL,NULL), + (130,65,4,'b_a',30,'Sibling of',47,'Sibling of',1,NULL,NULL), + (131,66,8,'a_b',124,'Household Member of',60,'Household Member is',1,NULL,NULL), + (132,66,8,'b_a',60,'Household Member is',124,'Household Member of',1,NULL,NULL), + (133,67,8,'a_b',30,'Household Member of',60,'Household Member is',1,NULL,NULL), + (134,67,8,'b_a',60,'Household Member is',30,'Household Member of',1,NULL,NULL), + (135,68,8,'a_b',47,'Household Member of',60,'Household Member is',1,NULL,NULL), + (136,68,8,'b_a',60,'Household Member is',47,'Household Member of',1,NULL,NULL), + (137,69,7,'a_b',104,'Head of Household for',60,'Head of Household is',0,NULL,NULL), + (138,69,7,'b_a',60,'Head of Household is',104,'Head of Household for',0,NULL,NULL), + (139,70,2,'a_b',124,'Spouse of',104,'Spouse of',0,NULL,NULL), + (140,70,2,'b_a',104,'Spouse of',124,'Spouse of',0,NULL,NULL), + (141,71,1,'a_b',175,'Child of',99,'Parent of',1,NULL,NULL), + (142,71,1,'b_a',99,'Parent of',175,'Child of',1,NULL,NULL), + (143,72,1,'a_b',94,'Child of',99,'Parent of',1,NULL,NULL), + (144,72,1,'b_a',99,'Parent of',94,'Child of',1,NULL,NULL), + (145,73,1,'a_b',175,'Child of',77,'Parent of',1,NULL,NULL), + (146,73,1,'b_a',77,'Parent of',175,'Child of',1,NULL,NULL), + (147,74,1,'a_b',94,'Child of',77,'Parent of',1,NULL,NULL), + (148,74,1,'b_a',77,'Parent of',94,'Child of',1,NULL,NULL), + (149,75,4,'a_b',94,'Sibling of',175,'Sibling of',1,NULL,NULL), + (150,75,4,'b_a',175,'Sibling of',94,'Sibling of',1,NULL,NULL), + (151,76,8,'a_b',77,'Household Member of',70,'Household Member is',1,NULL,NULL), + (152,76,8,'b_a',70,'Household Member is',77,'Household Member of',1,NULL,NULL), + (153,77,8,'a_b',175,'Household Member of',70,'Household Member is',1,NULL,NULL), + (154,77,8,'b_a',70,'Household Member is',175,'Household Member of',1,NULL,NULL), + (155,78,8,'a_b',94,'Household Member of',70,'Household Member is',1,NULL,NULL), + (156,78,8,'b_a',70,'Household Member is',94,'Household Member of',1,NULL,NULL), + (157,79,7,'a_b',99,'Head of Household for',70,'Head of Household is',1,NULL,NULL), + (158,79,7,'b_a',70,'Head of Household is',99,'Head of Household for',1,NULL,NULL), + (159,80,2,'a_b',77,'Spouse of',99,'Spouse of',1,NULL,NULL), + (160,80,2,'b_a',99,'Spouse of',77,'Spouse of',1,NULL,NULL), + (161,81,1,'a_b',148,'Child of',80,'Parent of',1,NULL,NULL), + (162,81,1,'b_a',80,'Parent of',148,'Child of',1,NULL,NULL), + (163,82,1,'a_b',187,'Child of',80,'Parent of',1,NULL,NULL), + (164,82,1,'b_a',80,'Parent of',187,'Child of',1,NULL,NULL), + (165,83,1,'a_b',148,'Child of',82,'Parent of',1,NULL,NULL), + (166,83,1,'b_a',82,'Parent of',148,'Child of',1,NULL,NULL), + (167,84,1,'a_b',187,'Child of',82,'Parent of',1,NULL,NULL), + (168,84,1,'b_a',82,'Parent of',187,'Child of',1,NULL,NULL), + (169,85,4,'a_b',187,'Sibling of',148,'Sibling of',1,NULL,NULL), + (170,85,4,'b_a',148,'Sibling of',187,'Sibling of',1,NULL,NULL), + (171,86,8,'a_b',82,'Household Member of',97,'Household Member is',1,NULL,NULL), + (172,86,8,'b_a',97,'Household Member is',82,'Household Member of',1,NULL,NULL), + (173,87,8,'a_b',148,'Household Member of',97,'Household Member is',1,NULL,NULL), + (174,87,8,'b_a',97,'Household Member is',148,'Household Member of',1,NULL,NULL), + (175,88,8,'a_b',187,'Household Member of',97,'Household Member is',1,NULL,NULL), + (176,88,8,'b_a',97,'Household Member is',187,'Household Member of',1,NULL,NULL), + (177,89,7,'a_b',80,'Head of Household for',97,'Head of Household is',0,NULL,NULL), + (178,89,7,'b_a',97,'Head of Household is',80,'Head of Household for',0,NULL,NULL), + (179,90,2,'a_b',82,'Spouse of',80,'Spouse of',0,NULL,NULL), + (180,90,2,'b_a',80,'Spouse of',82,'Spouse of',0,NULL,NULL), + (181,91,1,'a_b',105,'Child of',193,'Parent of',1,NULL,NULL), + (182,91,1,'b_a',193,'Parent of',105,'Child of',1,NULL,NULL), + (183,92,1,'a_b',22,'Child of',193,'Parent of',1,NULL,NULL), + (184,92,1,'b_a',193,'Parent of',22,'Child of',1,NULL,NULL), + (185,93,1,'a_b',105,'Child of',145,'Parent of',1,NULL,NULL), + (186,93,1,'b_a',145,'Parent of',105,'Child of',1,NULL,NULL), + (187,94,1,'a_b',22,'Child of',145,'Parent of',1,NULL,NULL), + (188,94,1,'b_a',145,'Parent of',22,'Child of',1,NULL,NULL), + (189,95,4,'a_b',22,'Sibling of',105,'Sibling of',1,NULL,NULL), + (190,95,4,'b_a',105,'Sibling of',22,'Sibling of',1,NULL,NULL), + (191,96,8,'a_b',145,'Household Member of',17,'Household Member is',1,NULL,NULL), + (192,96,8,'b_a',17,'Household Member is',145,'Household Member of',1,NULL,NULL), + (193,97,8,'a_b',105,'Household Member of',17,'Household Member is',1,NULL,NULL), + (194,97,8,'b_a',17,'Household Member is',105,'Household Member of',1,NULL,NULL), + (195,98,8,'a_b',22,'Household Member of',17,'Household Member is',1,NULL,NULL), + (196,98,8,'b_a',17,'Household Member is',22,'Household Member of',1,NULL,NULL), + (197,99,7,'a_b',193,'Head of Household for',17,'Head of Household is',0,NULL,NULL), + (198,99,7,'b_a',17,'Head of Household is',193,'Head of Household for',0,NULL,NULL), + (199,100,2,'a_b',145,'Spouse of',193,'Spouse of',0,NULL,NULL), + (200,100,2,'b_a',193,'Spouse of',145,'Spouse of',0,NULL,NULL), + (201,101,1,'a_b',141,'Child of',43,'Parent of',1,NULL,NULL), + (202,101,1,'b_a',43,'Parent of',141,'Child of',1,NULL,NULL), + (203,102,1,'a_b',150,'Child of',43,'Parent of',1,NULL,NULL), + (204,102,1,'b_a',43,'Parent of',150,'Child of',1,NULL,NULL), + (205,103,1,'a_b',141,'Child of',88,'Parent of',1,NULL,NULL), + (206,103,1,'b_a',88,'Parent of',141,'Child of',1,NULL,NULL), + (207,104,1,'a_b',150,'Child of',88,'Parent of',1,NULL,NULL), + (208,104,1,'b_a',88,'Parent of',150,'Child of',1,NULL,NULL), + (209,105,4,'a_b',150,'Sibling of',141,'Sibling of',1,NULL,NULL), + (210,105,4,'b_a',141,'Sibling of',150,'Sibling of',1,NULL,NULL), + (211,106,8,'a_b',88,'Household Member of',147,'Household Member is',1,NULL,NULL), + (212,106,8,'b_a',147,'Household Member is',88,'Household Member of',1,NULL,NULL), + (213,107,8,'a_b',141,'Household Member of',147,'Household Member is',1,NULL,NULL), + (214,107,8,'b_a',147,'Household Member is',141,'Household Member of',1,NULL,NULL), + (215,108,8,'a_b',150,'Household Member of',147,'Household Member is',1,NULL,NULL), + (216,108,8,'b_a',147,'Household Member is',150,'Household Member of',1,NULL,NULL), + (217,109,7,'a_b',43,'Head of Household for',147,'Head of Household is',0,NULL,NULL), + (218,109,7,'b_a',147,'Head of Household is',43,'Head of Household for',0,NULL,NULL), + (219,110,2,'a_b',88,'Spouse of',43,'Spouse of',0,NULL,NULL), + (220,110,2,'b_a',43,'Spouse of',88,'Spouse of',0,NULL,NULL), + (221,111,1,'a_b',56,'Child of',106,'Parent of',1,NULL,NULL), + (222,111,1,'b_a',106,'Parent of',56,'Child of',1,NULL,NULL), + (223,112,1,'a_b',200,'Child of',106,'Parent of',1,NULL,NULL), + (224,112,1,'b_a',106,'Parent of',200,'Child of',1,NULL,NULL), + (225,113,1,'a_b',56,'Child of',136,'Parent of',1,NULL,NULL), + (226,113,1,'b_a',136,'Parent of',56,'Child of',1,NULL,NULL), + (227,114,1,'a_b',200,'Child of',136,'Parent of',1,NULL,NULL), + (228,114,1,'b_a',136,'Parent of',200,'Child of',1,NULL,NULL), + (229,115,4,'a_b',200,'Sibling of',56,'Sibling of',1,NULL,NULL), + (230,115,4,'b_a',56,'Sibling of',200,'Sibling of',1,NULL,NULL), + (231,116,8,'a_b',136,'Household Member of',63,'Household Member is',1,NULL,NULL), + (232,116,8,'b_a',63,'Household Member is',136,'Household Member of',1,NULL,NULL), + (233,117,8,'a_b',56,'Household Member of',63,'Household Member is',1,NULL,NULL), + (234,117,8,'b_a',63,'Household Member is',56,'Household Member of',1,NULL,NULL), + (235,118,8,'a_b',200,'Household Member of',63,'Household Member is',1,NULL,NULL), + (236,118,8,'b_a',63,'Household Member is',200,'Household Member of',1,NULL,NULL), + (237,119,7,'a_b',106,'Head of Household for',63,'Head of Household is',1,NULL,NULL), + (238,119,7,'b_a',63,'Head of Household is',106,'Head of Household for',1,NULL,NULL), + (239,120,2,'a_b',136,'Spouse of',106,'Spouse of',1,NULL,NULL), + (240,120,2,'b_a',106,'Spouse of',136,'Spouse of',1,NULL,NULL), + (241,121,1,'a_b',112,'Child of',114,'Parent of',1,NULL,NULL), + (242,121,1,'b_a',114,'Parent of',112,'Child of',1,NULL,NULL), + (243,122,1,'a_b',197,'Child of',114,'Parent of',1,NULL,NULL), + (244,122,1,'b_a',114,'Parent of',197,'Child of',1,NULL,NULL), + (245,123,1,'a_b',112,'Child of',152,'Parent of',1,NULL,NULL), + (246,123,1,'b_a',152,'Parent of',112,'Child of',1,NULL,NULL), + (247,124,1,'a_b',197,'Child of',152,'Parent of',1,NULL,NULL), + (248,124,1,'b_a',152,'Parent of',197,'Child of',1,NULL,NULL), + (249,125,4,'a_b',197,'Sibling of',112,'Sibling of',1,NULL,NULL), + (250,125,4,'b_a',112,'Sibling of',197,'Sibling of',1,NULL,NULL), + (251,126,8,'a_b',152,'Household Member of',167,'Household Member is',1,NULL,NULL), + (252,126,8,'b_a',167,'Household Member is',152,'Household Member of',1,NULL,NULL), + (253,127,8,'a_b',112,'Household Member of',167,'Household Member is',1,NULL,NULL), + (254,127,8,'b_a',167,'Household Member is',112,'Household Member of',1,NULL,NULL), + (255,128,8,'a_b',197,'Household Member of',167,'Household Member is',1,NULL,NULL), + (256,128,8,'b_a',167,'Household Member is',197,'Household Member of',1,NULL,NULL), + (257,129,7,'a_b',114,'Head of Household for',167,'Head of Household is',1,NULL,NULL), + (258,129,7,'b_a',167,'Head of Household is',114,'Head of Household for',1,NULL,NULL), + (259,130,2,'a_b',152,'Spouse of',114,'Spouse of',1,NULL,NULL), + (260,130,2,'b_a',114,'Spouse of',152,'Spouse of',1,NULL,NULL), + (261,131,1,'a_b',76,'Child of',170,'Parent of',1,NULL,NULL), + (262,131,1,'b_a',170,'Parent of',76,'Child of',1,NULL,NULL), + (263,132,1,'a_b',15,'Child of',170,'Parent of',1,NULL,NULL), + (264,132,1,'b_a',170,'Parent of',15,'Child of',1,NULL,NULL), + (265,133,1,'a_b',76,'Child of',166,'Parent of',1,NULL,NULL), + (266,133,1,'b_a',166,'Parent of',76,'Child of',1,NULL,NULL), + (267,134,1,'a_b',15,'Child of',166,'Parent of',1,NULL,NULL), + (268,134,1,'b_a',166,'Parent of',15,'Child of',1,NULL,NULL), + (269,135,4,'a_b',15,'Sibling of',76,'Sibling of',1,NULL,NULL), + (270,135,4,'b_a',76,'Sibling of',15,'Sibling of',1,NULL,NULL), + (271,136,8,'a_b',166,'Household Member of',161,'Household Member is',1,NULL,NULL), + (272,136,8,'b_a',161,'Household Member is',166,'Household Member of',1,NULL,NULL), + (273,137,8,'a_b',76,'Household Member of',161,'Household Member is',1,NULL,NULL), + (274,137,8,'b_a',161,'Household Member is',76,'Household Member of',1,NULL,NULL), + (275,138,8,'a_b',15,'Household Member of',161,'Household Member is',1,NULL,NULL), + (276,138,8,'b_a',161,'Household Member is',15,'Household Member of',1,NULL,NULL), + (277,139,7,'a_b',170,'Head of Household for',161,'Head of Household is',1,NULL,NULL), + (278,139,7,'b_a',161,'Head of Household is',170,'Head of Household for',1,NULL,NULL), + (279,140,2,'a_b',166,'Spouse of',170,'Spouse of',1,NULL,NULL), + (280,140,2,'b_a',170,'Spouse of',166,'Spouse of',1,NULL,NULL), + (281,141,1,'a_b',158,'Child of',133,'Parent of',1,NULL,NULL), + (282,141,1,'b_a',133,'Parent of',158,'Child of',1,NULL,NULL), + (283,142,1,'a_b',134,'Child of',133,'Parent of',1,NULL,NULL), + (284,142,1,'b_a',133,'Parent of',134,'Child of',1,NULL,NULL), + (285,143,1,'a_b',158,'Child of',7,'Parent of',1,NULL,NULL), + (286,143,1,'b_a',7,'Parent of',158,'Child of',1,NULL,NULL), + (287,144,1,'a_b',134,'Child of',7,'Parent of',1,NULL,NULL), + (288,144,1,'b_a',7,'Parent of',134,'Child of',1,NULL,NULL), + (289,145,4,'a_b',134,'Sibling of',158,'Sibling of',1,NULL,NULL), + (290,145,4,'b_a',158,'Sibling of',134,'Sibling of',1,NULL,NULL), + (291,146,8,'a_b',7,'Household Member of',39,'Household Member is',1,NULL,NULL), + (292,146,8,'b_a',39,'Household Member is',7,'Household Member of',1,NULL,NULL), + (293,147,8,'a_b',158,'Household Member of',39,'Household Member is',1,NULL,NULL), + (294,147,8,'b_a',39,'Household Member is',158,'Household Member of',1,NULL,NULL), + (295,148,8,'a_b',134,'Household Member of',39,'Household Member is',1,NULL,NULL), + (296,148,8,'b_a',39,'Household Member is',134,'Household Member of',1,NULL,NULL), + (297,149,7,'a_b',133,'Head of Household for',39,'Head of Household is',0,NULL,NULL), + (298,149,7,'b_a',39,'Head of Household is',133,'Head of Household for',0,NULL,NULL), + (299,150,2,'a_b',7,'Spouse of',133,'Spouse of',0,NULL,NULL), + (300,150,2,'b_a',133,'Spouse of',7,'Spouse of',0,NULL,NULL), + (301,151,1,'a_b',164,'Child of',151,'Parent of',1,NULL,NULL), + (302,151,1,'b_a',151,'Parent of',164,'Child of',1,NULL,NULL), + (303,152,1,'a_b',54,'Child of',151,'Parent of',1,NULL,NULL), + (304,152,1,'b_a',151,'Parent of',54,'Child of',1,NULL,NULL), + (305,153,1,'a_b',164,'Child of',129,'Parent of',1,NULL,NULL), + (306,153,1,'b_a',129,'Parent of',164,'Child of',1,NULL,NULL), + (307,154,1,'a_b',54,'Child of',129,'Parent of',1,NULL,NULL), + (308,154,1,'b_a',129,'Parent of',54,'Child of',1,NULL,NULL), + (309,155,4,'a_b',54,'Sibling of',164,'Sibling of',1,NULL,NULL), + (310,155,4,'b_a',164,'Sibling of',54,'Sibling of',1,NULL,NULL), + (311,156,8,'a_b',129,'Household Member of',109,'Household Member is',1,NULL,NULL), + (312,156,8,'b_a',109,'Household Member is',129,'Household Member of',1,NULL,NULL), + (313,157,8,'a_b',164,'Household Member of',109,'Household Member is',1,NULL,NULL), + (314,157,8,'b_a',109,'Household Member is',164,'Household Member of',1,NULL,NULL), + (315,158,8,'a_b',54,'Household Member of',109,'Household Member is',1,NULL,NULL), + (316,158,8,'b_a',109,'Household Member is',54,'Household Member of',1,NULL,NULL), + (317,159,7,'a_b',151,'Head of Household for',109,'Head of Household is',1,NULL,NULL), + (318,159,7,'b_a',109,'Head of Household is',151,'Head of Household for',1,NULL,NULL), + (319,160,2,'a_b',129,'Spouse of',151,'Spouse of',1,NULL,NULL), + (320,160,2,'b_a',151,'Spouse of',129,'Spouse of',1,NULL,NULL), + (321,161,1,'a_b',165,'Child of',8,'Parent of',1,NULL,NULL), + (322,161,1,'b_a',8,'Parent of',165,'Child of',1,NULL,NULL), + (323,162,1,'a_b',153,'Child of',8,'Parent of',1,NULL,NULL), + (324,162,1,'b_a',8,'Parent of',153,'Child of',1,NULL,NULL), + (325,163,1,'a_b',165,'Child of',198,'Parent of',1,NULL,NULL), + (326,163,1,'b_a',198,'Parent of',165,'Child of',1,NULL,NULL), + (327,164,1,'a_b',153,'Child of',198,'Parent of',1,NULL,NULL), + (328,164,1,'b_a',198,'Parent of',153,'Child of',1,NULL,NULL), + (329,165,4,'a_b',153,'Sibling of',165,'Sibling of',1,NULL,NULL), + (330,165,4,'b_a',165,'Sibling of',153,'Sibling of',1,NULL,NULL), + (331,166,8,'a_b',198,'Household Member of',171,'Household Member is',1,NULL,NULL), + (332,166,8,'b_a',171,'Household Member is',198,'Household Member of',1,NULL,NULL), + (333,167,8,'a_b',165,'Household Member of',171,'Household Member is',1,NULL,NULL), + (334,167,8,'b_a',171,'Household Member is',165,'Household Member of',1,NULL,NULL), + (335,168,8,'a_b',153,'Household Member of',171,'Household Member is',1,NULL,NULL), + (336,168,8,'b_a',171,'Household Member is',153,'Household Member of',1,NULL,NULL), + (337,169,7,'a_b',8,'Head of Household for',171,'Head of Household is',1,NULL,NULL), + (338,169,7,'b_a',171,'Head of Household is',8,'Head of Household for',1,NULL,NULL), + (339,170,2,'a_b',198,'Spouse of',8,'Spouse of',1,NULL,NULL), + (340,170,2,'b_a',8,'Spouse of',198,'Spouse of',1,NULL,NULL), + (341,171,1,'a_b',119,'Child of',52,'Parent of',1,NULL,NULL), + (342,171,1,'b_a',52,'Parent of',119,'Child of',1,NULL,NULL), + (343,172,1,'a_b',9,'Child of',52,'Parent of',1,NULL,NULL), + (344,172,1,'b_a',52,'Parent of',9,'Child of',1,NULL,NULL), + (345,173,1,'a_b',119,'Child of',120,'Parent of',1,NULL,NULL), + (346,173,1,'b_a',120,'Parent of',119,'Child of',1,NULL,NULL), + (347,174,1,'a_b',9,'Child of',120,'Parent of',1,NULL,NULL), + (348,174,1,'b_a',120,'Parent of',9,'Child of',1,NULL,NULL), + (349,175,4,'a_b',9,'Sibling of',119,'Sibling of',1,NULL,NULL), + (350,175,4,'b_a',119,'Sibling of',9,'Sibling of',1,NULL,NULL), + (351,176,8,'a_b',120,'Household Member of',159,'Household Member is',1,NULL,NULL), + (352,176,8,'b_a',159,'Household Member is',120,'Household Member of',1,NULL,NULL), + (353,177,8,'a_b',119,'Household Member of',159,'Household Member is',1,NULL,NULL), + (354,177,8,'b_a',159,'Household Member is',119,'Household Member of',1,NULL,NULL), + (355,178,8,'a_b',9,'Household Member of',159,'Household Member is',1,NULL,NULL), + (356,178,8,'b_a',159,'Household Member is',9,'Household Member of',1,NULL,NULL), + (357,179,7,'a_b',52,'Head of Household for',159,'Head of Household is',1,NULL,NULL), + (358,179,7,'b_a',159,'Head of Household is',52,'Head of Household for',1,NULL,NULL), + (359,180,2,'a_b',120,'Spouse of',52,'Spouse of',1,NULL,NULL), + (360,180,2,'b_a',52,'Spouse of',120,'Spouse of',1,NULL,NULL), + (361,181,1,'a_b',131,'Child of',139,'Parent of',1,NULL,NULL), + (362,181,1,'b_a',139,'Parent of',131,'Child of',1,NULL,NULL), + (363,182,1,'a_b',73,'Child of',139,'Parent of',1,NULL,NULL), + (364,182,1,'b_a',139,'Parent of',73,'Child of',1,NULL,NULL), + (365,183,1,'a_b',131,'Child of',86,'Parent of',1,NULL,NULL), + (366,183,1,'b_a',86,'Parent of',131,'Child of',1,NULL,NULL), + (367,184,1,'a_b',73,'Child of',86,'Parent of',1,NULL,NULL), + (368,184,1,'b_a',86,'Parent of',73,'Child of',1,NULL,NULL), + (369,185,4,'a_b',73,'Sibling of',131,'Sibling of',1,NULL,NULL), + (370,185,4,'b_a',131,'Sibling of',73,'Sibling of',1,NULL,NULL), + (371,186,8,'a_b',86,'Household Member of',12,'Household Member is',1,NULL,NULL), + (372,186,8,'b_a',12,'Household Member is',86,'Household Member of',1,NULL,NULL), + (373,187,8,'a_b',131,'Household Member of',12,'Household Member is',1,NULL,NULL), + (374,187,8,'b_a',12,'Household Member is',131,'Household Member of',1,NULL,NULL), + (375,188,8,'a_b',73,'Household Member of',12,'Household Member is',1,NULL,NULL), + (376,188,8,'b_a',12,'Household Member is',73,'Household Member of',1,NULL,NULL), + (377,189,7,'a_b',139,'Head of Household for',12,'Head of Household is',1,NULL,NULL), + (378,189,7,'b_a',12,'Head of Household is',139,'Head of Household for',1,NULL,NULL), + (379,190,2,'a_b',86,'Spouse of',139,'Spouse of',1,NULL,NULL), + (380,190,2,'b_a',139,'Spouse of',86,'Spouse of',1,NULL,NULL), + (381,191,1,'a_b',121,'Child of',66,'Parent of',1,NULL,NULL), + (382,191,1,'b_a',66,'Parent of',121,'Child of',1,NULL,NULL), + (383,192,1,'a_b',172,'Child of',66,'Parent of',1,NULL,NULL), + (384,192,1,'b_a',66,'Parent of',172,'Child of',1,NULL,NULL), + (385,193,1,'a_b',121,'Child of',137,'Parent of',1,NULL,NULL), + (386,193,1,'b_a',137,'Parent of',121,'Child of',1,NULL,NULL), + (387,194,1,'a_b',172,'Child of',137,'Parent of',1,NULL,NULL), + (388,194,1,'b_a',137,'Parent of',172,'Child of',1,NULL,NULL), + (389,195,4,'a_b',172,'Sibling of',121,'Sibling of',1,NULL,NULL), + (390,195,4,'b_a',121,'Sibling of',172,'Sibling of',1,NULL,NULL), + (391,196,8,'a_b',137,'Household Member of',188,'Household Member is',1,NULL,NULL), + (392,196,8,'b_a',188,'Household Member is',137,'Household Member of',1,NULL,NULL), + (393,197,8,'a_b',121,'Household Member of',188,'Household Member is',1,NULL,NULL), + (394,197,8,'b_a',188,'Household Member is',121,'Household Member of',1,NULL,NULL), + (395,198,8,'a_b',172,'Household Member of',188,'Household Member is',1,NULL,NULL), + (396,198,8,'b_a',188,'Household Member is',172,'Household Member of',1,NULL,NULL), + (397,199,7,'a_b',66,'Head of Household for',188,'Head of Household is',0,NULL,NULL), + (398,199,7,'b_a',188,'Head of Household is',66,'Head of Household for',0,NULL,NULL), + (399,200,2,'a_b',137,'Spouse of',66,'Spouse of',0,NULL,NULL), + (400,200,2,'b_a',66,'Spouse of',137,'Spouse of',0,NULL,NULL), + (401,201,5,'a_b',66,'Employee of',4,'Employer of',1,NULL,NULL), + (402,201,5,'b_a',4,'Employer of',66,'Employee of',1,NULL,NULL), + (403,202,5,'a_b',53,'Employee of',6,'Employer of',1,NULL,NULL), + (404,202,5,'b_a',6,'Employer of',53,'Employee of',1,NULL,NULL), + (405,203,5,'a_b',16,'Employee of',36,'Employer of',1,NULL,NULL), + (406,203,5,'b_a',36,'Employer of',16,'Employee of',1,NULL,NULL), + (407,204,5,'a_b',153,'Employee of',61,'Employer of',1,NULL,NULL), + (408,204,5,'b_a',61,'Employer of',153,'Employee of',1,NULL,NULL), + (409,205,5,'a_b',73,'Employee of',69,'Employer of',1,NULL,NULL), + (410,205,5,'b_a',69,'Employer of',73,'Employee of',1,NULL,NULL), + (411,206,5,'a_b',100,'Employee of',72,'Employer of',1,NULL,NULL), + (412,206,5,'b_a',72,'Employer of',100,'Employee of',1,NULL,NULL), + (413,207,5,'a_b',78,'Employee of',74,'Employer of',1,NULL,NULL), + (414,207,5,'b_a',74,'Employer of',78,'Employee of',1,NULL,NULL), + (415,208,5,'a_b',3,'Employee of',79,'Employer of',1,NULL,NULL), + (416,208,5,'b_a',79,'Employer of',3,'Employee of',1,NULL,NULL), + (417,209,5,'a_b',41,'Employee of',87,'Employer of',1,NULL,NULL), + (418,209,5,'b_a',87,'Employer of',41,'Employee of',1,NULL,NULL), + (419,210,5,'a_b',170,'Employee of',143,'Employer of',1,NULL,NULL), + (420,210,5,'b_a',143,'Employer of',170,'Employee of',1,NULL,NULL), + (421,211,5,'a_b',18,'Employee of',168,'Employer of',1,NULL,NULL), + (422,211,5,'b_a',168,'Employer of',18,'Employee of',1,NULL,NULL), + (423,212,5,'a_b',47,'Employee of',174,'Employer of',1,NULL,NULL), + (424,212,5,'b_a',174,'Employer of',47,'Employee of',1,NULL,NULL), + (425,213,5,'a_b',59,'Employee of',181,'Employer of',1,NULL,NULL), + (426,213,5,'b_a',181,'Employer of',59,'Employee of',1,NULL,NULL), + (427,214,5,'a_b',138,'Employee of',182,'Employer of',1,NULL,NULL), + (428,214,5,'b_a',182,'Employer of',138,'Employee of',1,NULL,NULL); /*!40000 ALTER TABLE `civicrm_relationship_cache` ENABLE KEYS */; UNLOCK TABLES; @@ -1281,7 +7733,17 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship_type` WRITE; /*!40000 ALTER TABLE `civicrm_relationship_type` DISABLE KEYS */; -INSERT INTO `civicrm_relationship_type` (`id`, `name_a_b`, `label_a_b`, `name_b_a`, `label_b_a`, `description`, `contact_type_a`, `contact_type_b`, `contact_sub_type_a`, `contact_sub_type_b`, `is_reserved`, `is_active`) VALUES (1,'Child of','Child of','Parent of','Parent of','Parent/child relationship.','Individual','Individual',NULL,NULL,0,1),(2,'Spouse of','Spouse of','Spouse of','Spouse of','Spousal relationship.','Individual','Individual',NULL,NULL,0,1),(3,'Partner of','Partner of','Partner of','Partner of','Partner relationship.','Individual','Individual',NULL,NULL,0,1),(4,'Sibling of','Sibling of','Sibling of','Sibling of','Sibling relationship.','Individual','Individual',NULL,NULL,0,1),(5,'Employee of','Employee of','Employer of','Employer of','Employment relationship.','Individual','Organization',NULL,NULL,1,1),(6,'Volunteer for','Volunteer for','Volunteer is','Volunteer is','Volunteer relationship.','Individual','Organization',NULL,NULL,0,1),(7,'Head of Household for','Head of Household for','Head of Household is','Head of Household is','Head of household.','Individual','Household',NULL,NULL,1,1),(8,'Household Member of','Household Member of','Household Member is','Household Member is','Household membership.','Individual','Household',NULL,NULL,1,1),(9,'Case Coordinator is','Case Coordinator is','Case Coordinator','Case Coordinator','Case Coordinator','Individual','Individual',NULL,NULL,0,1),(10,'Supervised by','Supervised by','Supervisor','Supervisor','Immediate workplace supervisor','Individual','Individual',NULL,NULL,0,1); +INSERT INTO `civicrm_relationship_type` (`id`, `name_a_b`, `label_a_b`, `name_b_a`, `label_b_a`, `description`, `contact_type_a`, `contact_type_b`, `contact_sub_type_a`, `contact_sub_type_b`, `is_reserved`, `is_active`) VALUES + (1,'Child of','Child of','Parent of','Parent of','Parent/child relationship.','Individual','Individual',NULL,NULL,0,1), + (2,'Spouse of','Spouse of','Spouse of','Spouse of','Spousal relationship.','Individual','Individual',NULL,NULL,0,1), + (3,'Partner of','Partner of','Partner of','Partner of','Partner relationship.','Individual','Individual',NULL,NULL,0,1), + (4,'Sibling of','Sibling of','Sibling of','Sibling of','Sibling relationship.','Individual','Individual',NULL,NULL,0,1), + (5,'Employee of','Employee of','Employer of','Employer of','Employment relationship.','Individual','Organization',NULL,NULL,1,1), + (6,'Volunteer for','Volunteer for','Volunteer is','Volunteer is','Volunteer relationship.','Individual','Organization',NULL,NULL,0,1), + (7,'Head of Household for','Head of Household for','Head of Household is','Head of Household is','Head of household.','Individual','Household',NULL,NULL,1,1), + (8,'Household Member of','Household Member of','Household Member is','Household Member is','Household membership.','Individual','Household',NULL,NULL,1,1), + (9,'Case Coordinator is','Case Coordinator is','Case Coordinator','Case Coordinator','Case Coordinator','Individual','Individual',NULL,NULL,0,1), + (10,'Supervised by','Supervised by','Supervisor','Supervisor','Immediate workplace supervisor','Individual','Individual',NULL,NULL,0,1); /*!40000 ALTER TABLE `civicrm_relationship_type` ENABLE KEYS */; UNLOCK TABLES; @@ -1291,7 +7753,44 @@ UNLOCK TABLES; LOCK TABLES `civicrm_report_instance` WRITE; /*!40000 ALTER TABLE `civicrm_report_instance` DISABLE KEYS */; -INSERT INTO `civicrm_report_instance` (`id`, `domain_id`, `title`, `report_id`, `name`, `args`, `description`, `permission`, `grouprole`, `form_values`, `is_active`, `created_id`, `owner_id`, `email_subject`, `email_to`, `email_cc`, `header`, `footer`, `navigation_id`, `drilldown_id`, `is_reserved`) VALUES (1,1,'Constituent Summary','contact/summary',NULL,NULL,'Provides a list of address and telephone information for constituent records in your system.','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(2,1,'Constituent Detail','contact/detail',NULL,NULL,'Provides contact-related information on contributions, memberships, events and activities.','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(3,1,'Activity Details','activity',NULL,NULL,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(4,1,'Current Employers','contact/currentEmployer',NULL,NULL,'Provides detail list of employer employee relationships along with employment details.','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(5,1,'Relationships','contact/relationship',NULL,NULL,'Gives relationship details between two contacts','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(6,1,'Activity Summary','activitySummary',NULL,NULL,'Shows activity statistics by type / date','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(7,1,'Contribution Summary','contribute/summary',NULL,NULL,'Groups and totals contributions by criteria including contact, time period, contribution type, contributor location, etc.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(8,1,'Contribution Details','contribute/detail',NULL,NULL,'Lists specific contributions by criteria including contact, time period, contribution type, contributor location, etc. Contribution summary report points to this report for contribution details.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(9,1,'Repeat Contributions','contribute/repeat',NULL,NULL,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(10,1,'SYBUNT (some year but not this year)','contribute/sybunt',NULL,NULL,'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.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(11,1,'LYBUNT (last year but not this year)','contribute/lybunt',NULL,NULL,'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.','access CiviContribute',NULL,'a:19:{s:6:\"fields\";a:5:{s:9:\"sort_name\";s:1:\"1\";s:5:\"email\";s:1:\"1\";s:5:\"phone\";s:1:\"1\";s:22:\"last_year_total_amount\";s:1:\"1\";s:23:\"civicrm_life_time_total\";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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(12,1,'Contributions by Organization','contribute/organizationSummary',NULL,NULL,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(13,1,'Contributions by Household','contribute/householdSummary',NULL,NULL,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(14,1,'Top Donors','contribute/topDonor',NULL,NULL,'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).','access CiviContribute',NULL,'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:\"\";}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(15,1,'Soft Credits','contribute/softcredit',NULL,NULL,'Shows contributions made by contacts that have been soft-credited to other contacts.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(16,1,'Contribution Aggregate by Relationship','contribute/history',NULL,NULL,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(17,1,'Personal Campaign Page Summary','contribute/pcp',NULL,NULL,'Summarizes amount raised and number of contributors for each Personal Campaign Page.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(18,1,'Pledge Detail','pledge/detail',NULL,NULL,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.','access CiviPledge',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(19,1,'Pledged But not Paid','pledge/pbnp',NULL,NULL,'Pledged but not Paid Report','access CiviPledge',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(20,1,'Bookkeeping Transactions','contribute/bookkeeping',NULL,NULL,'Provides transaction details for all contributions and payments, including Transaction #, Invoice ID, Payment Instrument and Check #.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(21,1,'Recurring Contributions','contribute/recur',NULL,NULL,'Provides information about the status of recurring contributions','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(22,1,'Membership Summary','member/summary',NULL,NULL,'Provides a summary of memberships by type and join date.','access CiviMember',NULL,'a:18:{s:6:\"fields\";a:2:{s:18:\"membership_type_id\";s:1:\"1\";s:12:\"total_amount\";s:1:\"1\";}s:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(23,1,'Membership Details','member/detail',NULL,NULL,'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.','access CiviMember',NULL,'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:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(24,1,'Contribution and Membership Details','member/contributionDetail',NULL,NULL,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.','access CiviMember',NULL,'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:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(25,1,'Lapsed Memberships','member/lapse',NULL,NULL,'Provides a list of memberships that have lapsed or will lapse by the date you specify.','access CiviMember',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(26,1,'Event Participants List','event/participantListing',NULL,NULL,'Provides lists of participants for an event.','access CiviEvent',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(27,1,'Event Income Summary','event/summary',NULL,NULL,'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.','access CiviEvent',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(28,1,'Event Income Details','event/income',NULL,NULL,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.','access CiviEvent',NULL,'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\";}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(29,1,'Attendee List','event/participantListing',NULL,NULL,'Provides lists of event attendees.','access CiviEvent',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(30,1,'Grant Details','grant/detail',NULL,NULL,'Grant Report Detail','access CiviGrant',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(31,1,'Grant Statistics','grant/statistics',NULL,NULL,'Grant Report Statistics','access CiviGrant',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(32,1,'Mail Bounces','Mailing/bounce',NULL,NULL,'Bounce Report for mailings','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(33,1,'Mailing Summary','Mailing/summary',NULL,NULL,'Summary statistics for mailings','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(34,1,'Mail Opened','Mailing/opened',NULL,NULL,'Display contacts who opened emails from a mailing','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(35,1,'Mail Clickthroughs','Mailing/clicks',NULL,NULL,'Display clicks from each mailing','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(36,1,'Mailing Details','mailing/detail',NULL,NULL,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0),(37,1,'Survey Details','survey/detail',NULL,NULL,'Detailed report for canvassing, phone-banking, walk lists or other surveys.','access CiviReport',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO `civicrm_report_instance` (`id`, `domain_id`, `title`, `report_id`, `name`, `args`, `description`, `permission`, `grouprole`, `form_values`, `is_active`, `created_id`, `owner_id`, `email_subject`, `email_to`, `email_cc`, `header`, `footer`, `navigation_id`, `drilldown_id`, `is_reserved`) VALUES + (1,1,'Constituent Summary','contact/summary',NULL,NULL,'Provides a list of address and telephone information for constituent records in your system.','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (2,1,'Constituent Detail','contact/detail',NULL,NULL,'Provides contact-related information on contributions, memberships, events and activities.','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (3,1,'Activity Details','activity',NULL,NULL,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (4,1,'Current Employers','contact/currentEmployer',NULL,NULL,'Provides detail list of employer employee relationships along with employment details.','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (5,1,'Relationships','contact/relationship',NULL,NULL,'Gives relationship details between two contacts','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (6,1,'Activity Summary','activitySummary',NULL,NULL,'Shows activity statistics by type / date','view all contacts',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (7,1,'Contribution Summary','contribute/summary',NULL,NULL,'Groups and totals contributions by criteria including contact, time period, contribution type, contributor location, etc.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (8,1,'Contribution Details','contribute/detail',NULL,NULL,'Lists specific contributions by criteria including contact, time period, contribution type, contributor location, etc. Contribution summary report points to this report for contribution details.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (9,1,'Repeat Contributions','contribute/repeat',NULL,NULL,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (10,1,'SYBUNT (some year but not this year)','contribute/sybunt',NULL,NULL,'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.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (11,1,'LYBUNT (last year but not this year)','contribute/lybunt',NULL,NULL,'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.','access CiviContribute',NULL,'a:19:{s:6:\"fields\";a:5:{s:9:\"sort_name\";s:1:\"1\";s:5:\"email\";s:1:\"1\";s:5:\"phone\";s:1:\"1\";s:22:\"last_year_total_amount\";s:1:\"1\";s:23:\"civicrm_life_time_total\";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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (12,1,'Contributions by Organization','contribute/organizationSummary',NULL,NULL,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (13,1,'Contributions by Household','contribute/householdSummary',NULL,NULL,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (14,1,'Top Donors','contribute/topDonor',NULL,NULL,'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).','access CiviContribute',NULL,'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:\"\";}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (15,1,'Soft Credits','contribute/softcredit',NULL,NULL,'Shows contributions made by contacts that have been soft-credited to other contacts.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (16,1,'Contribution Aggregate by Relationship','contribute/history',NULL,NULL,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (17,1,'Personal Campaign Page Summary','contribute/pcp',NULL,NULL,'Summarizes amount raised and number of contributors for each Personal Campaign Page.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (18,1,'Pledge Detail','pledge/detail',NULL,NULL,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.','access CiviPledge',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (19,1,'Pledged But not Paid','pledge/pbnp',NULL,NULL,'Pledged but not Paid Report','access CiviPledge',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (20,1,'Bookkeeping Transactions','contribute/bookkeeping',NULL,NULL,'Provides transaction details for all contributions and payments, including Transaction #, Invoice ID, Payment Instrument and Check #.','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (21,1,'Recurring Contributions','contribute/recur',NULL,NULL,'Provides information about the status of recurring contributions','access CiviContribute',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (22,1,'Membership Summary','member/summary',NULL,NULL,'Provides a summary of memberships by type and join date.','access CiviMember',NULL,'a:18:{s:6:\"fields\";a:2:{s:18:\"membership_type_id\";s:1:\"1\";s:12:\"total_amount\";s:1:\"1\";}s:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (23,1,'Membership Details','member/detail',NULL,NULL,'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.','access CiviMember',NULL,'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:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (24,1,'Contribution and Membership Details','member/contributionDetail',NULL,NULL,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.','access CiviMember',NULL,'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:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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:29:\"membership_join_date_relative\";s:1:\"0\";s:25:\"membership_join_date_from\";s:0:\"\";s:23:\"membership_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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (25,1,'Lapsed Memberships','member/lapse',NULL,NULL,'Provides a list of memberships that have lapsed or will lapse by the date you specify.','access CiviMember',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (26,1,'Event Participants List','event/participantListing',NULL,NULL,'Provides lists of participants for an event.','access CiviEvent',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (27,1,'Event Income Summary','event/summary',NULL,NULL,'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.','access CiviEvent',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (28,1,'Event Income Details','event/income',NULL,NULL,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.','access CiviEvent',NULL,'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\";}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (29,1,'Attendee List','event/participantListing',NULL,NULL,'Provides lists of event attendees.','access CiviEvent',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (30,1,'Grant Details','grant/detail',NULL,NULL,'Grant Report Detail','access CiviGrant',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (31,1,'Grant Statistics','grant/statistics',NULL,NULL,'Grant Report Statistics','access CiviGrant',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (32,1,'Mail Bounces','Mailing/bounce',NULL,NULL,'Bounce Report for mailings','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (33,1,'Mailing Summary','Mailing/summary',NULL,NULL,'Summary statistics for mailings','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (34,1,'Mail Opened','Mailing/opened',NULL,NULL,'Display contacts who opened emails from a mailing','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (35,1,'Mail Clickthroughs','Mailing/clicks',NULL,NULL,'Display clicks from each mailing','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (36,1,'Mailing Details','mailing/detail',NULL,NULL,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.','access CiviMail',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0), + (37,1,'Survey Details','survey/detail',NULL,NULL,'Detailed report for canvassing, phone-banking, walk lists or other surveys.','access CiviReport',NULL,'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;}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_report_instance` ENABLE KEYS */; UNLOCK TABLES; @@ -1328,7 +7827,4040 @@ 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,'Blaenau 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,'Vale of Glamorgan, The','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,'Bragança','04',1173),(4130,'Castelo Branco','05',1173),(4131,'Coimbra','06',1173),(4132,'Évora','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,'Santarém','14',1173),(4140,'Setúbal','15',1173),(4141,'Viana do Castelo','16',1173),(4142,'Vila Real','17',1173),(4143,'Viseu','18',1173),(4144,'Região Autónoma dos Açores','20',1173),(4145,'Região Autónoma 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','BT',1107),(10011,'Fermo','FM',1107),(10012,'Monza e Brianza','MB',1107),(10013,'Clwyd','CWD',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',1080),(10359,'Nyanga','05',1080),(10360,'Ogooué-Ivindo','06',1080),(10361,'Ogooué-Lolo','07',1080),(10362,'Ogooué-Maritime','08',1080),(10363,'Woleu-Ntem','09',1080),(10364,'Monmouthshire','MON',1226),(10365,'Antrim and Newtownabbey','ANN',1226),(10366,'Ards and North Down','AND',1226),(10367,'Armagh City, Banbridge and Craigavon','ABC',1226),(10368,'Belfast','BFS',1226),(10369,'Causeway Coast and Glens','CCG',1226),(10370,'Derry City and Strabane','DRS',1226),(10371,'Fermanagh and Omagh','FMO',1226),(10372,'Lisburn and Castlereagh','LBC',1226),(10373,'Mid and East Antrim','MEA',1226),(10374,'Mid Ulster','MUL',1226),(10375,'Newry, Mourne and Down','NMD',1226),(10376,'Bridgend','BGE',1226),(10377,'Caerphilly','CAY',1226),(10378,'Cardiff','CRF',1226),(10379,'Carmarthenshire','CMN',1226),(10380,'Ceredigion','CGN',1226),(10381,'Conwy','CWY',1226),(10382,'Denbighshire','DEN',1226),(10383,'Flintshire','FLN',1226),(10384,'Isle of Anglesey','AGY',1226),(10385,'Merthyr Tydfil','MTY',1226),(10386,'Neath Port Talbot','NTL',1226),(10387,'Newport','NWP',1226),(10388,'Pembrokeshire','PEM',1226),(10389,'Rhondda, Cynon, Taff','RCT',1226),(10390,'Swansea','SWA',1226),(10391,'Torfaen','TOF',1226),(10392,'Wrexham','WRX',1226),(10393,'Sejong','50',1115); +INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id`, `is_active`) VALUES + (1000,'Alabama','AL',1228,1), + (1001,'Alaska','AK',1228,1), + (1002,'Arizona','AZ',1228,1), + (1003,'Arkansas','AR',1228,1), + (1004,'California','CA',1228,1), + (1005,'Colorado','CO',1228,1), + (1006,'Connecticut','CT',1228,1), + (1007,'Delaware','DE',1228,1), + (1008,'Florida','FL',1228,1), + (1009,'Georgia','GA',1228,1), + (1010,'Hawaii','HI',1228,1), + (1011,'Idaho','ID',1228,1), + (1012,'Illinois','IL',1228,1), + (1013,'Indiana','IN',1228,1), + (1014,'Iowa','IA',1228,1), + (1015,'Kansas','KS',1228,1), + (1016,'Kentucky','KY',1228,1), + (1017,'Louisiana','LA',1228,1), + (1018,'Maine','ME',1228,1), + (1019,'Maryland','MD',1228,1), + (1020,'Massachusetts','MA',1228,1), + (1021,'Michigan','MI',1228,1), + (1022,'Minnesota','MN',1228,1), + (1023,'Mississippi','MS',1228,1), + (1024,'Missouri','MO',1228,1), + (1025,'Montana','MT',1228,1), + (1026,'Nebraska','NE',1228,1), + (1027,'Nevada','NV',1228,1), + (1028,'New Hampshire','NH',1228,1), + (1029,'New Jersey','NJ',1228,1), + (1030,'New Mexico','NM',1228,1), + (1031,'New York','NY',1228,1), + (1032,'North Carolina','NC',1228,1), + (1033,'North Dakota','ND',1228,1), + (1034,'Ohio','OH',1228,1), + (1035,'Oklahoma','OK',1228,1), + (1036,'Oregon','OR',1228,1), + (1037,'Pennsylvania','PA',1228,1), + (1038,'Rhode Island','RI',1228,1), + (1039,'South Carolina','SC',1228,1), + (1040,'South Dakota','SD',1228,1), + (1041,'Tennessee','TN',1228,1), + (1042,'Texas','TX',1228,1), + (1043,'Utah','UT',1228,1), + (1044,'Vermont','VT',1228,1), + (1045,'Virginia','VA',1228,1), + (1046,'Washington','WA',1228,1), + (1047,'West Virginia','WV',1228,1), + (1048,'Wisconsin','WI',1228,1), + (1049,'Wyoming','WY',1228,1), + (1050,'District of Columbia','DC',1228,1), + (1052,'American Samoa','AS',1228,1), + (1053,'Guam','GU',1228,1), + (1055,'Northern Mariana Islands','MP',1228,1), + (1056,'Puerto Rico','PR',1228,1), + (1057,'Virgin Islands','VI',1228,1), + (1058,'United States Minor Outlying Islands','UM',1228,1), + (1059,'Armed Forces Europe','AE',1228,1), + (1060,'Armed Forces Americas','AA',1228,1), + (1061,'Armed Forces Pacific','AP',1228,1), + (1100,'Alberta','AB',1039,1), + (1101,'British Columbia','BC',1039,1), + (1102,'Manitoba','MB',1039,1), + (1103,'New Brunswick','NB',1039,1), + (1104,'Newfoundland and Labrador','NL',1039,1), + (1105,'Northwest Territories','NT',1039,1), + (1106,'Nova Scotia','NS',1039,1), + (1107,'Nunavut','NU',1039,1), + (1108,'Ontario','ON',1039,1), + (1109,'Prince Edward Island','PE',1039,1), + (1110,'Quebec','QC',1039,1), + (1111,'Saskatchewan','SK',1039,1), + (1112,'Yukon Territory','YT',1039,1), + (1200,'Maharashtra','MM',1101,1), + (1201,'Karnataka','KA',1101,1), + (1202,'Andhra Pradesh','AP',1101,1), + (1203,'Arunachal Pradesh','AR',1101,1), + (1204,'Assam','AS',1101,1), + (1205,'Bihar','BR',1101,1), + (1206,'Chhattisgarh','CH',1101,1), + (1207,'Goa','GA',1101,1), + (1208,'Gujarat','GJ',1101,1), + (1209,'Haryana','HR',1101,1), + (1210,'Himachal Pradesh','HP',1101,1), + (1211,'Jammu and Kashmir','JK',1101,1), + (1212,'Jharkhand','JH',1101,1), + (1213,'Kerala','KL',1101,1), + (1214,'Madhya Pradesh','MP',1101,1), + (1215,'Manipur','MN',1101,1), + (1216,'Meghalaya','ML',1101,1), + (1217,'Mizoram','MZ',1101,1), + (1218,'Nagaland','NL',1101,1), + (1219,'Orissa','OR',1101,1), + (1220,'Punjab','PB',1101,1), + (1221,'Rajasthan','RJ',1101,1), + (1222,'Sikkim','SK',1101,1), + (1223,'Tamil Nadu','TN',1101,1), + (1224,'Tripura','TR',1101,1), + (1225,'Uttarakhand','UT',1101,1), + (1226,'Uttar Pradesh','UP',1101,1), + (1227,'West Bengal','WB',1101,1), + (1228,'Andaman and Nicobar Islands','AN',1101,1), + (1229,'Dadra and Nagar Haveli','DN',1101,1), + (1230,'Daman and Diu','DD',1101,1), + (1231,'Delhi','DL',1101,1), + (1232,'Lakshadweep','LD',1101,1), + (1233,'Pondicherry','PY',1101,1), + (1300,'mazowieckie','MZ',1172,1), + (1301,'pomorskie','PM',1172,1), + (1302,'dolnoÅ›lÄ…skie','DS',1172,1), + (1303,'kujawsko-pomorskie','KP',1172,1), + (1304,'lubelskie','LU',1172,1), + (1305,'lubuskie','LB',1172,1), + (1306,'łódzkie','LD',1172,1), + (1307,'maÅ‚opolskie','MA',1172,1), + (1308,'opolskie','OP',1172,1), + (1309,'podkarpackie','PK',1172,1), + (1310,'podlaskie','PD',1172,1), + (1311,'Å›lÄ…skie','SL',1172,1), + (1312,'Å›wiÄ™tokrzyskie','SK',1172,1), + (1313,'warmiÅ„sko-mazurskie','WN',1172,1), + (1314,'wielkopolskie','WP',1172,1), + (1315,'zachodniopomorskie','ZP',1172,1), + (1500,'Abu Zaby','AZ',1225,1), + (1501,'\'Ajman','AJ',1225,1), + (1502,'Al Fujayrah','FU',1225,1), + (1503,'Ash Shariqah','SH',1225,1), + (1504,'Dubayy','DU',1225,1), + (1505,'Ra\'s al Khaymah','RK',1225,1), + (1506,'Dac Lac','33',1233,1), + (1507,'Umm al Qaywayn','UQ',1225,1), + (1508,'Badakhshan','BDS',1001,1), + (1509,'Badghis','BDG',1001,1), + (1510,'Baghlan','BGL',1001,1), + (1511,'Balkh','BAL',1001,1), + (1512,'Bamian','BAM',1001,1), + (1513,'Farah','FRA',1001,1), + (1514,'Faryab','FYB',1001,1), + (1515,'Ghazni','GHA',1001,1), + (1516,'Ghowr','GHO',1001,1), + (1517,'Helmand','HEL',1001,1), + (1518,'Herat','HER',1001,1), + (1519,'Jowzjan','JOW',1001,1), + (1520,'Kabul','KAB',1001,1), + (1521,'Kandahar','KAN',1001,1), + (1522,'Kapisa','KAP',1001,1), + (1523,'Khowst','KHO',1001,1), + (1524,'Konar','KNR',1001,1), + (1525,'Kondoz','KDZ',1001,1), + (1526,'Laghman','LAG',1001,1), + (1527,'Lowgar','LOW',1001,1), + (1528,'Nangrahar','NAN',1001,1), + (1529,'Nimruz','NIM',1001,1), + (1530,'Nurestan','NUR',1001,1), + (1531,'Oruzgan','ORU',1001,1), + (1532,'Paktia','PIA',1001,1), + (1533,'Paktika','PKA',1001,1), + (1534,'Parwan','PAR',1001,1), + (1535,'Samangan','SAM',1001,1), + (1536,'Sar-e Pol','SAR',1001,1), + (1537,'Takhar','TAK',1001,1), + (1538,'Wardak','WAR',1001,1), + (1539,'Zabol','ZAB',1001,1), + (1540,'Berat','BR',1002,1), + (1541,'Bulqizë','BU',1002,1), + (1542,'Delvinë','DL',1002,1), + (1543,'Devoll','DV',1002,1), + (1544,'Dibër','DI',1002,1), + (1545,'Durrës','DR',1002,1), + (1546,'Elbasan','EL',1002,1), + (1547,'Fier','FR',1002,1), + (1548,'Gramsh','GR',1002,1), + (1549,'Gjirokastër','GJ',1002,1), + (1550,'Has','HA',1002,1), + (1551,'Kavajë','KA',1002,1), + (1552,'Kolonjë','ER',1002,1), + (1553,'Korçë','KO',1002,1), + (1554,'Krujë','KR',1002,1), + (1555,'Kuçovë','KC',1002,1), + (1556,'Kukës','KU',1002,1), + (1557,'Kurbin','KB',1002,1), + (1558,'Lezhë','LE',1002,1), + (1559,'Librazhd','LB',1002,1), + (1560,'Lushnjë','LU',1002,1), + (1561,'Malësi e Madhe','MM',1002,1), + (1562,'Mallakastër','MK',1002,1), + (1563,'Mat','MT',1002,1), + (1564,'Mirditë','MR',1002,1), + (1565,'Peqin','PQ',1002,1), + (1566,'Përmet','PR',1002,1), + (1567,'Pogradec','PG',1002,1), + (1568,'Pukë','PU',1002,1), + (1569,'Sarandë','SR',1002,1), + (1570,'Skrapar','SK',1002,1), + (1571,'Shkodër','SH',1002,1), + (1572,'Tepelenë','TE',1002,1), + (1573,'Tiranë','TR',1002,1), + (1574,'Tropojë','TP',1002,1), + (1575,'Vlorë','VL',1002,1), + (1576,'Erevan','ER',1011,1), + (1577,'Aragacotn','AG',1011,1), + (1578,'Ararat','AR',1011,1), + (1579,'Armavir','AV',1011,1), + (1580,'Gegarkunik\'','GR',1011,1), + (1581,'Kotayk\'','KT',1011,1), + (1582,'Lory','LO',1011,1), + (1583,'Sirak','SH',1011,1), + (1584,'Syunik\'','SU',1011,1), + (1585,'Tavus','TV',1011,1), + (1586,'Vayoc Jor','VD',1011,1), + (1587,'Bengo','BGO',1006,1), + (1588,'Benguela','BGU',1006,1), + (1589,'Bie','BIE',1006,1), + (1590,'Cabinda','CAB',1006,1), + (1591,'Cuando-Cubango','CCU',1006,1), + (1592,'Cuanza Norte','CNO',1006,1), + (1593,'Cuanza Sul','CUS',1006,1), + (1594,'Cunene','CNN',1006,1), + (1595,'Huambo','HUA',1006,1), + (1596,'Huila','HUI',1006,1), + (1597,'Luanda','LUA',1006,1), + (1598,'Lunda Norte','LNO',1006,1), + (1599,'Lunda Sul','LSU',1006,1), + (1600,'Malange','MAL',1006,1), + (1601,'Moxico','MOX',1006,1), + (1602,'Namibe','NAM',1006,1), + (1603,'Uige','UIG',1006,1), + (1604,'Zaire','ZAI',1006,1), + (1605,'Capital federal','C',1010,1), + (1606,'Buenos Aires','B',1010,1), + (1607,'Catamarca','K',1010,1), + (1608,'Cordoba','X',1010,1), + (1609,'Corrientes','W',1010,1), + (1610,'Chaco','H',1010,1), + (1611,'Chubut','U',1010,1), + (1612,'Entre Rios','E',1010,1), + (1613,'Formosa','P',1010,1), + (1614,'Jujuy','Y',1010,1), + (1615,'La Pampa','L',1010,1), + (1616,'Mendoza','M',1010,1), + (1617,'Misiones','N',1010,1), + (1618,'Neuquen','Q',1010,1), + (1619,'Rio Negro','R',1010,1), + (1620,'Salta','A',1010,1), + (1621,'San Juan','J',1010,1), + (1622,'San Luis','D',1010,1), + (1623,'Santa Cruz','Z',1010,1), + (1624,'Santa Fe','S',1010,1), + (1625,'Santiago del Estero','G',1010,1), + (1626,'Tierra del Fuego','V',1010,1), + (1627,'Tucuman','T',1010,1), + (1628,'Burgenland','1',1014,1), + (1629,'Kärnten','2',1014,1), + (1630,'Niederösterreich','3',1014,1), + (1631,'Oberösterreich','4',1014,1), + (1632,'Salzburg','5',1014,1), + (1633,'Steiermark','6',1014,1), + (1634,'Tirol','7',1014,1), + (1635,'Vorarlberg','8',1014,1), + (1636,'Wien','9',1014,1), + (1637,'Australian Antarctic Territory','AAT',1008,1), + (1638,'Australian Capital Territory','ACT',1013,1), + (1639,'Northern Territory','NT',1013,1), + (1640,'New South Wales','NSW',1013,1), + (1641,'Queensland','QLD',1013,1), + (1642,'South Australia','SA',1013,1), + (1643,'Tasmania','TAS',1013,1), + (1644,'Victoria','VIC',1013,1), + (1645,'Western Australia','WA',1013,1), + (1646,'Naxcivan','NX',1015,1), + (1647,'Ali Bayramli','AB',1015,1), + (1648,'Baki','BA',1015,1), + (1649,'Ganca','GA',1015,1), + (1650,'Lankaran','LA',1015,1), + (1651,'Mingacevir','MI',1015,1), + (1652,'Naftalan','NA',1015,1), + (1653,'Saki','SA',1015,1), + (1654,'Sumqayit','SM',1015,1), + (1655,'Susa','SS',1015,1), + (1656,'Xankandi','XA',1015,1), + (1657,'Yevlax','YE',1015,1), + (1658,'Abseron','ABS',1015,1), + (1659,'Agcabadi','AGC',1015,1), + (1660,'Agdam','AGM',1015,1), + (1661,'Agdas','AGS',1015,1), + (1662,'Agstafa','AGA',1015,1), + (1663,'Agsu','AGU',1015,1), + (1664,'Astara','AST',1015,1), + (1665,'Babak','BAB',1015,1), + (1666,'Balakan','BAL',1015,1), + (1667,'Barda','BAR',1015,1), + (1668,'Beylagan','BEY',1015,1), + (1669,'Bilasuvar','BIL',1015,1), + (1670,'Cabrayll','CAB',1015,1), + (1671,'Calilabad','CAL',1015,1), + (1672,'Culfa','CUL',1015,1), + (1673,'Daskasan','DAS',1015,1), + (1674,'Davaci','DAV',1015,1), + (1675,'Fuzuli','FUZ',1015,1), + (1676,'Gadabay','GAD',1015,1), + (1677,'Goranboy','GOR',1015,1), + (1678,'Goycay','GOY',1015,1), + (1679,'Haciqabul','HAC',1015,1), + (1680,'Imisli','IMI',1015,1), + (1681,'Ismayilli','ISM',1015,1), + (1682,'Kalbacar','KAL',1015,1), + (1683,'Kurdamir','KUR',1015,1), + (1684,'Lacin','LAC',1015,1), + (1685,'Lerik','LER',1015,1), + (1686,'Masalli','MAS',1015,1), + (1687,'Neftcala','NEF',1015,1), + (1688,'Oguz','OGU',1015,1), + (1689,'Ordubad','ORD',1015,1), + (1690,'Qabala','QAB',1015,1), + (1691,'Qax','QAX',1015,1), + (1692,'Qazax','QAZ',1015,1), + (1693,'Qobustan','QOB',1015,1), + (1694,'Quba','QBA',1015,1), + (1695,'Qubadli','QBI',1015,1), + (1696,'Qusar','QUS',1015,1), + (1697,'Saatli','SAT',1015,1), + (1698,'Sabirabad','SAB',1015,1), + (1699,'Sadarak','SAD',1015,1), + (1700,'Sahbuz','SAH',1015,1), + (1701,'Salyan','SAL',1015,1), + (1702,'Samaxi','SMI',1015,1), + (1703,'Samkir','SKR',1015,1), + (1704,'Samux','SMX',1015,1), + (1705,'Sarur','SAR',1015,1), + (1706,'Siyazan','SIY',1015,1), + (1707,'Tartar','TAR',1015,1), + (1708,'Tovuz','TOV',1015,1), + (1709,'Ucar','UCA',1015,1), + (1710,'Xacmaz','XAC',1015,1), + (1711,'Xanlar','XAN',1015,1), + (1712,'Xizi','XIZ',1015,1), + (1713,'Xocali','XCI',1015,1), + (1714,'Xocavand','XVD',1015,1), + (1715,'Yardimli','YAR',1015,1), + (1716,'Zangilan','ZAN',1015,1), + (1717,'Zaqatala','ZAQ',1015,1), + (1718,'Zardab','ZAR',1015,1), + (1719,'Federacija Bosna i Hercegovina','BIH',1026,1), + (1720,'Republika Srpska','SRP',1026,1), + (1721,'Bagerhat zila','05',1017,1), + (1722,'Bandarban zila','01',1017,1), + (1723,'Barguna zila','02',1017,1), + (1724,'Barisal zila','06',1017,1), + (1725,'Bhola zila','07',1017,1), + (1726,'Bogra zila','03',1017,1), + (1727,'Brahmanbaria zila','04',1017,1), + (1728,'Chandpur zila','09',1017,1), + (1729,'Chittagong zila','10',1017,1), + (1730,'Chuadanga zila','12',1017,1), + (1731,'Comilla zila','08',1017,1), + (1732,'Cox\'s Bazar zila','11',1017,1), + (1733,'Dhaka zila','13',1017,1), + (1734,'Dinajpur zila','14',1017,1), + (1735,'Faridpur zila','15',1017,1), + (1736,'Feni zila','16',1017,1), + (1737,'Gaibandha zila','19',1017,1), + (1738,'Gazipur zila','18',1017,1), + (1739,'Gopalganj zila','17',1017,1), + (1740,'Habiganj zila','20',1017,1), + (1741,'Jaipurhat zila','24',1017,1), + (1742,'Jamalpur zila','21',1017,1), + (1743,'Jessore zila','22',1017,1), + (1744,'Jhalakati zila','25',1017,1), + (1745,'Jhenaidah zila','23',1017,1), + (1746,'Khagrachari zila','29',1017,1), + (1747,'Khulna zila','27',1017,1), + (1748,'Kishorganj zila','26',1017,1), + (1749,'Kurigram zila','28',1017,1), + (1750,'Kushtia zila','30',1017,1), + (1751,'Lakshmipur zila','31',1017,1), + (1752,'Lalmonirhat zila','32',1017,1), + (1753,'Madaripur zila','36',1017,1), + (1754,'Magura zila','37',1017,1), + (1755,'Manikganj zila','33',1017,1), + (1756,'Meherpur zila','39',1017,1), + (1757,'Moulvibazar zila','38',1017,1), + (1758,'Munshiganj zila','35',1017,1), + (1759,'Mymensingh zila','34',1017,1), + (1760,'Naogaon zila','48',1017,1), + (1761,'Narail zila','43',1017,1), + (1762,'Narayanganj zila','40',1017,1), + (1763,'Narsingdi zila','42',1017,1), + (1764,'Natore zila','44',1017,1), + (1765,'Nawabganj zila','45',1017,1), + (1766,'Netrakona zila','41',1017,1), + (1767,'Nilphamari zila','46',1017,1), + (1768,'Noakhali zila','47',1017,1), + (1769,'Pabna zila','49',1017,1), + (1770,'Panchagarh zila','52',1017,1), + (1771,'Patuakhali zila','51',1017,1), + (1772,'Pirojpur zila','50',1017,1), + (1773,'Rajbari zila','53',1017,1), + (1774,'Rajshahi zila','54',1017,1), + (1775,'Rangamati zila','56',1017,1), + (1776,'Rangpur zila','55',1017,1), + (1777,'Satkhira zila','58',1017,1), + (1778,'Shariatpur zila','62',1017,1), + (1779,'Sherpur zila','57',1017,1), + (1780,'Sirajganj zila','59',1017,1), + (1781,'Sunamganj zila','61',1017,1), + (1782,'Sylhet zila','60',1017,1), + (1783,'Tangail zila','63',1017,1), + (1784,'Thakurgaon zila','64',1017,1), + (1785,'Antwerpen','VAN',1020,1), + (1786,'Brabant Wallon','WBR',1020,1), + (1787,'Hainaut','WHT',1020,1), + (1788,'Liege','WLG',1020,1), + (1789,'Limburg','VLI',1020,1), + (1790,'Luxembourg','WLX',1020,1), + (1791,'Namur','WNA',1020,1), + (1792,'Oost-Vlaanderen','VOV',1020,1), + (1793,'Vlaams-Brabant','VBR',1020,1), + (1794,'West-Vlaanderen','VWV',1020,1), + (1795,'Bale','BAL',1034,1), + (1796,'Bam','BAM',1034,1), + (1797,'Banwa','BAN',1034,1), + (1798,'Bazega','BAZ',1034,1), + (1799,'Bougouriba','BGR',1034,1), + (1800,'Boulgou','BLG',1034,1), + (1801,'Boulkiemde','BLK',1034,1), + (1802,'Comoe','COM',1034,1), + (1803,'Ganzourgou','GAN',1034,1), + (1804,'Gnagna','GNA',1034,1), + (1805,'Gourma','GOU',1034,1), + (1806,'Houet','HOU',1034,1), + (1807,'Ioba','IOB',1034,1), + (1808,'Kadiogo','KAD',1034,1), + (1809,'Kenedougou','KEN',1034,1), + (1810,'Komondjari','KMD',1034,1), + (1811,'Kompienga','KMP',1034,1), + (1812,'Kossi','KOS',1034,1), + (1813,'Koulpulogo','KOP',1034,1), + (1814,'Kouritenga','KOT',1034,1), + (1815,'Kourweogo','KOW',1034,1), + (1816,'Leraba','LER',1034,1), + (1817,'Loroum','LOR',1034,1), + (1818,'Mouhoun','MOU',1034,1), + (1819,'Nahouri','NAO',1034,1), + (1820,'Namentenga','NAM',1034,1), + (1821,'Nayala','NAY',1034,1), + (1822,'Noumbiel','NOU',1034,1), + (1823,'Oubritenga','OUB',1034,1), + (1824,'Oudalan','OUD',1034,1), + (1825,'Passore','PAS',1034,1), + (1826,'Poni','PON',1034,1), + (1827,'Sanguie','SNG',1034,1), + (1828,'Sanmatenga','SMT',1034,1), + (1829,'Seno','SEN',1034,1), + (1830,'Siasili','SIS',1034,1), + (1831,'Soum','SOM',1034,1), + (1832,'Sourou','SOR',1034,1), + (1833,'Tapoa','TAP',1034,1), + (1834,'Tui','TUI',1034,1), + (1835,'Yagha','YAG',1034,1), + (1836,'Yatenga','YAT',1034,1), + (1837,'Ziro','ZIR',1034,1), + (1838,'Zondoma','ZON',1034,1), + (1839,'Zoundweogo','ZOU',1034,1), + (1840,'Blagoevgrad','01',1033,1), + (1841,'Burgas','02',1033,1), + (1842,'Dobrich','08',1033,1), + (1843,'Gabrovo','07',1033,1), + (1844,'Haskovo','26',1033,1), + (1845,'Yambol','28',1033,1), + (1846,'Kardzhali','09',1033,1), + (1847,'Kyustendil','10',1033,1), + (1848,'Lovech','11',1033,1), + (1849,'Montana','12',1033,1), + (1850,'Pazardzhik','13',1033,1), + (1851,'Pernik','14',1033,1), + (1852,'Pleven','15',1033,1), + (1853,'Plovdiv','16',1033,1), + (1854,'Razgrad','17',1033,1), + (1855,'Ruse','18',1033,1), + (1856,'Silistra','19',1033,1), + (1857,'Sliven','20',1033,1), + (1858,'Smolyan','21',1033,1), + (1859,'Sofia','23',1033,1), + (1860,'Stara Zagora','24',1033,1), + (1861,'Shumen','27',1033,1), + (1862,'Targovishte','25',1033,1), + (1863,'Varna','03',1033,1), + (1864,'Veliko Tarnovo','04',1033,1), + (1865,'Vidin','05',1033,1), + (1866,'Vratsa','06',1033,1), + (1867,'Al Hadd','01',1016,1), + (1868,'Al Manamah','03',1016,1), + (1869,'Al Mintaqah al Gharbiyah','10',1016,1), + (1870,'Al Mintagah al Wusta','07',1016,1), + (1871,'Al Mintaqah ash Shamaliyah','05',1016,1), + (1872,'Al Muharraq','02',1016,1), + (1873,'Ar Rifa','09',1016,1), + (1874,'Jidd Hafs','04',1016,1), + (1875,'Madluat Jamad','12',1016,1), + (1876,'Madluat Isa','08',1016,1), + (1877,'Mintaqat Juzur tawar','11',1016,1), + (1878,'Sitrah','06',1016,1), + (1879,'Bubanza','BB',1036,1), + (1880,'Bujumbura','BJ',1036,1), + (1881,'Bururi','BR',1036,1), + (1882,'Cankuzo','CA',1036,1), + (1883,'Cibitoke','CI',1036,1), + (1884,'Gitega','GI',1036,1), + (1885,'Karuzi','KR',1036,1), + (1886,'Kayanza','KY',1036,1), + (1887,'Makamba','MA',1036,1), + (1888,'Muramvya','MU',1036,1), + (1889,'Mwaro','MW',1036,1), + (1890,'Ngozi','NG',1036,1), + (1891,'Rutana','RT',1036,1), + (1892,'Ruyigi','RY',1036,1), + (1893,'Alibori','AL',1022,1), + (1894,'Atakora','AK',1022,1), + (1895,'Atlantique','AQ',1022,1), + (1896,'Borgou','BO',1022,1), + (1897,'Collines','CO',1022,1), + (1898,'Donga','DO',1022,1), + (1899,'Kouffo','KO',1022,1), + (1900,'Littoral','LI',1022,1), + (1901,'Mono','MO',1022,1), + (1902,'Oueme','OU',1022,1), + (1903,'Plateau','PL',1022,1), + (1904,'Zou','ZO',1022,1), + (1905,'Belait','BE',1032,1), + (1906,'Brunei-Muara','BM',1032,1), + (1907,'Temburong','TE',1032,1), + (1908,'Tutong','TU',1032,1), + (1909,'Cochabamba','C',1025,1), + (1910,'Chuquisaca','H',1025,1), + (1911,'El Beni','B',1025,1), + (1912,'La Paz','L',1025,1), + (1913,'Oruro','O',1025,1), + (1914,'Pando','N',1025,1), + (1915,'Potosi','P',1025,1), + (1916,'Tarija','T',1025,1), + (1917,'Acre','AC',1029,1), + (1918,'Alagoas','AL',1029,1), + (1919,'Amazonas','AM',1029,1), + (1920,'Amapa','AP',1029,1), + (1921,'Bahia','BA',1029,1), + (1922,'Ceara','CE',1029,1), + (1923,'Distrito Federal','DF',1029,1), + (1924,'Espirito Santo','ES',1029,1), + (1926,'Goias','GO',1029,1), + (1927,'Maranhao','MA',1029,1), + (1928,'Minas Gerais','MG',1029,1), + (1929,'Mato Grosso do Sul','MS',1029,1), + (1930,'Mato Grosso','MT',1029,1), + (1931,'Para','PA',1029,1), + (1932,'Paraiba','PB',1029,1), + (1933,'Pernambuco','PE',1029,1), + (1934,'Piaui','PI',1029,1), + (1935,'Parana','PR',1029,1), + (1936,'Rio de Janeiro','RJ',1029,1), + (1937,'Rio Grande do Norte','RN',1029,1), + (1938,'Rondonia','RO',1029,1), + (1939,'Roraima','RR',1029,1), + (1940,'Rio Grande do Sul','RS',1029,1), + (1941,'Santa Catarina','SC',1029,1), + (1942,'Sergipe','SE',1029,1), + (1943,'Sao Paulo','SP',1029,1), + (1944,'Tocantins','TO',1029,1), + (1945,'Acklins and Crooked Islands','AC',1212,1), + (1946,'Bimini','BI',1212,1), + (1947,'Cat Island','CI',1212,1), + (1948,'Exuma','EX',1212,1), + (1955,'Inagua','IN',1212,1), + (1957,'Long Island','LI',1212,1), + (1959,'Mayaguana','MG',1212,1), + (1960,'New Providence','NP',1212,1), + (1962,'Ragged Island','RI',1212,1), + (1966,'Bumthang','33',1024,1), + (1967,'Chhukha','12',1024,1), + (1968,'Dagana','22',1024,1), + (1969,'Gasa','GA',1024,1), + (1970,'Ha','13',1024,1), + (1971,'Lhuentse','44',1024,1), + (1972,'Monggar','42',1024,1), + (1973,'Paro','11',1024,1), + (1974,'Pemagatshel','43',1024,1), + (1975,'Punakha','23',1024,1), + (1976,'Samdrup Jongkha','45',1024,1), + (1977,'Samtee','14',1024,1), + (1978,'Sarpang','31',1024,1), + (1979,'Thimphu','15',1024,1), + (1980,'Trashigang','41',1024,1), + (1981,'Trashi Yangtse','TY',1024,1), + (1982,'Trongsa','32',1024,1), + (1983,'Tsirang','21',1024,1), + (1984,'Wangdue Phodrang','24',1024,1), + (1985,'Zhemgang','34',1024,1), + (1986,'Central','CE',1027,1), + (1987,'Ghanzi','GH',1027,1), + (1988,'Kgalagadi','KG',1027,1), + (1989,'Kgatleng','KL',1027,1), + (1990,'Kweneng','KW',1027,1), + (1991,'Ngamiland','NG',1027,1), + (1992,'North-East','NE',1027,1), + (1993,'North-West','NW',1027,1), + (1994,'South-East','SE',1027,1), + (1995,'Southern','SO',1027,1), + (1996,'Brèsckaja voblasc\'','BR',1019,1), + (1997,'Homel\'skaja voblasc\'','HO',1019,1), + (1998,'Hrodzenskaja voblasc\'','HR',1019,1), + (1999,'Mahilëuskaja voblasc\'','MA',1019,1), + (2000,'Minskaja voblasc\'','MI',1019,1), + (2001,'Vicebskaja voblasc\'','VI',1019,1), + (2002,'Belize','BZ',1021,1), + (2003,'Cayo','CY',1021,1), + (2004,'Corozal','CZL',1021,1), + (2005,'Orange Walk','OW',1021,1), + (2006,'Stann Creek','SC',1021,1), + (2007,'Toledo','TOL',1021,1), + (2008,'Kinshasa','KN',1050,1), + (2011,'Equateur','EQ',1050,1), + (2014,'Kasai-Oriental','KE',1050,1), + (2016,'Maniema','MA',1050,1), + (2017,'Nord-Kivu','NK',1050,1), + (2019,'Sud-Kivu','SK',1050,1), + (2020,'Bangui','BGF',1042,1), + (2021,'Bamingui-Bangoran','BB',1042,1), + (2022,'Basse-Kotto','BK',1042,1), + (2023,'Haute-Kotto','HK',1042,1), + (2024,'Haut-Mbomou','HM',1042,1), + (2025,'Kemo','KG',1042,1), + (2026,'Lobaye','LB',1042,1), + (2027,'Mambere-Kadei','HS',1042,1), + (2028,'Mbomou','MB',1042,1), + (2029,'Nana-Grebizi','KB',1042,1), + (2030,'Nana-Mambere','NM',1042,1), + (2031,'Ombella-Mpoko','MP',1042,1), + (2032,'Ouaka','UK',1042,1), + (2033,'Ouham','AC',1042,1), + (2034,'Ouham-Pende','OP',1042,1), + (2035,'Sangha-Mbaere','SE',1042,1), + (2036,'Vakaga','VR',1042,1), + (2037,'Brazzaville','BZV',1051,1), + (2038,'Bouenza','11',1051,1), + (2039,'Cuvette','8',1051,1), + (2040,'Cuvette-Ouest','15',1051,1), + (2041,'Kouilou','5',1051,1), + (2042,'Lekoumou','2',1051,1), + (2043,'Likouala','7',1051,1), + (2044,'Niari','9',1051,1), + (2045,'Plateaux','14',1051,1), + (2046,'Pool','12',1051,1), + (2047,'Sangha','13',1051,1), + (2048,'Aargau','AG',1205,1), + (2049,'Appenzell Innerrhoden','AI',1205,1), + (2050,'Appenzell Ausserrhoden','AR',1205,1), + (2051,'Bern','BE',1205,1), + (2052,'Basel-Landschaft','BL',1205,1), + (2053,'Basel-Stadt','BS',1205,1), + (2054,'Fribourg','FR',1205,1), + (2055,'Geneva','GE',1205,1), + (2056,'Glarus','GL',1205,1), + (2057,'Graubunden','GR',1205,1), + (2058,'Jura','JU',1205,1), + (2059,'Luzern','LU',1205,1), + (2060,'Neuchatel','NE',1205,1), + (2061,'Nidwalden','NW',1205,1), + (2062,'Obwalden','OW',1205,1), + (2063,'Sankt Gallen','SG',1205,1), + (2064,'Schaffhausen','SH',1205,1), + (2065,'Solothurn','SO',1205,1), + (2066,'Schwyz','SZ',1205,1), + (2067,'Thurgau','TG',1205,1), + (2068,'Ticino','TI',1205,1), + (2069,'Uri','UR',1205,1), + (2070,'Vaud','VD',1205,1), + (2071,'Valais','VS',1205,1), + (2072,'Zug','ZG',1205,1), + (2073,'Zurich','ZH',1205,1), + (2074,'18 Montagnes','06',1054,1), + (2075,'Agnebi','16',1054,1), + (2076,'Bas-Sassandra','09',1054,1), + (2077,'Denguele','10',1054,1), + (2078,'Haut-Sassandra','02',1054,1), + (2079,'Lacs','07',1054,1), + (2080,'Lagunes','01',1054,1), + (2081,'Marahoue','12',1054,1), + (2082,'Moyen-Comoe','05',1054,1), + (2083,'Nzi-Comoe','11',1054,1), + (2084,'Savanes','03',1054,1), + (2085,'Sud-Bandama','15',1054,1), + (2086,'Sud-Comoe','13',1054,1), + (2087,'Vallee du Bandama','04',1054,1), + (2088,'Worodouqou','14',1054,1), + (2089,'Zanzan','08',1054,1), + (2090,'Aisen del General Carlos Ibanez del Campo','AI',1044,1), + (2091,'Antofagasta','AN',1044,1), + (2092,'Araucania','AR',1044,1), + (2093,'Atacama','AT',1044,1), + (2094,'Bio-Bio','BI',1044,1), + (2095,'Coquimbo','CO',1044,1), + (2096,'Libertador General Bernardo O\'Higgins','LI',1044,1), + (2097,'Los Lagos','LL',1044,1), + (2098,'Magallanes','MA',1044,1), + (2099,'Maule','ML',1044,1), + (2100,'Santiago Metropolitan','SM',1044,1), + (2101,'Tarapaca','TA',1044,1), + (2102,'Valparaiso','VS',1044,1), + (2103,'Adamaoua','AD',1038,1), + (2104,'Centre','CE',1038,1), + (2105,'East','ES',1038,1), + (2106,'Far North','EN',1038,1), + (2107,'North','NO',1038,1), + (2108,'South','SW',1038,1), + (2109,'South-West','SW',1038,1), + (2110,'West','OU',1038,1), + (2111,'Beijing','11',1045,1), + (2112,'Chongqing','50',1045,1), + (2113,'Shanghai','31',1045,1), + (2114,'Tianjin','12',1045,1), + (2115,'Anhui','34',1045,1), + (2116,'Fujian','35',1045,1), + (2117,'Gansu','62',1045,1), + (2118,'Guangdong','44',1045,1), + (2119,'Guizhou','52',1045,1), + (2120,'Hainan','46',1045,1), + (2121,'Hebei','13',1045,1), + (2122,'Heilongjiang','23',1045,1), + (2123,'Henan','41',1045,1), + (2124,'Hubei','42',1045,1), + (2125,'Hunan','43',1045,1), + (2126,'Jiangsu','32',1045,1), + (2127,'Jiangxi','36',1045,1), + (2128,'Jilin','22',1045,1), + (2129,'Liaoning','21',1045,1), + (2130,'Qinghai','63',1045,1), + (2131,'Shaanxi','61',1045,1), + (2132,'Shandong','37',1045,1), + (2133,'Shanxi','14',1045,1), + (2134,'Sichuan','51',1045,1), + (2135,'Taiwan','71',1045,1), + (2136,'Yunnan','53',1045,1), + (2137,'Zhejiang','33',1045,1), + (2138,'Guangxi','45',1045,1), + (2139,'Neia Mongol (mn)','15',1045,1), + (2140,'Xinjiang','65',1045,1), + (2141,'Xizang','54',1045,1), + (2142,'Hong Kong','91',1045,1), + (2143,'Macau','92',1045,1), + (2144,'Distrito Capital de Bogotá','DC',1048,1), + (2145,'Amazonea','AMA',1048,1), + (2146,'Antioquia','ANT',1048,1), + (2147,'Arauca','ARA',1048,1), + (2148,'Atlántico','ATL',1048,1), + (2149,'BolÃvar','BOL',1048,1), + (2150,'Boyacá','BOY',1048,1), + (2151,'Caldea','CAL',1048,1), + (2152,'Caquetá','CAQ',1048,1), + (2153,'Casanare','CAS',1048,1), + (2154,'Cauca','CAU',1048,1), + (2155,'Cesar','CES',1048,1), + (2156,'Córdoba','COR',1048,1), + (2157,'Cundinamarca','CUN',1048,1), + (2158,'Chocó','CHO',1048,1), + (2159,'GuainÃa','GUA',1048,1), + (2160,'Guaviare','GUV',1048,1), + (2161,'La Guajira','LAG',1048,1), + (2162,'Magdalena','MAG',1048,1), + (2163,'Meta','MET',1048,1), + (2164,'Nariño','NAR',1048,1), + (2165,'Norte de Santander','NSA',1048,1), + (2166,'Putumayo','PUT',1048,1), + (2167,'Quindio','QUI',1048,1), + (2168,'Risaralda','RIS',1048,1), + (2169,'San Andrés, Providencia y Santa Catalina','SAP',1048,1), + (2170,'Santander','SAN',1048,1), + (2171,'Sucre','SUC',1048,1), + (2172,'Tolima','TOL',1048,1), + (2173,'Valle del Cauca','VAC',1048,1), + (2174,'Vaupés','VAU',1048,1), + (2175,'Vichada','VID',1048,1), + (2176,'Alajuela','A',1053,1), + (2177,'Cartago','C',1053,1), + (2178,'Guanacaste','G',1053,1), + (2179,'Heredia','H',1053,1), + (2180,'Limon','L',1053,1), + (2181,'Puntarenas','P',1053,1), + (2182,'San Jose','SJ',1053,1), + (2183,'Camagey','09',1056,1), + (2184,'Ciego de `vila','08',1056,1), + (2185,'Cienfuegos','06',1056,1), + (2186,'Ciudad de La Habana','03',1056,1), + (2187,'Granma','12',1056,1), + (2188,'Guantanamo','14',1056,1), + (2189,'Holquin','11',1056,1), + (2190,'La Habana','02',1056,1), + (2191,'Las Tunas','10',1056,1), + (2192,'Matanzas','04',1056,1), + (2193,'Pinar del Rio','01',1056,1), + (2194,'Sancti Spiritus','07',1056,1), + (2195,'Santiago de Cuba','13',1056,1), + (2196,'Villa Clara','05',1056,1), + (2197,'Isla de la Juventud','99',1056,1), + (2198,'Pinar del Roo','PR',1056,1), + (2199,'Ciego de Avila','CA',1056,1), + (2200,'Camagoey','CG',1056,1), + (2201,'Holgun','HO',1056,1), + (2202,'Sancti Spritus','SS',1056,1), + (2203,'Municipio Especial Isla de la Juventud','IJ',1056,1), + (2204,'Boa Vista','BV',1040,1), + (2205,'Brava','BR',1040,1), + (2206,'Calheta de Sao Miguel','CS',1040,1), + (2207,'Fogo','FO',1040,1), + (2208,'Maio','MA',1040,1), + (2209,'Mosteiros','MO',1040,1), + (2210,'Paul','PA',1040,1), + (2211,'Porto Novo','PN',1040,1), + (2212,'Praia','PR',1040,1), + (2213,'Ribeira Grande','RG',1040,1), + (2214,'Sal','SL',1040,1), + (2215,'Sao Domingos','SD',1040,1), + (2216,'Sao Filipe','SF',1040,1), + (2217,'Sao Nicolau','SN',1040,1), + (2218,'Sao Vicente','SV',1040,1), + (2219,'Tarrafal','TA',1040,1), + (2220,'Ammochostos Magusa','04',1057,1), + (2221,'Keryneia','06',1057,1), + (2222,'Larnaka','03',1057,1), + (2223,'Lefkosia','01',1057,1), + (2224,'Lemesos','02',1057,1), + (2225,'Pafos','05',1057,1), + (2226,'JihoÄeský kraj','JC',1058,1), + (2227,'Jihomoravský kraj','JM',1058,1), + (2228,'Karlovarský kraj','KA',1058,1), + (2229,'Královéhradecký kraj','KR',1058,1), + (2230,'Liberecký kraj','LI',1058,1), + (2231,'Moravskoslezský kraj','MO',1058,1), + (2232,'Olomoucký kraj','OL',1058,1), + (2233,'Pardubický kraj','PA',1058,1), + (2234,'Plzeňský kraj','PL',1058,1), + (2235,'Praha, hlavnà mÄ›sto','PR',1058,1), + (2236,'StÅ™edoÄeský kraj','ST',1058,1), + (2237,'Ústecký kraj','US',1058,1), + (2238,'VysoÄina','VY',1058,1), + (2239,'ZlÃnský kraj','ZL',1058,1), + (2240,'Baden-Württemberg','BW',1082,1), + (2241,'Bayern','BY',1082,1), + (2242,'Bremen','HB',1082,1), + (2243,'Hamburg','HH',1082,1), + (2244,'Hessen','HE',1082,1), + (2245,'Niedersachsen','NI',1082,1), + (2246,'Nordrhein-Westfalen','NW',1082,1), + (2247,'Rheinland-Pfalz','RP',1082,1), + (2248,'Saarland','SL',1082,1), + (2249,'Schleswig-Holstein','SH',1082,1), + (2250,'Berlin','BE',1082,1), + (2251,'Brandenburg','BB',1082,1), + (2252,'Mecklenburg-Vorpommern','MV',1082,1), + (2253,'Sachsen','SN',1082,1), + (2254,'Sachsen-Anhalt','ST',1082,1), + (2255,'Thüringen','TH',1082,1), + (2256,'Ali Sabiah','AS',1060,1), + (2257,'Dikhil','DI',1060,1), + (2258,'Djibouti','DJ',1060,1), + (2259,'Obock','OB',1060,1), + (2260,'Tadjoura','TA',1060,1), + (2261,'Frederiksberg','147',1059,1), + (2262,'Copenhagen City','101',1059,1), + (2263,'Copenhagen','015',1059,1), + (2264,'Frederiksborg','020',1059,1), + (2265,'Roskilde','025',1059,1), + (2266,'Vestsjælland','030',1059,1), + (2267,'Storstrøm','035',1059,1), + (2268,'Bornholm','040',1059,1), + (2269,'Fyn','042',1059,1), + (2270,'South Jutland','050',1059,1), + (2271,'Ribe','055',1059,1), + (2272,'Vejle','060',1059,1), + (2273,'Ringkjøbing','065',1059,1), + (2274,'Ã…rhus','070',1059,1), + (2275,'Viborg','076',1059,1), + (2276,'North Jutland','080',1059,1), + (2277,'Distrito Nacional (Santo Domingo)','01',1062,1), + (2278,'Azua','02',1062,1), + (2279,'Bahoruco','03',1062,1), + (2280,'Barahona','04',1062,1), + (2281,'Dajabón','05',1062,1), + (2282,'Duarte','06',1062,1), + (2283,'El Seybo [El Seibo]','08',1062,1), + (2284,'Espaillat','09',1062,1), + (2285,'Hato Mayor','30',1062,1), + (2286,'Independencia','10',1062,1), + (2287,'La Altagracia','11',1062,1), + (2288,'La Estrelleta [Elias Pina]','07',1062,1), + (2289,'La Romana','12',1062,1), + (2290,'La Vega','13',1062,1), + (2291,'Maroia Trinidad Sánchez','14',1062,1), + (2292,'Monseñor Nouel','28',1062,1), + (2293,'Monte Cristi','15',1062,1), + (2294,'Monte Plata','29',1062,1), + (2295,'Pedernales','16',1062,1), + (2296,'Peravia','17',1062,1), + (2297,'Puerto Plata','18',1062,1), + (2298,'Salcedo','19',1062,1), + (2299,'Samaná','20',1062,1), + (2300,'San Cristóbal','21',1062,1), + (2301,'San Pedro de MacorÃs','23',1062,1), + (2302,'Sánchez RamÃrez','24',1062,1), + (2303,'Santiago','25',1062,1), + (2304,'Santiago RodrÃguez','26',1062,1), + (2305,'Valverde','27',1062,1), + (2306,'Adrar','01',1003,1), + (2307,'Ain Defla','44',1003,1), + (2308,'Ain Tmouchent','46',1003,1), + (2309,'Alger','16',1003,1), + (2310,'Annaba','23',1003,1), + (2311,'Batna','05',1003,1), + (2312,'Bechar','08',1003,1), + (2313,'Bejaia','06',1003,1), + (2314,'Biskra','07',1003,1), + (2315,'Blida','09',1003,1), + (2316,'Bordj Bou Arreridj','34',1003,1), + (2317,'Bouira','10',1003,1), + (2318,'Boumerdes','35',1003,1), + (2319,'Chlef','02',1003,1), + (2320,'Constantine','25',1003,1), + (2321,'Djelfa','17',1003,1), + (2322,'El Bayadh','32',1003,1), + (2323,'El Oued','39',1003,1), + (2324,'El Tarf','36',1003,1), + (2325,'Ghardaia','47',1003,1), + (2326,'Guelma','24',1003,1), + (2327,'Illizi','33',1003,1), + (2328,'Jijel','18',1003,1), + (2329,'Khenchela','40',1003,1), + (2330,'Laghouat','03',1003,1), + (2331,'Mascara','29',1003,1), + (2332,'Medea','26',1003,1), + (2333,'Mila','43',1003,1), + (2334,'Mostaganem','27',1003,1), + (2335,'Msila','28',1003,1), + (2336,'Naama','45',1003,1), + (2337,'Oran','31',1003,1), + (2338,'Ouargla','30',1003,1), + (2339,'Oum el Bouaghi','04',1003,1), + (2340,'Relizane','48',1003,1), + (2341,'Saida','20',1003,1), + (2342,'Setif','19',1003,1), + (2343,'Sidi Bel Abbes','22',1003,1), + (2344,'Skikda','21',1003,1), + (2345,'Souk Ahras','41',1003,1), + (2346,'Tamanghasset','11',1003,1), + (2347,'Tebessa','12',1003,1), + (2348,'Tiaret','14',1003,1), + (2349,'Tindouf','37',1003,1), + (2350,'Tipaza','42',1003,1), + (2351,'Tissemsilt','38',1003,1), + (2352,'Tizi Ouzou','15',1003,1), + (2353,'Tlemcen','13',1003,1), + (2354,'Azuay','A',1064,1), + (2355,'Bolivar','B',1064,1), + (2356,'Canar','F',1064,1), + (2357,'Carchi','C',1064,1), + (2358,'Cotopaxi','X',1064,1), + (2359,'Chimborazo','H',1064,1), + (2360,'El Oro','O',1064,1), + (2361,'Esmeraldas','E',1064,1), + (2362,'Galapagos','W',1064,1), + (2363,'Guayas','G',1064,1), + (2364,'Imbabura','I',1064,1), + (2365,'Loja','L',1064,1), + (2366,'Los Rios','R',1064,1), + (2367,'Manabi','M',1064,1), + (2368,'Morona-Santiago','S',1064,1), + (2369,'Napo','N',1064,1), + (2370,'Orellana','D',1064,1), + (2371,'Pastaza','Y',1064,1), + (2372,'Pichincha','P',1064,1), + (2373,'Sucumbios','U',1064,1), + (2374,'Tungurahua','T',1064,1), + (2375,'Zamora-Chinchipe','Z',1064,1), + (2376,'Harjumaa','37',1069,1), + (2377,'Hiiumaa','39',1069,1), + (2378,'Ida-Virumaa','44',1069,1), + (2379,'Jõgevamaa','49',1069,1), + (2380,'Järvamaa','51',1069,1), + (2381,'Läänemaa','57',1069,1), + (2382,'Lääne-Virumaa','59',1069,1), + (2383,'Põlvamaa','65',1069,1), + (2384,'Pärnumaa','67',1069,1), + (2385,'Raplamaa','70',1069,1), + (2386,'Saaremaa','74',1069,1), + (2387,'Tartumaa','7B',1069,1), + (2388,'Valgamaa','82',1069,1), + (2389,'Viljandimaa','84',1069,1), + (2390,'Võrumaa','86',1069,1), + (2391,'Ad Daqahllyah','DK',1065,1), + (2392,'Al Bahr al Ahmar','BA',1065,1), + (2393,'Al Buhayrah','BH',1065,1), + (2394,'Al Fayym','FYM',1065,1), + (2395,'Al Gharbiyah','GH',1065,1), + (2396,'Al Iskandarlyah','ALX',1065,1), + (2397,'Al Isma illyah','IS',1065,1), + (2398,'Al Jizah','GZ',1065,1), + (2399,'Al Minuflyah','MNF',1065,1), + (2400,'Al Minya','MN',1065,1), + (2401,'Al Qahirah','C',1065,1), + (2402,'Al Qalyublyah','KB',1065,1), + (2403,'Al Wadi al Jadid','WAD',1065,1), + (2404,'Ash Sharqiyah','SHR',1065,1), + (2405,'As Suways','SUZ',1065,1), + (2406,'Aswan','ASN',1065,1), + (2407,'Asyut','AST',1065,1), + (2408,'Bani Suwayf','BNS',1065,1), + (2409,'Bur Sa\'id','PTS',1065,1), + (2410,'Dumyat','DT',1065,1), + (2411,'Janub Sina\'','JS',1065,1), + (2412,'Kafr ash Shaykh','KFS',1065,1), + (2413,'Matruh','MT',1065,1), + (2414,'Qina','KN',1065,1), + (2415,'Shamal Sina\'','SIN',1065,1), + (2416,'Suhaj','SHG',1065,1), + (2417,'Anseba','AN',1068,1), + (2418,'Debub','DU',1068,1), + (2419,'Debubawi Keyih Bahri [Debub-Keih-Bahri]','DK',1068,1), + (2420,'Gash-Barka','GB',1068,1), + (2421,'Maakel [Maekel]','MA',1068,1), + (2422,'Semenawi Keyih Bahri [Semien-Keih-Bahri]','SK',1068,1), + (2423,'Ãlava','VI',1198,1), + (2424,'Albacete','AB',1198,1), + (2425,'Alicante','A',1198,1), + (2426,'AlmerÃa','AL',1198,1), + (2427,'Asturias','O',1198,1), + (2428,'Ãvila','AV',1198,1), + (2429,'Badajoz','BA',1198,1), + (2430,'Baleares','PM',1198,1), + (2431,'Barcelona','B',1198,1), + (2432,'Burgos','BU',1198,1), + (2433,'Cáceres','CC',1198,1), + (2434,'Cádiz','CA',1198,1), + (2435,'Cantabria','S',1198,1), + (2436,'Castellón','CS',1198,1), + (2437,'Ciudad Real','CR',1198,1), + (2438,'Cuenca','CU',1198,1), + (2439,'Girona [Gerona]','GE',1198,1), + (2440,'Granada','GR',1198,1), + (2441,'Guadalajara','GU',1198,1), + (2442,'Guipúzcoa','SS',1198,1), + (2443,'Huelva','H',1198,1), + (2444,'Huesca','HU',1198,1), + (2445,'Jaén','J',1198,1), + (2446,'La Coruña','C',1198,1), + (2447,'La Rioja','LO',1198,1), + (2448,'Las Palmas','GC',1198,1), + (2449,'León','LE',1198,1), + (2450,'Lleida [Lérida]','L',1198,1), + (2451,'Lugo','LU',1198,1), + (2452,'Madrid','M',1198,1), + (2453,'Málaga','MA',1198,1), + (2454,'Murcia','MU',1198,1), + (2455,'Navarra','NA',1198,1), + (2456,'Ourense','OR',1198,1), + (2457,'Palencia','P',1198,1), + (2458,'Pontevedra','PO',1198,1), + (2459,'Salamanca','SA',1198,1), + (2460,'Santa Cruz de Tenerife','TF',1198,1), + (2461,'Segovia','SG',1198,1), + (2462,'Sevilla','SE',1198,1), + (2463,'Soria','SO',1198,1), + (2464,'Tarragona','T',1198,1), + (2465,'Teruel','TE',1198,1), + (2466,'Valencia','V',1198,1), + (2467,'Valladolid','VA',1198,1), + (2468,'Vizcaya','BI',1198,1), + (2469,'Zamora','ZA',1198,1), + (2470,'Zaragoza','Z',1198,1), + (2471,'Ceuta','CE',1198,1), + (2472,'Melilla','ML',1198,1), + (2473,'Addis Ababa','AA',1070,1), + (2474,'Dire Dawa','DD',1070,1), + (2475,'Afar','AF',1070,1), + (2476,'Amara','AM',1070,1), + (2477,'Benshangul-Gumaz','BE',1070,1), + (2478,'Gambela Peoples','GA',1070,1), + (2479,'Harari People','HA',1070,1), + (2480,'Oromia','OR',1070,1), + (2481,'Somali','SO',1070,1), + (2482,'Southern Nations, Nationalities and Peoples','SN',1070,1), + (2483,'Tigrai','TI',1070,1), + (2490,'Eastern','E',1074,1), + (2491,'Northern','N',1074,1), + (2492,'Western','W',1074,1), + (2493,'Rotuma','R',1074,1), + (2494,'Chuuk','TRK',1141,1), + (2495,'Kosrae','KSA',1141,1), + (2496,'Pohnpei','PNI',1141,1), + (2497,'Yap','YAP',1141,1), + (2498,'Ain','01',1076,1), + (2499,'Aisne','02',1076,1), + (2500,'Allier','03',1076,1), + (2501,'Alpes-de-Haute-Provence','04',1076,1), + (2502,'Alpes-Maritimes','06',1076,1), + (2503,'Ardèche','07',1076,1), + (2504,'Ardennes','08',1076,1), + (2505,'Ariège','09',1076,1), + (2506,'Aube','10',1076,1), + (2507,'Aude','11',1076,1), + (2508,'Aveyron','12',1076,1), + (2509,'Bas-Rhin','67',1076,1), + (2510,'Bouches-du-Rhône','13',1076,1), + (2511,'Calvados','14',1076,1), + (2512,'Cantal','15',1076,1), + (2513,'Charente','16',1076,1), + (2514,'Charente-Maritime','17',1076,1), + (2515,'Cher','18',1076,1), + (2516,'Corrèze','19',1076,1), + (2517,'Corse-du-Sud','20A',1076,1), + (2518,'Côte-d\'Or','21',1076,1), + (2519,'Côtes-d\'Armor','22',1076,1), + (2520,'Creuse','23',1076,1), + (2521,'Deux-Sèvres','79',1076,1), + (2522,'Dordogne','24',1076,1), + (2523,'Doubs','25',1076,1), + (2524,'Drôme','26',1076,1), + (2525,'Essonne','91',1076,1), + (2526,'Eure','27',1076,1), + (2527,'Eure-et-Loir','28',1076,1), + (2528,'Finistère','29',1076,1), + (2529,'Gard','30',1076,1), + (2530,'Gers','32',1076,1), + (2531,'Gironde','33',1076,1), + (2532,'Haut-Rhin','68',1076,1), + (2533,'Haute-Corse','20B',1076,1), + (2534,'Haute-Garonne','31',1076,1), + (2535,'Haute-Loire','43',1076,1), + (2536,'Haute-Saône','70',1076,1), + (2537,'Haute-Savoie','74',1076,1), + (2538,'Haute-Vienne','87',1076,1), + (2539,'Hautes-Alpes','05',1076,1), + (2540,'Hautes-Pyrénées','65',1076,1), + (2541,'Hauts-de-Seine','92',1076,1), + (2542,'Hérault','34',1076,1), + (2543,'Indre','36',1076,1), + (2544,'Ille-et-Vilaine','35',1076,1), + (2545,'Indre-et-Loire','37',1076,1), + (2546,'Isère','38',1076,1), + (2547,'Landes','40',1076,1), + (2548,'Loir-et-Cher','41',1076,1), + (2549,'Loire','42',1076,1), + (2550,'Loire-Atlantique','44',1076,1), + (2551,'Loiret','45',1076,1), + (2552,'Lot','46',1076,1), + (2553,'Lot-et-Garonne','47',1076,1), + (2554,'Lozère','48',1076,1), + (2555,'Maine-et-Loire','49',1076,1), + (2556,'Manche','50',1076,1), + (2557,'Marne','51',1076,1), + (2558,'Mayenne','53',1076,1), + (2559,'Meurthe-et-Moselle','54',1076,1), + (2560,'Meuse','55',1076,1), + (2561,'Morbihan','56',1076,1), + (2562,'Moselle','57',1076,1), + (2563,'Nièvre','58',1076,1), + (2564,'Nord','59',1076,1), + (2565,'Oise','60',1076,1), + (2566,'Orne','61',1076,1), + (2567,'Paris','75',1076,1), + (2568,'Pas-de-Calais','62',1076,1), + (2569,'Puy-de-Dôme','63',1076,1), + (2570,'Pyrénées-Atlantiques','64',1076,1), + (2571,'Pyrénées-Orientales','66',1076,1), + (2572,'Rhône','69',1076,1), + (2573,'Saône-et-Loire','71',1076,1), + (2574,'Sarthe','72',1076,1), + (2575,'Savoie','73',1076,1), + (2576,'Seine-et-Marne','77',1076,1), + (2577,'Seine-Maritime','76',1076,1), + (2578,'Seine-Saint-Denis','93',1076,1), + (2579,'Somme','80',1076,1), + (2580,'Tarn','81',1076,1), + (2581,'Tarn-et-Garonne','82',1076,1), + (2582,'Val d\'Oise','95',1076,1), + (2583,'Territoire de Belfort','90',1076,1), + (2584,'Val-de-Marne','94',1076,1), + (2585,'Var','83',1076,1), + (2586,'Vaucluse','84',1076,1), + (2587,'Vendée','85',1076,1), + (2588,'Vienne','86',1076,1), + (2589,'Vosges','88',1076,1), + (2590,'Yonne','89',1076,1), + (2591,'Yvelines','78',1076,1), + (2592,'Aberdeen City','ABE',1226,1), + (2593,'Aberdeenshire','ABD',1226,1), + (2594,'Angus','ANS',1226,1), + (2595,'Co Antrim','ANT',1226,1), + (2597,'Argyll and Bute','AGB',1226,1), + (2598,'Co Armagh','ARM',1226,1), + (2606,'Bedfordshire','BDF',1226,1), + (2612,'Blaenau Gwent','BGW',1226,1), + (2620,'Bristol, City of','BST',1226,1), + (2622,'Buckinghamshire','BKM',1226,1), + (2626,'Cambridgeshire','CAM',1226,1), + (2634,'Cheshire','CHS',1226,1), + (2635,'Clackmannanshire','CLK',1226,1), + (2639,'Cornwall','CON',1226,1), + (2643,'Cumbria','CMA',1226,1), + (2647,'Derbyshire','DBY',1226,1), + (2648,'Co Londonderry','DRY',1226,1), + (2649,'Devon','DEV',1226,1), + (2651,'Dorset','DOR',1226,1), + (2652,'Co Down','DOW',1226,1), + (2654,'Dumfries and Galloway','DGY',1226,1), + (2655,'Dundee City','DND',1226,1), + (2657,'County Durham','DUR',1226,1), + (2659,'East Ayrshire','EAY',1226,1), + (2660,'East Dunbartonshire','EDU',1226,1), + (2661,'East Lothian','ELN',1226,1), + (2662,'East Renfrewshire','ERW',1226,1), + (2663,'East Riding of Yorkshire','ERY',1226,1), + (2664,'East Sussex','ESX',1226,1), + (2665,'Edinburgh, City of','EDH',1226,1), + (2666,'Na h-Eileanan Siar','ELS',1226,1), + (2668,'Essex','ESS',1226,1), + (2669,'Falkirk','FAL',1226,1), + (2670,'Co Fermanagh','FER',1226,1), + (2671,'Fife','FIF',1226,1), + (2674,'Glasgow City','GLG',1226,1), + (2675,'Gloucestershire','GLS',1226,1), + (2678,'Gwynedd','GWN',1226,1), + (2682,'Hampshire','HAM',1226,1), + (2687,'Herefordshire','HEF',1226,1), + (2688,'Hertfordshire','HRT',1226,1), + (2689,'Highland','HED',1226,1), + (2692,'Inverclyde','IVC',1226,1), + (2694,'Isle of Wight','IOW',1226,1), + (2699,'Kent','KEN',1226,1), + (2705,'Lancashire','LAN',1226,1), + (2709,'Leicestershire','LEC',1226,1), + (2712,'Lincolnshire','LIN',1226,1), + (2723,'Midlothian','MLN',1226,1), + (2726,'Moray','MRY',1226,1), + (2734,'Norfolk','NFK',1226,1), + (2735,'North Ayrshire','NAY',1226,1), + (2738,'North Lanarkshire','NLK',1226,1), + (2742,'North Yorkshire','NYK',1226,1), + (2743,'Northamptonshire','NTH',1226,1), + (2744,'Northumberland','NBL',1226,1), + (2746,'Nottinghamshire','NTT',1226,1), + (2747,'Oldham','OLD',1226,1), + (2748,'Omagh','OMH',1226,1), + (2749,'Orkney Islands','ORR',1226,1), + (2750,'Oxfordshire','OXF',1226,1), + (2752,'Perth and Kinross','PKN',1226,1), + (2757,'Powys','POW',1226,1), + (2761,'Renfrewshire','RFW',1226,1), + (2766,'Rutland','RUT',1226,1), + (2770,'Scottish Borders','SCB',1226,1), + (2773,'Shetland Islands','ZET',1226,1), + (2774,'Shropshire','SHR',1226,1), + (2777,'Somerset','SOM',1226,1), + (2778,'South Ayrshire','SAY',1226,1), + (2779,'South Gloucestershire','SGC',1226,1), + (2780,'South Lanarkshire','SLK',1226,1), + (2785,'Staffordshire','STS',1226,1), + (2786,'Stirling','STG',1226,1), + (2791,'Suffolk','SFK',1226,1), + (2793,'Surrey','SRY',1226,1), + (2804,'Vale of Glamorgan, The','VGL',1226,1), + (2811,'Warwickshire','WAR',1226,1), + (2813,'West Dunbartonshire','WDU',1226,1), + (2814,'West Lothian','WLN',1226,1), + (2815,'West Sussex','WSX',1226,1), + (2818,'Wiltshire','WIL',1226,1), + (2823,'Worcestershire','WOR',1226,1), + (2826,'Ashanti','AH',1083,1), + (2827,'Brong-Ahafo','BA',1083,1), + (2828,'Greater Accra','AA',1083,1), + (2829,'Upper East','UE',1083,1), + (2830,'Upper West','UW',1083,1), + (2831,'Volta','TV',1083,1), + (2832,'Banjul','B',1213,1), + (2833,'Lower River','L',1213,1), + (2834,'MacCarthy Island','M',1213,1), + (2835,'North Bank','N',1213,1), + (2836,'Upper River','U',1213,1), + (2837,'Beyla','BE',1091,1), + (2838,'Boffa','BF',1091,1), + (2839,'Boke','BK',1091,1), + (2840,'Coyah','CO',1091,1), + (2841,'Dabola','DB',1091,1), + (2842,'Dalaba','DL',1091,1), + (2843,'Dinguiraye','DI',1091,1), + (2844,'Dubreka','DU',1091,1), + (2845,'Faranah','FA',1091,1), + (2846,'Forecariah','FO',1091,1), + (2847,'Fria','FR',1091,1), + (2848,'Gaoual','GA',1091,1), + (2849,'Guekedou','GU',1091,1), + (2850,'Kankan','KA',1091,1), + (2851,'Kerouane','KE',1091,1), + (2852,'Kindia','KD',1091,1), + (2853,'Kissidougou','KS',1091,1), + (2854,'Koubia','KB',1091,1), + (2855,'Koundara','KN',1091,1), + (2856,'Kouroussa','KO',1091,1), + (2857,'Labe','LA',1091,1), + (2858,'Lelouma','LE',1091,1), + (2859,'Lola','LO',1091,1), + (2860,'Macenta','MC',1091,1), + (2861,'Mali','ML',1091,1), + (2862,'Mamou','MM',1091,1), + (2863,'Mandiana','MD',1091,1), + (2864,'Nzerekore','NZ',1091,1), + (2865,'Pita','PI',1091,1), + (2866,'Siguiri','SI',1091,1), + (2867,'Telimele','TE',1091,1), + (2868,'Tougue','TO',1091,1), + (2869,'Yomou','YO',1091,1), + (2870,'Region Continental','C',1067,1), + (2871,'Region Insular','I',1067,1), + (2872,'Annobon','AN',1067,1), + (2873,'Bioko Norte','BN',1067,1), + (2874,'Bioko Sur','BS',1067,1), + (2875,'Centro Sur','CS',1067,1), + (2876,'Kie-Ntem','KN',1067,1), + (2877,'Litoral','LI',1067,1), + (2878,'Wele-Nzas','WN',1067,1), + (2879,'Achaïa','13',1085,1), + (2880,'Aitolia-Akarnania','01',1085,1), + (2881,'Argolis','11',1085,1), + (2882,'Arkadia','12',1085,1), + (2883,'Arta','31',1085,1), + (2884,'Attiki','A1',1085,1), + (2885,'Chalkidiki','64',1085,1), + (2886,'Chania','94',1085,1), + (2887,'Chios','85',1085,1), + (2888,'Dodekanisos','81',1085,1), + (2889,'Drama','52',1085,1), + (2890,'Evros','71',1085,1), + (2891,'Evrytania','05',1085,1), + (2892,'Evvoia','04',1085,1), + (2893,'Florina','63',1085,1), + (2894,'Fokis','07',1085,1), + (2895,'Fthiotis','06',1085,1), + (2896,'Grevena','51',1085,1), + (2897,'Ileia','14',1085,1), + (2898,'Imathia','53',1085,1), + (2899,'Ioannina','33',1085,1), + (2900,'Irakleion','91',1085,1), + (2901,'Karditsa','41',1085,1), + (2902,'Kastoria','56',1085,1), + (2903,'Kavalla','55',1085,1), + (2904,'Kefallinia','23',1085,1), + (2905,'Kerkyra','22',1085,1), + (2906,'Kilkis','57',1085,1), + (2907,'Korinthia','15',1085,1), + (2908,'Kozani','58',1085,1), + (2909,'Kyklades','82',1085,1), + (2910,'Lakonia','16',1085,1), + (2911,'Larisa','42',1085,1), + (2912,'Lasithion','92',1085,1), + (2913,'Lefkas','24',1085,1), + (2914,'Lesvos','83',1085,1), + (2915,'Magnisia','43',1085,1), + (2916,'Messinia','17',1085,1), + (2917,'Pella','59',1085,1), + (2918,'Preveza','34',1085,1), + (2919,'Rethymnon','93',1085,1), + (2920,'Rodopi','73',1085,1), + (2921,'Samos','84',1085,1), + (2922,'Serrai','62',1085,1), + (2923,'Thesprotia','32',1085,1), + (2924,'Thessaloniki','54',1085,1), + (2925,'Trikala','44',1085,1), + (2926,'Voiotia','03',1085,1), + (2927,'Xanthi','72',1085,1), + (2928,'Zakynthos','21',1085,1), + (2929,'Agio Oros','69',1085,1), + (2930,'Alta Verapaz','AV',1090,1), + (2931,'Baja Verapaz','BV',1090,1), + (2932,'Chimaltenango','CM',1090,1), + (2933,'Chiquimula','CQ',1090,1), + (2934,'El Progreso','PR',1090,1), + (2935,'Escuintla','ES',1090,1), + (2936,'Guatemala','GU',1090,1), + (2937,'Huehuetenango','HU',1090,1), + (2938,'Izabal','IZ',1090,1), + (2939,'Jalapa','JA',1090,1), + (2940,'Jutiapa','JU',1090,1), + (2941,'Peten','PE',1090,1), + (2942,'Quetzaltenango','QZ',1090,1), + (2943,'Quiche','QC',1090,1), + (2944,'Retalhuleu','RE',1090,1), + (2945,'Sacatepequez','SA',1090,1), + (2946,'San Marcos','SM',1090,1), + (2947,'Santa Rosa','SR',1090,1), + (2948,'Sololá','SO',1090,1), + (2949,'Suchitepequez','SU',1090,1), + (2950,'Totonicapan','TO',1090,1), + (2951,'Zacapa','ZA',1090,1), + (2952,'Bissau','BS',1092,1), + (2953,'Bafata','BA',1092,1), + (2954,'Biombo','BM',1092,1), + (2955,'Bolama','BL',1092,1), + (2956,'Cacheu','CA',1092,1), + (2957,'Gabu','GA',1092,1), + (2958,'Oio','OI',1092,1), + (2959,'Quloara','QU',1092,1), + (2960,'Tombali S','TO',1092,1), + (2961,'Barima-Waini','BA',1093,1), + (2962,'Cuyuni-Mazaruni','CU',1093,1), + (2963,'Demerara-Mahaica','DE',1093,1), + (2964,'East Berbice-Corentyne','EB',1093,1), + (2965,'Essequibo Islands-West Demerara','ES',1093,1), + (2966,'Mahaica-Berbice','MA',1093,1), + (2967,'Pomeroon-Supenaam','PM',1093,1), + (2968,'Potaro-Siparuni','PT',1093,1), + (2969,'Upper Demerara-Berbice','UD',1093,1), + (2970,'Upper Takutu-Upper Essequibo','UT',1093,1), + (2971,'Atlantida','AT',1097,1), + (2972,'Colon','CL',1097,1), + (2973,'Comayagua','CM',1097,1), + (2974,'Copan','CP',1097,1), + (2975,'Cortes','CR',1097,1), + (2976,'Choluteca','CH',1097,1), + (2977,'El Paraiso','EP',1097,1), + (2978,'Francisco Morazan','FM',1097,1), + (2979,'Gracias a Dios','GD',1097,1), + (2980,'Intibuca','IN',1097,1), + (2981,'Islas de la Bahia','IB',1097,1), + (2982,'Lempira','LE',1097,1), + (2983,'Ocotepeque','OC',1097,1), + (2984,'Olancho','OL',1097,1), + (2985,'Santa Barbara','SB',1097,1), + (2986,'Valle','VA',1097,1), + (2987,'Yoro','YO',1097,1), + (2988,'Bjelovarsko-bilogorska zupanija','07',1055,1), + (2989,'Brodsko-posavska zupanija','12',1055,1), + (2990,'Dubrovacko-neretvanska zupanija','19',1055,1), + (2991,'Istarska zupanija','18',1055,1), + (2992,'Karlovacka zupanija','04',1055,1), + (2993,'Koprivnickco-krizevacka zupanija','06',1055,1), + (2994,'Krapinako-zagorska zupanija','02',1055,1), + (2995,'Licko-senjska zupanija','09',1055,1), + (2996,'Medimurska zupanija','20',1055,1), + (2997,'Osjecko-baranjska zupanija','14',1055,1), + (2998,'Pozesko-slavonska zupanija','11',1055,1), + (2999,'Primorsko-goranska zupanija','08',1055,1), + (3000,'Sisacko-moelavacka Iupanija','03',1055,1), + (3001,'Splitako-dalmatinska zupanija','17',1055,1), + (3002,'Sibenako-kninska zupanija','15',1055,1), + (3003,'Varaidinska zupanija','05',1055,1), + (3004,'VirovitiEko-podravska zupanija','10',1055,1), + (3005,'VuRovarako-srijemska zupanija','16',1055,1), + (3006,'Zadaraka','13',1055,1), + (3007,'Zagrebacka zupanija','01',1055,1), + (3008,'Grande-Anse','GA',1094,1), + (3009,'Nord-Est','NE',1094,1), + (3010,'Nord-Ouest','NO',1094,1), + (3011,'Ouest','OU',1094,1), + (3012,'Sud','SD',1094,1), + (3013,'Sud-Est','SE',1094,1), + (3014,'Budapest','BU',1099,1), + (3015,'Bács-Kiskun','BK',1099,1), + (3016,'Baranya','BA',1099,1), + (3017,'Békés','BE',1099,1), + (3018,'Borsod-Abaúj-Zemplén','BZ',1099,1), + (3019,'Csongrád','CS',1099,1), + (3020,'Fejér','FE',1099,1), + (3021,'GyÅ‘r-Moson-Sopron','GS',1099,1), + (3022,'Hajdu-Bihar','HB',1099,1), + (3023,'Heves','HE',1099,1), + (3024,'Jász-Nagykun-Szolnok','JN',1099,1), + (3025,'Komárom-Esztergom','KE',1099,1), + (3026,'Nográd','NO',1099,1), + (3027,'Pest','PE',1099,1), + (3028,'Somogy','SO',1099,1), + (3029,'Szabolcs-Szatmár-Bereg','SZ',1099,1), + (3030,'Tolna','TO',1099,1), + (3031,'Vas','VA',1099,1), + (3032,'Veszprém','VE',1099,1), + (3033,'Zala','ZA',1099,1), + (3034,'Békéscsaba','BC',1099,1), + (3035,'Debrecen','DE',1099,1), + (3036,'Dunaújváros','DU',1099,1), + (3037,'Eger','EG',1099,1), + (3038,'GyÅ‘r','GY',1099,1), + (3039,'HódmezÅ‘vásárhely','HV',1099,1), + (3040,'Kaposvár','KV',1099,1), + (3041,'Kecskemét','KM',1099,1), + (3042,'Miskolc','MI',1099,1), + (3043,'Nagykanizsa','NK',1099,1), + (3044,'Nyiregyháza','NY',1099,1), + (3045,'Pécs','PS',1099,1), + (3046,'Salgótarján','ST',1099,1), + (3047,'Sopron','SN',1099,1), + (3048,'Szeged','SD',1099,1), + (3049,'Székesfehérvár','SF',1099,1), + (3050,'Szekszárd','SS',1099,1), + (3051,'Szolnok','SK',1099,1), + (3052,'Szombathely','SH',1099,1), + (3053,'Tatabánya','TB',1099,1), + (3054,'Zalaegerszeg','ZE',1099,1), + (3055,'Bali','BA',1102,1), + (3056,'Kepulauan Bangka Belitung','BB',1102,1), + (3057,'Banten','BT',1102,1), + (3058,'Bengkulu','BE',1102,1), + (3059,'Gorontalo','GO',1102,1), + (3060,'Papua Barat','PB',1102,1), + (3061,'Jambi','JA',1102,1), + (3062,'Jawa Barat','JB',1102,1), + (3063,'Jawa Tengah','JT',1102,1), + (3064,'Jawa Timur','JI',1102,1), + (3065,'Kalimantan Barat','KB',1102,1), + (3066,'Kalimantan Timur','KI',1102,1), + (3067,'Kalimantan Selatan','KS',1102,1), + (3068,'Kepulauan Riau','KR',1102,1), + (3069,'Lampung','LA',1102,1), + (3070,'Maluku','MA',1102,1), + (3071,'Maluku Utara','MU',1102,1), + (3072,'Nusa Tenggara Barat','NB',1102,1), + (3073,'Nusa Tenggara Timur','NT',1102,1), + (3074,'Papua','PA',1102,1), + (3075,'Riau','RI',1102,1), + (3076,'Sulawesi Selatan','SN',1102,1), + (3077,'Sulawesi Tengah','ST',1102,1), + (3078,'Sulawesi Tenggara','SG',1102,1), + (3079,'Sulawesi Utara','SA',1102,1), + (3080,'Sumatra Barat','SB',1102,1), + (3081,'Sumatra Selatan','SS',1102,1), + (3082,'Sumatera Utara','SU',1102,1), + (3083,'DKI Jakarta','JK',1102,1), + (3084,'Aceh','AC',1102,1), + (3085,'DI Yogyakarta','YO',1102,1), + (3086,'Cork','C',1105,1), + (3087,'Clare','CE',1105,1), + (3088,'Cavan','CN',1105,1), + (3089,'Carlow','CW',1105,1), + (3090,'Dublin','D',1105,1), + (3091,'Donegal','DL',1105,1), + (3092,'Galway','G',1105,1), + (3093,'Kildare','KE',1105,1), + (3094,'Kilkenny','KK',1105,1), + (3095,'Kerry','KY',1105,1), + (3096,'Longford','LD',1105,1), + (3097,'Louth','LH',1105,1), + (3098,'Limerick','LK',1105,1), + (3099,'Leitrim','LM',1105,1), + (3100,'Laois','LS',1105,1), + (3101,'Meath','MH',1105,1), + (3102,'Monaghan','MN',1105,1), + (3103,'Mayo','MO',1105,1), + (3104,'Offaly','OY',1105,1), + (3105,'Roscommon','RN',1105,1), + (3106,'Sligo','SO',1105,1), + (3107,'Tipperary','TA',1105,1), + (3108,'Waterford','WD',1105,1), + (3109,'Westmeath','WH',1105,1), + (3110,'Wicklow','WW',1105,1), + (3111,'Wexford','WX',1105,1), + (3112,'HaDarom','D',1106,1), + (3113,'HaMerkaz','M',1106,1), + (3114,'HaZafon','Z',1106,1), + (3115,'Haifa','HA',1106,1), + (3116,'Tel-Aviv','TA',1106,1), + (3117,'Jerusalem','JM',1106,1), + (3118,'Al Anbar','AN',1104,1), + (3119,'Al Ba,rah','BA',1104,1), + (3120,'Al Muthanna','MU',1104,1), + (3121,'Al Qadisiyah','QA',1104,1), + (3122,'An Najef','NA',1104,1), + (3123,'Arbil','AR',1104,1), + (3124,'As Sulaymaniyah','SW',1104,1), + (3125,'At Ta\'mim','TS',1104,1), + (3126,'Babil','BB',1104,1), + (3127,'Baghdad','BG',1104,1), + (3128,'Dahuk','DA',1104,1), + (3129,'Dhi Qar','DQ',1104,1), + (3130,'Diyala','DI',1104,1), + (3131,'Karbala\'','KA',1104,1), + (3132,'Maysan','MA',1104,1), + (3133,'Ninawa','NI',1104,1), + (3134,'Salah ad Din','SD',1104,1), + (3135,'Wasit','WA',1104,1), + (3136,'Ardabil','03',1103,1), + (3137,'Azarbayjan-e Gharbi','02',1103,1), + (3138,'Azarbayjan-e Sharqi','01',1103,1), + (3139,'Bushehr','06',1103,1), + (3140,'Chahar Mahall va Bakhtiari','08',1103,1), + (3141,'Esfahan','04',1103,1), + (3142,'Fars','14',1103,1), + (3143,'Gilan','19',1103,1), + (3144,'Golestan','27',1103,1), + (3145,'Hamadan','24',1103,1), + (3146,'Hormozgan','23',1103,1), + (3147,'Iiam','05',1103,1), + (3148,'Kerman','15',1103,1), + (3149,'Kermanshah','17',1103,1), + (3150,'Khorasan','09',1103,1), + (3151,'Khuzestan','10',1103,1), + (3152,'Kohjiluyeh va Buyer Ahmad','18',1103,1), + (3153,'Kordestan','16',1103,1), + (3154,'Lorestan','20',1103,1), + (3155,'Markazi','22',1103,1), + (3156,'Mazandaran','21',1103,1), + (3157,'Qazvin','28',1103,1), + (3158,'Qom','26',1103,1), + (3159,'Semnan','12',1103,1), + (3160,'Sistan va Baluchestan','13',1103,1), + (3161,'Tehran','07',1103,1), + (3162,'Yazd','25',1103,1), + (3163,'Zanjan','11',1103,1), + (3164,'Austurland','7',1100,1), + (3165,'Hofuoborgarsvaeoi utan Reykjavikur','1',1100,1), + (3166,'Norourland eystra','6',1100,1), + (3167,'Norourland vestra','5',1100,1), + (3168,'Reykjavik','0',1100,1), + (3169,'Suourland','8',1100,1), + (3170,'Suournes','2',1100,1), + (3171,'Vestfirolr','4',1100,1), + (3172,'Vesturland','3',1100,1), + (3173,'Agrigento','AG',1107,1), + (3174,'Alessandria','AL',1107,1), + (3175,'Ancona','AN',1107,1), + (3176,'Aosta','AO',1107,1), + (3177,'Arezzo','AR',1107,1), + (3178,'Ascoli Piceno','AP',1107,1), + (3179,'Asti','AT',1107,1), + (3180,'Avellino','AV',1107,1), + (3181,'Bari','BA',1107,1), + (3182,'Belluno','BL',1107,1), + (3183,'Benevento','BN',1107,1), + (3184,'Bergamo','BG',1107,1), + (3185,'Biella','BI',1107,1), + (3186,'Bologna','BO',1107,1), + (3187,'Bolzano','BZ',1107,1), + (3188,'Brescia','BS',1107,1), + (3189,'Brindisi','BR',1107,1), + (3190,'Cagliari','CA',1107,1), + (3191,'Caltanissetta','CL',1107,1), + (3192,'Campobasso','CB',1107,1), + (3193,'Caserta','CE',1107,1), + (3194,'Catania','CT',1107,1), + (3195,'Catanzaro','CZ',1107,1), + (3196,'Chieti','CH',1107,1), + (3197,'Como','CO',1107,1), + (3198,'Cosenza','CS',1107,1), + (3199,'Cremona','CR',1107,1), + (3200,'Crotone','KR',1107,1), + (3201,'Cuneo','CN',1107,1), + (3202,'Enna','EN',1107,1), + (3203,'Ferrara','FE',1107,1), + (3204,'Firenze','FI',1107,1), + (3205,'Foggia','FG',1107,1), + (3206,'Forlì-Cesena','FC',1107,1), + (3207,'Frosinone','FR',1107,1), + (3208,'Genova','GE',1107,1), + (3209,'Gorizia','GO',1107,1), + (3210,'Grosseto','GR',1107,1), + (3211,'Imperia','IM',1107,1), + (3212,'Isernia','IS',1107,1), + (3213,'L\'Aquila','AQ',1107,1), + (3214,'La Spezia','SP',1107,1), + (3215,'Latina','LT',1107,1), + (3216,'Lecce','LE',1107,1), + (3217,'Lecco','LC',1107,1), + (3218,'Livorno','LI',1107,1), + (3219,'Lodi','LO',1107,1), + (3220,'Lucca','LU',1107,1), + (3221,'Macerata','MC',1107,1), + (3222,'Mantova','MN',1107,1), + (3223,'Massa-Carrara','MS',1107,1), + (3224,'Matera','MT',1107,1), + (3225,'Messina','ME',1107,1), + (3226,'Milano','MI',1107,1), + (3227,'Modena','MO',1107,1), + (3228,'Napoli','NA',1107,1), + (3229,'Novara','NO',1107,1), + (3230,'Nuoro','NU',1107,1), + (3231,'Oristano','OR',1107,1), + (3232,'Padova','PD',1107,1), + (3233,'Palermo','PA',1107,1), + (3234,'Parma','PR',1107,1), + (3235,'Pavia','PV',1107,1), + (3236,'Perugia','PG',1107,1), + (3237,'Pesaro e Urbino','PU',1107,1), + (3238,'Pescara','PE',1107,1), + (3239,'Piacenza','PC',1107,1), + (3240,'Pisa','PI',1107,1), + (3241,'Pistoia','PT',1107,1), + (3242,'Pordenone','PN',1107,1), + (3243,'Potenza','PZ',1107,1), + (3244,'Prato','PO',1107,1), + (3245,'Ragusa','RG',1107,1), + (3246,'Ravenna','RA',1107,1), + (3247,'Reggio Calabria','RC',1107,1), + (3248,'Reggio Emilia','RE',1107,1), + (3249,'Rieti','RI',1107,1), + (3250,'Rimini','RN',1107,1), + (3251,'Roma','RM',1107,1), + (3252,'Rovigo','RO',1107,1), + (3253,'Salerno','SA',1107,1), + (3254,'Sassari','SS',1107,1), + (3255,'Savona','SV',1107,1), + (3256,'Siena','SI',1107,1), + (3257,'Siracusa','SR',1107,1), + (3258,'Sondrio','SO',1107,1), + (3259,'Taranto','TA',1107,1), + (3260,'Teramo','TE',1107,1), + (3261,'Terni','TR',1107,1), + (3262,'Torino','TO',1107,1), + (3263,'Trapani','TP',1107,1), + (3264,'Trento','TN',1107,1), + (3265,'Treviso','TV',1107,1), + (3266,'Trieste','TS',1107,1), + (3267,'Udine','UD',1107,1), + (3268,'Varese','VA',1107,1), + (3269,'Venezia','VE',1107,1), + (3270,'Verbano-Cusio-Ossola','VB',1107,1), + (3271,'Vercelli','VC',1107,1), + (3272,'Verona','VR',1107,1), + (3273,'Vibo Valentia','VV',1107,1), + (3274,'Vicenza','VI',1107,1), + (3275,'Viterbo','VT',1107,1), + (3276,'Aichi','23',1109,1), + (3277,'Akita','05',1109,1), + (3278,'Aomori','02',1109,1), + (3279,'Chiba','12',1109,1), + (3280,'Ehime','38',1109,1), + (3281,'Fukui','18',1109,1), + (3282,'Fukuoka','40',1109,1), + (3283,'Fukusima','07',1109,1), + (3284,'Gifu','21',1109,1), + (3285,'Gunma','10',1109,1), + (3286,'Hiroshima','34',1109,1), + (3287,'Hokkaido','01',1109,1), + (3288,'Hyogo','28',1109,1), + (3289,'Ibaraki','08',1109,1), + (3290,'Ishikawa','17',1109,1), + (3291,'Iwate','03',1109,1), + (3292,'Kagawa','37',1109,1), + (3293,'Kagoshima','46',1109,1), + (3294,'Kanagawa','14',1109,1), + (3295,'Kochi','39',1109,1), + (3296,'Kumamoto','43',1109,1), + (3297,'Kyoto','26',1109,1), + (3298,'Mie','24',1109,1), + (3299,'Miyagi','04',1109,1), + (3300,'Miyazaki','45',1109,1), + (3301,'Nagano','20',1109,1), + (3302,'Nagasaki','42',1109,1), + (3303,'Nara','29',1109,1), + (3304,'Niigata','15',1109,1), + (3305,'Oita','44',1109,1), + (3306,'Okayama','33',1109,1), + (3307,'Okinawa','47',1109,1), + (3308,'Osaka','27',1109,1), + (3309,'Saga','41',1109,1), + (3310,'Saitama','11',1109,1), + (3311,'Shiga','25',1109,1), + (3312,'Shimane','32',1109,1), + (3313,'Shizuoka','22',1109,1), + (3314,'Tochigi','09',1109,1), + (3315,'Tokushima','36',1109,1), + (3316,'Tokyo','13',1109,1), + (3317,'Tottori','31',1109,1), + (3318,'Toyama','16',1109,1), + (3319,'Wakayama','30',1109,1), + (3320,'Yamagata','06',1109,1), + (3321,'Yamaguchi','35',1109,1), + (3322,'Yamanashi','19',1109,1), + (3323,'Clarendon','CN',1108,1), + (3324,'Hanover','HR',1108,1), + (3325,'Kingston','KN',1108,1), + (3326,'Portland','PD',1108,1), + (3327,'Saint Andrew','AW',1108,1), + (3328,'Saint Ann','AN',1108,1), + (3329,'Saint Catherine','CE',1108,1), + (3330,'Saint Elizabeth','EH',1108,1), + (3331,'Saint James','JS',1108,1), + (3332,'Saint Mary','MY',1108,1), + (3333,'Saint Thomas','TS',1108,1), + (3334,'Trelawny','TY',1108,1), + (3335,'Westmoreland','WD',1108,1), + (3336,'Ajln','AJ',1110,1), + (3337,'Al \'Aqaba','AQ',1110,1), + (3338,'Al Balqa\'','BA',1110,1), + (3339,'Al Karak','KA',1110,1), + (3340,'Al Mafraq','MA',1110,1), + (3341,'Amman','AM',1110,1), + (3342,'At Tafilah','AT',1110,1), + (3343,'Az Zarga','AZ',1110,1), + (3344,'Irbid','JR',1110,1), + (3345,'Jarash','JA',1110,1), + (3346,'Ma\'an','MN',1110,1), + (3347,'Madaba','MD',1110,1), + (3353,'Bishkek','GB',1117,1), + (3354,'Batken','B',1117,1), + (3355,'Chu','C',1117,1), + (3356,'Jalal-Abad','J',1117,1), + (3357,'Naryn','N',1117,1), + (3358,'Osh','O',1117,1), + (3359,'Talas','T',1117,1), + (3360,'Ysyk-Kol','Y',1117,1), + (3361,'Krong Kaeb','23',1037,1), + (3362,'Krong Pailin','24',1037,1), + (3363,'Xrong Preah Sihanouk','18',1037,1), + (3364,'Phnom Penh','12',1037,1), + (3365,'Baat Dambang','2',1037,1), + (3366,'Banteay Mean Chey','1',1037,1), + (3367,'Rampong Chaam','3',1037,1), + (3368,'Kampong Chhnang','4',1037,1), + (3369,'Kampong Spueu','5',1037,1), + (3370,'Kampong Thum','6',1037,1), + (3371,'Kampot','7',1037,1), + (3372,'Kandaal','8',1037,1), + (3373,'Kach Kong','9',1037,1), + (3374,'Krachoh','10',1037,1), + (3375,'Mondol Kiri','11',1037,1), + (3376,'Otdar Mean Chey','22',1037,1), + (3377,'Pousaat','15',1037,1), + (3378,'Preah Vihear','13',1037,1), + (3379,'Prey Veaeng','14',1037,1), + (3380,'Rotanak Kiri','16',1037,1), + (3381,'Siem Reab','17',1037,1), + (3382,'Stueng Traeng','19',1037,1), + (3383,'Svaay Rieng','20',1037,1), + (3384,'Taakaev','21',1037,1), + (3385,'Gilbert Islands','G',1113,1), + (3386,'Line Islands','L',1113,1), + (3387,'Phoenix Islands','P',1113,1), + (3388,'Anjouan Ndzouani','A',1049,1), + (3389,'Grande Comore Ngazidja','G',1049,1), + (3390,'Moheli Moili','M',1049,1), + (3391,'Kaesong-si','KAE',1114,1), + (3392,'Nampo-si','NAM',1114,1), + (3393,'Pyongyang-ai','PYO',1114,1), + (3394,'Chagang-do','CHA',1114,1), + (3395,'Hamgyongbuk-do','HAB',1114,1), + (3396,'Hamgyongnam-do','HAN',1114,1), + (3397,'Hwanghaebuk-do','HWB',1114,1), + (3398,'Hwanghaenam-do','HWN',1114,1), + (3399,'Kangwon-do','KAN',1114,1), + (3400,'Pyonganbuk-do','PYB',1114,1), + (3401,'Pyongannam-do','PYN',1114,1), + (3402,'Yanggang-do','YAN',1114,1), + (3403,'Najin Sonbong-si','NAJ',1114,1), + (3404,'Seoul Teugbyeolsi','11',1115,1), + (3405,'Busan Gwang\'yeogsi','26',1115,1), + (3406,'Daegu Gwang\'yeogsi','27',1115,1), + (3407,'Daejeon Gwang\'yeogsi','30',1115,1), + (3408,'Gwangju Gwang\'yeogsi','29',1115,1), + (3409,'Incheon Gwang\'yeogsi','28',1115,1), + (3410,'Ulsan Gwang\'yeogsi','31',1115,1), + (3411,'Chungcheongbugdo','43',1115,1), + (3412,'Chungcheongnamdo','44',1115,1), + (3413,'Gang\'weondo','42',1115,1), + (3414,'Gyeonggido','41',1115,1), + (3415,'Gyeongsangbugdo','47',1115,1), + (3416,'Gyeongsangnamdo','48',1115,1), + (3417,'Jejudo','49',1115,1), + (3418,'Jeonrabugdo','45',1115,1), + (3419,'Jeonranamdo','46',1115,1), + (3420,'Al Ahmadi','AH',1116,1), + (3421,'Al Farwanlyah','FA',1116,1), + (3422,'Al Jahrah','JA',1116,1), + (3423,'Al Kuwayt','KU',1116,1), + (3424,'Hawalli','HA',1116,1), + (3425,'Almaty','ALA',1111,1), + (3426,'Astana','AST',1111,1), + (3427,'Almaty oblysy','ALM',1111,1), + (3428,'Aqmola oblysy','AKM',1111,1), + (3429,'Aqtobe oblysy','AKT',1111,1), + (3430,'Atyrau oblyfiy','ATY',1111,1), + (3431,'Batys Quzaqstan oblysy','ZAP',1111,1), + (3432,'Mangghystau oblysy','MAN',1111,1), + (3433,'Ongtustik Quzaqstan oblysy','YUZ',1111,1), + (3434,'Pavlodar oblysy','PAV',1111,1), + (3435,'Qaraghandy oblysy','KAR',1111,1), + (3436,'Qostanay oblysy','KUS',1111,1), + (3437,'Qyzylorda oblysy','KZY',1111,1), + (3438,'Shyghys Quzaqstan oblysy','VOS',1111,1), + (3439,'Soltustik Quzaqstan oblysy','SEV',1111,1), + (3440,'Zhambyl oblysy Zhambylskaya oblast\'','ZHA',1111,1), + (3441,'Vientiane','VT',1118,1), + (3442,'Attapu','AT',1118,1), + (3443,'Bokeo','BK',1118,1), + (3444,'Bolikhamxai','BL',1118,1), + (3445,'Champasak','CH',1118,1), + (3446,'Houaphan','HO',1118,1), + (3447,'Khammouan','KH',1118,1), + (3448,'Louang Namtha','LM',1118,1), + (3449,'Louangphabang','LP',1118,1), + (3450,'Oudomxai','OU',1118,1), + (3451,'Phongsali','PH',1118,1), + (3452,'Salavan','SL',1118,1), + (3453,'Savannakhet','SV',1118,1), + (3454,'Xaignabouli','XA',1118,1), + (3455,'Xiasomboun','XN',1118,1), + (3456,'Xekong','XE',1118,1), + (3457,'Xiangkhoang','XI',1118,1), + (3458,'Beirut','BA',1120,1), + (3459,'Beqaa','BI',1120,1), + (3460,'Mount Lebanon','JL',1120,1), + (3461,'North Lebanon','AS',1120,1), + (3462,'South Lebanon','JA',1120,1), + (3463,'Nabatieh','NA',1120,1), + (3464,'Ampara','52',1199,1), + (3465,'Anuradhapura','71',1199,1), + (3466,'Badulla','81',1199,1), + (3467,'Batticaloa','51',1199,1), + (3468,'Colombo','11',1199,1), + (3469,'Galle','31',1199,1), + (3470,'Gampaha','12',1199,1), + (3471,'Hambantota','33',1199,1), + (3472,'Jaffna','41',1199,1), + (3473,'Kalutara','13',1199,1), + (3474,'Kandy','21',1199,1), + (3475,'Kegalla','92',1199,1), + (3476,'Kilinochchi','42',1199,1), + (3477,'Kurunegala','61',1199,1), + (3478,'Mannar','43',1199,1), + (3479,'Matale','22',1199,1), + (3480,'Matara','32',1199,1), + (3481,'Monaragala','82',1199,1), + (3482,'Mullaittivu','45',1199,1), + (3483,'Nuwara Eliya','23',1199,1), + (3484,'Polonnaruwa','72',1199,1), + (3485,'Puttalum','62',1199,1), + (3486,'Ratnapura','91',1199,1), + (3487,'Trincomalee','53',1199,1), + (3488,'VavunLya','44',1199,1), + (3489,'Bomi','BM',1122,1), + (3490,'Bong','BG',1122,1), + (3491,'Grand Basaa','GB',1122,1), + (3492,'Grand Cape Mount','CM',1122,1), + (3493,'Grand Gedeh','GG',1122,1), + (3494,'Grand Kru','GK',1122,1), + (3495,'Lofa','LO',1122,1), + (3496,'Margibi','MG',1122,1), + (3497,'Maryland','MY',1122,1), + (3498,'Montserrado','MO',1122,1), + (3499,'Nimba','NI',1122,1), + (3500,'Rivercess','RI',1122,1), + (3501,'Sinoe','SI',1122,1), + (3502,'Berea','D',1121,1), + (3503,'Butha-Buthe','B',1121,1), + (3504,'Leribe','C',1121,1), + (3505,'Mafeteng','E',1121,1), + (3506,'Maseru','A',1121,1), + (3507,'Mohale\'s Hoek','F',1121,1), + (3508,'Mokhotlong','J',1121,1), + (3509,'Qacha\'s Nek','H',1121,1), + (3510,'Quthing','G',1121,1), + (3511,'Thaba-Tseka','K',1121,1), + (3512,'Alytaus Apskritis','AL',1125,1), + (3513,'Kauno Apskritis','KU',1125,1), + (3514,'KlaipÄ—dos Apskritis','KL',1125,1), + (3515,'MarijampolÄ—s Apskritis','MR',1125,1), + (3516,'Panevėžio Apskritis','PN',1125,1), + (3517,'Å iaulių Apskritis','SA',1125,1), + (3518,'TauragÄ—s Apskritis','TA',1125,1), + (3519,'TelÅ¡ių Apskritis','TE',1125,1), + (3520,'Utenos Apskritis','UT',1125,1), + (3521,'Vilniaus Apskritis','VL',1125,1), + (3522,'Diekirch','D',1126,1), + (3523,'GreveNmacher','G',1126,1), + (3550,'Daugavpils','DGV',1119,1), + (3551,'Jelgava','JEL',1119,1), + (3552,'JÅ«rmala','JUR',1119,1), + (3553,'LiepÄja','LPX',1119,1), + (3554,'RÄ“zekne','REZ',1119,1), + (3555,'RÄ«ga','RIX',1119,1), + (3556,'Ventspils','VEN',1119,1), + (3557,'AjdÄbiyÄ','AJ',1123,1), + (3558,'Al BuÅ£nÄn','BU',1123,1), + (3559,'Al HizÄm al Akhdar','HZ',1123,1), + (3560,'Al Jabal al Akhdar','JA',1123,1), + (3561,'Al JifÄrah','JI',1123,1), + (3562,'Al Jufrah','JU',1123,1), + (3563,'Al Kufrah','KF',1123,1), + (3564,'Al Marj','MJ',1123,1), + (3565,'Al Marqab','MB',1123,1), + (3566,'Al QaÅ£rÅ«n','QT',1123,1), + (3567,'Al Qubbah','QB',1123,1), + (3568,'Al WÄhah','WA',1123,1), + (3569,'An NuqaÅ£ al Khams','NQ',1123,1), + (3570,'Ash ShÄÅ£i\'','SH',1123,1), + (3571,'Az ZÄwiyah','ZA',1123,1), + (3572,'BanghÄzÄ«','BA',1123,1), + (3573,'BanÄ« WalÄ«d','BW',1123,1), + (3574,'Darnah','DR',1123,1), + (3575,'GhadÄmis','GD',1123,1), + (3576,'GharyÄn','GR',1123,1), + (3577,'GhÄt','GT',1123,1), + (3578,'JaghbÅ«b','JB',1123,1), + (3579,'MiÅŸrÄtah','MI',1123,1), + (3580,'Mizdah','MZ',1123,1), + (3581,'Murzuq','MQ',1123,1), + (3582,'NÄlÅ«t','NL',1123,1), + (3583,'SabhÄ','SB',1123,1), + (3584,'ÅžabrÄtah ÅžurmÄn','SS',1123,1), + (3585,'Surt','SR',1123,1), + (3586,'TÄjÅ«rÄ\' wa an NawÄhÄ« al ArbÄh','TN',1123,1), + (3587,'Å¢arÄbulus','TB',1123,1), + (3588,'TarhÅ«nah-MasallÄtah','TM',1123,1), + (3589,'WÄdÄ« al hayÄt','WD',1123,1), + (3590,'Yafran-JÄdÅ«','YJ',1123,1), + (3591,'Agadir','AGD',1146,1), + (3592,'Aït Baha','BAH',1146,1), + (3593,'Aït Melloul','MEL',1146,1), + (3594,'Al Haouz','HAO',1146,1), + (3595,'Al Hoceïma','HOC',1146,1), + (3596,'Assa-Zag','ASZ',1146,1), + (3597,'Azilal','AZI',1146,1), + (3598,'Beni Mellal','BEM',1146,1), + (3599,'Ben Sllmane','BES',1146,1), + (3600,'Berkane','BER',1146,1), + (3601,'Boujdour','BOD',1146,1), + (3602,'Boulemane','BOM',1146,1), + (3603,'Casablanca [Dar el Beïda]','CAS',1146,1), + (3604,'Chefchaouene','CHE',1146,1), + (3605,'Chichaoua','CHI',1146,1), + (3606,'El Hajeb','HAJ',1146,1), + (3607,'El Jadida','JDI',1146,1), + (3608,'Errachidia','ERR',1146,1), + (3609,'Essaouira','ESI',1146,1), + (3610,'Es Smara','ESM',1146,1), + (3611,'Fès','FES',1146,1), + (3612,'Figuig','FIG',1146,1), + (3613,'Guelmim','GUE',1146,1), + (3614,'Ifrane','IFR',1146,1), + (3615,'Jerada','JRA',1146,1), + (3616,'Kelaat Sraghna','KES',1146,1), + (3617,'Kénitra','KEN',1146,1), + (3618,'Khemisaet','KHE',1146,1), + (3619,'Khenifra','KHN',1146,1), + (3620,'Khouribga','KHO',1146,1), + (3621,'Laâyoune (EH)','LAA',1146,1), + (3622,'Larache','LAP',1146,1), + (3623,'Marrakech','MAR',1146,1), + (3624,'Meknsès','MEK',1146,1), + (3625,'Nador','NAD',1146,1), + (3626,'Ouarzazate','OUA',1146,1), + (3627,'Oued ed Dahab (EH)','OUD',1146,1), + (3628,'Oujda','OUJ',1146,1), + (3629,'Rabat-Salé','RBA',1146,1), + (3630,'Safi','SAF',1146,1), + (3631,'Sefrou','SEF',1146,1), + (3632,'Settat','SET',1146,1), + (3633,'Sidl Kacem','SIK',1146,1), + (3634,'Tanger','TNG',1146,1), + (3635,'Tan-Tan','TNT',1146,1), + (3636,'Taounate','TAO',1146,1), + (3637,'Taroudannt','TAR',1146,1), + (3638,'Tata','TAT',1146,1), + (3639,'Taza','TAZ',1146,1), + (3640,'Tétouan','TET',1146,1), + (3641,'Tiznit','TIZ',1146,1), + (3642,'Gagauzia, Unitate Teritoriala Autonoma','GA',1142,1), + (3643,'Chisinau','CU',1142,1), + (3644,'Stinga Nistrului, unitatea teritoriala din','SN',1142,1), + (3645,'Balti','BA',1142,1), + (3646,'Cahul','CA',1142,1), + (3647,'Edinet','ED',1142,1), + (3648,'Lapusna','LA',1142,1), + (3649,'Orhei','OR',1142,1), + (3650,'Soroca','SO',1142,1), + (3651,'Taraclia','TA',1142,1), + (3652,'Tighina [Bender]','TI',1142,1), + (3653,'Ungheni','UN',1142,1), + (3654,'Antananarivo','T',1129,1), + (3655,'Antsiranana','D',1129,1), + (3656,'Fianarantsoa','F',1129,1), + (3657,'Mahajanga','M',1129,1), + (3658,'Toamasina','A',1129,1), + (3659,'Toliara','U',1129,1), + (3660,'Ailinglapalap','ALL',1135,1), + (3661,'Ailuk','ALK',1135,1), + (3662,'Arno','ARN',1135,1), + (3663,'Aur','AUR',1135,1), + (3664,'Ebon','EBO',1135,1), + (3665,'Eniwetok','ENI',1135,1), + (3666,'Jaluit','JAL',1135,1), + (3667,'Kili','KIL',1135,1), + (3668,'Kwajalein','KWA',1135,1), + (3669,'Lae','LAE',1135,1), + (3670,'Lib','LIB',1135,1), + (3671,'Likiep','LIK',1135,1), + (3672,'Majuro','MAJ',1135,1), + (3673,'Maloelap','MAL',1135,1), + (3674,'Mejit','MEJ',1135,1), + (3675,'Mili','MIL',1135,1), + (3676,'Namorik','NMK',1135,1), + (3677,'Namu','NMU',1135,1), + (3678,'Rongelap','RON',1135,1), + (3679,'Ujae','UJA',1135,1), + (3680,'Ujelang','UJL',1135,1), + (3681,'Utirik','UTI',1135,1), + (3682,'Wotho','WTN',1135,1), + (3683,'Wotje','WTJ',1135,1), + (3684,'Bamako','BK0',1133,1), + (3685,'Gao','7',1133,1), + (3686,'Kayes','1',1133,1), + (3687,'Kidal','8',1133,1), + (3688,'Xoulikoro','2',1133,1), + (3689,'Mopti','5',1133,1), + (3690,'S69ou','4',1133,1), + (3691,'Sikasso','3',1133,1), + (3692,'Tombouctou','6',1133,1), + (3693,'Ayeyarwady','07',1035,1), + (3694,'Bago','02',1035,1), + (3695,'Magway','03',1035,1), + (3696,'Mandalay','04',1035,1), + (3697,'Sagaing','01',1035,1), + (3698,'Tanintharyi','05',1035,1), + (3699,'Yangon','06',1035,1), + (3700,'Chin','14',1035,1), + (3701,'Kachin','11',1035,1), + (3702,'Kayah','12',1035,1), + (3703,'Kayin','13',1035,1), + (3704,'Mon','15',1035,1), + (3705,'Rakhine','16',1035,1), + (3706,'Shan','17',1035,1), + (3707,'Ulaanbaatar','1',1144,1), + (3708,'Arhangay','073',1144,1), + (3709,'Bayanhongor','069',1144,1), + (3710,'Bayan-Olgiy','071',1144,1), + (3711,'Bulgan','067',1144,1), + (3712,'Darhan uul','037',1144,1), + (3713,'Dornod','061',1144,1), + (3714,'Dornogov,','063',1144,1), + (3715,'DundgovL','059',1144,1), + (3716,'Dzavhan','057',1144,1), + (3717,'Govi-Altay','065',1144,1), + (3718,'Govi-Smber','064',1144,1), + (3719,'Hentiy','039',1144,1), + (3720,'Hovd','043',1144,1), + (3721,'Hovsgol','041',1144,1), + (3722,'Omnogovi','053',1144,1), + (3723,'Orhon','035',1144,1), + (3724,'Ovorhangay','055',1144,1), + (3725,'Selenge','049',1144,1), + (3726,'Shbaatar','051',1144,1), + (3727,'Tov','047',1144,1), + (3728,'Uvs','046',1144,1), + (3729,'Nouakchott','NKC',1137,1), + (3730,'Assaba','03',1137,1), + (3731,'Brakna','05',1137,1), + (3732,'Dakhlet Nouadhibou','08',1137,1), + (3733,'Gorgol','04',1137,1), + (3734,'Guidimaka','10',1137,1), + (3735,'Hodh ech Chargui','01',1137,1), + (3736,'Hodh el Charbi','02',1137,1), + (3737,'Inchiri','12',1137,1), + (3738,'Tagant','09',1137,1), + (3739,'Tiris Zemmour','11',1137,1), + (3740,'Trarza','06',1137,1), + (3741,'Beau Bassin-Rose Hill','BR',1138,1), + (3742,'Curepipe','CU',1138,1), + (3743,'Port Louis','PU',1138,1), + (3744,'Quatre Bornes','QB',1138,1), + (3745,'Vacosa-Phoenix','VP',1138,1), + (3746,'Black River','BL',1138,1), + (3747,'Flacq','FL',1138,1), + (3748,'Grand Port','GP',1138,1), + (3749,'Moka','MO',1138,1), + (3750,'Pamplemousses','PA',1138,1), + (3751,'Plaines Wilhems','PW',1138,1), + (3752,'Riviere du Rempart','RP',1138,1), + (3753,'Savanne','SA',1138,1), + (3754,'Agalega Islands','AG',1138,1), + (3755,'Cargados Carajos Shoals','CC',1138,1), + (3756,'Rodrigues Island','RO',1138,1), + (3757,'Male','MLE',1132,1), + (3758,'Alif','02',1132,1), + (3759,'Baa','20',1132,1), + (3760,'Dhaalu','17',1132,1), + (3761,'Faafu','14',1132,1), + (3762,'Gaaf Alif','27',1132,1), + (3763,'Gaefu Dhaalu','28',1132,1), + (3764,'Gnaviyani','29',1132,1), + (3765,'Haa Alif','07',1132,1), + (3766,'Haa Dhaalu','23',1132,1), + (3767,'Kaafu','26',1132,1), + (3768,'Laamu','05',1132,1), + (3769,'Lhaviyani','03',1132,1), + (3770,'Meemu','12',1132,1), + (3771,'Noonu','25',1132,1), + (3772,'Raa','13',1132,1), + (3773,'Seenu','01',1132,1), + (3774,'Shaviyani','24',1132,1), + (3775,'Thaa','08',1132,1), + (3776,'Vaavu','04',1132,1), + (3777,'Balaka','BA',1130,1), + (3778,'Blantyre','BL',1130,1), + (3779,'Chikwawa','CK',1130,1), + (3780,'Chiradzulu','CR',1130,1), + (3781,'Chitipa','CT',1130,1), + (3782,'Dedza','DE',1130,1), + (3783,'Dowa','DO',1130,1), + (3784,'Karonga','KR',1130,1), + (3785,'Kasungu','KS',1130,1), + (3786,'Likoma Island','LK',1130,1), + (3787,'Lilongwe','LI',1130,1), + (3788,'Machinga','MH',1130,1), + (3789,'Mangochi','MG',1130,1), + (3790,'Mchinji','MC',1130,1), + (3791,'Mulanje','MU',1130,1), + (3792,'Mwanza','MW',1130,1), + (3793,'Mzimba','MZ',1130,1), + (3794,'Nkhata Bay','NB',1130,1), + (3795,'Nkhotakota','NK',1130,1), + (3796,'Nsanje','NS',1130,1), + (3797,'Ntcheu','NU',1130,1), + (3798,'Ntchisi','NI',1130,1), + (3799,'Phalomba','PH',1130,1), + (3800,'Rumphi','RU',1130,1), + (3801,'Salima','SA',1130,1), + (3802,'Thyolo','TH',1130,1), + (3803,'Zomba','ZO',1130,1), + (3804,'Aguascalientes','AGU',1140,1), + (3805,'Baja California','BCN',1140,1), + (3806,'Baja California Sur','BCS',1140,1), + (3807,'Campeche','CAM',1140,1), + (3808,'Coahuila','COA',1140,1), + (3809,'Colima','COL',1140,1), + (3810,'Chiapas','CHP',1140,1), + (3811,'Chihuahua','CHH',1140,1), + (3812,'Durango','DUR',1140,1), + (3813,'Guanajuato','GUA',1140,1), + (3814,'Guerrero','GRO',1140,1), + (3815,'Hidalgo','HID',1140,1), + (3816,'Jalisco','JAL',1140,1), + (3817,'Mexico','MEX',1140,1), + (3818,'Michoacin','MIC',1140,1), + (3819,'Morelos','MOR',1140,1), + (3820,'Nayarit','NAY',1140,1), + (3821,'Nuevo Leon','NLE',1140,1), + (3822,'Oaxaca','OAX',1140,1), + (3823,'Puebla','PUE',1140,1), + (3824,'Queretaro','QUE',1140,1), + (3825,'Quintana Roo','ROO',1140,1), + (3826,'San Luis Potosi','SLP',1140,1), + (3827,'Sinaloa','SIN',1140,1), + (3828,'Sonora','SON',1140,1), + (3829,'Tabasco','TAB',1140,1), + (3830,'Tamaulipas','TAM',1140,1), + (3831,'Tlaxcala','TLA',1140,1), + (3832,'Veracruz','VER',1140,1), + (3833,'Yucatan','YUC',1140,1), + (3834,'Zacatecas','ZAC',1140,1), + (3835,'Wilayah Persekutuan Kuala Lumpur','14',1131,1), + (3836,'Wilayah Persekutuan Labuan','15',1131,1), + (3837,'Wilayah Persekutuan Putrajaya','16',1131,1), + (3838,'Johor','01',1131,1), + (3839,'Kedah','02',1131,1), + (3840,'Kelantan','03',1131,1), + (3841,'Melaka','04',1131,1), + (3842,'Negeri Sembilan','05',1131,1), + (3843,'Pahang','06',1131,1), + (3844,'Perak','08',1131,1), + (3845,'Perlis','09',1131,1), + (3846,'Pulau Pinang','07',1131,1), + (3847,'Sabah','12',1131,1), + (3848,'Sarawak','13',1131,1), + (3849,'Selangor','10',1131,1), + (3850,'Terengganu','11',1131,1), + (3851,'Maputo','MPM',1147,1), + (3852,'Cabo Delgado','P',1147,1), + (3853,'Gaza','G',1147,1), + (3854,'Inhambane','I',1147,1), + (3855,'Manica','B',1147,1), + (3856,'Numpula','N',1147,1), + (3857,'Niaaea','A',1147,1), + (3858,'Sofala','S',1147,1), + (3859,'Tete','T',1147,1), + (3860,'Zambezia','Q',1147,1), + (3861,'Caprivi','CA',1148,1), + (3862,'Erongo','ER',1148,1), + (3863,'Hardap','HA',1148,1), + (3864,'Karas','KA',1148,1), + (3865,'Khomas','KH',1148,1), + (3866,'Kunene','KU',1148,1), + (3867,'Ohangwena','OW',1148,1), + (3868,'Okavango','OK',1148,1), + (3869,'Omaheke','OH',1148,1), + (3870,'Omusati','OS',1148,1), + (3871,'Oshana','ON',1148,1), + (3872,'Oshikoto','OT',1148,1), + (3873,'Otjozondjupa','OD',1148,1), + (3874,'Niamey','8',1156,1), + (3875,'Agadez','1',1156,1), + (3876,'Diffa','2',1156,1), + (3877,'Dosso','3',1156,1), + (3878,'Maradi','4',1156,1), + (3879,'Tahoua','S',1156,1), + (3880,'Tillaberi','6',1156,1), + (3881,'Zinder','7',1156,1), + (3882,'Abuja Federal Capital Territory','FC',1157,1), + (3883,'Abia','AB',1157,1), + (3884,'Adamawa','AD',1157,1), + (3885,'Akwa Ibom','AK',1157,1), + (3886,'Anambra','AN',1157,1), + (3887,'Bauchi','BA',1157,1), + (3888,'Bayelsa','BY',1157,1), + (3889,'Benue','BE',1157,1), + (3890,'Borno','BO',1157,1), + (3891,'Cross River','CR',1157,1), + (3892,'Delta','DE',1157,1), + (3893,'Ebonyi','EB',1157,1), + (3894,'Edo','ED',1157,1), + (3895,'Ekiti','EK',1157,1), + (3896,'Enugu','EN',1157,1), + (3897,'Gombe','GO',1157,1), + (3898,'Imo','IM',1157,1), + (3899,'Jigawa','JI',1157,1), + (3900,'Kaduna','KD',1157,1), + (3901,'Kano','KN',1157,1), + (3902,'Katsina','KT',1157,1), + (3903,'Kebbi','KE',1157,1), + (3904,'Kogi','KO',1157,1), + (3905,'Kwara','KW',1157,1), + (3906,'Lagos','LA',1157,1), + (3907,'Nassarawa','NA',1157,1), + (3908,'Niger','NI',1157,1), + (3909,'Ogun','OG',1157,1), + (3910,'Ondo','ON',1157,1), + (3911,'Osun','OS',1157,1), + (3912,'Oyo','OY',1157,1), + (3913,'Rivers','RI',1157,1), + (3914,'Sokoto','SO',1157,1), + (3915,'Taraba','TA',1157,1), + (3916,'Yobe','YO',1157,1), + (3917,'Zamfara','ZA',1157,1), + (3918,'Boaco','BO',1155,1), + (3919,'Carazo','CA',1155,1), + (3920,'Chinandega','CI',1155,1), + (3921,'Chontales','CO',1155,1), + (3922,'Esteli','ES',1155,1), + (3923,'Jinotega','JI',1155,1), + (3924,'Leon','LE',1155,1), + (3925,'Madriz','MD',1155,1), + (3926,'Managua','MN',1155,1), + (3927,'Masaya','MS',1155,1), + (3928,'Matagalpa','MT',1155,1), + (3929,'Nueva Segovia','NS',1155,1), + (3930,'Rio San Juan','SJ',1155,1), + (3931,'Rivas','RI',1155,1), + (3932,'Atlantico Norte','AN',1155,1), + (3933,'Atlantico Sur','AS',1155,1), + (3934,'Drente','DR',1152,1), + (3935,'Flevoland','FL',1152,1), + (3936,'Friesland','FR',1152,1), + (3937,'Gelderland','GL',1152,1), + (3938,'Groningen','GR',1152,1), + (3939,'Noord-Brabant','NB',1152,1), + (3940,'Noord-Holland','NH',1152,1), + (3941,'Overijssel','OV',1152,1), + (3942,'Utrecht','UT',1152,1), + (3943,'Zuid-Holland','ZH',1152,1), + (3944,'Zeeland','ZL',1152,1), + (3945,'Akershus','02',1161,1), + (3946,'Aust-Agder','09',1161,1), + (3947,'Buskerud','06',1161,1), + (3948,'Finnmark','20',1161,1), + (3949,'Hedmark','04',1161,1), + (3950,'Hordaland','12',1161,1), + (3951,'Møre og Romsdal','15',1161,1), + (3952,'Nordland','18',1161,1), + (3953,'Nord-Trøndelag','17',1161,1), + (3954,'Oppland','05',1161,1), + (3955,'Oslo','03',1161,1), + (3956,'Rogaland','11',1161,1), + (3957,'Sogn og Fjordane','14',1161,1), + (3958,'Sør-Trøndelag','16',1161,1), + (3959,'Telemark','06',1161,1), + (3960,'Troms','19',1161,1), + (3961,'Vest-Agder','10',1161,1), + (3962,'Vestfold','07',1161,1), + (3963,'Østfold','01',1161,1), + (3964,'Jan Mayen','22',1161,1), + (3965,'Svalbard','21',1161,1), + (3966,'Auckland','AUK',1154,1), + (3967,'Bay of Plenty','BOP',1154,1), + (3968,'Canterbury','CAN',1154,1), + (3969,'Gisborne','GIS',1154,1), + (3970,'Hawkes Bay','HKB',1154,1), + (3971,'Manawatu-Wanganui','MWT',1154,1), + (3972,'Marlborough','MBH',1154,1), + (3973,'Nelson','NSN',1154,1), + (3974,'Northland','NTL',1154,1), + (3975,'Otago','OTA',1154,1), + (3976,'Southland','STL',1154,1), + (3977,'Taranaki','TKI',1154,1), + (3978,'Tasman','TAS',1154,1), + (3979,'Waikato','WKO',1154,1), + (3980,'Wellington','WGN',1154,1), + (3981,'West Coast','WTC',1154,1), + (3982,'Ad Dakhillyah','DA',1162,1), + (3983,'Al Batinah','BA',1162,1), + (3984,'Al Janblyah','JA',1162,1), + (3985,'Al Wusta','WU',1162,1), + (3986,'Ash Sharqlyah','SH',1162,1), + (3987,'Az Zahirah','ZA',1162,1), + (3988,'Masqat','MA',1162,1), + (3989,'Musandam','MU',1162,1), + (3990,'Bocas del Toro','1',1166,1), + (3991,'Cocle','2',1166,1), + (3992,'Chiriqui','4',1166,1), + (3993,'Darien','5',1166,1), + (3994,'Herrera','6',1166,1), + (3995,'Loa Santoa','7',1166,1), + (3996,'Panama','8',1166,1), + (3997,'Veraguas','9',1166,1), + (3998,'Comarca de San Blas','Q',1166,1), + (3999,'El Callao','CAL',1169,1), + (4000,'Ancash','ANC',1169,1), + (4001,'Apurimac','APU',1169,1), + (4002,'Arequipa','ARE',1169,1), + (4003,'Ayacucho','AYA',1169,1), + (4004,'Cajamarca','CAJ',1169,1), + (4005,'Cuzco','CUS',1169,1), + (4006,'Huancavelica','HUV',1169,1), + (4007,'Huanuco','HUC',1169,1), + (4008,'Ica','ICA',1169,1), + (4009,'Junin','JUN',1169,1), + (4010,'La Libertad','LAL',1169,1), + (4011,'Lambayeque','LAM',1169,1), + (4012,'Lima','LIM',1169,1), + (4013,'Loreto','LOR',1169,1), + (4014,'Madre de Dios','MDD',1169,1), + (4015,'Moquegua','MOQ',1169,1), + (4016,'Pasco','PAS',1169,1), + (4017,'Piura','PIU',1169,1), + (4018,'Puno','PUN',1169,1), + (4019,'San Martin','SAM',1169,1), + (4020,'Tacna','TAC',1169,1), + (4021,'Tumbes','TUM',1169,1), + (4022,'Ucayali','UCA',1169,1), + (4023,'National Capital District (Port Moresby)','NCD',1167,1), + (4024,'Chimbu','CPK',1167,1), + (4025,'Eastern Highlands','EHG',1167,1), + (4026,'East New Britain','EBR',1167,1), + (4027,'East Sepik','ESW',1167,1), + (4028,'Enga','EPW',1167,1), + (4029,'Gulf','GPK',1167,1), + (4030,'Madang','MPM',1167,1), + (4031,'Manus','MRL',1167,1), + (4032,'Milne Bay','MBA',1167,1), + (4033,'Morobe','MPL',1167,1), + (4034,'New Ireland','NIK',1167,1), + (4035,'North Solomons','NSA',1167,1), + (4036,'Santaun','SAN',1167,1), + (4037,'Southern Highlands','SHM',1167,1), + (4038,'Western Highlands','WHM',1167,1), + (4039,'West New Britain','WBK',1167,1), + (4040,'Abra','ABR',1170,1), + (4041,'Agusan del Norte','AGN',1170,1), + (4042,'Agusan del Sur','AGS',1170,1), + (4043,'Aklan','AKL',1170,1), + (4044,'Albay','ALB',1170,1), + (4045,'Antique','ANT',1170,1), + (4046,'Apayao','APA',1170,1), + (4047,'Aurora','AUR',1170,1), + (4048,'Basilan','BAS',1170,1), + (4049,'Bataan','BAN',1170,1), + (4050,'Batanes','BTN',1170,1), + (4051,'Batangas','BTG',1170,1), + (4052,'Benguet','BEN',1170,1), + (4053,'Biliran','BIL',1170,1), + (4054,'Bohol','BOH',1170,1), + (4055,'Bukidnon','BUK',1170,1), + (4056,'Bulacan','BUL',1170,1), + (4057,'Cagayan','CAG',1170,1), + (4058,'Camarines Norte','CAN',1170,1), + (4059,'Camarines Sur','CAS',1170,1), + (4060,'Camiguin','CAM',1170,1), + (4061,'Capiz','CAP',1170,1), + (4062,'Catanduanes','CAT',1170,1), + (4063,'Cavite','CAV',1170,1), + (4064,'Cebu','CEB',1170,1), + (4065,'Compostela Valley','COM',1170,1), + (4066,'Davao','DAV',1170,1), + (4067,'Davao del Sur','DAS',1170,1), + (4068,'Davao Oriental','DAO',1170,1), + (4069,'Eastern Samar','EAS',1170,1), + (4070,'Guimaras','GUI',1170,1), + (4071,'Ifugao','IFU',1170,1), + (4072,'Ilocos Norte','ILN',1170,1), + (4073,'Ilocos Sur','ILS',1170,1), + (4074,'Iloilo','ILI',1170,1), + (4075,'Isabela','ISA',1170,1), + (4076,'Kalinga-Apayso','KAL',1170,1), + (4077,'Laguna','LAG',1170,1), + (4078,'Lanao del Norte','LAN',1170,1), + (4079,'Lanao del Sur','LAS',1170,1), + (4080,'La Union','LUN',1170,1), + (4081,'Leyte','LEY',1170,1), + (4082,'Maguindanao','MAG',1170,1), + (4083,'Marinduque','MAD',1170,1), + (4084,'Masbate','MAS',1170,1), + (4085,'Mindoro Occidental','MDC',1170,1), + (4086,'Mindoro Oriental','MDR',1170,1), + (4087,'Misamis Occidental','MSC',1170,1), + (4088,'Misamis Oriental','MSR',1170,1), + (4089,'Mountain Province','MOU',1170,1), + (4090,'Negroe Occidental','NEC',1170,1), + (4091,'Negros Oriental','NER',1170,1), + (4092,'North Cotabato','NCO',1170,1), + (4093,'Northern Samar','NSA',1170,1), + (4094,'Nueva Ecija','NUE',1170,1), + (4095,'Nueva Vizcaya','NUV',1170,1), + (4096,'Palawan','PLW',1170,1), + (4097,'Pampanga','PAM',1170,1), + (4098,'Pangasinan','PAN',1170,1), + (4099,'Quezon','QUE',1170,1), + (4100,'Quirino','QUI',1170,1), + (4101,'Rizal','RIZ',1170,1), + (4102,'Romblon','ROM',1170,1), + (4103,'Sarangani','SAR',1170,1), + (4104,'Siquijor','SIG',1170,1), + (4105,'Sorsogon','SOR',1170,1), + (4106,'South Cotabato','SCO',1170,1), + (4107,'Southern Leyte','SLE',1170,1), + (4108,'Sultan Kudarat','SUK',1170,1), + (4109,'Sulu','SLU',1170,1), + (4110,'Surigao del Norte','SUN',1170,1), + (4111,'Surigao del Sur','SUR',1170,1), + (4112,'Tarlac','TAR',1170,1), + (4113,'Tawi-Tawi','TAW',1170,1), + (4114,'Western Samar','WSA',1170,1), + (4115,'Zambales','ZMB',1170,1), + (4116,'Zamboanga del Norte','ZAN',1170,1), + (4117,'Zamboanga del Sur','ZAS',1170,1), + (4118,'Zamboanga Sibiguey','ZSI',1170,1), + (4119,'Islamabad Federal Capital Area','IS',1163,1), + (4120,'Baluchistan','BA',1163,1), + (4121,'Khyber Pakhtun Khawa','NW',1163,1), + (4122,'Sindh','SD',1163,1), + (4123,'Federally Administered Tribal Areas','TA',1163,1), + (4124,'Azad Kashmir','JK',1163,1), + (4125,'Gilgit-Baltistan','NA',1163,1), + (4126,'Aveiro','01',1173,1), + (4127,'Beja','02',1173,1), + (4128,'Braga','03',1173,1), + (4129,'Bragança','04',1173,1), + (4130,'Castelo Branco','05',1173,1), + (4131,'Coimbra','06',1173,1), + (4132,'Évora','07',1173,1), + (4133,'Faro','08',1173,1), + (4134,'Guarda','09',1173,1), + (4135,'Leiria','10',1173,1), + (4136,'Lisboa','11',1173,1), + (4137,'Portalegre','12',1173,1), + (4138,'Porto','13',1173,1), + (4139,'Santarém','14',1173,1), + (4140,'Setúbal','15',1173,1), + (4141,'Viana do Castelo','16',1173,1), + (4142,'Vila Real','17',1173,1), + (4143,'Viseu','18',1173,1), + (4144,'Região Autónoma dos Açores','20',1173,1), + (4145,'Região Autónoma da Madeira','30',1173,1), + (4146,'Asuncion','ASU',1168,1), + (4147,'Alto Paraguay','16',1168,1), + (4148,'Alto Parana','10',1168,1), + (4149,'Amambay','13',1168,1), + (4150,'Boqueron','19',1168,1), + (4151,'Caeguazu','5',1168,1), + (4152,'Caazapl','6',1168,1), + (4153,'Canindeyu','14',1168,1), + (4154,'Concepcion','1',1168,1), + (4155,'Cordillera','3',1168,1), + (4156,'Guaira','4',1168,1), + (4157,'Itapua','7',1168,1), + (4158,'Miaiones','8',1168,1), + (4159,'Neembucu','12',1168,1), + (4160,'Paraguari','9',1168,1), + (4161,'Presidente Hayes','15',1168,1), + (4162,'San Pedro','2',1168,1), + (4163,'Ad Dawhah','DA',1175,1), + (4164,'Al Ghuwayriyah','GH',1175,1), + (4165,'Al Jumayliyah','JU',1175,1), + (4166,'Al Khawr','KH',1175,1), + (4167,'Al Wakrah','WA',1175,1), + (4168,'Ar Rayyan','RA',1175,1), + (4169,'Jariyan al Batnah','JB',1175,1), + (4170,'Madinat ash Shamal','MS',1175,1), + (4171,'Umm Salal','US',1175,1), + (4172,'Bucuresti','B',1176,1), + (4173,'Alba','AB',1176,1), + (4174,'Arad','AR',1176,1), + (4175,'ArgeÈ™','AG',1176,1), + (4176,'Bacău','BC',1176,1), + (4177,'Bihor','BH',1176,1), + (4178,'BistriÈ›a-Năsăud','BN',1176,1), + (4179,'BotoÈ™ani','BT',1176,1), + (4180,'BraÈ™ov','BV',1176,1), + (4181,'Brăila','BR',1176,1), + (4182,'Buzău','BZ',1176,1), + (4183,'CaraÈ™-Severin','CS',1176,1), + (4184,'CălăraÈ™i','CL',1176,1), + (4185,'Cluj','CJ',1176,1), + (4186,'ConstanÈ›a','CT',1176,1), + (4187,'Covasna','CV',1176,1), + (4188,'DâmboviÈ›a','DB',1176,1), + (4189,'Dolj','DJ',1176,1), + (4190,'GalaÈ›i','GL',1176,1), + (4191,'Giurgiu','GR',1176,1), + (4192,'Gorj','GJ',1176,1), + (4193,'Harghita','HR',1176,1), + (4194,'Hunedoara','HD',1176,1), + (4195,'IalomiÈ›a','IL',1176,1), + (4196,'IaÈ™i','IS',1176,1), + (4197,'Ilfov','IF',1176,1), + (4198,'MaramureÈ™','MM',1176,1), + (4199,'MehedinÈ›i','MH',1176,1), + (4200,'MureÈ™','MS',1176,1), + (4201,'NeamÈ›','NT',1176,1), + (4202,'Olt','OT',1176,1), + (4203,'Prahova','PH',1176,1), + (4204,'Satu Mare','SM',1176,1), + (4205,'Sălaj','SJ',1176,1), + (4206,'Sibiu','SB',1176,1), + (4207,'Suceava','SV',1176,1), + (4208,'Teleorman','TR',1176,1), + (4209,'TimiÈ™','TM',1176,1), + (4210,'Tulcea','TL',1176,1), + (4211,'Vaslui','VS',1176,1), + (4212,'Vâlcea','VL',1176,1), + (4213,'Vrancea','VN',1176,1), + (4214,'Adygeya, Respublika','AD',1177,1), + (4215,'Altay, Respublika','AL',1177,1), + (4216,'Bashkortostan, Respublika','BA',1177,1), + (4217,'Buryatiya, Respublika','BU',1177,1), + (4218,'Chechenskaya Respublika','CE',1177,1), + (4219,'Chuvashskaya Respublika','CU',1177,1), + (4220,'Dagestan, Respublika','DA',1177,1), + (4221,'Ingushskaya Respublika','IN',1177,1), + (4222,'Kabardino-Balkarskaya','KB',1177,1), + (4223,'Kalmykiya, Respublika','KL',1177,1), + (4224,'Karachayevo-Cherkesskaya Respublika','KC',1177,1), + (4225,'Kareliya, Respublika','KR',1177,1), + (4226,'Khakasiya, Respublika','KK',1177,1), + (4227,'Komi, Respublika','KO',1177,1), + (4228,'Mariy El, Respublika','ME',1177,1), + (4229,'Mordoviya, Respublika','MO',1177,1), + (4230,'Sakha, Respublika [Yakutiya]','SA',1177,1), + (4231,'Severnaya Osetiya, Respublika','SE',1177,1), + (4232,'Tatarstan, Respublika','TA',1177,1), + (4233,'Tyva, Respublika [Tuva]','TY',1177,1), + (4234,'Udmurtskaya Respublika','UD',1177,1), + (4235,'Altayskiy kray','ALT',1177,1), + (4236,'Khabarovskiy kray','KHA',1177,1), + (4237,'Krasnodarskiy kray','KDA',1177,1), + (4238,'Krasnoyarskiy kray','KYA',1177,1), + (4239,'Primorskiy kray','PRI',1177,1), + (4240,'Stavropol\'skiy kray','STA',1177,1), + (4241,'Amurskaya oblast\'','AMU',1177,1), + (4242,'Arkhangel\'skaya oblast\'','ARK',1177,1), + (4243,'Astrakhanskaya oblast\'','AST',1177,1), + (4244,'Belgorodskaya oblast\'','BEL',1177,1), + (4245,'Bryanskaya oblast\'','BRY',1177,1), + (4246,'Chelyabinskaya oblast\'','CHE',1177,1), + (4247,'Zabaykalsky Krai\'','ZSK',1177,1), + (4248,'Irkutskaya oblast\'','IRK',1177,1), + (4249,'Ivanovskaya oblast\'','IVA',1177,1), + (4250,'Kaliningradskaya oblast\'','KGD',1177,1), + (4251,'Kaluzhskaya oblast\'','KLU',1177,1), + (4252,'Kamchatka Krai\'','KAM',1177,1), + (4253,'Kemerovskaya oblast\'','KEM',1177,1), + (4254,'Kirovskaya oblast\'','KIR',1177,1), + (4255,'Kostromskaya oblast\'','KOS',1177,1), + (4256,'Kurganskaya oblast\'','KGN',1177,1), + (4257,'Kurskaya oblast\'','KRS',1177,1), + (4258,'Leningradskaya oblast\'','LEN',1177,1), + (4259,'Lipetskaya oblast\'','LIP',1177,1), + (4260,'Magadanskaya oblast\'','MAG',1177,1), + (4261,'Moskovskaya oblast\'','MOS',1177,1), + (4262,'Murmanskaya oblast\'','MUR',1177,1), + (4263,'Nizhegorodskaya oblast\'','NIZ',1177,1), + (4264,'Novgorodskaya oblast\'','NGR',1177,1), + (4265,'Novosibirskaya oblast\'','NVS',1177,1), + (4266,'Omskaya oblast\'','OMS',1177,1), + (4267,'Orenburgskaya oblast\'','ORE',1177,1), + (4268,'Orlovskaya oblast\'','ORL',1177,1), + (4269,'Penzenskaya oblast\'','PNZ',1177,1), + (4270,'Perm krai\'','PEK',1177,1), + (4271,'Pskovskaya oblast\'','PSK',1177,1), + (4272,'Rostovskaya oblast\'','ROS',1177,1), + (4273,'Ryazanskaya oblast\'','RYA',1177,1), + (4274,'Sakhalinskaya oblast\'','SAK',1177,1), + (4275,'Samarskaya oblast\'','SAM',1177,1), + (4276,'Saratovskaya oblast\'','SAR',1177,1), + (4277,'Smolenskaya oblast\'','SMO',1177,1), + (4278,'Sverdlovskaya oblast\'','SVE',1177,1), + (4279,'Tambovskaya oblast\'','TAM',1177,1), + (4280,'Tomskaya oblast\'','TOM',1177,1), + (4281,'Tul\'skaya oblast\'','TUL',1177,1), + (4282,'Tverskaya oblast\'','TVE',1177,1), + (4283,'Tyumenskaya oblast\'','TYU',1177,1), + (4284,'Ul\'yanovskaya oblast\'','ULY',1177,1), + (4285,'Vladimirskaya oblast\'','VLA',1177,1), + (4286,'Volgogradskaya oblast\'','VGG',1177,1), + (4287,'Vologodskaya oblast\'','VLG',1177,1), + (4288,'Voronezhskaya oblast\'','VOR',1177,1), + (4289,'Yaroslavskaya oblast\'','YAR',1177,1), + (4290,'Moskva','MOW',1177,1), + (4291,'Sankt-Peterburg','SPE',1177,1), + (4292,'Yevreyskaya avtonomnaya oblast\'','YEV',1177,1), + (4294,'Chukotskiy avtonomnyy okrug','CHU',1177,1), + (4296,'Khanty-Mansiyskiy avtonomnyy okrug','KHM',1177,1), + (4299,'Nenetskiy avtonomnyy okrug','NEN',1177,1), + (4302,'Yamalo-Nenetskiy avtonomnyy okrug','YAN',1177,1), + (4303,'Butare','C',1178,1), + (4304,'Byumba','I',1178,1), + (4305,'Cyangugu','E',1178,1), + (4306,'Gikongoro','D',1178,1), + (4307,'Gisenyi','G',1178,1), + (4308,'Gitarama','B',1178,1), + (4309,'Kibungo','J',1178,1), + (4310,'Kibuye','F',1178,1), + (4311,'Kigali-Rural Kigali y\' Icyaro','K',1178,1), + (4312,'Kigali-Ville Kigali Ngari','L',1178,1), + (4313,'Mutara','M',1178,1), + (4314,'Ruhengeri','H',1178,1), + (4315,'Al Bahah','11',1187,1), + (4316,'Al Hudud Ash Shamaliyah','08',1187,1), + (4317,'Al Jawf','12',1187,1), + (4318,'Al Madinah','03',1187,1), + (4319,'Al Qasim','05',1187,1), + (4320,'Ar Riyad','01',1187,1), + (4321,'Asir','14',1187,1), + (4322,'Ha\'il','06',1187,1), + (4323,'Jlzan','09',1187,1), + (4324,'Makkah','02',1187,1), + (4325,'Najran','10',1187,1), + (4326,'Tabuk','07',1187,1), + (4327,'Capital Territory (Honiara)','CT',1194,1), + (4328,'Guadalcanal','GU',1194,1), + (4329,'Isabel','IS',1194,1), + (4330,'Makira','MK',1194,1), + (4331,'Malaita','ML',1194,1), + (4332,'Temotu','TE',1194,1), + (4333,'A\'ali an Nil','23',1200,1), + (4334,'Al Bah al Ahmar','26',1200,1), + (4335,'Al Buhayrat','18',1200,1), + (4336,'Al Jazirah','07',1200,1), + (4337,'Al Khartum','03',1200,1), + (4338,'Al Qadarif','06',1200,1), + (4339,'Al Wahdah','22',1200,1), + (4340,'An Nil','04',1200,1), + (4341,'An Nil al Abyaq','08',1200,1), + (4342,'An Nil al Azraq','24',1200,1), + (4343,'Ash Shamallyah','01',1200,1), + (4344,'Bahr al Jabal','17',1200,1), + (4345,'Gharb al Istiwa\'iyah','16',1200,1), + (4346,'Gharb Ba~r al Ghazal','14',1200,1), + (4347,'Gharb Darfur','12',1200,1), + (4348,'Gharb Kurdufan','10',1200,1), + (4349,'Janub Darfur','11',1200,1), + (4350,'Janub Rurdufan','13',1200,1), + (4351,'Jnqall','20',1200,1), + (4352,'Kassala','05',1200,1), + (4353,'Shamal Batr al Ghazal','15',1200,1), + (4354,'Shamal Darfur','02',1200,1), + (4355,'Shamal Kurdufan','09',1200,1), + (4356,'Sharq al Istiwa\'iyah','19',1200,1), + (4357,'Sinnar','25',1200,1), + (4358,'Warab','21',1200,1), + (4359,'Blekinge län','K',1204,1), + (4360,'Dalarnas län','W',1204,1), + (4361,'Gotlands län','I',1204,1), + (4362,'Gävleborgs län','X',1204,1), + (4363,'Hallands län','N',1204,1), + (4364,'Jämtlands län','Z',1204,1), + (4365,'Jönkopings län','F',1204,1), + (4366,'Kalmar län','H',1204,1), + (4367,'Kronobergs län','G',1204,1), + (4368,'Norrbottens län','BD',1204,1), + (4369,'SkÃ¥ne län','M',1204,1), + (4370,'Stockholms län','AB',1204,1), + (4371,'Södermanlands län','D',1204,1), + (4372,'Uppsala län','C',1204,1), + (4373,'Värmlands län','S',1204,1), + (4374,'Västerbottens län','AC',1204,1), + (4375,'Västernorrlands län','Y',1204,1), + (4376,'Västmanlands län','U',1204,1), + (4377,'Västra Götalands län','Q',1204,1), + (4378,'Örebro län','T',1204,1), + (4379,'Östergötlands län','E',1204,1), + (4380,'Saint Helena','SH',1180,1), + (4381,'Ascension','AC',1180,1), + (4382,'Tristan da Cunha','TA',1180,1), + (4383,'AjdovÅ¡Äina','001',1193,1), + (4384,'Beltinci','002',1193,1), + (4385,'Benedikt','148',1193,1), + (4386,'Bistrica ob Sotli','149',1193,1), + (4387,'Bled','003',1193,1), + (4388,'Bloke','150',1193,1), + (4389,'Bohinj','004',1193,1), + (4390,'Borovnica','005',1193,1), + (4391,'Bovec','006',1193,1), + (4392,'BraslovÄe','151',1193,1), + (4393,'Brda','007',1193,1), + (4394,'Brezovica','008',1193,1), + (4395,'Brežice','009',1193,1), + (4396,'Cankova','152',1193,1), + (4397,'Celje','011',1193,1), + (4398,'Cerklje na Gorenjskem','012',1193,1), + (4399,'Cerknica','013',1193,1), + (4400,'Cerkno','014',1193,1), + (4401,'Cerkvenjak','153',1193,1), + (4402,'ÄŒrenÅ¡ovci','015',1193,1), + (4403,'ÄŒrna na KoroÅ¡kem','016',1193,1), + (4404,'ÄŒrnomelj','017',1193,1), + (4405,'Destrnik','018',1193,1), + (4406,'DivaÄa','019',1193,1), + (4407,'Dobje','154',1193,1), + (4408,'Dobrepolje','020',1193,1), + (4409,'Dobrna','155',1193,1), + (4410,'Dobrova-Polhov Gradec','021',1193,1), + (4411,'Dobrovnik','156',1193,1), + (4412,'Dol pri Ljubljani','022',1193,1), + (4413,'Dolenjske Toplice','157',1193,1), + (4414,'Domžale','023',1193,1), + (4415,'Dornava','024',1193,1), + (4416,'Dravograd','025',1193,1), + (4417,'Duplek','026',1193,1), + (4418,'Gorenja vas-Poljane','027',1193,1), + (4419,'GoriÅ¡nica','028',1193,1), + (4420,'Gornja Radgona','029',1193,1), + (4421,'Gornji Grad','030',1193,1), + (4422,'Gornji Petrovci','031',1193,1), + (4423,'Grad','158',1193,1), + (4424,'Grosuplje','032',1193,1), + (4425,'Hajdina','159',1193,1), + (4426,'HoÄe-Slivnica','160',1193,1), + (4427,'HodoÅ¡','161',1193,1), + (4428,'Horjul','162',1193,1), + (4429,'Hrastnik','034',1193,1), + (4430,'Hrpelje-Kozina','035',1193,1), + (4431,'Idrija','036',1193,1), + (4432,'Ig','037',1193,1), + (4433,'Ilirska Bistrica','038',1193,1), + (4434,'IvanÄna Gorica','039',1193,1), + (4435,'Izola','040',1193,1), + (4436,'Jesenice','041',1193,1), + (4437,'Jezersko','163',1193,1), + (4438,'JurÅ¡inci','042',1193,1), + (4439,'Kamnik','043',1193,1), + (4440,'Kanal','044',1193,1), + (4441,'KidriÄevo','045',1193,1), + (4442,'Kobarid','046',1193,1), + (4443,'Kobilje','047',1193,1), + (4444,'KoÄevje','048',1193,1), + (4445,'Komen','049',1193,1), + (4446,'Komenda','164',1193,1), + (4447,'Koper','050',1193,1), + (4448,'Kostel','165',1193,1), + (4449,'Kozje','051',1193,1), + (4450,'Kranj','052',1193,1), + (4451,'Kranjska Gora','053',1193,1), + (4452,'Križevci','166',1193,1), + (4453,'KrÅ¡ko','054',1193,1), + (4454,'Kungota','055',1193,1), + (4455,'Kuzma','056',1193,1), + (4456,'LaÅ¡ko','057',1193,1), + (4457,'Lenart','058',1193,1), + (4458,'Lendava','059',1193,1), + (4459,'Litija','060',1193,1), + (4460,'Ljubljana','061',1193,1), + (4461,'Ljubno','062',1193,1), + (4462,'Ljutomer','063',1193,1), + (4463,'Logatec','064',1193,1), + (4464,'LoÅ¡ka dolina','065',1193,1), + (4465,'LoÅ¡ki Potok','066',1193,1), + (4466,'Lovrenc na Pohorju','167',1193,1), + (4467,'LuÄe','067',1193,1), + (4468,'Lukovica','068',1193,1), + (4469,'MajÅ¡perk','069',1193,1), + (4470,'Maribor','070',1193,1), + (4471,'Markovci','168',1193,1), + (4472,'Medvode','071',1193,1), + (4473,'MengeÅ¡','072',1193,1), + (4474,'Metlika','073',1193,1), + (4475,'Mežica','074',1193,1), + (4476,'Miklavž na Dravskem polju','169',1193,1), + (4477,'Miren-Kostanjevica','075',1193,1), + (4478,'Mirna PeÄ','170',1193,1), + (4479,'Mislinja','076',1193,1), + (4480,'MoravÄe','077',1193,1), + (4481,'Moravske Toplice','078',1193,1), + (4482,'Mozirje','079',1193,1), + (4483,'Murska Sobota','080',1193,1), + (4484,'Muta','081',1193,1), + (4485,'Naklo','082',1193,1), + (4486,'Nazarje','083',1193,1), + (4487,'Nova Gorica','084',1193,1), + (4488,'Novo mesto','085',1193,1), + (4489,'Sveta Ana','181',1193,1), + (4490,'Sveti Andraž v Slovenskih goricah','182',1193,1), + (4491,'Sveti Jurij','116',1193,1), + (4492,'Å alovci','033',1193,1), + (4493,'Å empeter-Vrtojba','183',1193,1), + (4494,'Å enÄur','117',1193,1), + (4495,'Å entilj','118',1193,1), + (4496,'Å entjernej','119',1193,1), + (4497,'Å entjur','120',1193,1), + (4498,'Å kocjan','121',1193,1), + (4499,'Å kofja Loka','122',1193,1), + (4500,'Å kofljica','123',1193,1), + (4501,'Å marje pri JelÅ¡ah','124',1193,1), + (4502,'Å martno ob Paki','125',1193,1), + (4503,'Å martno pri Litiji','194',1193,1), + (4504,'Å oÅ¡tanj','126',1193,1), + (4505,'Å tore','127',1193,1), + (4506,'Tabor','184',1193,1), + (4507,'TiÅ¡ina','010',1193,1), + (4508,'Tolmin','128',1193,1), + (4509,'Trbovlje','129',1193,1), + (4510,'Trebnje','130',1193,1), + (4511,'Trnovska vas','185',1193,1), + (4512,'TržiÄ','131',1193,1), + (4513,'Trzin','186',1193,1), + (4514,'TurniÅ¡Äe','132',1193,1), + (4515,'Velenje','133',1193,1), + (4516,'Velika Polana','187',1193,1), + (4517,'Velike LaÅ¡Äe','134',1193,1), + (4518,'Veržej','188',1193,1), + (4519,'Videm','135',1193,1), + (4520,'Vipava','136',1193,1), + (4521,'Vitanje','137',1193,1), + (4522,'Vojnik','138',1193,1), + (4523,'Vransko','189',1193,1), + (4524,'Vrhnika','140',1193,1), + (4525,'Vuzenica','141',1193,1), + (4526,'Zagorje ob Savi','142',1193,1), + (4527,'ZavrÄ','143',1193,1), + (4528,'ZreÄe','144',1193,1), + (4529,'Žalec','190',1193,1), + (4530,'Železniki','146',1193,1), + (4531,'Žetale','191',1193,1), + (4532,'Žiri','147',1193,1), + (4533,'Žirovnica','192',1193,1), + (4534,'Žužemberk','193',1193,1), + (4535,'Banskobystrický kraj','BC',1192,1), + (4536,'Bratislavský kraj','BL',1192,1), + (4537,'KoÅ¡ický kraj','KI',1192,1), + (4538,'Nitriansky kraj','NJ',1192,1), + (4539,'PreÅ¡ovský kraj','PV',1192,1), + (4540,'TrenÄiansky kraj','TC',1192,1), + (4541,'Trnavský kraj','TA',1192,1), + (4542,'Žilinský kraj','ZI',1192,1), + (4543,'Western Area (Freetown)','W',1190,1), + (4544,'Dakar','DK',1188,1), + (4545,'Diourbel','DB',1188,1), + (4546,'Fatick','FK',1188,1), + (4547,'Kaolack','KL',1188,1), + (4548,'Kolda','KD',1188,1), + (4549,'Louga','LG',1188,1), + (4550,'Matam','MT',1188,1), + (4551,'Saint-Louis','SL',1188,1), + (4552,'Tambacounda','TC',1188,1), + (4553,'Thies','TH',1188,1), + (4554,'Ziguinchor','ZG',1188,1), + (4555,'Awdal','AW',1195,1), + (4556,'Bakool','BK',1195,1), + (4557,'Banaadir','BN',1195,1), + (4558,'Bay','BY',1195,1), + (4559,'Galguduud','GA',1195,1), + (4560,'Gedo','GE',1195,1), + (4561,'Hiirsan','HI',1195,1), + (4562,'Jubbada Dhexe','JD',1195,1), + (4563,'Jubbada Hoose','JH',1195,1), + (4564,'Mudug','MU',1195,1), + (4565,'Nugaal','NU',1195,1), + (4566,'Saneag','SA',1195,1), + (4567,'Shabeellaha Dhexe','SD',1195,1), + (4568,'Shabeellaha Hoose','SH',1195,1), + (4569,'Sool','SO',1195,1), + (4570,'Togdheer','TO',1195,1), + (4571,'Woqooyi Galbeed','WO',1195,1), + (4572,'Brokopondo','BR',1201,1), + (4573,'Commewijne','CM',1201,1), + (4574,'Coronie','CR',1201,1), + (4575,'Marowijne','MA',1201,1), + (4576,'Nickerie','NI',1201,1), + (4577,'Paramaribo','PM',1201,1), + (4578,'Saramacca','SA',1201,1), + (4579,'Sipaliwini','SI',1201,1), + (4580,'Wanica','WA',1201,1), + (4581,'Principe','P',1207,1), + (4582,'Sao Tome','S',1207,1), + (4583,'Ahuachapan','AH',1066,1), + (4584,'Cabanas','CA',1066,1), + (4585,'Cuscatlan','CU',1066,1), + (4586,'Chalatenango','CH',1066,1), + (4587,'Morazan','MO',1066,1), + (4588,'San Miguel','SM',1066,1), + (4589,'San Salvador','SS',1066,1), + (4590,'Santa Ana','SA',1066,1), + (4591,'San Vicente','SV',1066,1), + (4592,'Sonsonate','SO',1066,1), + (4593,'Usulutan','US',1066,1), + (4594,'Al Hasakah','HA',1206,1), + (4595,'Al Ladhiqiyah','LA',1206,1), + (4596,'Al Qunaytirah','QU',1206,1), + (4597,'Ar Raqqah','RA',1206,1), + (4598,'As Suwayda\'','SU',1206,1), + (4599,'Dar\'a','DR',1206,1), + (4600,'Dayr az Zawr','DY',1206,1), + (4601,'Dimashq','DI',1206,1), + (4602,'Halab','HL',1206,1), + (4603,'Hamah','HM',1206,1), + (4604,'Jim\'','HI',1206,1), + (4605,'Idlib','ID',1206,1), + (4606,'Rif Dimashq','RD',1206,1), + (4607,'Tarts','TA',1206,1), + (4608,'Hhohho','HH',1203,1), + (4609,'Lubombo','LU',1203,1), + (4610,'Manzini','MA',1203,1), + (4611,'Shiselweni','SH',1203,1), + (4612,'Batha','BA',1043,1), + (4613,'Biltine','BI',1043,1), + (4614,'Borkou-Ennedi-Tibesti','BET',1043,1), + (4615,'Chari-Baguirmi','CB',1043,1), + (4616,'Guera','GR',1043,1), + (4617,'Kanem','KA',1043,1), + (4618,'Lac','LC',1043,1), + (4619,'Logone-Occidental','LO',1043,1), + (4620,'Logone-Oriental','LR',1043,1), + (4621,'Mayo-Kebbi','MK',1043,1), + (4622,'Moyen-Chari','MC',1043,1), + (4623,'Ouaddai','OD',1043,1), + (4624,'Salamat','SA',1043,1), + (4625,'Tandjile','TA',1043,1), + (4626,'Kara','K',1214,1), + (4627,'Maritime (Region)','M',1214,1), + (4628,'Savannes','S',1214,1), + (4629,'Krung Thep Maha Nakhon Bangkok','10',1211,1), + (4630,'Phatthaya','S',1211,1), + (4631,'Amnat Charoen','37',1211,1), + (4632,'Ang Thong','15',1211,1), + (4633,'Buri Ram','31',1211,1), + (4634,'Chachoengsao','24',1211,1), + (4635,'Chai Nat','18',1211,1), + (4636,'Chaiyaphum','36',1211,1), + (4637,'Chanthaburi','22',1211,1), + (4638,'Chiang Mai','50',1211,1), + (4639,'Chiang Rai','57',1211,1), + (4640,'Chon Buri','20',1211,1), + (4641,'Chumphon','86',1211,1), + (4642,'Kalasin','46',1211,1), + (4643,'Kamphasng Phet','62',1211,1), + (4644,'Kanchanaburi','71',1211,1), + (4645,'Khon Kaen','40',1211,1), + (4646,'Krabi','81',1211,1), + (4647,'Lampang','52',1211,1), + (4648,'Lamphun','51',1211,1), + (4649,'Loei','42',1211,1), + (4650,'Lop Buri','16',1211,1), + (4651,'Mae Hong Son','58',1211,1), + (4652,'Maha Sarakham','44',1211,1), + (4653,'Mukdahan','49',1211,1), + (4654,'Nakhon Nayok','26',1211,1), + (4655,'Nakhon Pathom','73',1211,1), + (4656,'Nakhon Phanom','48',1211,1), + (4657,'Nakhon Ratchasima','30',1211,1), + (4658,'Nakhon Sawan','60',1211,1), + (4659,'Nakhon Si Thammarat','80',1211,1), + (4660,'Nan','55',1211,1), + (4661,'Narathiwat','96',1211,1), + (4662,'Nong Bua Lam Phu','39',1211,1), + (4663,'Nong Khai','43',1211,1), + (4664,'Nonthaburi','12',1211,1), + (4665,'Pathum Thani','13',1211,1), + (4666,'Pattani','94',1211,1), + (4667,'Phangnga','82',1211,1), + (4668,'Phatthalung','93',1211,1), + (4669,'Phayao','56',1211,1), + (4670,'Phetchabun','67',1211,1), + (4671,'Phetchaburi','76',1211,1), + (4672,'Phichit','66',1211,1), + (4673,'Phitsanulok','65',1211,1), + (4674,'Phrae','54',1211,1), + (4675,'Phra Nakhon Si Ayutthaya','14',1211,1), + (4676,'Phuket','83',1211,1), + (4677,'Prachin Buri','25',1211,1), + (4678,'Prachuap Khiri Khan','77',1211,1), + (4679,'Ranong','85',1211,1), + (4680,'Ratchaburi','70',1211,1), + (4681,'Rayong','21',1211,1), + (4682,'Roi Et','45',1211,1), + (4683,'Sa Kaeo','27',1211,1), + (4684,'Sakon Nakhon','47',1211,1), + (4685,'Samut Prakan','11',1211,1), + (4686,'Samut Sakhon','74',1211,1), + (4687,'Samut Songkhram','75',1211,1), + (4688,'Saraburi','19',1211,1), + (4689,'Satun','91',1211,1), + (4690,'Sing Buri','17',1211,1), + (4691,'Si Sa Ket','33',1211,1), + (4692,'Songkhla','90',1211,1), + (4693,'Sukhothai','64',1211,1), + (4694,'Suphan Buri','72',1211,1), + (4695,'Surat Thani','84',1211,1), + (4696,'Surin','32',1211,1), + (4697,'Tak','63',1211,1), + (4698,'Trang','92',1211,1), + (4699,'Trat','23',1211,1), + (4700,'Ubon Ratchathani','34',1211,1), + (4701,'Udon Thani','41',1211,1), + (4702,'Uthai Thani','61',1211,1), + (4703,'Uttaradit','53',1211,1), + (4704,'Yala','95',1211,1), + (4705,'Yasothon','35',1211,1), + (4706,'Sughd','SU',1209,1), + (4707,'Khatlon','KT',1209,1), + (4708,'Gorno-Badakhshan','GB',1209,1), + (4709,'Ahal','A',1220,1), + (4710,'Balkan','B',1220,1), + (4711,'Dasoguz','D',1220,1), + (4712,'Lebap','L',1220,1), + (4713,'Mary','M',1220,1), + (4714,'Béja','31',1218,1), + (4715,'Ben Arous','13',1218,1), + (4716,'Bizerte','23',1218,1), + (4717,'Gabès','81',1218,1), + (4718,'Gafsa','71',1218,1), + (4719,'Jendouba','32',1218,1), + (4720,'Kairouan','41',1218,1), + (4721,'Rasserine','42',1218,1), + (4722,'Kebili','73',1218,1), + (4723,'L\'Ariana','12',1218,1), + (4724,'Le Ref','33',1218,1), + (4725,'Mahdia','53',1218,1), + (4726,'La Manouba','14',1218,1), + (4727,'Medenine','82',1218,1), + (4728,'Moneatir','52',1218,1), + (4729,'Naboul','21',1218,1), + (4730,'Sfax','61',1218,1), + (4731,'Sidi Bouxid','43',1218,1), + (4732,'Siliana','34',1218,1), + (4733,'Sousse','51',1218,1), + (4734,'Tataouine','83',1218,1), + (4735,'Tozeur','72',1218,1), + (4736,'Tunis','11',1218,1), + (4737,'Zaghouan','22',1218,1), + (4738,'Adana','01',1219,1), + (4739,'Ad yaman','02',1219,1), + (4740,'Afyon','03',1219,1), + (4741,'Ag r','04',1219,1), + (4742,'Aksaray','68',1219,1), + (4743,'Amasya','05',1219,1), + (4744,'Ankara','06',1219,1), + (4745,'Antalya','07',1219,1), + (4746,'Ardahan','75',1219,1), + (4747,'Artvin','08',1219,1), + (4748,'Aydin','09',1219,1), + (4749,'Bal kesir','10',1219,1), + (4750,'Bartin','74',1219,1), + (4751,'Batman','72',1219,1), + (4752,'Bayburt','69',1219,1), + (4753,'Bilecik','11',1219,1), + (4754,'Bingol','12',1219,1), + (4755,'Bitlis','13',1219,1), + (4756,'Bolu','14',1219,1), + (4757,'Burdur','15',1219,1), + (4758,'Bursa','16',1219,1), + (4759,'Canakkale','17',1219,1), + (4760,'Cankir','18',1219,1), + (4761,'Corum','19',1219,1), + (4762,'Denizli','20',1219,1), + (4763,'Diyarbakir','21',1219,1), + (4764,'Duzce','81',1219,1), + (4765,'Edirne','22',1219,1), + (4766,'Elazig','23',1219,1), + (4767,'Erzincan','24',1219,1), + (4768,'Erzurum','25',1219,1), + (4769,'Eskis\'ehir','26',1219,1), + (4770,'Gaziantep','27',1219,1), + (4771,'Giresun','28',1219,1), + (4772,'Gms\'hane','29',1219,1), + (4773,'Hakkari','30',1219,1), + (4774,'Hatay','31',1219,1), + (4775,'Igidir','76',1219,1), + (4776,'Isparta','32',1219,1), + (4777,'Icel','33',1219,1), + (4778,'Istanbul','34',1219,1), + (4779,'Izmir','35',1219,1), + (4780,'Kahramanmaras','46',1219,1), + (4781,'Karabk','78',1219,1), + (4782,'Karaman','70',1219,1), + (4783,'Kars','36',1219,1), + (4784,'Kastamonu','37',1219,1), + (4785,'Kayseri','38',1219,1), + (4786,'Kirikkale','71',1219,1), + (4787,'Kirklareli','39',1219,1), + (4788,'Kirs\'ehir','40',1219,1), + (4789,'Kilis','79',1219,1), + (4790,'Kocaeli','41',1219,1), + (4791,'Konya','42',1219,1), + (4792,'Ktahya','43',1219,1), + (4793,'Malatya','44',1219,1), + (4794,'Manisa','45',1219,1), + (4795,'Mardin','47',1219,1), + (4796,'Mugila','48',1219,1), + (4797,'Mus','49',1219,1), + (4798,'Nevs\'ehir','50',1219,1), + (4799,'Nigide','51',1219,1), + (4800,'Ordu','52',1219,1), + (4801,'Osmaniye','80',1219,1), + (4802,'Rize','53',1219,1), + (4803,'Sakarya','54',1219,1), + (4804,'Samsun','55',1219,1), + (4805,'Siirt','56',1219,1), + (4806,'Sinop','57',1219,1), + (4807,'Sivas','58',1219,1), + (4808,'S\'anliurfa','63',1219,1), + (4809,'S\'rnak','73',1219,1), + (4810,'Tekirdag','59',1219,1), + (4811,'Tokat','60',1219,1), + (4812,'Trabzon','61',1219,1), + (4813,'Tunceli','62',1219,1), + (4814,'Us\'ak','64',1219,1), + (4815,'Van','65',1219,1), + (4816,'Yalova','77',1219,1), + (4817,'Yozgat','66',1219,1), + (4818,'Zonguldak','67',1219,1), + (4819,'Couva-Tabaquite-Talparo','CTT',1217,1), + (4820,'Diego Martin','DMN',1217,1), + (4821,'Eastern Tobago','ETO',1217,1), + (4822,'Penal-Debe','PED',1217,1), + (4823,'Princes Town','PRT',1217,1), + (4824,'Rio Claro-Mayaro','RCM',1217,1), + (4825,'Sangre Grande','SGE',1217,1), + (4826,'San Juan-Laventille','SJL',1217,1), + (4827,'Siparia','SIP',1217,1), + (4828,'Tunapuna-Piarco','TUP',1217,1), + (4829,'Western Tobago','WTO',1217,1), + (4830,'Arima','ARI',1217,1), + (4831,'Chaguanas','CHA',1217,1), + (4832,'Point Fortin','PTF',1217,1), + (4833,'Port of Spain','POS',1217,1), + (4834,'San Fernando','SFO',1217,1), + (4835,'Aileu','AL',1063,1), + (4836,'Ainaro','AN',1063,1), + (4837,'Bacucau','BA',1063,1), + (4838,'Bobonaro','BO',1063,1), + (4839,'Cova Lima','CO',1063,1), + (4840,'Dili','DI',1063,1), + (4841,'Ermera','ER',1063,1), + (4842,'Laulem','LA',1063,1), + (4843,'Liquica','LI',1063,1), + (4844,'Manatuto','MT',1063,1), + (4845,'Manafahi','MF',1063,1), + (4846,'Oecussi','OE',1063,1), + (4847,'Viqueque','VI',1063,1), + (4848,'Changhua County','CHA',1208,1), + (4849,'Chiayi County','CYQ',1208,1), + (4850,'Hsinchu County','HSQ',1208,1), + (4851,'Hualien County','HUA',1208,1), + (4852,'Ilan County','ILA',1208,1), + (4853,'Kaohsiung County','KHQ',1208,1), + (4854,'Miaoli County','MIA',1208,1), + (4855,'Nantou County','NAN',1208,1), + (4856,'Penghu County','PEN',1208,1), + (4857,'Pingtung County','PIF',1208,1), + (4858,'Taichung County','TXQ',1208,1), + (4859,'Tainan County','TNQ',1208,1), + (4860,'Taipei County','TPQ',1208,1), + (4861,'Taitung County','TTT',1208,1), + (4862,'Taoyuan County','TAO',1208,1), + (4863,'Yunlin County','YUN',1208,1), + (4864,'Keelung City','KEE',1208,1), + (4865,'Arusha','01',1210,1), + (4866,'Dar-es-Salaam','02',1210,1), + (4867,'Dodoma','03',1210,1), + (4868,'Iringa','04',1210,1), + (4869,'Kagera','05',1210,1), + (4870,'Kaskazini Pemba','06',1210,1), + (4871,'Kaskazini Unguja','07',1210,1), + (4872,'Xigoma','08',1210,1), + (4873,'Kilimanjaro','09',1210,1), + (4874,'Rusini Pemba','10',1210,1), + (4875,'Kusini Unguja','11',1210,1), + (4876,'Lindi','12',1210,1), + (4877,'Manyara','26',1210,1), + (4878,'Mara','13',1210,1), + (4879,'Mbeya','14',1210,1), + (4880,'Mjini Magharibi','15',1210,1), + (4881,'Morogoro','16',1210,1), + (4882,'Mtwara','17',1210,1), + (4883,'Pwani','19',1210,1), + (4884,'Rukwa','20',1210,1), + (4885,'Ruvuma','21',1210,1), + (4886,'Shinyanga','22',1210,1), + (4887,'Singida','23',1210,1), + (4888,'Tabora','24',1210,1), + (4889,'Tanga','25',1210,1), + (4890,'Cherkas\'ka Oblast\'','71',1224,1), + (4891,'Chernihivs\'ka Oblast\'','74',1224,1), + (4892,'Chernivets\'ka Oblast\'','77',1224,1), + (4893,'Dnipropetrovs\'ka Oblast\'','12',1224,1), + (4894,'Donets\'ka Oblast\'','14',1224,1), + (4895,'Ivano-Frankivs\'ka Oblast\'','26',1224,1), + (4896,'Kharkivs\'ka Oblast\'','63',1224,1), + (4897,'Khersons\'ka Oblast\'','65',1224,1), + (4898,'Khmel\'nyts\'ka Oblast\'','68',1224,1), + (4899,'Kirovohrads\'ka Oblast\'','35',1224,1), + (4900,'Kyivs\'ka Oblast\'','32',1224,1), + (4901,'Luhans\'ka Oblast\'','09',1224,1), + (4902,'L\'vivs\'ka Oblast\'','46',1224,1), + (4903,'Mykolaivs\'ka Oblast\'','48',1224,1), + (4904,'Odes \'ka Oblast\'','51',1224,1), + (4905,'Poltavs\'ka Oblast\'','53',1224,1), + (4906,'Rivnens\'ka Oblast\'','56',1224,1), + (4907,'Sums \'ka Oblast\'','59',1224,1), + (4908,'Ternopil\'s\'ka Oblast\'','61',1224,1), + (4909,'Vinnyts\'ka Oblast\'','05',1224,1), + (4910,'Volyos\'ka Oblast\'','07',1224,1), + (4911,'Zakarpats\'ka Oblast\'','21',1224,1), + (4912,'Zaporiz\'ka Oblast\'','23',1224,1), + (4913,'Zhytomyrs\'ka Oblast\'','18',1224,1), + (4914,'Respublika Krym','43',1224,1), + (4915,'Kyiv','30',1224,1), + (4916,'Sevastopol','40',1224,1), + (4917,'Adjumani','301',1223,1), + (4918,'Apac','302',1223,1), + (4919,'Arua','303',1223,1), + (4920,'Bugiri','201',1223,1), + (4921,'Bundibugyo','401',1223,1), + (4922,'Bushenyi','402',1223,1), + (4923,'Busia','202',1223,1), + (4924,'Gulu','304',1223,1), + (4925,'Hoima','403',1223,1), + (4926,'Iganga','203',1223,1), + (4927,'Jinja','204',1223,1), + (4928,'Kabale','404',1223,1), + (4929,'Kabarole','405',1223,1), + (4930,'Kaberamaido','213',1223,1), + (4931,'Kalangala','101',1223,1), + (4932,'Kampala','102',1223,1), + (4933,'Kamuli','205',1223,1), + (4934,'Kamwenge','413',1223,1), + (4935,'Kanungu','414',1223,1), + (4936,'Kapchorwa','206',1223,1), + (4937,'Kasese','406',1223,1), + (4938,'Katakwi','207',1223,1), + (4939,'Kayunga','112',1223,1), + (4940,'Kibaale','407',1223,1), + (4941,'Kiboga','103',1223,1), + (4942,'Kisoro','408',1223,1), + (4943,'Kitgum','305',1223,1), + (4944,'Kotido','306',1223,1), + (4945,'Kumi','208',1223,1), + (4946,'Kyenjojo','415',1223,1), + (4947,'Lira','307',1223,1), + (4948,'Luwero','104',1223,1), + (4949,'Masaka','105',1223,1), + (4950,'Masindi','409',1223,1), + (4951,'Mayuge','214',1223,1), + (4952,'Mbale','209',1223,1), + (4953,'Mbarara','410',1223,1), + (4954,'Moroto','308',1223,1), + (4955,'Moyo','309',1223,1), + (4956,'Mpigi','106',1223,1), + (4957,'Mubende','107',1223,1), + (4958,'Mukono','108',1223,1), + (4959,'Nakapiripirit','311',1223,1), + (4960,'Nakasongola','109',1223,1), + (4961,'Nebbi','310',1223,1), + (4962,'Ntungamo','411',1223,1), + (4963,'Pader','312',1223,1), + (4964,'Pallisa','210',1223,1), + (4965,'Rakai','110',1223,1), + (4966,'Rukungiri','412',1223,1), + (4967,'Sembabule','111',1223,1), + (4968,'Sironko','215',1223,1), + (4969,'Soroti','211',1223,1), + (4970,'Tororo','212',1223,1), + (4971,'Wakiso','113',1223,1), + (4972,'Yumbe','313',1223,1), + (4973,'Baker Island','81',1227,1), + (4974,'Howland Island','84',1227,1), + (4975,'Jarvis Island','86',1227,1), + (4976,'Johnston Atoll','67',1227,1), + (4977,'Kingman Reef','89',1227,1), + (4978,'Midway Islands','71',1227,1), + (4979,'Navassa Island','76',1227,1), + (4980,'Palmyra Atoll','95',1227,1), + (4981,'Wake Island','79',1227,1), + (4982,'Artigsa','AR',1229,1), + (4983,'Canelones','CA',1229,1), + (4984,'Cerro Largo','CL',1229,1), + (4985,'Colonia','CO',1229,1), + (4986,'Durazno','DU',1229,1), + (4987,'Flores','FS',1229,1), + (4988,'Lavalleja','LA',1229,1), + (4989,'Maldonado','MA',1229,1), + (4990,'Montevideo','MO',1229,1), + (4991,'Paysandu','PA',1229,1), + (4992,'Rivera','RV',1229,1), + (4993,'Rocha','RO',1229,1), + (4994,'Salto','SA',1229,1), + (4995,'Soriano','SO',1229,1), + (4996,'Tacuarembo','TA',1229,1), + (4997,'Treinta y Tres','TT',1229,1), + (4998,'Toshkent (city)','TK',1230,1), + (4999,'Qoraqalpogiston Respublikasi','QR',1230,1), + (5000,'Andijon','AN',1230,1), + (5001,'Buxoro','BU',1230,1), + (5002,'Farg\'ona','FA',1230,1), + (5003,'Jizzax','JI',1230,1), + (5004,'Khorazm','KH',1230,1), + (5005,'Namangan','NG',1230,1), + (5006,'Navoiy','NW',1230,1), + (5007,'Qashqadaryo','QA',1230,1), + (5008,'Samarqand','SA',1230,1), + (5009,'Sirdaryo','SI',1230,1), + (5010,'Surxondaryo','SU',1230,1), + (5011,'Toshkent','TO',1230,1), + (5012,'Xorazm','XO',1230,1), + (5013,'Distrito Federal','A',1232,1), + (5014,'Anzoategui','B',1232,1), + (5015,'Apure','C',1232,1), + (5016,'Aragua','D',1232,1), + (5017,'Barinas','E',1232,1), + (5018,'Carabobo','G',1232,1), + (5019,'Cojedes','H',1232,1), + (5020,'Falcon','I',1232,1), + (5021,'Guarico','J',1232,1), + (5022,'Lara','K',1232,1), + (5023,'Merida','L',1232,1), + (5024,'Miranda','M',1232,1), + (5025,'Monagas','N',1232,1), + (5026,'Nueva Esparta','O',1232,1), + (5027,'Portuguesa','P',1232,1), + (5028,'Tachira','S',1232,1), + (5029,'Trujillo','T',1232,1), + (5030,'Vargas','X',1232,1), + (5031,'Yaracuy','U',1232,1), + (5032,'Zulia','V',1232,1), + (5033,'Delta Amacuro','Y',1232,1), + (5034,'Dependencias Federales','W',1232,1), + (5035,'An Giang','44',1233,1), + (5036,'Ba Ria - Vung Tau','43',1233,1), + (5037,'Bac Can','53',1233,1), + (5038,'Bac Giang','54',1233,1), + (5039,'Bac Lieu','55',1233,1), + (5040,'Bac Ninh','56',1233,1), + (5041,'Ben Tre','50',1233,1), + (5042,'Binh Dinh','31',1233,1), + (5043,'Binh Duong','57',1233,1), + (5044,'Binh Phuoc','58',1233,1), + (5045,'Binh Thuan','40',1233,1), + (5046,'Ca Mau','59',1233,1), + (5047,'Can Tho','48',1233,1), + (5048,'Cao Bang','04',1233,1), + (5049,'Da Nang, thanh pho','60',1233,1), + (5050,'Dong Nai','39',1233,1), + (5051,'Dong Thap','45',1233,1), + (5052,'Gia Lai','30',1233,1), + (5053,'Ha Giang','03',1233,1), + (5054,'Ha Nam','63',1233,1), + (5055,'Ha Noi, thu do','64',1233,1), + (5056,'Ha Tay','15',1233,1), + (5057,'Ha Tinh','23',1233,1), + (5058,'Hai Duong','61',1233,1), + (5059,'Hai Phong, thanh pho','62',1233,1), + (5060,'Hoa Binh','14',1233,1), + (5061,'Ho Chi Minh, thanh pho [Sai Gon]','65',1233,1), + (5062,'Hung Yen','66',1233,1), + (5063,'Khanh Hoa','34',1233,1), + (5064,'Kien Giang','47',1233,1), + (5065,'Kon Tum','28',1233,1), + (5066,'Lai Chau','01',1233,1), + (5067,'Lam Dong','35',1233,1), + (5068,'Lang Son','09',1233,1), + (5069,'Lao Cai','02',1233,1), + (5070,'Long An','41',1233,1), + (5071,'Nam Dinh','67',1233,1), + (5072,'Nghe An','22',1233,1), + (5073,'Ninh Binh','18',1233,1), + (5074,'Ninh Thuan','36',1233,1), + (5075,'Phu Tho','68',1233,1), + (5076,'Phu Yen','32',1233,1), + (5077,'Quang Binh','24',1233,1), + (5078,'Quang Nam','27',1233,1), + (5079,'Quang Ngai','29',1233,1), + (5080,'Quang Ninh','13',1233,1), + (5081,'Quang Tri','25',1233,1), + (5082,'Soc Trang','52',1233,1), + (5083,'Son La','05',1233,1), + (5084,'Tay Ninh','37',1233,1), + (5085,'Thai Binh','20',1233,1), + (5086,'Thai Nguyen','69',1233,1), + (5087,'Thanh Hoa','21',1233,1), + (5088,'Thua Thien-Hue','26',1233,1), + (5089,'Tien Giang','46',1233,1), + (5090,'Tra Vinh','51',1233,1), + (5091,'Tuyen Quang','07',1233,1), + (5092,'Vinh Long','49',1233,1), + (5093,'Vinh Phuc','70',1233,1), + (5094,'Yen Bai','06',1233,1), + (5095,'Malampa','MAP',1231,1), + (5096,'Penama','PAM',1231,1), + (5097,'Sanma','SAM',1231,1), + (5098,'Shefa','SEE',1231,1), + (5099,'Tafea','TAE',1231,1), + (5100,'Torba','TOB',1231,1), + (5101,'A\'ana','AA',1185,1), + (5102,'Aiga-i-le-Tai','AL',1185,1), + (5103,'Atua','AT',1185,1), + (5104,'Fa\'aaaleleaga','FA',1185,1), + (5105,'Gaga\'emauga','GE',1185,1), + (5106,'Gagaifomauga','GI',1185,1), + (5107,'Palauli','PA',1185,1), + (5108,'Satupa\'itea','SA',1185,1), + (5109,'Tuamasaga','TU',1185,1), + (5110,'Va\'a-o-Fonoti','VF',1185,1), + (5111,'Vaisigano','VS',1185,1), + (5112,'Crna Gora','CG',1243,1), + (5113,'Srbija','SR',1242,1), + (5114,'Kosovo-Metohija','KM',1242,1), + (5115,'Vojvodina','VO',1242,1), + (5116,'Abyan','AB',1237,1), + (5117,'Adan','AD',1237,1), + (5118,'Ad Dali','DA',1237,1), + (5119,'Al Bayda\'','BA',1237,1), + (5120,'Al Hudaydah','MU',1237,1), + (5121,'Al Mahrah','MR',1237,1), + (5122,'Al Mahwit','MW',1237,1), + (5123,'Amran','AM',1237,1), + (5124,'Dhamar','DH',1237,1), + (5125,'Hadramawt','HD',1237,1), + (5126,'Hajjah','HJ',1237,1), + (5127,'Ibb','IB',1237,1), + (5128,'Lahij','LA',1237,1), + (5129,'Ma\'rib','MA',1237,1), + (5130,'Sa\'dah','SD',1237,1), + (5131,'San\'a\'','SN',1237,1), + (5132,'Shabwah','SH',1237,1), + (5133,'Ta\'izz','TA',1237,1), + (5134,'Eastern Cape','EC',1196,1), + (5135,'Free State','FS',1196,1), + (5136,'Gauteng','GT',1196,1), + (5137,'Kwazulu-Natal','NL',1196,1), + (5138,'Mpumalanga','MP',1196,1), + (5139,'Northern Cape','NC',1196,1), + (5140,'Limpopo','NP',1196,1), + (5141,'Western Cape','WC',1196,1), + (5142,'Copperbelt','08',1239,1), + (5143,'Luapula','04',1239,1), + (5144,'Lusaka','09',1239,1), + (5145,'North-Western','06',1239,1), + (5146,'Bulawayo','BU',1240,1), + (5147,'Harare','HA',1240,1), + (5148,'Manicaland','MA',1240,1), + (5149,'Mashonaland Central','MC',1240,1), + (5150,'Mashonaland East','ME',1240,1), + (5151,'Mashonaland West','MW',1240,1), + (5152,'Masvingo','MV',1240,1), + (5153,'Matabeleland North','MN',1240,1), + (5154,'Matabeleland South','MS',1240,1), + (5155,'Midlands','MI',1240,1), + (5156,'South Karelia','SK',1075,1), + (5157,'South Ostrobothnia','SO',1075,1), + (5158,'Etelä-Savo','ES',1075,1), + (5159,'Häme','HH',1075,1), + (5160,'Itä-Uusimaa','IU',1075,1), + (5161,'Kainuu','KA',1075,1), + (5162,'Central Ostrobothnia','CO',1075,1), + (5163,'Central Finland','CF',1075,1), + (5164,'Kymenlaakso','KY',1075,1), + (5165,'Lapland','LA',1075,1), + (5166,'Tampere Region','TR',1075,1), + (5167,'Ostrobothnia','OB',1075,1), + (5168,'North Karelia','NK',1075,1), + (5169,'Northern Ostrobothnia','NO',1075,1), + (5170,'Northern Savo','NS',1075,1), + (5171,'Päijät-Häme','PH',1075,1), + (5172,'Satakunta','SK',1075,1), + (5173,'Uusimaa','UM',1075,1), + (5174,'South-West Finland','SW',1075,1), + (5175,'Ã…land','AL',1075,1), + (5176,'Limburg','LI',1152,1), + (5177,'Central and Western','CW',1098,1), + (5178,'Eastern','EA',1098,1), + (5179,'Southern','SO',1098,1), + (5180,'Wan Chai','WC',1098,1), + (5181,'Kowloon City','KC',1098,1), + (5182,'Kwun Tong','KU',1098,1), + (5183,'Sham Shui Po','SS',1098,1), + (5184,'Wong Tai Sin','WT',1098,1), + (5185,'Yau Tsim Mong','YT',1098,1), + (5186,'Islands','IS',1098,1), + (5187,'Kwai Tsing','KI',1098,1), + (5188,'North','NO',1098,1), + (5189,'Sai Kung','SK',1098,1), + (5190,'Sha Tin','ST',1098,1), + (5191,'Tai Po','TP',1098,1), + (5192,'Tsuen Wan','TW',1098,1), + (5193,'Tuen Mun','TM',1098,1), + (5194,'Yuen Long','YL',1098,1), + (5195,'Manchester','MR',1108,1), + (5196,'Al ManÄmah (Al ‘Āşimah)','13',1016,1), + (5197,'Al JanÅ«bÄ«yah','14',1016,1), + (5199,'Al Wusţá','16',1016,1), + (5200,'Ash ShamÄlÄ«yah','17',1016,1), + (5201,'Jenin','_A',1165,1), + (5202,'Tubas','_B',1165,1), + (5203,'Tulkarm','_C',1165,1), + (5204,'Nablus','_D',1165,1), + (5205,'Qalqilya','_E',1165,1), + (5206,'Salfit','_F',1165,1), + (5207,'Ramallah and Al-Bireh','_G',1165,1), + (5208,'Jericho','_H',1165,1), + (5209,'Jerusalem','_I',1165,1), + (5210,'Bethlehem','_J',1165,1), + (5211,'Hebron','_K',1165,1), + (5212,'North Gaza','_L',1165,1), + (5213,'Gaza','_M',1165,1), + (5214,'Deir el-Balah','_N',1165,1), + (5215,'Khan Yunis','_O',1165,1), + (5216,'Rafah','_P',1165,1), + (5217,'Brussels','BRU',1020,1), + (5218,'Distrito Federal','DIF',1140,1), + (5219,'Taichung City','TXG',1208,1), + (5220,'Kaohsiung City','KHH',1208,1), + (5221,'Taipei City','TPE',1208,1), + (5222,'Chiayi City','CYI',1208,1), + (5223,'Hsinchu City','HSZ',1208,1), + (5224,'Tainan City','TNN',1208,1), + (9000,'North West','NW',1196,1), + (9986,'Tyne and Wear','TWR',1226,1), + (9988,'Greater Manchester','GTM',1226,1), + (9989,'Co Tyrone','TYR',1226,1), + (9990,'West Yorkshire','WYK',1226,1), + (9991,'South Yorkshire','SYK',1226,1), + (9992,'Merseyside','MSY',1226,1), + (9993,'Berkshire','BRK',1226,1), + (9994,'West Midlands','WMD',1226,1), + (9998,'West Glamorgan','WGM',1226,1), + (9999,'London','LON',1226,1), + (10000,'Carbonia-Iglesias','CI',1107,1), + (10001,'Olbia-Tempio','OT',1107,1), + (10002,'Medio Campidano','VS',1107,1), + (10003,'Ogliastra','OG',1107,1), + (10009,'Jura','39',1076,1), + (10010,'Barletta-Andria-Trani','BT',1107,1), + (10011,'Fermo','FM',1107,1), + (10012,'Monza e Brianza','MB',1107,1), + (10013,'Clwyd','CWD',1226,1), + (10015,'South Glamorgan','SGM',1226,1), + (10016,'Artibonite','AR',1094,1), + (10017,'Centre','CE',1094,1), + (10018,'Nippes','NI',1094,1), + (10019,'Nord','ND',1094,1), + (10020,'La Rioja','F',1010,1), + (10021,'Andorra la Vella','07',1005,1), + (10022,'Canillo','02',1005,1), + (10023,'Encamp','03',1005,1), + (10024,'Escaldes-Engordany','08',1005,1), + (10025,'La Massana','04',1005,1), + (10026,'Ordino','05',1005,1), + (10027,'Sant Julia de Loria','06',1005,1), + (10028,'Abaco Islands','AB',1212,1), + (10029,'Andros Island','AN',1212,1), + (10030,'Berry Islands','BR',1212,1), + (10031,'Eleuthera','EL',1212,1), + (10032,'Grand Bahama','GB',1212,1), + (10033,'Rum Cay','RC',1212,1), + (10034,'San Salvador Island','SS',1212,1), + (10035,'Kongo central','01',1050,1), + (10036,'Kwango','02',1050,1), + (10037,'Kwilu','03',1050,1), + (10038,'Mai-Ndombe','04',1050,1), + (10039,'Kasai','05',1050,1), + (10040,'Lulua','06',1050,1), + (10041,'Lomami','07',1050,1), + (10042,'Sankuru','08',1050,1), + (10043,'Ituri','09',1050,1), + (10044,'Haut-Uele','10',1050,1), + (10045,'Tshopo','11',1050,1), + (10046,'Bas-Uele','12',1050,1), + (10047,'Nord-Ubangi','13',1050,1), + (10048,'Mongala','14',1050,1), + (10049,'Sud-Ubangi','15',1050,1), + (10050,'Tshuapa','16',1050,1), + (10051,'Haut-Lomami','17',1050,1), + (10052,'Lualaba','18',1050,1), + (10053,'Haut-Katanga','19',1050,1), + (10054,'Tanganyika','20',1050,1), + (10055,'Toledo','TO',1198,1), + (10056,'Córdoba','CO',1198,1), + (10057,'Metropolitan Manila','MNL',1170,1), + (10058,'La Paz','LP',1097,1), + (10059,'Yinchuan','YN',1045,1), + (10060,'Shizuishan','SZ',1045,1), + (10061,'Wuzhong','WZ',1045,1), + (10062,'Guyuan','GY',1045,1), + (10063,'Zhongwei','ZW',1045,1), + (10064,'Luxembourg','L',1126,1), + (10065,'Aizkraukles novads','002',1119,1), + (10066,'Jaunjelgavas novads','038',1119,1), + (10067,'Pļaviņu novads','072',1119,1), + (10068,'Kokneses novads','046',1119,1), + (10069,'Neretas novads','065',1119,1), + (10070,'SkrÄ«veru novads','092',1119,1), + (10071,'AlÅ«ksnes novads','007',1119,1), + (10072,'Apes novads','009',1119,1), + (10073,'Balvu novads','015',1119,1), + (10074,'Viļakas novads','108',1119,1), + (10075,'Baltinavas novads','014',1119,1), + (10076,'RugÄju novads','082',1119,1), + (10077,'Bauskas novads','016',1119,1), + (10078,'Iecavas novads','034',1119,1), + (10079,'RundÄles novads','083',1119,1), + (10080,'Vecumnieku novads','105',1119,1), + (10081,'CÄ“su novads','022',1119,1), + (10082,'LÄ«gatnes novads','055',1119,1), + (10083,'Amatas novads','008',1119,1), + (10084,'Jaunpiebalgas novads','039',1119,1), + (10085,'Priekuļu novads','075',1119,1), + (10086,'PÄrgaujas novads','070',1119,1), + (10087,'Raunas novads','076',1119,1), + (10088,'Vecpiebalgas novads','104',1119,1), + (10089,'Daugavpils novads','025',1119,1), + (10090,'IlÅ«kstes novads','036',1119,1), + (10091,'Dobeles novads','026',1119,1), + (10092,'Auces novads','010',1119,1), + (10093,'TÄ“rvetes novads','098',1119,1), + (10094,'Gulbenes novads','033',1119,1), + (10095,'Jelgavas novads','041',1119,1), + (10096,'Ozolnieku novads','069',1119,1), + (10097,'JÄ“kabpils novads','042',1119,1), + (10098,'AknÄ«stes novads','004',1119,1), + (10099,'ViesÄ«tes novads','107',1119,1), + (10100,'Krustpils novads','049',1119,1), + (10101,'Salas novads','085',1119,1), + (10102,'KrÄslavas novads','047',1119,1), + (10103,'Dagdas novads','024',1119,1), + (10104,'Aglonas novads','001',1119,1), + (10105,'KuldÄ«gas novads','050',1119,1), + (10106,'Skrundas novads','093',1119,1), + (10107,'Alsungas novads','006',1119,1), + (10108,'Aizputes novads','003',1119,1), + (10109,'Durbes novads','028',1119,1), + (10110,'Grobiņas novads','032',1119,1), + (10111,'PÄvilostas novads','071',1119,1), + (10112,'Priekules novads','074',1119,1), + (10113,'NÄ«cas novads','066',1119,1), + (10114,'Rucavas novads','081',1119,1), + (10115,'Vaiņodes novads','100',1119,1), + (10116,'Limbažu novads','054',1119,1), + (10117,'Alojas novads','005',1119,1), + (10118,'SalacgrÄ«vas novads','086',1119,1), + (10119,'Ludzas novads','058',1119,1), + (10120,'KÄrsavas novads','044',1119,1), + (10121,'Zilupes novads','110',1119,1), + (10122,'Ciblas novads','023',1119,1), + (10123,'Madonas novads','059',1119,1), + (10124,'Cesvaines novads','021',1119,1), + (10125,'LubÄnas novads','057',1119,1), + (10126,'VarakļÄnu novads','102',1119,1), + (10127,'Ä’rgļu novads','030',1119,1), + (10128,'Ogres novads','067',1119,1), + (10129,'IkÅ¡Ä·iles novads','035',1119,1), + (10130,'Ķeguma novads','051',1119,1), + (10131,'LielvÄrdes novads','053',1119,1), + (10132,'Preiļu novads','073',1119,1), + (10133,'LÄ«vÄnu novads','056',1119,1), + (10134,'Riebiņu novads','078',1119,1), + (10135,'VÄrkavas novads','103',1119,1), + (10136,'RÄ“zeknes novads','077',1119,1), + (10137,'ViļÄnu novads','109',1119,1), + (10138,'Baldones novads','013',1119,1), + (10139,'Ķekavas novads','052',1119,1), + (10140,'Olaines novads','068',1119,1), + (10141,'Salaspils novads','087',1119,1), + (10142,'Saulkrastu novads','089',1119,1), + (10143,'Siguldas novads','091',1119,1), + (10144,'InÄukalna novads','037',1119,1), + (10145,'Ä€dažu novads','011',1119,1), + (10146,'BabÄ«tes novads','012',1119,1), + (10147,'Carnikavas novads','020',1119,1), + (10148,'Garkalnes novads','031',1119,1), + (10149,'Krimuldas novads','048',1119,1), + (10150,'MÄlpils novads','061',1119,1), + (10151,'MÄrupes novads','062',1119,1), + (10152,'Ropažu novads','080',1119,1), + (10153,'SÄ“jas novads','090',1119,1), + (10154,'Stopiņu novads','095',1119,1), + (10155,'Saldus novads','088',1119,1), + (10156,'BrocÄ“nu novads','018',1119,1), + (10157,'Talsu novads','097',1119,1), + (10158,'Dundagas novads','027',1119,1), + (10159,'MÄ“rsraga novads','063',1119,1), + (10160,'Rojas novads','079',1119,1), + (10161,'Tukuma novads','099',1119,1), + (10162,'Kandavas novads','043',1119,1), + (10163,'Engures novads','029',1119,1), + (10164,'Jaunpils novads','040',1119,1), + (10165,'Valkas novads','101',1119,1), + (10166,'Smiltenes novads','094',1119,1), + (10167,'StrenÄu novads','096',1119,1), + (10168,'KocÄ“nu novads','045',1119,1), + (10169,'Mazsalacas novads','060',1119,1), + (10170,'RÅ«jienas novads','084',1119,1), + (10171,'BeverÄ«nas novads','017',1119,1), + (10172,'Burtnieku novads','019',1119,1), + (10173,'NaukÅ¡Ä“nu novads','064',1119,1), + (10174,'Ventspils novads','106',1119,1), + (10175,'JÄ“kabpils','JKB',1119,1), + (10176,'Valmiera','VMR',1119,1), + (10177,'Florida','FL',1229,1), + (10178,'Rio Negro','RN',1229,1), + (10179,'San Jose','SJ',1229,1), + (10180,'Plateau','PL',1157,1), + (10181,'Pieria','61',1085,1), + (10182,'Los Rios','LR',1044,1), + (10183,'Arica y Parinacota','AP',1044,1), + (10184,'Amazonas','AMA',1169,1), + (10185,'Kalimantan Tengah','KT',1102,1), + (10186,'Sulawesi Barat','SR',1102,1), + (10187,'Kalimantan Utara','KU',1102,1), + (10188,'Ankaran','86',1193,1), + (10189,'ApaÄe','87',1193,1), + (10190,'Cirkulane','88',1193,1), + (10191,'Gorje','89',1193,1), + (10192,'Kostanjevica na Krki','90',1193,1), + (10193,'Log-Dragomer','91',1193,1), + (10194,'Makole','92',1193,1), + (10195,'Mirna','93',1193,1), + (10196,'Mokronog-Trebelno','94',1193,1), + (10197,'Odranci','95',1193,1), + (10198,'Oplotnica','96',1193,1), + (10199,'Ormož','97',1193,1), + (10200,'Osilnica','98',1193,1), + (10201,'Pesnica','99',1193,1), + (10202,'Piran','100',1193,1), + (10203,'Pivka','101',1193,1), + (10204,'PodÄetrtek','102',1193,1), + (10205,'Podlehnik','103',1193,1), + (10206,'Podvelka','104',1193,1), + (10207,'PoljÄane','105',1193,1), + (10208,'Polzela','106',1193,1), + (10209,'Postojna','107',1193,1), + (10210,'Prebold','108',1193,1), + (10211,'Preddvor','109',1193,1), + (10212,'Prevalje','110',1193,1), + (10213,'Ptuj','111',1193,1), + (10214,'Puconci','112',1193,1), + (10215,'RaÄe-Fram','113',1193,1), + (10216,'RadeÄe','114',1193,1), + (10217,'Radenci','115',1193,1), + (10218,'Radlje ob Dravi','139',1193,1), + (10219,'Radovljica','145',1193,1), + (10220,'Ravne na KoroÅ¡kem','171',1193,1), + (10221,'Razkrižje','172',1193,1), + (10222,'ReÄica ob Savinji','173',1193,1), + (10223,'RenÄe-Vogrsko','174',1193,1), + (10224,'Ribnica','175',1193,1), + (10225,'Ribnica na Pohorju','176',1193,1), + (10226,'RogaÅ¡ka Slatina','177',1193,1), + (10227,'RogaÅ¡ovci','178',1193,1), + (10228,'Rogatec','179',1193,1), + (10229,'RuÅ¡e','180',1193,1), + (10230,'Selnica ob Dravi','195',1193,1), + (10231,'SemiÄ','196',1193,1), + (10232,'Å entrupert','197',1193,1), + (10233,'Sevnica','198',1193,1), + (10234,'Sežana','199',1193,1), + (10235,'Slovenj Gradec','200',1193,1), + (10236,'Slovenska Bistrica','201',1193,1), + (10237,'Slovenske Konjice','202',1193,1), + (10238,'Å marjeÅ¡ke Toplice','203',1193,1), + (10239,'Sodražica','204',1193,1), + (10240,'SolÄava','205',1193,1), + (10241,'SrediÅ¡Äe ob Dravi','206',1193,1), + (10242,'StarÅ¡e','207',1193,1), + (10243,'Straža','208',1193,1), + (10244,'Sveta Trojica v Slovenskih goricah','209',1193,1), + (10245,'Sveti Jurij v Slovenskih goricah','210',1193,1), + (10246,'Sveti Tomaž','211',1193,1), + (10247,'Vodice','212',1193,1), + (10248,'Abkhazia','AB',1081,1), + (10249,'Adjara','AJ',1081,1), + (10250,'Tbilisi','TB',1081,1), + (10251,'Guria','GU',1081,1), + (10252,'Imereti','IM',1081,1), + (10253,'Kakheti','KA',1081,1), + (10254,'Kvemo Kartli','KK',1081,1), + (10255,'Mtskheta-Mtianeti','MM',1081,1), + (10256,'Racha-Lechkhumi and Kvemo Svaneti','RL',1081,1), + (10257,'Samegrelo-Zemo Svaneti','SZ',1081,1), + (10258,'Samtskhe-Javakheti','SJ',1081,1), + (10259,'Shida Kartli','SK',1081,1), + (10260,'Central','C',1074,1), + (10261,'Punjab','PB',1163,1), + (10262,'La Libertad','LI',1066,1), + (10263,'La Paz','PA',1066,1), + (10264,'La Union','UN',1066,1), + (10265,'Littoral','LT',1038,1), + (10266,'Nord-Ouest','NW',1038,1), + (10267,'Telangana','TG',1101,1), + (10268,'Ash Sharqiyah','04',1187,1), + (10269,'Guadeloupe','GP',1076,1), + (10270,'Martinique','MQ',1076,1), + (10271,'Guyane','GF',1076,1), + (10272,'La Réunion','RE',1076,1), + (10273,'Mayotte','YT',1076,1), + (10274,'Baringo','01',1112,1), + (10275,'Bomet','02',1112,1), + (10276,'Bungoma','03',1112,1), + (10277,'Busia','04',1112,1), + (10278,'Elgeyo/Marakwet','05',1112,1), + (10279,'Embu','06',1112,1), + (10280,'Garissa','07',1112,1), + (10281,'Homa Bay','08',1112,1), + (10282,'Isiolo','09',1112,1), + (10283,'Kajiado','10',1112,1), + (10284,'Kakamega','11',1112,1), + (10285,'Kericho','12',1112,1), + (10286,'Kiambu','13',1112,1), + (10287,'Kilifi','14',1112,1), + (10288,'Kirinyaga','15',1112,1), + (10289,'Kisii','16',1112,1), + (10290,'Kisumu','17',1112,1), + (10291,'Kitui','18',1112,1), + (10292,'Kwale','19',1112,1), + (10293,'Laikipia','20',1112,1), + (10294,'Lamu','21',1112,1), + (10295,'Machakos','22',1112,1), + (10296,'Makueni','23',1112,1), + (10297,'Mandera','24',1112,1), + (10298,'Marsabit','25',1112,1), + (10299,'Meru','26',1112,1), + (10300,'Migori','27',1112,1), + (10301,'Mombasa','28',1112,1), + (10302,'Murang\'a','29',1112,1), + (10303,'Nairobi City','30',1112,1), + (10304,'Nakuru','31',1112,1), + (10305,'Nandi','32',1112,1), + (10306,'Narok','33',1112,1), + (10307,'Nyamira','34',1112,1), + (10308,'Nyandarua','35',1112,1), + (10309,'Nyeri','36',1112,1), + (10310,'Samburu','37',1112,1), + (10311,'Siaya','38',1112,1), + (10312,'Taita/Taveta','39',1112,1), + (10313,'Tana River','40',1112,1), + (10314,'Tharaka-Nithi','41',1112,1), + (10315,'Trans Nzoia','42',1112,1), + (10316,'Turkana','43',1112,1), + (10317,'Uasin Gishu','44',1112,1), + (10318,'Vihiga','45',1112,1), + (10319,'Wajir','46',1112,1), + (10320,'West Pokot','47',1112,1), + (10321,'Chandigarh','CH',1101,1), + (10322,'Central','CP',1083,1), + (10323,'Eastern','EP',1083,1), + (10324,'Northern','NP',1083,1), + (10325,'Western','WP',1083,1), + (10326,'Saint Kitts','K',1181,1), + (10327,'Nevis','N',1181,1), + (10328,'Eastern','E',1190,1), + (10329,'Northern','N',1190,1), + (10330,'Southern','S',1190,1), + (10331,'Dushanbe','DU',1209,1), + (10332,'Nohiyahoi Tobei JumhurÃ','RA',1209,1), + (10333,'Wallis-et-Futuna','WF',1076,1), + (10334,'Nouvelle-Calédonie','NC',1076,1), + (10335,'Haute-Marne','52',1076,1), + (10336,'Saint George','03',1009,1), + (10337,'Saint John','04',1009,1), + (10338,'Saint Mary','05',1009,1), + (10339,'Saint Paul','06',1009,1), + (10340,'Saint Peter','07',1009,1), + (10341,'Saint Philip','08',1009,1), + (10342,'Barbuda','10',1009,1), + (10343,'Redonda','11',1009,1), + (10344,'Christ Church','01',1018,1), + (10345,'Saint Andrew','02',1018,1), + (10346,'Saint George','03',1018,1), + (10347,'Saint James','04',1018,1), + (10348,'Saint John','05',1018,1), + (10349,'Saint Joseph','06',1018,1), + (10350,'Saint Lucy','07',1018,1), + (10351,'Saint Michael','08',1018,1), + (10352,'Saint Peter','09',1018,1), + (10353,'Saint Philip','10',1018,1), + (10354,'Saint Thomas','11',1018,1), + (10355,'Estuaire','01',1080,1), + (10356,'Haut-Ogooué','02',1080,1), + (10357,'Moyen-Ogooué','03',1080,1), + (10358,'Ngounié','04',1080,1), + (10359,'Nyanga','05',1080,1), + (10360,'Ogooué-Ivindo','06',1080,1), + (10361,'Ogooué-Lolo','07',1080,1), + (10362,'Ogooué-Maritime','08',1080,1), + (10363,'Woleu-Ntem','09',1080,1), + (10364,'Monmouthshire','MON',1226,1), + (10365,'Antrim and Newtownabbey','ANN',1226,1), + (10366,'Ards and North Down','AND',1226,1), + (10367,'Armagh City, Banbridge and Craigavon','ABC',1226,1), + (10368,'Belfast','BFS',1226,1), + (10369,'Causeway Coast and Glens','CCG',1226,1), + (10370,'Derry City and Strabane','DRS',1226,1), + (10371,'Fermanagh and Omagh','FMO',1226,1), + (10372,'Lisburn and Castlereagh','LBC',1226,1), + (10373,'Mid and East Antrim','MEA',1226,1), + (10374,'Mid Ulster','MUL',1226,1), + (10375,'Newry, Mourne and Down','NMD',1226,1), + (10376,'Bridgend','BGE',1226,1), + (10377,'Caerphilly','CAY',1226,1), + (10378,'Cardiff','CRF',1226,1), + (10379,'Carmarthenshire','CMN',1226,1), + (10380,'Ceredigion','CGN',1226,1), + (10381,'Conwy','CWY',1226,1), + (10382,'Denbighshire','DEN',1226,1), + (10383,'Flintshire','FLN',1226,1), + (10384,'Isle of Anglesey','AGY',1226,1), + (10385,'Merthyr Tydfil','MTY',1226,1), + (10386,'Neath Port Talbot','NTL',1226,1), + (10387,'Newport','NWP',1226,1), + (10388,'Pembrokeshire','PEM',1226,1), + (10389,'Rhondda, Cynon, Taff','RCT',1226,1), + (10390,'Swansea','SWA',1226,1), + (10391,'Torfaen','TOF',1226,1), + (10392,'Wrexham','WRX',1226,1), + (10393,'Sejong','50',1115,1); /*!40000 ALTER TABLE `civicrm_state_province` ENABLE KEYS */; UNLOCK TABLES; @@ -1347,7 +11879,90 @@ UNLOCK TABLES; LOCK TABLES `civicrm_subscription_history` WRITE; /*!40000 ALTER TABLE `civicrm_subscription_history` DISABLE KEYS */; -INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES (1,65,2,'2020-05-13 11:58:29','Admin','Added',NULL),(2,93,2,'2020-06-27 14:04:10','Admin','Added',NULL),(3,24,2,'2020-06-27 05:33:31','Email','Added',NULL),(4,181,2,'2020-06-24 14:23:49','Email','Added',NULL),(5,102,2,'2020-03-26 13:26:29','Admin','Added',NULL),(6,176,2,'2020-08-25 23:00:19','Admin','Added',NULL),(7,14,2,'2020-02-02 10:48:19','Email','Added',NULL),(8,30,2,'2020-03-16 00:23:22','Email','Added',NULL),(9,49,2,'2020-06-22 19:17:51','Admin','Added',NULL),(10,131,2,'2020-05-22 02:11:31','Email','Added',NULL),(11,90,2,'2020-06-19 05:22:17','Email','Added',NULL),(12,106,2,'2020-06-19 16:13:10','Email','Added',NULL),(13,185,2,'2020-12-10 09:31:05','Admin','Added',NULL),(14,157,2,'2020-09-19 02:09:58','Admin','Added',NULL),(15,194,2,'2020-07-20 13:29:59','Admin','Added',NULL),(16,98,2,'2020-12-15 05:37:04','Email','Added',NULL),(17,193,2,'2020-10-21 22:16:13','Email','Added',NULL),(18,201,2,'2020-12-19 19:15:18','Admin','Added',NULL),(19,81,2,'2020-04-04 06:36:27','Email','Added',NULL),(20,88,2,'2020-11-23 13:52:06','Email','Added',NULL),(21,91,2,'2020-12-21 20:23:11','Email','Added',NULL),(22,167,2,'2020-12-07 18:24:22','Email','Added',NULL),(23,95,2,'2020-05-28 22:21:35','Admin','Added',NULL),(24,147,2,'2020-10-28 16:39:50','Admin','Added',NULL),(25,152,2,'2020-04-07 05:07:04','Admin','Added',NULL),(26,64,2,'2020-10-23 01:45:35','Admin','Added',NULL),(27,101,2,'2020-05-04 08:28:48','Email','Added',NULL),(28,109,2,'2020-08-17 15:48:52','Email','Added',NULL),(29,73,2,'2020-07-27 06:37:26','Email','Added',NULL),(30,196,2,'2020-08-13 05:03:28','Admin','Added',NULL),(31,6,2,'2020-07-19 17:23:06','Admin','Added',NULL),(32,199,2,'2020-11-13 21:08:29','Admin','Added',NULL),(33,99,2,'2020-11-12 15:58:09','Email','Added',NULL),(34,10,2,'2020-09-13 18:12:14','Admin','Added',NULL),(35,139,2,'2020-03-31 10:54:53','Email','Added',NULL),(36,82,2,'2020-02-29 13:27:48','Email','Added',NULL),(37,18,2,'2020-02-02 09:43:43','Email','Added',NULL),(38,46,2,'2020-12-02 06:30:50','Email','Added',NULL),(39,110,2,'2020-11-07 00:42:37','Email','Added',NULL),(40,188,2,'2020-04-03 12:42:50','Email','Added',NULL),(41,76,2,'2020-10-03 04:04:09','Email','Added',NULL),(42,23,2,'2020-11-10 10:09:04','Email','Added',NULL),(43,57,2,'2020-04-14 15:30:36','Email','Added',NULL),(44,68,2,'2020-10-04 07:49:22','Email','Added',NULL),(45,180,2,'2020-02-29 11:56:12','Admin','Added',NULL),(46,100,2,'2020-05-25 18:17:59','Email','Added',NULL),(47,52,2,'2020-08-19 21:29:59','Admin','Added',NULL),(48,178,2,'2020-07-04 06:34:04','Admin','Added',NULL),(49,108,2,'2020-08-28 13:55:12','Admin','Added',NULL),(50,171,2,'2020-04-05 10:19:42','Admin','Added',NULL),(51,104,2,'2020-02-09 18:40:19','Admin','Added',NULL),(52,29,2,'2020-02-18 23:17:15','Admin','Added',NULL),(53,195,2,'2020-02-27 20:34:50','Email','Added',NULL),(54,60,2,'2020-11-18 02:21:52','Email','Added',NULL),(55,116,2,'2020-02-27 01:06:06','Admin','Added',NULL),(56,74,2,'2020-08-08 06:54:20','Email','Added',NULL),(57,75,2,'2020-02-01 06:02:45','Email','Added',NULL),(58,173,2,'2020-05-12 02:17:53','Email','Added',NULL),(59,27,2,'2020-02-28 16:47:21','Email','Added',NULL),(60,66,2,'2020-11-10 20:40:32','Email','Added',NULL),(61,164,3,'2020-05-10 03:23:24','Admin','Added',NULL),(62,187,3,'2020-05-08 05:09:00','Admin','Added',NULL),(63,105,3,'2020-09-30 03:28:46','Admin','Added',NULL),(64,143,3,'2020-07-15 23:50:05','Email','Added',NULL),(65,12,3,'2020-09-08 07:34:23','Admin','Added',NULL),(66,192,3,'2020-02-24 23:03:07','Admin','Added',NULL),(67,11,3,'2020-04-14 14:40:21','Email','Added',NULL),(68,39,3,'2020-08-10 02:05:49','Admin','Added',NULL),(69,19,3,'2020-04-27 07:52:24','Admin','Added',NULL),(70,111,3,'2020-09-22 05:33:52','Admin','Added',NULL),(71,16,3,'2020-03-04 02:04:22','Email','Added',NULL),(72,83,3,'2020-06-29 08:55:24','Admin','Added',NULL),(73,172,3,'2020-01-29 06:20:42','Admin','Added',NULL),(74,59,3,'2020-05-13 00:37:41','Admin','Added',NULL),(75,92,3,'2020-04-11 07:30:10','Email','Added',NULL),(76,65,4,'2020-07-07 21:24:09','Email','Added',NULL),(77,30,4,'2020-03-20 15:21:43','Email','Added',NULL),(78,194,4,'2020-06-06 00:11:56','Admin','Added',NULL),(79,167,4,'2020-09-10 05:42:39','Email','Added',NULL),(80,73,4,'2020-10-14 04:10:24','Admin','Added',NULL),(81,82,4,'2020-01-28 19:55:06','Email','Added',NULL),(82,57,4,'2020-06-14 16:56:53','Admin','Added',NULL),(83,171,4,'2020-09-19 03:00:47','Email','Added',NULL); +INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES + (1,31,2,'2021-03-14 03:37:35','Admin','Added',NULL), + (2,138,2,'2020-12-03 20:05:38','Email','Added',NULL), + (3,21,2,'2020-12-30 10:21:23','Email','Added',NULL), + (4,85,2,'2020-12-31 08:06:28','Email','Added',NULL), + (5,128,2,'2021-02-05 02:31:41','Email','Added',NULL), + (6,177,2,'2021-03-22 14:36:54','Admin','Added',NULL), + (7,93,2,'2020-10-14 17:16:25','Admin','Added',NULL), + (8,46,2,'2020-12-05 23:00:26','Admin','Added',NULL), + (9,53,2,'2020-07-04 13:13:25','Email','Added',NULL), + (10,84,2,'2020-09-02 05:49:20','Email','Added',NULL), + (11,89,2,'2020-07-23 00:53:10','Admin','Added',NULL), + (12,14,2,'2021-01-04 06:35:21','Admin','Added',NULL), + (13,191,2,'2021-04-07 23:42:30','Admin','Added',NULL), + (14,50,2,'2020-10-03 15:18:58','Admin','Added',NULL), + (15,5,2,'2021-04-14 17:49:56','Email','Added',NULL), + (16,173,2,'2020-12-05 14:14:37','Email','Added',NULL), + (17,190,2,'2020-09-27 06:48:38','Email','Added',NULL), + (18,178,2,'2021-03-20 23:13:32','Email','Added',NULL), + (19,16,2,'2020-12-24 22:01:52','Email','Added',NULL), + (20,23,2,'2020-08-18 12:12:11','Email','Added',NULL), + (21,199,2,'2021-05-01 03:56:03','Email','Added',NULL), + (22,25,2,'2021-05-19 03:59:07','Admin','Added',NULL), + (23,37,2,'2021-05-20 23:17:42','Admin','Added',NULL), + (24,201,2,'2020-08-22 05:15:41','Admin','Added',NULL), + (25,179,2,'2021-03-06 15:22:52','Email','Added',NULL), + (26,11,2,'2021-05-09 15:25:15','Email','Added',NULL), + (27,20,2,'2020-08-25 04:47:49','Email','Added',NULL), + (28,117,2,'2020-09-03 12:15:23','Email','Added',NULL), + (29,98,2,'2020-09-26 03:18:28','Email','Added',NULL), + (30,57,2,'2021-06-01 22:05:03','Admin','Added',NULL), + (31,125,2,'2020-08-20 00:43:29','Email','Added',NULL), + (32,194,2,'2020-11-28 17:47:44','Email','Added',NULL), + (33,44,2,'2021-04-30 17:23:56','Admin','Added',NULL), + (34,27,2,'2020-09-11 04:33:43','Admin','Added',NULL), + (35,78,2,'2020-06-19 06:28:23','Email','Added',NULL), + (36,146,2,'2020-07-03 13:21:26','Admin','Added',NULL), + (37,90,2,'2020-09-06 19:53:54','Admin','Added',NULL), + (38,45,2,'2020-12-15 13:20:36','Email','Added',NULL), + (39,34,2,'2020-07-29 11:08:30','Email','Added',NULL), + (40,41,2,'2021-05-18 22:04:17','Admin','Added',NULL), + (41,83,2,'2020-11-11 21:47:16','Email','Added',NULL), + (42,18,2,'2021-05-12 10:55:18','Email','Added',NULL), + (43,154,2,'2020-10-06 01:11:27','Email','Added',NULL), + (44,160,2,'2020-07-31 09:14:43','Admin','Added',NULL), + (45,107,2,'2020-08-09 20:46:27','Admin','Added',NULL), + (46,192,2,'2020-11-18 00:46:32','Admin','Added',NULL), + (47,122,2,'2020-11-24 02:25:36','Email','Added',NULL), + (48,144,2,'2021-04-25 10:44:38','Email','Added',NULL), + (49,67,2,'2020-10-13 03:08:51','Admin','Added',NULL), + (50,33,2,'2020-11-14 17:30:17','Admin','Added',NULL), + (51,185,2,'2020-09-04 03:26:13','Admin','Added',NULL), + (52,59,2,'2020-08-13 01:59:00','Email','Added',NULL), + (53,48,2,'2021-03-04 11:11:50','Email','Added',NULL), + (54,81,2,'2020-12-05 03:29:05','Admin','Added',NULL), + (55,149,2,'2020-09-18 14:10:21','Email','Added',NULL), + (56,100,2,'2020-11-30 15:28:43','Email','Added',NULL), + (57,2,2,'2021-02-23 23:46:17','Admin','Added',NULL), + (58,26,2,'2020-08-22 14:30:34','Admin','Added',NULL), + (59,186,2,'2020-08-26 10:38:50','Admin','Added',NULL), + (60,110,2,'2020-11-09 12:51:12','Email','Added',NULL), + (61,71,3,'2020-12-12 11:20:19','Admin','Added',NULL), + (62,163,3,'2020-09-19 17:10:00','Email','Added',NULL), + (63,189,3,'2021-01-12 07:04:55','Admin','Added',NULL), + (64,196,3,'2020-08-26 19:24:21','Admin','Added',NULL), + (65,10,3,'2021-05-02 10:21:25','Email','Added',NULL), + (66,115,3,'2020-06-15 05:12:52','Admin','Added',NULL), + (67,38,3,'2020-09-21 07:11:03','Email','Added',NULL), + (68,156,3,'2020-11-28 20:11:38','Admin','Added',NULL), + (69,103,3,'2021-02-24 13:39:16','Admin','Added',NULL), + (70,68,3,'2020-07-01 21:56:45','Email','Added',NULL), + (71,184,3,'2020-10-08 20:24:10','Email','Added',NULL), + (72,169,3,'2020-07-12 12:52:22','Admin','Added',NULL), + (73,127,3,'2020-10-06 23:57:36','Admin','Added',NULL), + (74,96,3,'2021-03-10 12:20:26','Admin','Added',NULL), + (75,176,3,'2021-05-16 10:02:05','Email','Added',NULL), + (76,31,4,'2020-08-07 18:44:22','Admin','Added',NULL), + (77,46,4,'2020-08-26 09:48:51','Email','Added',NULL), + (78,5,4,'2021-04-01 20:29:06','Email','Added',NULL), + (79,25,4,'2021-04-09 08:25:45','Admin','Added',NULL), + (80,98,4,'2020-09-01 01:45:47','Admin','Added',NULL), + (81,146,4,'2021-02-25 01:48:11','Email','Added',NULL), + (82,154,4,'2020-07-22 08:31:14','Admin','Added',NULL), + (83,33,4,'2020-12-20 20:22:13','Admin','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -1375,7 +11990,12 @@ UNLOCK TABLES; LOCK TABLES `civicrm_tag` WRITE; /*!40000 ALTER TABLE `civicrm_tag` DISABLE KEYS */; -INSERT INTO `civicrm_tag` (`id`, `name`, `description`, `parent_id`, `is_selectable`, `is_reserved`, `is_tagset`, `used_for`, `created_id`, `color`, `created_date`) VALUES (1,'Non-profit','Any not-for-profit organization.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL),(2,'Company','For-profit organization.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL),(3,'Government Entity','Any governmental entity.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL),(4,'Major Donor','High-value supporter of our organization.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL),(5,'Volunteer','Active volunteers.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL); +INSERT INTO `civicrm_tag` (`id`, `name`, `description`, `parent_id`, `is_selectable`, `is_reserved`, `is_tagset`, `used_for`, `created_id`, `color`, `created_date`) VALUES + (1,'Non-profit','Any not-for-profit organization.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL), + (2,'Company','For-profit organization.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL), + (3,'Government Entity','Any governmental entity.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL), + (4,'Major Donor','High-value supporter of our organization.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL), + (5,'Volunteer','Active volunteers.',NULL,1,0,0,'civicrm_contact',NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -1385,7 +12005,15 @@ UNLOCK TABLES; LOCK TABLES `civicrm_tell_friend` WRITE; /*!40000 ALTER TABLE `civicrm_tell_friend` DISABLE KEYS */; -INSERT INTO `civicrm_tell_friend` (`id`, `entity_table`, `entity_id`, `title`, `intro`, `suggested_message`, `general_link`, `thankyou_title`, `thankyou_text`, `is_active`) VALUES (1,'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),(2,'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),(3,'civicrm_event',6,'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),(4,'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),(5,'civicrm_event',3,'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),(6,'civicrm_event',4,'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),(7,'civicrm_event',5,'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),(8,'civicrm_event',2,'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_tell_friend` (`id`, `entity_table`, `entity_id`, `title`, `intro`, `suggested_message`, `general_link`, `thankyou_title`, `thankyou_text`, `is_active`) VALUES + (1,'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), + (2,'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), + (3,'civicrm_event',6,'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), + (4,'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), + (5,'civicrm_event',3,'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), + (6,'civicrm_event',4,'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), + (7,'civicrm_event',5,'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), + (8,'civicrm_event',2,'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); /*!40000 ALTER TABLE `civicrm_tell_friend` ENABLE KEYS */; UNLOCK TABLES; @@ -1398,13 +12026,96 @@ LOCK TABLES `civicrm_timezone` WRITE; /*!40000 ALTER TABLE `civicrm_timezone` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `civicrm_translation` +-- + +LOCK TABLES `civicrm_translation` WRITE; +/*!40000 ALTER TABLE `civicrm_translation` DISABLE KEYS */; +/*!40000 ALTER TABLE `civicrm_translation` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `civicrm_uf_field` -- LOCK TABLES `civicrm_uf_field` WRITE; /*!40000 ALTER TABLE `civicrm_uf_field` DISABLE KEYS */; -INSERT INTO `civicrm_uf_field` (`id`, `uf_group_id`, `field_name`, `is_active`, `is_view`, `is_required`, `weight`, `help_post`, `help_pre`, `visibility`, `in_selector`, `is_searchable`, `location_type_id`, `phone_type_id`, `website_type_id`, `label`, `field_type`, `is_reserved`, `is_multi_summary`) VALUES (1,1,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0),(2,1,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0),(3,1,'street_address',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Street Address (Home)','Contact',0,0),(4,1,'city',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'City (Home)','Contact',0,0),(5,1,'postal_code',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Postal Code (Home)','Contact',0,0),(6,1,'country',1,0,0,6,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Country (Home)','Contact',0,0),(7,1,'state_province',1,0,0,7,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'State (Home)','Contact',0,0),(8,2,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0),(9,2,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0),(10,2,'email',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0),(11,3,'participant_status',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Participant Status','Participant',1,0),(12,4,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0),(13,4,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0),(14,4,'email',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0),(15,5,'organization_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Organization Name','Organization',0,0),(16,5,'email',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0),(17,6,'household_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Household Name','Household',0,0),(18,6,'email',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0),(19,7,'phone',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,1,1,NULL,'Home Phone','Contact',0,0),(20,7,'phone',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,1,2,NULL,'Home Mobile','Contact',0,0),(21,7,'street_address',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Primary Address','Contact',0,0),(22,7,'city',1,0,1,4,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'City','Contact',0,0),(23,7,'state_province',1,0,1,5,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'State','Contact',0,0),(24,7,'postal_code',1,0,1,6,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Postal Code','Contact',0,0),(25,7,'email',1,0,1,7,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Primary Email','Contact',0,0),(26,7,'group',1,0,1,8,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Groups','Contact',0,0),(27,7,'tag',1,0,1,9,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Tags','Contact',0,0),(28,7,'gender_id',1,0,1,10,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Gender','Individual',0,0),(29,7,'birth_date',1,0,1,11,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Date of Birth','Individual',0,0),(30,8,'street_address',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Street Address (Home)','Contact',1,0),(31,8,'city',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'City (Home)','Contact',1,0),(32,8,'postal_code',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Postal Code (Home)','Contact',0,0),(33,8,'country',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Country (Home)','Contact',0,0),(34,8,'state_province',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'State (Home)','Contact',0,0),(35,9,'organization_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Organization Name','Organization',0,0),(36,9,'phone',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,3,1,NULL,'Phone (Main) ','Contact',0,0),(37,9,'email',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Email (Main) ','Contact',0,0),(38,9,'street_address',1,0,1,4,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Street Address','Contact',0,0),(39,9,'city',1,0,1,5,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'City','Contact',0,0),(40,9,'postal_code',1,0,1,6,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Postal Code','Contact',0,0),(41,9,'country',1,0,1,7,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Country','Contact',0,0),(42,9,'state_province',1,0,1,8,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'State/Province','Contact',0,0),(43,10,'financial_type',1,0,0,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Financial Type','Contribution',1,0),(44,10,'total_amount',1,0,0,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Amount','Contribution',1,0),(45,10,'contribution_status_id',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Status','Contribution',1,0),(46,10,'receive_date',1,0,1,4,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Received','Contribution',1,0),(47,10,'contribution_source',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Source','Contribution',0,0),(48,10,'payment_instrument',1,0,0,6,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Payment Method','Contribution',0,0),(49,10,'contribution_check_number',1,0,0,7,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Check Number','Contribution',0,0),(50,10,'send_receipt',1,0,0,8,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Send Receipt','Contribution',0,0),(51,10,'invoice_id',1,0,0,9,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Invoice ID','Contribution',0,0),(52,10,'soft_credit',1,0,0,10,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit','Contribution',0,0),(53,10,'soft_credit_type',1,0,0,11,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit Type','Contribution',0,0),(54,11,'membership_type',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Membership Type','Membership',1,0),(55,11,'membership_join_date',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Member Since','Membership',1,0),(56,11,'membership_start_date',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Start Date','Membership',1,0),(57,11,'membership_end_date',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'End Date','Membership',1,0),(58,11,'membership_source',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Source','Membership',0,0),(59,11,'send_receipt',1,0,0,6,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Send Receipt','Membership',0,0),(60,11,'financial_type',1,0,0,7,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Financial Type','Membership',1,0),(61,11,'total_amount',1,0,0,8,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Amount','Membership',1,0),(62,11,'receive_date',1,0,1,9,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Received','Membership',1,0),(63,11,'payment_instrument',1,0,0,10,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Payment Method','Membership',0,0),(64,11,'contribution_check_number',1,0,0,11,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Check Number','Membership',0,0),(65,11,'contribution_status_id',1,0,1,12,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Payment Status','Membership',1,0),(66,11,'soft_credit',1,0,0,13,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit','Membership',0,0),(67,11,'soft_credit_type',1,0,0,14,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit Type','Membership',0,0),(68,12,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0),(69,12,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0),(70,12,'email',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0),(71,13,'prefix_id',1,0,0,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Individual Prefix','Individual',1,0),(72,13,'first_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',1,0),(73,13,'last_name',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',1,0),(74,13,'email',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Email Address','Contact',1,0); +INSERT INTO `civicrm_uf_field` (`id`, `uf_group_id`, `field_name`, `is_active`, `is_view`, `is_required`, `weight`, `help_post`, `help_pre`, `visibility`, `in_selector`, `is_searchable`, `location_type_id`, `phone_type_id`, `website_type_id`, `label`, `field_type`, `is_reserved`, `is_multi_summary`) VALUES + (1,1,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0), + (2,1,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0), + (3,1,'street_address',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Street Address (Home)','Contact',0,0), + (4,1,'city',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'City (Home)','Contact',0,0), + (5,1,'postal_code',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Postal Code (Home)','Contact',0,0), + (6,1,'country',1,0,0,6,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Country (Home)','Contact',0,0), + (7,1,'state_province',1,0,0,7,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'State (Home)','Contact',0,0), + (8,2,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0), + (9,2,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0), + (10,2,'email',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0), + (11,3,'participant_status',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Participant Status','Participant',1,0), + (12,4,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0), + (13,4,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0), + (14,4,'email',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0), + (15,5,'organization_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Organization Name','Organization',0,0), + (16,5,'email',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0), + (17,6,'household_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Household Name','Household',0,0), + (18,6,'email',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0), + (19,7,'phone',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,1,1,NULL,'Home Phone','Contact',0,0), + (20,7,'phone',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,1,2,NULL,'Home Mobile','Contact',0,0), + (21,7,'street_address',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Primary Address','Contact',0,0), + (22,7,'city',1,0,1,4,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'City','Contact',0,0), + (23,7,'state_province',1,0,1,5,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'State','Contact',0,0), + (24,7,'postal_code',1,0,1,6,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Postal Code','Contact',0,0), + (25,7,'email',1,0,1,7,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Primary Email','Contact',0,0), + (26,7,'group',1,0,1,8,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Groups','Contact',0,0), + (27,7,'tag',1,0,1,9,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Tags','Contact',0,0), + (28,7,'gender_id',1,0,1,10,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Gender','Individual',0,0), + (29,7,'birth_date',1,0,1,11,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Date of Birth','Individual',0,0), + (30,8,'street_address',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Street Address (Home)','Contact',1,0), + (31,8,'city',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'City (Home)','Contact',1,0), + (32,8,'postal_code',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Postal Code (Home)','Contact',0,0), + (33,8,'country',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Country (Home)','Contact',0,0), + (34,8,'state_province',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'State (Home)','Contact',0,0), + (35,9,'organization_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Organization Name','Organization',0,0), + (36,9,'phone',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,3,1,NULL,'Phone (Main) ','Contact',0,0), + (37,9,'email',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Email (Main) ','Contact',0,0), + (38,9,'street_address',1,0,1,4,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Street Address','Contact',0,0), + (39,9,'city',1,0,1,5,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'City','Contact',0,0), + (40,9,'postal_code',1,0,1,6,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Postal Code','Contact',0,0), + (41,9,'country',1,0,1,7,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'Country','Contact',0,0), + (42,9,'state_province',1,0,1,8,NULL,NULL,'User and User Admin Only',0,0,3,NULL,NULL,'State/Province','Contact',0,0), + (43,10,'financial_type',1,0,0,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Financial Type','Contribution',1,0), + (44,10,'total_amount',1,0,0,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Amount','Contribution',1,0), + (45,10,'contribution_status_id',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Status','Contribution',1,0), + (46,10,'receive_date',1,0,1,4,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Received','Contribution',1,0), + (47,10,'contribution_source',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Source','Contribution',0,0), + (48,10,'payment_instrument',1,0,0,6,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Payment Method','Contribution',0,0), + (49,10,'contribution_check_number',1,0,0,7,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Check Number','Contribution',0,0), + (50,10,'send_receipt',1,0,0,8,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Send Receipt','Contribution',0,0), + (51,10,'invoice_id',1,0,0,9,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Invoice ID','Contribution',0,0), + (52,10,'soft_credit',1,0,0,10,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit','Contribution',0,0), + (53,10,'soft_credit_type',1,0,0,11,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit Type','Contribution',0,0), + (54,11,'membership_type',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Membership Type','Membership',1,0), + (55,11,'membership_join_date',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Member Since','Membership',1,0), + (56,11,'membership_start_date',1,0,0,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Start Date','Membership',1,0), + (57,11,'membership_end_date',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'End Date','Membership',1,0), + (58,11,'membership_source',1,0,0,5,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Source','Membership',0,0), + (59,11,'send_receipt',1,0,0,6,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Send Receipt','Membership',0,0), + (60,11,'financial_type',1,0,0,7,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Financial Type','Membership',1,0), + (61,11,'total_amount',1,0,0,8,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Amount','Membership',1,0), + (62,11,'receive_date',1,0,1,9,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Received','Membership',1,0), + (63,11,'payment_instrument',1,0,0,10,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Payment Method','Membership',0,0), + (64,11,'contribution_check_number',1,0,0,11,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Check Number','Membership',0,0), + (65,11,'contribution_status_id',1,0,1,12,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Payment Status','Membership',1,0), + (66,11,'soft_credit',1,0,0,13,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit','Membership',0,0), + (67,11,'soft_credit_type',1,0,0,14,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Soft Credit Type','Membership',0,0), + (68,12,'first_name',1,0,1,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',0,0), + (69,12,'last_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',0,0), + (70,12,'email',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Email Address','Contact',0,0), + (71,13,'prefix_id',1,0,0,1,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Individual Prefix','Individual',1,0), + (72,13,'first_name',1,0,1,2,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'First Name','Individual',1,0), + (73,13,'last_name',1,0,1,3,NULL,NULL,'User and User Admin Only',0,0,NULL,NULL,NULL,'Last Name','Individual',1,0), + (74,13,'email',1,0,0,4,NULL,NULL,'User and User Admin Only',0,0,1,NULL,NULL,'Email Address','Contact',1,0); /*!40000 ALTER TABLE `civicrm_uf_field` ENABLE KEYS */; UNLOCK TABLES; @@ -1414,7 +12125,20 @@ UNLOCK TABLES; LOCK TABLES `civicrm_uf_group` WRITE; /*!40000 ALTER TABLE `civicrm_uf_group` DISABLE KEYS */; -INSERT INTO `civicrm_uf_group` (`id`, `is_active`, `group_type`, `title`, `frontend_title`, `description`, `help_pre`, `help_post`, `limit_listings_group_id`, `post_URL`, `add_to_group_id`, `add_captcha`, `is_map`, `is_edit_link`, `is_uf_link`, `is_update_dupe`, `cancel_URL`, `is_cms_user`, `notify`, `is_reserved`, `name`, `created_id`, `created_date`, `is_proximity_search`, `cancel_button_text`, `submit_button_text`, `add_cancel_button`) VALUES (1,1,'Individual,Contact','Name and Address',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,0,'name_and_address',NULL,NULL,0,NULL,NULL,1),(2,1,'Individual,Contact','Supporter Profile',NULL,NULL,NULL,'<p><strong>The information you provide will NOT be shared with any third party organisations.</strong></p><p>Thank you for getting involved in our campaign!</p>',NULL,NULL,NULL,0,0,0,0,0,NULL,2,NULL,0,'supporter_profile',NULL,NULL,0,NULL,NULL,1),(3,1,'Participant','Participant Status',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'participant_status',NULL,NULL,0,NULL,NULL,1),(4,1,'Individual,Contact','New Individual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'new_individual',NULL,NULL,0,NULL,NULL,1),(5,1,'Organization,Contact','New Organization',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'new_organization',NULL,NULL,0,NULL,NULL,1),(6,1,'Household,Contact','New Household',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'new_household',NULL,NULL,0,NULL,NULL,1),(7,1,'Contact','Summary Overlay',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'summary_overlay',NULL,NULL,0,NULL,NULL,1),(8,1,'Contact','Shared Address',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'shared_address',NULL,NULL,0,NULL,NULL,1),(9,1,'Contact,Organization','On Behalf Of Organization',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'on_behalf_organization',NULL,NULL,0,NULL,NULL,1),(10,1,'Contribution','Contribution Bulk Entry',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'contribution_batch_entry',NULL,NULL,0,NULL,NULL,1),(11,1,'Membership','Membership Bulk Entry',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'membership_batch_entry',NULL,NULL,0,NULL,NULL,1),(12,1,'Individual,Contact','Your Registration Info',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,0,'event_registration',NULL,NULL,0,NULL,NULL,1),(13,1,'Individual,Contact','Honoree Individual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'honoree_individual',NULL,NULL,0,NULL,NULL,1); +INSERT INTO `civicrm_uf_group` (`id`, `is_active`, `group_type`, `title`, `frontend_title`, `description`, `help_pre`, `help_post`, `limit_listings_group_id`, `post_URL`, `add_to_group_id`, `add_captcha`, `is_map`, `is_edit_link`, `is_uf_link`, `is_update_dupe`, `cancel_URL`, `is_cms_user`, `notify`, `is_reserved`, `name`, `created_id`, `created_date`, `is_proximity_search`, `cancel_button_text`, `submit_button_text`, `add_cancel_button`) VALUES + (1,1,'Individual,Contact','Name and Address',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,0,'name_and_address',NULL,NULL,0,NULL,NULL,1), + (2,1,'Individual,Contact','Supporter Profile',NULL,NULL,NULL,'<p><strong>The information you provide will NOT be shared with any third party organisations.</strong></p><p>Thank you for getting involved in our campaign!</p>',NULL,NULL,NULL,0,0,0,0,0,NULL,2,NULL,0,'supporter_profile',NULL,NULL,0,NULL,NULL,1), + (3,1,'Participant','Participant Status',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'participant_status',NULL,NULL,0,NULL,NULL,1), + (4,1,'Individual,Contact','New Individual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'new_individual',NULL,NULL,0,NULL,NULL,1), + (5,1,'Organization,Contact','New Organization',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'new_organization',NULL,NULL,0,NULL,NULL,1), + (6,1,'Household,Contact','New Household',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'new_household',NULL,NULL,0,NULL,NULL,1), + (7,1,'Contact','Summary Overlay',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'summary_overlay',NULL,NULL,0,NULL,NULL,1), + (8,1,'Contact','Shared Address',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'shared_address',NULL,NULL,0,NULL,NULL,1), + (9,1,'Contact,Organization','On Behalf Of Organization',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'on_behalf_organization',NULL,NULL,0,NULL,NULL,1), + (10,1,'Contribution','Contribution Bulk Entry',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'contribution_batch_entry',NULL,NULL,0,NULL,NULL,1), + (11,1,'Membership','Membership Bulk Entry',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'membership_batch_entry',NULL,NULL,0,NULL,NULL,1), + (12,1,'Individual,Contact','Your Registration Info',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,0,'event_registration',NULL,NULL,0,NULL,NULL,1), + (13,1,'Individual,Contact','Honoree Individual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0,NULL,0,NULL,1,'honoree_individual',NULL,NULL,0,NULL,NULL,1); /*!40000 ALTER TABLE `civicrm_uf_group` ENABLE KEYS */; UNLOCK TABLES; @@ -1424,7 +12148,18 @@ UNLOCK TABLES; LOCK TABLES `civicrm_uf_join` WRITE; /*!40000 ALTER TABLE `civicrm_uf_join` DISABLE KEYS */; -INSERT INTO `civicrm_uf_join` (`id`, `is_active`, `module`, `entity_table`, `entity_id`, `weight`, `uf_group_id`, `module_data`) VALUES (1,1,'User Registration',NULL,NULL,1,1,NULL),(2,1,'User Account',NULL,NULL,1,1,NULL),(3,1,'Profile',NULL,NULL,1,1,NULL),(4,1,'Profile',NULL,NULL,2,2,NULL),(5,1,'Profile',NULL,NULL,11,12,NULL),(6,1,'CiviEvent','civicrm_event',6,1,12,NULL),(7,1,'CiviEvent','civicrm_event',1,1,12,NULL),(8,1,'CiviEvent','civicrm_event',3,1,12,NULL),(9,1,'CiviEvent','civicrm_event',4,1,12,NULL),(10,1,'CiviEvent','civicrm_event',5,1,12,NULL),(11,1,'CiviEvent','civicrm_event',2,1,12,NULL); +INSERT INTO `civicrm_uf_join` (`id`, `is_active`, `module`, `entity_table`, `entity_id`, `weight`, `uf_group_id`, `module_data`) VALUES + (1,1,'User Registration',NULL,NULL,1,1,NULL), + (2,1,'User Account',NULL,NULL,1,1,NULL), + (3,1,'Profile',NULL,NULL,1,1,NULL), + (4,1,'Profile',NULL,NULL,2,2,NULL), + (5,1,'Profile',NULL,NULL,11,12,NULL), + (6,1,'CiviEvent','civicrm_event',6,1,12,NULL), + (7,1,'CiviEvent','civicrm_event',1,1,12,NULL), + (8,1,'CiviEvent','civicrm_event',3,1,12,NULL), + (9,1,'CiviEvent','civicrm_event',4,1,12,NULL), + (10,1,'CiviEvent','civicrm_event',5,1,12,NULL), + (11,1,'CiviEvent','civicrm_event',2,1,12,NULL); /*!40000 ALTER TABLE `civicrm_uf_join` ENABLE KEYS */; UNLOCK TABLES; @@ -1443,7 +12178,21 @@ UNLOCK TABLES; LOCK TABLES `civicrm_website` WRITE; /*!40000 ALTER TABLE `civicrm_website` DISABLE KEYS */; -INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES (1,141,'http://unitedadvocacyalliance.org',1),(2,55,'http://pinewellness.org',1),(3,47,'http://greenschool.org',1),(4,48,'http://ruralassociation.org',1),(5,44,'http://illinoisculturefund.org',1),(6,87,'http://maineducationcenter.org',1),(7,21,'http://vnsustainabilityacademy.org',1),(8,123,'http://dracutsoftwarecollective.org',1),(9,113,'http://collegedevelopmentfund.org',1),(10,115,'http://pinesystems.org',1),(11,130,'http://blanchardaction.org',1),(12,62,'http://floridasportsfellowship.org',1),(13,45,'http://kansashealth.org',1),(14,197,'http://kansasartsacademy.org',1),(15,89,'http://hubbardeducation.org',1),(16,149,'http://bayculture.org',1); +INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES + (1,157,'http://vndevelopmentservices.org',1), + (2,91,'http://communityempowermenttrust.org',1), + (3,13,'http://sacramentosportsacademy.org',1), + (4,32,'http://ruralfamilyfund.org',1), + (5,6,'http://vnsoftwarefellowship.org',1), + (6,168,'http://ruralsoftware.org',1), + (7,36,'http://ccagriculturealliance.org',1), + (8,4,'http://mlkingarts.org',1), + (9,79,'http://nypeaceacademy.org',1), + (10,61,'http://klsustainabilityfund.org',1), + (11,19,'http://hsempowermentsystems.org',1), + (12,72,'http://bellmawrfund.org',1), + (13,181,'http://unitedsoftwaresystems.org',1), + (14,174,'http://unitedagriculturecenter.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -1462,20 +12211,25 @@ UNLOCK TABLES; LOCK TABLES `civicrm_worldregion` WRITE; /*!40000 ALTER TABLE `civicrm_worldregion` DISABLE KEYS */; -INSERT INTO `civicrm_worldregion` (`id`, `name`) VALUES (1,'Europe and Central Asia'),(2,'America South, Central, North and Caribbean'),(3,'Middle East and North Africa'),(4,'Asia-Pacific'),(5,'Africa West, East, Central and Southern'),(99,'unassigned'); +INSERT INTO `civicrm_worldregion` (`id`, `name`) VALUES + (1,'Europe and Central Asia'), + (2,'America South, Central, North and Caribbean'), + (3,'Middle East and North Africa'), + (4,'Asia-Pacific'), + (5,'Africa West, East, Central and Southern'), + (99,'unassigned'); /*!40000 ALTER TABLE `civicrm_worldregion` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2021-01-12 9:04:52 +-- Dump completed on 2021-06-10 20:47:13 -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | @@ -1496,7 +12250,8 @@ UNLOCK TABLES; -- * create custom group -- * -- *******************************************************/ -INSERT INTO `civicrm_custom_group` (`name`, `title`, `extends`, `style`, `collapse_display`, `help_pre`, `weight`, `is_active`, `table_name`, `is_multiple`) VALUES ( 'constituent_information', 'Constituent Information', 'Individual', 'Inline', 1, 'Please enter additional constituent information as data becomes available for this contact.', 1, 1,'civicrm_value_constituent_information_1', 0); +INSERT INTO `civicrm_custom_group` (`name`, `title`, `extends`, `style`, `collapse_display`, `help_pre`, `weight`, `is_active`, `table_name`, `is_multiple`) VALUES + ( 'constituent_information', 'Constituent Information', 'Individual', 'Inline', 1, 'Please enter additional constituent information as data becomes available for this contact.', 1, 1,'civicrm_value_constituent_information_1', 0); @@ -1505,7 +12260,9 @@ INSERT INTO `civicrm_custom_group` (`name`, `title`, `extends`, `style`, `collap -- * create option group for storing custom options for custom fields -- * -- *******************************************************/ -INSERT INTO `civicrm_option_group` (`name`, `title`, `is_reserved`, `is_active`) VALUES ('custom_most_important_issue', 'Most Important Issue', 0, 1), ( 'custom_marital_status', 'Marital Status', 1, 1); +INSERT INTO `civicrm_option_group` (`name`, `title`, `is_reserved`, `is_active`) VALUES + ('custom_most_important_issue', 'Most Important Issue', 0, 1), + ( 'custom_marital_status', 'Marital Status', 1, 1); SELECT @option_most_id := max(id) from civicrm_option_group where name = 'custom_most_important_issue'; SELECT @option_marital_id := max(id) from civicrm_option_group where name = 'custom_marital_status'; @@ -1517,7 +12274,15 @@ SELECT @option_marital_id := max(id) from civicrm_option_group where name = 'cus -- * create option values (custom options for custom fields) -- * -- *******************************************************/ -INSERT INTO `civicrm_option_value` (`option_group_id`, `label`, `value`, `weight`, `is_active`, `is_default`) VALUES (@option_most_id , 'Education', 'Edu', 1, 1,0), (@option_most_id , 'Environment', 'Env', 2, 1,0), (@option_most_id , 'Social Justice', 'SocJus', 3, 1,0),(@option_marital_id, 'Single', 'S', 1, 1,0),(@option_marital_id, 'Married', 'M', 2, 1,0), (@option_marital_id, 'Domestic Partner', 'D', 3, 1,0), (@option_marital_id, 'Widowed', 'W', 4, 1,0), (@option_marital_id, 'Other', 'O', 5, 1,0); +INSERT INTO `civicrm_option_value` (`option_group_id`, `label`, `value`, `weight`, `is_active`, `is_default`) VALUES + (@option_most_id , 'Education', 'Edu', 1, 1,0), + (@option_most_id , 'Environment', 'Env', 2, 1,0), + (@option_most_id , 'Social Justice', 'SocJus', 3, 1,0), + (@option_marital_id, 'Single', 'S', 1, 1,0), + (@option_marital_id, 'Married', 'M', 2, 1,0), + (@option_marital_id, 'Domestic Partner', 'D', 3, 1,0), + (@option_marital_id, 'Widowed', 'W', 4, 1,0), + (@option_marital_id, 'Other', 'O', 5, 1,0); -- /******************************************************* @@ -1525,7 +12290,10 @@ INSERT INTO `civicrm_option_value` (`option_group_id`, `label`, `value`, `weight -- * create custom field -- * -- *******************************************************/ -INSERT INTO `civicrm_custom_field` (`custom_group_id`, `name`, `label`, `data_type`, `html_type`, `text_length`, `is_required`, `weight`, `help_post`, `is_active`, `is_view`, `is_searchable`, `options_per_line`, `column_name`, `option_group_id`, `start_date_years`, `end_date_years`, `date_format`, `time_format` ) VALUES (1, 'Most_Important_Issue', 'Most Important Issue', 'String', 'Radio', 255, 0, 1, '', 1, 0, 1, NULL, 'most_important_issue_1', @option_most_id, NULL, NULL, NULL, NULL), (1, 'Marital_Status', 'Marital Status', 'String', 'Select', 255, 0, 2, '', 1, 0, 1, NULL, 'marital_status_2', @option_marital_id, NULL, NULL, NULL, NULL), (1, 'Marriage_Date', 'Marriage Date', 'Date', 'Select Date', NULL, 0, 3, '', 1, 0, 1, NULL, 'marriage_date_3', NULL, 30, 0, 'mm/dd/yy', 0); +INSERT INTO `civicrm_custom_field` (`custom_group_id`, `name`, `label`, `data_type`, `html_type`, `text_length`, `is_required`, `weight`, `help_post`, `is_active`, `is_view`, `is_searchable`, `options_per_line`, `column_name`, `option_group_id`, `start_date_years`, `end_date_years`, `date_format`, `time_format` ) VALUES + (1, 'Most_Important_Issue', 'Most Important Issue', 'String', 'Radio', 255, 0, 1, '', 1, 0, 1, NULL, 'most_important_issue_1', @option_most_id, NULL, NULL, NULL, NULL), + (1, 'Marital_Status', 'Marital Status', 'String', 'Select', 255, 0, 2, '', 1, 0, 1, NULL, 'marital_status_2', @option_marital_id, NULL, NULL, NULL, NULL), + (1, 'Marriage_Date', 'Marriage Date', 'Date', 'Select Date', NULL, 0, 3, '', 1, 0, 1, NULL, 'marriage_date_3', NULL, 30, 0, 'mm/dd/yy', 0); -- /******************************************************* @@ -1543,41 +12311,61 @@ CREATE TABLE `civicrm_value_constituent_information_1` (`id` int(10) unsigned NO INSERT INTO `civicrm_option_group` (`name`, `title`, `is_reserved`, `is_active`) VALUES ('soup_selection', 'Soup Selection', 0, 1); SELECT @ogid := MAX(id) FROM civicrm_option_group; -INSERT INTO civicrm_custom_group ( name, title, extends, extends_entity_column_id, extends_entity_column_value, style, is_active, table_name) VALUES ('Food_Preference', 'Food Preference', 'Participant', 2, '1', 'Inline', 1, 'civicrm_value_food_preference_2'); +INSERT INTO civicrm_custom_group ( name, title, extends, extends_entity_column_id, extends_entity_column_value, style, is_active, table_name) VALUES + ('Food_Preference', 'Food Preference', 'Participant', 2, '1', 'Inline', 1, 'civicrm_value_food_preference_2'); SELECT @cgid := MAX(id) FROM civicrm_custom_group; INSERT INTO civicrm_custom_field ( custom_group_id, label, name, data_type, html_type, is_active, text_length, note_columns, note_rows, column_name, option_group_id, is_searchable ) VALUES ( @cgid, 'Soup Selection', 'Soup_Selection', 'String', 'Radio', 1, 255, 60, 4, 'soup_selection_4', @ogid, 1); -INSERT INTO civicrm_option_value ( option_group_id, label, value, name, weight ) VALUES ( @ogid, 'Bean Broth', 'bean', 'Bean_Broth', 1 ), ( @ogid, 'Chicken Combo', 'chicken', 'Chicken_Combo', 2), ( @ogid, 'Salmon Stew', 'salmon', 'Salmon_Stew', 3); +INSERT INTO civicrm_option_value ( option_group_id, label, value, name, weight ) VALUES ( @ogid, 'Bean Broth', 'bean', 'Bean_Broth', 1 ), + ( @ogid, 'Chicken Combo', 'chicken', 'Chicken_Combo', 2), + ( @ogid, 'Salmon Stew', 'salmon', 'Salmon_Stew', 3); DROP TABLE IF EXISTS `civicrm_value_food_preference_2`; CREATE TABLE civicrm_value_food_preference_2 ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Default MySQL primary key', entity_id INT(10) UNSIGNED NOT NULL COMMENT 'Table that this extends', soup_selection_4 VARCHAR(255) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY unique_entity_id (entity_id), CONSTRAINT `FK_civicrm_value_food_preference_2_entity_id` FOREIGN KEY (`entity_id`) REFERENCES `civicrm_participant` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -- Donors’ custom data -INSERT INTO `civicrm_custom_group` (`name`, `title`, `extends`, `extends_entity_column_id`, `extends_entity_column_value`, `style`, `is_active`, `table_name`) VALUES ('Donor_Information', 'Donor Information', 'Contribution', NULL, NULL, 'Inline', 1, 'civicrm_value_donor_information_3'); +INSERT INTO `civicrm_custom_group` (`name`, `title`, `extends`, `extends_entity_column_id`, `extends_entity_column_value`, `style`, `is_active`, `table_name`) VALUES + ('Donor_Information', 'Donor Information', 'Contribution', NULL, NULL, 'Inline', 1, 'civicrm_value_donor_information_3'); SELECT @cgid_contribution := MAX(id) FROM civicrm_custom_group; -INSERT INTO `civicrm_option_group` (`name`, `title`, `is_reserved`, `is_active`) VALUES ('how_long_have_you_been_a_donor', 'How long have you been a donor?', 0, 1); +INSERT INTO `civicrm_option_group` (`name`, `title`, `is_reserved`, `is_active`) VALUES + ('how_long_have_you_been_a_donor', 'How long have you been a donor?', 0, 1); SELECT @ogid_contribution := MAX(id) FROM civicrm_option_group; -INSERT INTO `civicrm_custom_field` (`custom_group_id`, `label`, `name`, `data_type`, `html_type`, `is_active`, `text_length`,`note_columns`, `note_rows`, `column_name`, `option_group_id`) VALUES (@cgid_contribution, 'Known areas of interest', 'Known_areas_of_interest', 'Memo', 'TextArea', 1, 255, 60, 4, 'known_areas_of_interest_5', NULL),(@cgid_contribution, 'How long have you been a donor?', 'How_long_have_you_been_a_donor_', 'String', 'Radio', 1, 255, 60, 4, 'how_long_have_you_been_a_donor_6', @ogid_contribution); +INSERT INTO `civicrm_custom_field` (`custom_group_id`, `label`, `name`, `data_type`, `html_type`, `is_active`, `text_length`,`note_columns`, `note_rows`, `column_name`, `option_group_id`) VALUES + (@cgid_contribution, 'Known areas of interest', 'Known_areas_of_interest', 'Memo', 'TextArea', 1, 255, 60, 4, 'known_areas_of_interest_5', NULL), + (@cgid_contribution, 'How long have you been a donor?', 'How_long_have_you_been_a_donor_', 'String', 'Radio', 1, 255, 60, 4, 'how_long_have_you_been_a_donor_6', @ogid_contribution); -INSERT INTO `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `weight`) VALUES (@ogid_contribution, 'Less than 1 year', '1', 'Less_than_1_year', 1), (@ogid_contribution, '1-3 years', '2', '1_3_years', 2),(@ogid_contribution, '4-6 years', '3', '4_6_years', 3),(@ogid_contribution, '7-9 years', '4', '7_9_years', 4),(@ogid_contribution, 'More than 9 years', '5', 'More_than_9_years', 5); +INSERT INTO `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `weight`) VALUES + (@ogid_contribution, 'Less than 1 year', '1', 'Less_than_1_year', 1), + (@ogid_contribution, '1-3 years', '2', '1_3_years', 2), + (@ogid_contribution, '4-6 years', '3', '4_6_years', 3), + (@ogid_contribution, '7-9 years', '4', '7_9_years', 4), + (@ogid_contribution, 'More than 9 years', '5', 'More_than_9_years', 5); DROP TABLE IF EXISTS `civicrm_value_donor_information_3`; CREATE TABLE IF NOT EXISTS `civicrm_value_donor_information_3` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Default MySQL primary key', `entity_id` int(10) unsigned NOT NULL COMMENT 'Table that this extends', `known_areas_of_interest_5` text COLLATE utf8mb4_unicode_ci, `how_long_have_you_been_a_donor_6` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `unique_entity_id` (`entity_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; -INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES (1, 'Test Processor', '', 7, 1, 1, 0, 'dummy', NULL, NULL, 'http://dummy.com', NULL, 'http://dummyrecur.com', NULL, NULL, 'Payment_Dummy', 1, 1, 1); -INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES (1, 'Test Processor', '', 7, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Payment_Dummy', 1, 1, 1); +SELECT @pptype := id FROM civicrm_payment_processor_type WHERE name='Dummy'; + +INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES + (1, 'Test Processor', '', @pptype, 1, 1, 0, 'dummy', NULL, NULL, 'http://dummy.com', NULL, 'http://dummyrecur.com', NULL, NULL, 'Payment_Dummy', 1, 1, 1); +INSERT INTO `civicrm_payment_processor` (`domain_id`, `name`, `description`, `payment_processor_type_id`, `is_active`, `is_default`, `is_test`, `user_name`, `password`, `signature`, `url_site`, `url_api`, `url_recur`, `url_button`, `subject`, `class_name`, `billing_mode`, `is_recur`, `payment_type`) VALUES + (1, 'Test Processor', '', @pptype, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Payment_Dummy', 1, 1, 1); SELECT @dp := max(id) from civicrm_payment_processor where name = 'Test Processor' AND is_test = 0; SELECT @dpTest := max(id) from civicrm_payment_processor where name = 'Test Processor' AND is_test = 1; -INSERT INTO `civicrm_entity_financial_account` (`entity_table`, `entity_id`, `account_relationship`, `financial_account_id`) VALUES ('civicrm_payment_processor', @dp, 6, 12); -INSERT INTO `civicrm_entity_financial_account` (`entity_table`, `entity_id`, `account_relationship`, `financial_account_id`) VALUES ('civicrm_payment_processor', @dpTest, 6, 12); +INSERT INTO `civicrm_entity_financial_account` (`entity_table`, `entity_id`, `account_relationship`, `financial_account_id`) VALUES + ('civicrm_payment_processor', @dp, 6, 12); +INSERT INTO `civicrm_entity_financial_account` (`entity_table`, `entity_id`, `account_relationship`, `financial_account_id`) VALUES + ('civicrm_payment_processor', @dpTest, 6, 12); UPDATE `civicrm_contribution_page` SET payment_processor = @dp; UPDATE `civicrm_event` SET payment_processor = @dp; + +UPDATE `civicrm_financial_trxn` SET payment_processor_id = @dp WHERE trxn_id IS NOT NULL; diff --git a/civicrm/templates/CRM/Activity/Form/Activity.tpl b/civicrm/templates/CRM/Activity/Form/Activity.tpl index a6f20a3450..9814055fcd 100644 --- a/civicrm/templates/CRM/Activity/Form/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Form/Activity.tpl @@ -63,7 +63,7 @@ </td> </tr> - {if $form.separation} + {if !empty($form.separation)} <tr class="crm-activity-form-block-separation crm-is-multi-activity-wrapper"> <td class="label">{$form.separation.label}</td> <td>{$form.separation.html} {help id="separation"}</td> @@ -91,7 +91,7 @@ </td> </tr> - {if $activityTypeFile} + {if !empty($activityTypeFile)} {include file="CRM/$crmDir/Form/Activity/$activityTypeFile.tpl"} {/if} @@ -104,7 +104,7 @@ campaignTrClass="crm-activity-form-block-campaign_id"} {* build engagement level CRM-7775 *} - {if $buildEngagementLevel} + {if !empty($buildEngagementLevel)} <tr class="crm-activity-form-block-engagement_level"> <td class="label">{$form.engagement_level.label}</td> <td class="view-value">{$form.engagement_level.html}</td> @@ -151,12 +151,12 @@ <tr class="crm-activity-form-block-priority_id"> <td class="label">{$form.priority_id.label}</td><td class="view-value">{$form.priority_id.html}</td> </tr> - {if $surveyActivity } + {if !empty($surveyActivity) } <tr class="crm-activity-form-block-result"> <td class="label">{$form.result.label}</td><td class="view-value">{$form.result.html}</td> </tr> {/if} - {if $form.tag.html} + {if !empty($form.tag.html)} <tr class="crm-activity-form-block-tag"> <td class="label">{$form.tag.label}</td> <td class="view-value"> @@ -165,7 +165,7 @@ </tr> {/if} - {if $tagsetInfo.activity} + {if !empty($tagsetInfo.activity)} <tr class="crm-activity-form-block-tag_set"> {include file="CRM/common/Tagset.tpl" tagsetType='activity' tableLayout=true} </tr> diff --git a/civicrm/templates/CRM/Admin/Form/ContactType.tpl b/civicrm/templates/CRM/Admin/Form/ContactType.tpl index 90c1962d33..4ecf601650 100644 --- a/civicrm/templates/CRM/Admin/Form/ContactType.tpl +++ b/civicrm/templates/CRM/Admin/Form/ContactType.tpl @@ -29,7 +29,7 @@ </tr> <tr class="crm-contact-type-form-block-parent_id"> <td class="label">{$form.parent_id.label}</td> - {if $is_parent OR $action EQ 1} + {if !empty($is_parent) OR $action EQ 1} <td>{$form.parent_id.html}</td> {else} <td>{ts}{$contactTypeName}{/ts} {ts}(built-in){/ts}</td> diff --git a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl index 537e567516..34208cc2c4 100644 --- a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl @@ -8,128 +8,126 @@ +--------------------------------------------------------------------+ *} {* this template is used for adding/editing/deleting Message Templates *} -{capture assign=tokenDocsRepeated}{docURL page="user/common-workflows/tokens-and-mail-merge" text="token documentation"}{/capture} {if $action neq 8} -<div class="help"> + <div class="help"> {ts}Use this form to add or edit re-usable message templates.{/ts} {help id="id-intro" file="CRM/Admin/Page/MessageTemplates.hlp"} -</div> + </div> {/if} <h3>{if $action eq 1}{ts}New Message Template{/ts}{elseif $action eq 2}{ts}Edit Message Template{/ts}{else}{ts}Delete Message Template{/ts}{/if}</h3> <div class="crm-block crm-form-block"> -<div class="form-item" id="message_templates"> -{if $action eq 8} - <div class="messages status no-popup"> - {icon icon="fa-info-circle"}{/icon} - {ts 1=$msg_title|escape}Do you want to delete the message template '%1'?{/ts} - </div> -{else} - <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> - <table class="form-layout-compressed"> + <div class="form-item" id="message_templates"> + {if $action eq 8} + <div class="messages status no-popup"> + {icon icon="fa-info-circle"}{/icon} + {ts 1=$msg_title|escape}Do you want to delete the message template '%1'?{/ts} + </div> + {else} + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> + <table class="form-layout-compressed"> <tr> - <td class="label-left">{$form.msg_title.label}</td> - <td>{$form.msg_title.html} - <br /><span class="description html-adjust">{ts}Descriptive title of message - used for template selection.{/ts}</span> - </td> + <td class="label-left">{$form.msg_title.label}</td> + <td>{$form.msg_title.html} + <br /><span class="description html-adjust">{ts}Descriptive title of message - used for template selection.{/ts}</span> + </td> </tr> <tr> - <td class="label-left">{$form.file_type.label}</td> - <td>{$form.file_type.html} - <br /><span class="description html-adjust">{ts}Compose a message on-screen for general use in emails or document output, or upload a pre-composed document for mail-merge.{/ts}</span> - </td> + <td class="label-left">{$form.file_type.label}</td> + <td>{$form.file_type.html} + <br /><span class="description html-adjust">{ts}Compose a message on-screen for general use in emails or document output, or upload a pre-composed document for mail-merge.{/ts}</span> + </td> </tr> <tr> - <td class="label-left">{$form.msg_subject.label}</td> - <td> - {$form.msg_subject.html|crmAddClass:huge} - <input class="crm-token-selector big" data-field="msg_subject" /> - {help id="id-token-subject" tplFile=$tplFile isAdmin=$isAdmin file="CRM/Contact/Form/Task/Email.hlp"} - <br /><span class="description">{ts}Subject for email message.{/ts} {ts 1=$tokenDocsRepeated}Tokens may be included (%1).{/ts}</span> - </td> + <td class="label-left">{$form.msg_subject.label}</td> + <td> + {$form.msg_subject.html|crmAddClass:huge} + <input class="crm-token-selector big" data-field="msg_subject" /> + {help id="id-token-subject" tplFile=$tplFile isAdmin=$isAdmin file="CRM/Contact/Form/Task/Email.hlp"} + </td> </tr> <tr> - <td class="label-left">{$form.file_id.label}</td> - <td>{$form.file_id.html} - {if $attachment} - {foreach from=$attachment key=attKey item=attVal} - <div class="crm-attachment-wrapper crm-entity" id="file_{$attVal.fileID}"> - <strong><a class="crm-attachment" href="{$attVal.url}">{$attVal.cleanName}</a></strong> - {if $attVal.description} - {$attVal.description}{/if} - {if $attVal.deleteURLArgs} - <a href="#" class="crm-hover-button delete-attachment" data-mimetype="{$attVal.mime_type}" data-filename="{$attVal.cleanName}" data-args="{$attVal.deleteURLArgs}" title="{ts}Delete File{/ts}"><span class="icon delete-icon"></span></a> - {/if} - {include file="CRM/Form/attachmentjs.tpl" context='MessageTemplate'} - {/foreach} + <td class="label-left">{$form.file_id.label}</td> + <td>{$form.file_id.html} + {if $attachment} + {foreach from=$attachment key=attKey item=attVal} + <div class="crm-attachment-wrapper crm-entity" id="file_{$attVal.fileID}"> + <strong><a class="crm-attachment" href="{$attVal.url}">{$attVal.cleanName}</a></strong> + {if $attVal.description} - {$attVal.description}{/if} + {if $attVal.deleteURLArgs} + <a href="#" class="crm-hover-button delete-attachment" data-mimetype="{$attVal.mime_type}" data-filename="{$attVal.cleanName}" data-args="{$attVal.deleteURLArgs}" title="{ts}Delete File{/ts}"><span class="icon delete-icon"></span></a> + {/if} + {include file="CRM/Form/attachmentjs.tpl" context='MessageTemplate'} + {/foreach} {/if} - <br /><span class="description html-adjust">{ts}Upload the document in .docx or .odt format.{/ts}</span> - </td> + <br /><span class="description html-adjust">{ts}Upload the document in .docx or .odt format.{/ts}</span> + </td> </tr> <tr> - </table> + </table> <div id="msg_html_section" class="crm-accordion-wrapper crm-html_email-accordion "> <div class="crm-accordion-header"> - {ts}HTML Format{/ts} - {help id="id-message-text" file="CRM/Contact/Form/Task/Email.hlp"} + {ts}HTML Format{/ts} + {help id="id-message-text" file="CRM/Contact/Form/Task/Email.hlp"} </div><!-- /.crm-accordion-header --> - <div class="crm-accordion-body"> - <div class="helpIcon" id="helphtml"> - <input class="crm-token-selector big" data-field="msg_html" /> - {help id="id-token-html" tplFile=$tplFile isAdmin=$isAdmin file="CRM/Contact/Form/Task/Email.hlp"} - </div> - <div class="clear"></div> - <div class='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 class="crm-accordion-body"> + <div class="helpIcon" id="helphtml"> + <input class="crm-token-selector big" data-field="msg_html" /> + {help id="id-token-html" tplFile=$tplFile isAdmin=$isAdmin file="CRM/Contact/Form/Task/Email.hlp"} + </div> + <div class="clear"></div> + <div class='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}</div> + </div> </div><!-- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> <div id="msg_text_section" class="crm-accordion-wrapper crm-plaint_text_email-accordion "> <div class="crm-accordion-header"> - {ts}Plain-Text Format{/ts} + {ts}Plain-Text Format{/ts} </div><!-- /.crm-accordion-header --> - <div class="crm-accordion-body"> - <div class="helpIcon" id="helptext"> - <input class="crm-token-selector big" data-field="msg_text" /> - {help id="id-token-text" tplFile=$tplFile file="CRM/Contact/Form/Task/Email.hlp"} - </div> - <div class="clear"></div> - <div class='text'> - {$form.msg_text.html|crmAddClass:huge} - <div class="description">{ts}Text formatted message.{/ts} {ts 1=$tokenDocsRepeated}Tokens may be included (%1).{/ts}</div> - </div> - </div><!-- /.crm-accordion-body --> + <div class="crm-accordion-body"> + <div class="helpIcon" id="helptext"> + <input class="crm-token-selector big" data-field="msg_text" /> + {help id="id-token-text" tplFile=$tplFile file="CRM/Contact/Form/Task/Email.hlp"} + </div> + <div class="clear"></div> + <div class='text'> + {$form.msg_text.html|crmAddClass:huge} + <div class="description">{ts}Text formatted message.{/ts}</div> + </div> + </div><!-- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> <div id="pdf_format" class="crm-accordion-wrapper crm-html_email-accordion "> <div class="crm-accordion-header"> - {$form.pdf_format_id.label} + {$form.pdf_format_id.label} </div><!-- /.crm-accordion-header --> - <div class="crm-accordion-body"> - <div class="spacer"></div> - <div class='html'> - {$form.pdf_format_id.html} - {help id="id-msg-template" file="CRM/Contact/Form/Task/PDFLetterCommon.hlp"} - <div class="description">{ts}Page format to use when creating PDF files using this template.{/ts}</div> - </div> + <div class="crm-accordion-body"> + <div class="spacer"></div> + <div class='html'> + {$form.pdf_format_id.html} + {help id="id-msg-template" file="CRM/Contact/Form/Task/PDFLetterCommon.hlp"} + <div class="description">{ts}Page format to use when creating PDF files using this template.{/ts}</div> + </div> </div><!-- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> - {if !$workflow_id} - <table class="form-layout-compressed"> + {if !$workflow_id} + <table class="form-layout-compressed"> <tr> <td class="label-left">{$form.is_active.label}</td> <td>{$form.is_active.html}</td> </tr> - </table> + </table> + {/if} {/if} - {/if} - <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> - <br clear="all" /> -</div> + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> + <br clear="all" /> + </div> </div> <!-- end of crm-form-block --> {include file="CRM/Mailing/Form/InsertTokens.tpl"} diff --git a/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl b/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl index 13f6ddee5b..ae96f23def 100644 --- a/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl +++ b/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl @@ -17,7 +17,6 @@ </div> {else} <table class="form-layout-compressed"> - <tr class="crm-admin-optiongroup-form-block-name"> <tr class="crm-admin-optiongroup-form-block-title"> <td class="label">{$form.title.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_option_group' field='title' id=$id}{/if}</td><td>{$form.title.html}</td> @@ -26,8 +25,12 @@ <td class="label">{$form.description.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_option_group' field='description' id=$id}{/if}</td><td>{$form.description.html}</td> </tr> - <td class="label">{$form.name.label}</td> - <td>{$form.name.html}</td></tr> + {if !empty($form.name)} + <tr class="crm-admin-optiongroup-form-block-name"> + <td class="label">{$form.name.label}</td> + <td>{$form.name.html}</td> + </tr> + {/if} <tr class="crm-admin-optiongroup-form-block-data-type"> <td class="label">{$form.data_type.label}</td> <td>{$form.data_type.html}</td> @@ -36,10 +39,12 @@ <td class="label">{$form.is_active.label}</td> <td>{$form.is_active.html}</td> </tr> - <tr class="crm-admin-optiongroup-form-block-is_reserved"> - <td class="label">{$form.is_reserved.label}</td> - <td>{$form.is_reserved.html}</td> - </tr> + {if !empty($form.is_reserved)} + <tr class="crm-admin-optiongroup-form-block-is_reserved"> + <td class="label">{$form.is_reserved.label}</td> + <td>{$form.is_reserved.html}</td> + </tr> + {/if} </table> {/if} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> diff --git a/civicrm/templates/CRM/Admin/Form/Options.tpl b/civicrm/templates/CRM/Admin/Form/Options.tpl index fa435bd63e..35a857db87 100644 --- a/civicrm/templates/CRM/Admin/Form/Options.tpl +++ b/civicrm/templates/CRM/Admin/Form/Options.tpl @@ -38,14 +38,14 @@ <span class="description">{ts}A "string value" or regular expression to be redacted (replaced).{/ts}</span> </td> </tr> - {else} + {elseif !empty($form.label)} <tr class="crm-admin-options-form-block-label"> <td class="label">{$form.label.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_option_value' field='label' id=$id}{/if}</td> <td class="html-adjust">{$form.label.html}<br /> <span class="description">{ts}The option label is displayed to users.{/ts}</span> </td> </tr> - {if $form.financial_account_id.html} + {if !empty($form.financial_account_id.html)} <tr class="crm-admin-options-form-block-grouping"> <td class="label">{$form.financial_account_id.label}</td> <td>{$form.financial_account_id.html}</td> @@ -53,7 +53,7 @@ {/if} {/if} - {if $form.value.html && $gName neq 'redaction_rule'} + {if !empty($form.value.html) && $gName neq 'redaction_rule'} <tr class="crm-admin-options-form-block-value"> <td class="label">{$form.value.label}</td> <td>{$form.value.html}<br /> @@ -80,7 +80,7 @@ </td> </tr> {/if} - {if $form.name.html} {* Get the name value also *} + {if !empty($form.name.html)} {* Get the name value also *} <tr class="crm-admin-options-form-block-name"> <td class="label">{$form.name.label}</td> <td>{$form.name.html}<br /> @@ -88,7 +88,7 @@ </td> </tr> {/if} - {if $form.filter.html} {* Filter property is only exposed for some option groups. *} + {if !empty($form.filter.html)} {* Filter property is only exposed for some option groups. *} <tr class="crm-admin-options-form-block-filter"> <td class="label">{$form.filter.label}</td> <td>{$form.filter.html}</td> @@ -109,29 +109,31 @@ <td>{$form.visibility_id.html}</td> </tr> {/if} - {if $form.grouping.html} + {if !empty($form.grouping.html)} <tr class="crm-admin-options-form-block-grouping"> <td class="label">{$form.grouping.label}</td> <td>{$form.grouping.html}</td> </tr> {/if} + {if !empty($form.weight)} <tr class="crm-admin-options-form-block-weight"> <td class="label">{$form.weight.label}</td> <td>{$form.weight.html}</td> </tr> - {if $form.icon.html} + {/if} + {if !empty($form.icon.html)} <tr class="crm-admin-options-form-block-icon"> <td class="label">{$form.icon.label}</td> <td>{$form.icon.html}</td> </tr> {/if} - {if $form.color.html} + {if !empty($form.color.html)} <tr class="crm-admin-options-form-block-color"> <td class="label">{$form.color.label}</td> <td>{$form.color.html}</td> </tr> {/if} - {if $form.component_id.html} {* Component ID is exposed for activity types if CiviCase is enabled. *} + {if !empty($form.component_id.html)} {* Component ID is exposed for activity types if CiviCase is enabled. *} <tr class="crm-admin-options-form-block-component_id"> <td class="label">{$form.component_id.label}</td> <td>{$form.component_id.html}</td> @@ -141,13 +143,13 @@ <td class="label">{$form.is_active.label}</td> <td>{$form.is_active.html}</td> </tr> - {if $showDefault} + {if !empty($showDefault)} <tr class="crm-admin-options-form-block-is_default"> <td class="label">{$form.is_default.label}</td> <td>{$form.is_default.html}</td> </tr> {/if} - {if $showContactFilter}{* contactOptions is exposed for email/postal greeting and addressee types to set filter for contact types *} + {if !empty($showContactFilter)}{* contactOptions is exposed for email/postal greeting and addressee types to set filter for contact types *} <tr class="crm-admin-options-form-block-contactOptions"> <td class="label">{$form.contactOptions.label}</td> <td>{$form.contactOptions.html}</td> diff --git a/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl b/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl index 6b159db7b2..b7afd0d559 100644 --- a/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl +++ b/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl @@ -39,11 +39,12 @@ <td>{$form.class.html}<br /> <span class="description">{ts}The general class of this status. Participant counts are grouped by class on the CiviEvent Dashboard. Participants with a 'Pending' class status will be moved to 'Expired' status if Pending Participant Hours has elapsed (when the ParticipantProcessor.php background processing script is run).{/ts}</span></td> </tr> - + {if !empty($form.is_reserved)} <tr class="crm-participant-status-form-block-is_reserved"> <td class="label">{$form.is_reserved.label}</td> <td>{$form.is_reserved.html}</td> </tr> + {/if} <tr class="crm-participant-status-form-block-is_active"> <td class="label">{$form.is_active.label}</td> <td>{$form.is_active.html}</td> diff --git a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl index b8bb250a0f..9571eb129f 100644 --- a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl +++ b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl @@ -106,7 +106,11 @@ </tr> <tr class="crm-scheduleReminder-form-block-subject"> <td class="label">{$form.subject.label}</td> - <td>{$form.subject.html}</td> + <td> + {$form.subject.html|crmAddClass:huge} + <input class="crm-token-selector big" data-field="subject" /> + {help id="id-token-subject" tplFile=$tplFile isAdmin=$isAdmin file="CRM/Contact/Form/Task/Email.hlp"} + </td> </tr> </table> {include file="CRM/Contact/Form/Task/EmailCommon.tpl" upload=1 noAttach=1} diff --git a/civicrm/templates/CRM/Admin/Page/ContactType.tpl b/civicrm/templates/CRM/Admin/Page/ContactType.tpl index 17158358b4..a8b122919f 100644 --- a/civicrm/templates/CRM/Admin/Page/ContactType.tpl +++ b/civicrm/templates/CRM/Admin/Page/ContactType.tpl @@ -32,7 +32,7 @@ </tr> </thead> {foreach from=$rows item=row} - <tr id="contact_type-{$row.id}" data-action="setvalue" class="{cycle values="odd-row,even-row"} {$row.class} crm-contactType crm-entity {if NOT $row.is_active} disabled{/if}"> + <tr id="contact_type-{$row.id}" data-action="setvalue" class="{cycle values="odd-row,even-row"} {if !empty($row.class)}{$row.class}{/if} crm-contactType crm-entity {if NOT $row.is_active} disabled{/if}"> <td class="crm-contactType-label crm-editable" data-field="label">{ts}{$row.label}{/ts}</td> <td class="crm-contactType-parent">{if $row.parent}{ts}{$row.parent_label}{/ts}{else}{ts}(built-in){/ts}{/if}</td> <td class="crm-contactType-description crm-editable" data-field="description" data-type="textarea">{$row.description}</td> diff --git a/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl b/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl index 04df4239eb..570e3eafc1 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl @@ -24,7 +24,7 @@ Depends: CRM/common/enableDisableApi.tpl and CRM/common/jsortable.tpl <td class="crm-extensions-label"> <a class="collapsed" href="#"></a> <strong>{$row.label}</strong><br/>({$row.key}) </td> - <td class="crm-extensions-label">{$row.version} {if $row.upgradable}<br/>({$row.upgradeVersion}){/if}</td> + <td class="crm-extensions-version">{$row.version|escape}</td> <td class="crm-extensions-description">{$row.type|capitalize}</td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl b/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl index e7598bab04..3afbdb1d72 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl @@ -26,8 +26,14 @@ Depends: CRM/common/enableDisableApi.tpl and CRM/common/jsortable.tpl <div class="crm-extensions-upgrade">{$remoteExtensionRows[$extKey].upgradelink}</div> {/if} </td> - <td class="crm-extensions-label">{$row.statusLabel} {if $row.upgradable}<br/>({ts}Outdated{/ts}){/if}</td> - <td class="crm-extensions-label">{$row.version|escape} {if $row.upgradable}<br/>({$row.upgradeVersion}){/if}</td> + <td class="crm-extensions-status">{$row.statusLabel} {if $row.upgradable}<br/>({ts}Outdated{/ts}){/if}</td> + <td class="crm-extensions-version">{$row.version|escape} + {if ($row.develStage and $row.develStage != 'stable') or preg_match(";(alpha|beta|dev);", $row.version)} + {icon icon="fa-flask crm-extensions-stage"}{ts}This is a pre-release version. For more details, see the expanded description.{/ts}{/icon} + {else} + {icon icon="fa-check-circle crm-extensions-stage"}{ts}This is a stable release version.{/ts}{/icon} + {/if} + </td> <td class="crm-extensions-description">{$row.type|escape|capitalize}</td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Page/Job.tpl b/civicrm/templates/CRM/Admin/Page/Job.tpl index 2738a86b94..3a999252cb 100644 --- a/civicrm/templates/CRM/Admin/Page/Job.tpl +++ b/civicrm/templates/CRM/Admin/Page/Job.tpl @@ -39,14 +39,14 @@ <th ></th> </tr> {foreach from=$rows item=row} - <tr id="job-{$row.id}" class="crm-entity {cycle values="odd-row,even-row"} {$row.class}{if NOT $row.is_active} disabled{/if}"> + <tr id="job-{$row.id}" class="crm-entity {cycle values="odd-row,even-row"} {if !empty($row.class)}{$row.class}{/if}{if NOT $row.is_active} disabled{/if}"> <td class="crm-job-name"><strong><span data-field="name">{$row.name}</span></strong> ({$row.run_frequency})<br/> {$row.description}<br /> {ts}API Entity:{/ts} {$row.api_entity}<br/> {ts}API Action:{/ts} <strong>{$row.api_action}</strong><br/> </td> - <td class="crm-job-name">{if $row.parameters eq null}<em>{ts}no parameters{/ts}</em>{else}<pre>{$row.parameters}</pre>{/if}</td> - <td class="crm-job-name">{if $row.last_run eq null}never{else}{$row.last_run|crmDate:$config->dateformatDatetime}{/if}</td> + <td class="crm-job-name">{if isset($row.parameters)}{if $row.parameters eq null}<em>{ts}no parameters{/ts}</em>{else}<pre>{$row.parameters}</pre>{/if}{/if}</td> + <td class="crm-job-name">{if isset($row.last_run)}{if $row.last_run eq null}never{else}{$row.last_run|crmDate:$config->dateformatDatetime}{/if}{/if}</td> <td id="row_{$row.id}_status" class="crm-job-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Page/JobLog.tpl b/civicrm/templates/CRM/Admin/Page/JobLog.tpl index ca3bac9e55..5e93685a6a 100644 --- a/civicrm/templates/CRM/Admin/Page/JobLog.tpl +++ b/civicrm/templates/CRM/Admin/Page/JobLog.tpl @@ -8,23 +8,23 @@ +--------------------------------------------------------------------+ *} <div class="help"> - {ts}This screen presents the list of most recent 1,000 scheduled jobs log entries.{/ts} {$docLink} + {ts}This screen presents the list of most recent 1,000 scheduled jobs log entries.{/ts} {if !empty($docLink)}{$docLink}{/if} </div> <div class="crm-content-block crm-block"> -{if $jobId} +{if !empty($jobId)} <h3>{ts}List of log entries for:{/ts} {$jobName}</h3> {/if} <div class="action-link"> <a href="{crmURL p='civicrm/admin/job' q="reset=1"}" id="jobsList-top" class="button"><span><i class="crm-i fa-chevron-left" aria-hidden="true"></i> {ts}Back to Scheduled Jobs Listing{/ts}</span></a> - {if $jobRunUrl} + {if !empty($jobRunUrl)} <a href="{$jobRunUrl}" id="jobsList-run-top" class="button"><span><i class="crm-i fa-play" aria-hidden="true"></i> {ts}Execute Now{/ts}</span></a> {/if} </div> -{if $rows} +{if !empty($rows)} <div id="ltype"> {strip} {* handle enable/disable actions*} @@ -63,7 +63,7 @@ <div class="action-link"> <a href="{crmURL p='civicrm/admin/job' q="reset=1"}" id="jobsList-bottom" class="button"><span><i class="crm-i fa-chevron-left" aria-hidden="true"></i> {ts}Back to Scheduled Jobs Listing{/ts}</span></a> - {if $jobRunUrl} + {if !empty($jobRunUrl)} <a href="{$jobRunUrl}" id="jobsList-run-bottom" class="button"><span><i class="crm-i fa-play" aria-hidden="true"></i> {ts}Execute Now{/ts}</span></a> {/if} </div> diff --git a/civicrm/templates/CRM/Admin/Page/LocationType.tpl b/civicrm/templates/CRM/Admin/Page/LocationType.tpl index 1eb9600caa..9802054b33 100644 --- a/civicrm/templates/CRM/Admin/Page/LocationType.tpl +++ b/civicrm/templates/CRM/Admin/Page/LocationType.tpl @@ -37,10 +37,10 @@ <tr id="location_type-{$row.id}" data-action="setvalue" class="{cycle values="odd-row,even-row"} {$row.class} crm-entity {if NOT $row.is_active} disabled{/if}"> <td class="crmf-name">{$row.name}</td> <td class="crmf-display_name crm-editable">{$row.display_name}</td> - <td class="crmf-vcard_name crm-editable">{$row.vcard_name}</td> + <td class="crmf-vcard_name crm-editable">{if !empty($row.vcard_name)}{$row.vcard_name}{/if}</td> <td class="crmf-description crm-editable">{$row.description}</td> <td id="row_{$row.id}_status" class="crmf-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td class="crmf-is_default">{icon condition=$row.is_default}{ts}Default{/ts}{/icon} </td> + <td class="crmf-is_default">{if isset($row.is_default)}{icon condition=$row.is_default}{ts}Default{/ts}{/icon} {/if}</td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> {/foreach} diff --git a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl index 18f1d67148..c2ef4b9983 100644 --- a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl +++ b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl @@ -34,15 +34,15 @@ {foreach from=$rows item=row} <tr id='rowid{$row.id}' class="crm-mailSettings {cycle values="odd-row,even-row"}"> <td class="crm-mailSettings-name">{$row.name}</td> - <td class="crm-mailSettings-server">{$row.server}</td> - <td class="crm-mailSettings-username">{$row.username}</td> - <td class="crm-mailSettings-localpart">{$row.localpart}</td> - <td class="crm-mailSettings-domain">{$row.domain}</td> - <td class="crm-mailSettings-return_path">{$row.return_path}</td> - <td class="crm-mailSettings-protocol">{$row.protocol}</td> - <td class="crm-mailSettings-source">{$row.source}</td> - <!--<td>{$row.port}</td>--> - <td class="crm-mailSettings-is_ssl">{if $row.is_ssl eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> + <td class="crm-mailSettings-server">{if !empty($row.server)}{$row.server}{/if}</td> + <td class="crm-mailSettings-username">{if !empty($row.username)}{$row.username}{/if}</td> + <td class="crm-mailSettings-localpart">{if !empty($row.localpart)}{$row.localpart}{/if}</td> + <td class="crm-mailSettings-domain">{if !empty($row.domain)}{$row.domain}{/if}</td> + <td class="crm-mailSettings-return_path">{if !empty($row.return_path)}{$row.return_path}{/if}</td> + <td class="crm-mailSettings-protocol">{if !empty($row.protocol)}{$row.protocol}{/if}</td> + <td class="crm-mailSettings-source">{if !empty($row.source)}{$row.source}{/if}</td> + <!--<td>{if !empty($row.port)}{$row.port}{/if}</td>--> + <td class="crm-mailSettings-is_ssl">{if isset($row.is_ssl) and $row.is_ssl eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-mailSettings-is_default">{if $row.is_default eq 1}{ts}Bounce Processing <strong>(Default)</strong>{/ts}{else}{ts}Email-to-Activity{/ts}{/if} </td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> @@ -58,7 +58,7 @@ {ts}None found.{/ts} </div> {/if} - {if $setupActions} + {if !empty($setupActions)} <form> <select id="crm-mail-setup" name="crm-mail-setup" class="crm-select2 crm-form-select" aria-label="{ts}Add Mail Account{/ts}"> <option value="" aria-hidden="true">{ts}Add Mail Account{/ts}</option> diff --git a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl index 90f7b88172..791817b462 100644 --- a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl +++ b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl @@ -1,6 +1,6 @@ {* add campaigns to various components CRM-7362 *} -{if $campaignContext eq 'componentSearch'} +{if isset($campaignContext) and $campaignContext eq 'componentSearch'} {* add campaign in component search *} <tr class="{$campaignTrClass}"> diff --git a/civicrm/templates/CRM/Contact/Form/Task/Email.hlp b/civicrm/templates/CRM/Contact/Form/Task/Email.hlp index 2498458c78..92d987b7b3 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Email.hlp +++ b/civicrm/templates/CRM/Contact/Form/Task/Email.hlp @@ -7,6 +7,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} +{capture assign=tokentext}{ts}Find out more about CiviCRM Tokens{/ts}{/capture} {htxt id="id-from_email-title"} {ts}From Address{/ts} {/htxt} @@ -40,6 +41,7 @@ {/htxt} {htxt id="id-token-subject"} <p>{ts}Use a token in the Subject when you are sending mail to a number of recipients and want to include their name and / or other values from their contact record automatically in the subject line.{/ts}</p> +<p>{docURL page="user/common-workflows/tokens-and-mail-merge" text=$tokentext}</p> {/htxt} {htxt id="id-token-text-title"} @@ -57,6 +59,7 @@ <p>{ts}Custom tokens (based on custom data) can be added for organizations as well. These tokens will not be displayed in the list of available tokens, but can be added manually. The format is {literal}{contact.custom_12}{/literal} – where 12 is the ID of the custom data field. To find the custom data field ID, go Administer > Customize Data & Screens > Custom Fields and click ‘edit’ on the field you want to use. Look at the URL. The last part of the URL will be an equal sign and a number (=12). The number (12 in this example) is the id of that custom field.{/ts}</p> +<p>{docURL page="user/common-workflows/tokens-and-mail-merge" text=$tokentext}</p> {/htxt} {htxt id="id-token-html-title"} @@ -82,6 +85,7 @@ be an equal sign and a number (=12). The number (12 in this example) is the id o <p>{ts}Custom tokens (based on custom data) can be added for organizations as well. These tokens will not be displayed in the list of available tokens, but can be added manually. The format is {literal}{contact.custom_12}{/literal} – where 12 is the ID of the custom data field. To find the custom data field ID, go Administer > Customize Data & Screens > Custom Fields and click ‘edit’ on the field you want to use. Look at the URL. The last part of the URL will be an equal sign and a number (=12). The number (12 in this example) is the id of that custom field.{/ts}</p> +<p>{docURL page="user/common-workflows/tokens-and-mail-merge" text=$tokentext}</p> {/htxt} {htxt id="id-message-text-title"} @@ -90,4 +94,5 @@ be an equal sign and a number (=12). The number (12 in this example) is the id o {htxt id="id-message-text"} <p>{ts}You can send your email as a simple text-only message, as an HTML formatted message, or both. Text-only messages are sufficient for most email communication - and some recipients may prefer not to receive HTML formatted messages.{/ts}</p> <p>{ts}HTML messages have more visual impact, allow you to include images, and may be more readable if you are including links to website pages. However, different email programs may interpret HTML formats differently - so use this option cautiously unless you have a template format that has been tested with different web and desktop email programs.{/ts}</p> +<p>{docURL page="user/common-workflows/tokens-and-mail-merge" text=$tokentext}</p> {/htxt} diff --git a/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl b/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl index e16653417e..ac2ed7af3f 100644 --- a/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl +++ b/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl @@ -13,8 +13,8 @@ <div class="clear"></div> <div class="crm-block crm-content-block"> - <div ng-app="crmDashboard"> + <crm-angular-js modules="crmDashboard"> <crm-dashboard></crm-dashboard> - </div> + </crm-angular-js> </div> diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl index 1c8b4dca28..a84499b3a7 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl @@ -53,28 +53,29 @@ <div class="crm-submit-buttons"><a class="button cancel crm-form-submit" href="{crmURL p='civicrm/contact/view' q='action=browse&selectedChild=contribute'}">{ts}Done{/ts}</a></div> </div> {/if} - -<script type="text/javascript"> - var recurContribID = {$recur.id}; - var contactID = {$contactId}; - {literal} - CRM.$(function($) { - CRM.loadPage( - CRM.url( - 'civicrm/contribute/contributionrecur-payments', - { - reset: 1, - id: recurContribID, - cid: contactID - }, - 'back' - ), - { - target : '#recurring-contribution-payments', - dialog : false - } - ); - }); - {/literal} -</script> +{if $hasAccessCiviContributePermission} + <script type="text/javascript"> + var recurContribID = {$recur.id}; + var contactID = {$contactId}; + {literal} + CRM.$(function($) { + CRM.loadPage( + CRM.url( + 'civicrm/contribute/contributionrecur-payments', + { + reset: 1, + id: recurContribID, + cid: contactID + }, + 'back' + ), + { + target : '#recurring-contribution-payments', + dialog : false + } + ); + }); + {/literal} + </script> +{/if} <div id="recurring-contribution-payments"></div> diff --git a/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl b/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl index 0520ebc1a3..d856cf4d98 100644 --- a/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl @@ -18,13 +18,12 @@ <th>{ts}Financial Type{/ts}</th> <th>{ts}Received date{/ts}</th> <th>{ts}Receipt Sent{/ts}</th> + <th>{ts}Balance{/ts}</th> <th>{ts}Status{/ts}</th> {if $isIncludeInvoiceLinks} <th></th> {/if} - {foreach from=$row.buttons item=button} - <th></th> - {/foreach} + <th></th> </tr> {foreach from=$contribute_rows item=row} @@ -39,6 +38,7 @@ <td>{$row.financial_type}</td> <td>{$row.receive_date|truncate:10:''|crmDate}</td> <td>{$row.receipt_date|truncate:10:''|crmDate}</td> + <td>{$row.balance_amount|crmMoney:$row.currency}</td> <td>{$row.contribution_status}</td> {if $isIncludeInvoiceLinks} <td> @@ -59,9 +59,11 @@ {/if} </td> {/if} + <td> {foreach from=$row.buttons item=button} - <td><a class="{$button.class}" href="{$button.url}"><span class='nowrap'>{$button.label}</span></a></td> + <a class="{$button.class}" href="{$button.url}"><span class='nowrap'>{$button.label}</span></a> {/foreach} + </td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Custom/Form/CustomData.tpl b/civicrm/templates/CRM/Custom/Form/CustomData.tpl index 8737f0b767..1a624a31a8 100644 --- a/civicrm/templates/CRM/Custom/Form/CustomData.tpl +++ b/civicrm/templates/CRM/Custom/Form/CustomData.tpl @@ -8,7 +8,7 @@ +--------------------------------------------------------------------+ *} {* Custom Data form*} -{if $formEdit} +{if !empty($formEdit)} {include file="CRM/Custom/Form/Edit/CustomData.tpl" customDataEntity=''} {else} {foreach from=$groupTree item=cd_edit key=group_id name=custom_sets} @@ -34,7 +34,11 @@ </div> </div> {/if} - <div id="custom_group_{$group_id}_{$cgCount}"></div> + {if isset($cgCount)} + <div id="custom_group_{$group_id}_{$cgCount}"></div> + {else} + <div id="custom_group_{$group_id}"></div> + {/if} {/foreach} {/if} diff --git a/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl b/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl index 7d04c4da0a..7acd1de052 100644 --- a/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl +++ b/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl @@ -8,16 +8,16 @@ +--------------------------------------------------------------------+ *} -{if $element.help_pre} +{if !empty($element.help_pre)} <tr class="custom_field-help-pre-row {$element.element_name}-row-help-pre"> <td> </td> <td class="html-adjust description">{$element.help_pre}</td> </tr> {/if} -{if $element.options_per_line != 0 } +{if isset($element.options_per_line) and $element.options_per_line != 0 } <tr class="custom_field-row {$element.element_name}-row"> <td - class="label">{$formElement.label}{if $element.help_post}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if}</td> + class="label">{$formElement.label}{if !empty($element.help_post)}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if}</td> <td class="html-adjust"> {assign var="count" value="1"} <table class="form-layout-compressed" style="margin-top: -0.5em;"> @@ -45,7 +45,7 @@ {else} <tr class="custom_field-row {$element.element_name}-row"> <td class="label">{$formElement.label} - {if $element.help_post}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if} + {if !empty($element.help_post)}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if} </td> <td class="html-adjust"> {$formElement.html} diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl index 8d48983cc5..4c71289d8b 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl @@ -7,7 +7,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if $hasParent || $isRepeatingEntity || $scheduleReminderId} +{if !empty($hasParent) || !empty($isRepeatingEntity) || !empty($scheduleReminderId)} {capture assign='entity_type'}{$recurringEntityType|lower}{/capture} <script type="text/template" id="recurring-dialog-tpl"> <div class="recurring-dialog"> diff --git a/civicrm/templates/CRM/Form/attachmentjs.tpl b/civicrm/templates/CRM/Form/attachmentjs.tpl index 378aaf1919..1734fff151 100644 --- a/civicrm/templates/CRM/Form/attachmentjs.tpl +++ b/civicrm/templates/CRM/Form/attachmentjs.tpl @@ -15,7 +15,7 @@ request.done(function() { $el.trigger('crmPopupFormSuccess'); $row.remove(); - {/literal}{if $context EQ 'MessageTemplate'}{literal} + {/literal}{if isset($context) and $context EQ 'MessageTemplate'}{literal} $('#file_id').show(); {/literal}{/if}{literal} }); diff --git a/civicrm/templates/CRM/Report/Form.tpl b/civicrm/templates/CRM/Report/Form.tpl index 3520bb9484..3ceffb9aa5 100644 --- a/civicrm/templates/CRM/Report/Form.tpl +++ b/civicrm/templates/CRM/Report/Form.tpl @@ -16,7 +16,7 @@ {elseif $section eq 2} <div class="crm-block crm-content-block crm-report-layoutTable-form-block"> {*include the table layout*} - {if !$chartEnabled || !$chartSupported} + {if empty($chartEnabled) || empty($chartSupported)} {include file="CRM/Report/Form/Layout/Table.tpl"} {/if} </div> @@ -39,7 +39,7 @@ {*include the table layout*} - {if !$chartEnabled || !$chartSupported} + {if empty($chartEnabled) || empty($chartSupported)} {include file="CRM/Report/Form/Layout/Table.tpl"} {/if} <br /> diff --git a/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl b/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl index 0add07e2ea..d3de9439ed 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl @@ -9,7 +9,7 @@ *} {assign var=uploadURL value=$config->imageUploadURL|replace:'/persist/contribute/':'/persist/'} {* Display weekly,Quarterly,monthly and yearly contributions using pChart (Bar and Pie) *} -{if $chartEnabled and $chartSupported} +{if !empty($chartEnabled) and !empty($chartSupported)} <div class='crm-chart'> {if $outputMode eq 'print' OR $outputMode eq 'pdf'} <img src="{$uploadURL|cat:$chartId}.png" /> @@ -19,11 +19,11 @@ </div> {/if} -{if !$printOnly} {* NO print section starts *} - {if !$section} +{if empty($printOnly)} {* NO print section starts *} + {if !empty($section)} {include file="CRM/common/chart.tpl" divId="chart_$uniqueId"} {/if} - {if $chartData} + {if !empty($chartData)} {literal} <script type="text/javascript"> CRM.$(function($) { diff --git a/civicrm/templates/CRM/Report/Form/Layout/Table.tpl b/civicrm/templates/CRM/Report/Form/Layout/Table.tpl index 656a88bd34..162d877c95 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Table.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Table.tpl @@ -10,7 +10,7 @@ {if !$rows} <p>{ts}None found.{/ts}</p> {else} - {if $pager and $pager->_response and $pager->_response.numPages > 1} + {if !empty($pager) and $pager->_response and $pager->_response.numPages > 1} <div class="report-pager"> {include file="CRM/common/pager.tpl" location="top"} </div> @@ -24,8 +24,8 @@ {else} {assign var=class value="class='reports-header'"} {/if} - {if !$skip} - {if $header.colspan} + {if empty($skip)} + {if !empty($header.colspan)} <th colspan={$header.colspan}>{$header.title|escape}</th> {assign var=skip value=true} {assign var=skipCount value=`$header.colspan`} @@ -41,7 +41,7 @@ {/foreach} {/capture} - {if !$sections} {* section headers and sticky headers aren't playing nice yet *} + {if empty($sections)} {* section headers and sticky headers aren't playing nice yet *} <thead class="sticky"> <tr> {$tableHeader} @@ -92,14 +92,14 @@ {foreach from=$rows item=row key=rowid} {eval var=$sectionHeaderTemplate} - <tr class="{cycle values="odd-row,even-row"} {$row.class} crm-report" id="crm-report_{$rowid}"> + <tr class="{cycle values="odd-row,even-row"} {if !empty($row.class)}{$row.class}{/if} crm-report" id="crm-report_{$rowid}"> {foreach from=$columnHeaders item=header key=field} {assign var=fieldLink value=$field|cat:"_link"} {assign var=fieldHover value=$field|cat:"_hover"} {assign var=fieldClass value=$field|cat:"_class"} <td class="crm-report-{$field}{if $header.type eq 1024 OR $header.type eq 1 OR $header.type eq 512} report-contents-right{elseif $row.$field eq 'Subtotal'} report-label{/if}"> {if $row.$fieldLink} - <a title="{$row.$fieldHover|escape}" href="{$row.$fieldLink}" {if $row.$fieldClass} class="{$row.$fieldClass}"{/if}> + <a title="{$row.$fieldHover|escape}" href="{$row.$fieldLink}" {if !empty($row.$fieldClass)} class="{$row.$fieldClass}"{/if}> {/if} {if is_array($row.$field)} @@ -136,7 +136,7 @@ </tr> {/foreach} - {if $grandStat} + {if !empty($grandStat)} {* foreach from=$grandStat item=row*} <tr class="total-row"> {foreach from=$columnHeaders item=header key=field} @@ -156,7 +156,7 @@ {* /foreach*} {/if} </table> - {if $pager and $pager->_response and $pager->_response.numPages > 1} + {if !empty($pager) and $pager->_response and $pager->_response.numPages > 1} <div class="report-pager"> {include file="CRM/common/pager.tpl" } </div> diff --git a/civicrm/templates/CRM/Report/Form/Statistics.tpl b/civicrm/templates/CRM/Report/Form/Statistics.tpl index 15e335a9c9..001bf37035 100644 --- a/civicrm/templates/CRM/Report/Form/Statistics.tpl +++ b/civicrm/templates/CRM/Report/Form/Statistics.tpl @@ -7,45 +7,51 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if $top} +{if !empty($top)} {if $printOnly} <h1>{$reportTitle}</h1> <div id="report-date">{$reportDate}</div> {/if} {if $statistics} <table class="report-layout statistics-table"> - {foreach from=$statistics.groups item=row} - <tr> - <th class="statistics" scope="row">{$row.title}</th> - <td>{$row.value|escape}</td> - </tr> - {/foreach} - {foreach from=$statistics.filters item=row} - <tr> - <th class="statistics" scope="row">{$row.title}</th> - <td>{$row.value|escape}</td> - </tr> - {/foreach} + {if !empty($statistics.groups)} + {foreach from=$statistics.groups item=row} + <tr> + <th class="statistics" scope="row">{$row.title}</th> + <td>{$row.value|escape}</td> + </tr> + {/foreach} + {/if} + {if !empty($statistics.filters)} + {foreach from=$statistics.filters item=row} + <tr> + <th class="statistics" scope="row">{$row.title}</th> + <td>{$row.value|escape}</td> + </tr> + {/foreach} + {/if} </table> {/if} {/if} -{if $bottom and $rows and $statistics} +{if !empty($bottom) and !empty($rows) and !empty($statistics)} <table class="report-layout"> - {foreach from=$statistics.counts item=row} - <tr> - <th class="statistics" scope="row">{$row.title}</th> - <td> - {if $row.type eq 1024} - {$row.value|crmMoney|escape} - {elseif $row.type eq 2} - {$row.value|escape} - {else} - {$row.value|crmNumberFormat|escape} - {/if} + {if !empty($statistics.counts)} + {foreach from=$statistics.counts item=row} + <tr> + <th class="statistics" scope="row">{$row.title}</th> + <td> + {if !empty($row.type) and $row.type eq 1024} + {$row.value|crmMoney|escape} + {elseif !empty($row.type) and $row.type eq 2} + {$row.value|escape} + {else} + {$row.value|crmNumberFormat|escape} + {/if} - </td> - </tr> - {/foreach} + </td> + </tr> + {/foreach} + {/if} </table> {/if} diff --git a/civicrm/templates/CRM/common/CMSPrint.tpl b/civicrm/templates/CRM/common/CMSPrint.tpl index 9edb297aba..33e55d1636 100644 --- a/civicrm/templates/CRM/common/CMSPrint.tpl +++ b/civicrm/templates/CRM/common/CMSPrint.tpl @@ -11,9 +11,9 @@ {include file="CRM/common/debug.tpl"} {/if} -<div id="crm-container" class="crm-container{if $urlIsPublic} crm-public{/if}" lang="{$config->lcMessages|truncate:2:"":true}" xml:lang="{$config->lcMessages|truncate:2:"":true}"> +<div id="crm-container" class="crm-container{if !empty($urlIsPublic)} crm-public{/if}" lang="{$config->lcMessages|truncate:2:"":true}" xml:lang="{$config->lcMessages|truncate:2:"":true}"> -{if $breadcrumb} +{if !empty($breadcrumb)} <div class="breadcrumb"> {foreach from=$breadcrumb item=crumb key=key} {if $key != 0} @@ -24,7 +24,7 @@ </div> {/if} -{if $pageTitle} +{if !empty($pageTitle)} <div class="crm-title"> <h1 class="title">{if $isDeleted}<del>{/if}{$pageTitle}{if $isDeleted}</del>{/if}</h1> </div> @@ -49,7 +49,7 @@ </div> {crmRegion name='page-footer'} -{if $urlIsPublic} +{if !empty($urlIsPublic)} {include file="CRM/common/publicFooter.tpl"} {else} {include file="CRM/common/footer.tpl"} diff --git a/civicrm/templates/CRM/common/accesskeys.tpl b/civicrm/templates/CRM/common/accesskeys.tpl index 73bb66288e..21541aebd9 100644 --- a/civicrm/templates/CRM/common/accesskeys.tpl +++ b/civicrm/templates/CRM/common/accesskeys.tpl @@ -7,7 +7,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if not $urlIsPublic} +{if empty($urlIsPublic)} <div class="footer" id="access"> {capture assign='accessKeysHelpTitle'}{ts}Access Keys{/ts}{/capture} {ts}Access Keys:{/ts} diff --git a/civicrm/templates/CRM/common/formButtons.tpl b/civicrm/templates/CRM/common/formButtons.tpl index 355abcadc6..cd1fd010d9 100644 --- a/civicrm/templates/CRM/common/formButtons.tpl +++ b/civicrm/templates/CRM/common/formButtons.tpl @@ -10,7 +10,7 @@ {crmRegion name='form-buttons'} {* Loops through $linkButtons and assigns html "a" (link) buttons to the template. Used for additional entity functions such as "Move to Case" or "Renew Membership" *} -{if $linkButtons} +{if !empty($linkButtons)} {foreach from=$linkButtons item=linkButton} {if $linkButton.accessKey} {capture assign=accessKey}accesskey="{$linkButton.accessKey}"{/capture} diff --git a/civicrm/templates/CRM/common/joomla.tpl b/civicrm/templates/CRM/common/joomla.tpl index 4d05e688f2..ec33072425 100644 --- a/civicrm/templates/CRM/common/joomla.tpl +++ b/civicrm/templates/CRM/common/joomla.tpl @@ -11,7 +11,7 @@ {include file="CRM/common/debug.tpl"} {/if} -<div id="crm-container" class="crm-container{if $urlIsPublic} crm-public{/if}" lang="{$config->lcMessages|truncate:2:"":true}" xml:lang="{$config->lcMessages|truncate:2:"":true}"> +<div id="crm-container" class="crm-container{if !empty($urlIsPublic)} crm-public{/if}" lang="{$config->lcMessages|truncate:2:"":true}" xml:lang="{$config->lcMessages|truncate:2:"":true}"> <table border="0" cellpadding="0" cellspacing="0" id="crm-content"> <tr> @@ -62,7 +62,7 @@ </div> {crmRegion name='page-footer'} - {if $urlIsPublic} + {if !empty($urlIsPublic)} {include file="CRM/common/publicFooter.tpl"} {else} {include file="CRM/common/footer.tpl"} diff --git a/civicrm/templates/CRM/common/l10n.js.tpl b/civicrm/templates/CRM/common/l10n.js.tpl index 1612f23393..2b0f76073a 100644 --- a/civicrm/templates/CRM/common/l10n.js.tpl +++ b/civicrm/templates/CRM/common/l10n.js.tpl @@ -16,11 +16,11 @@ CRM.config.resourceBase = {$config->userFrameworkResourceURL|@json_encode}; {* packageseBase: The URL of `civicrm-packages` assets. Ends with "/". *} CRM.config.packagesBase = {capture assign=packagesBase}{crmResURL expr='[civicrm.packages]/'}{/capture}{$packagesBase|@json_encode}; - CRM.config.lcMessages = {$config->lcMessages|@json_encode}; + CRM.config.lcMessages = {$lcMessages|@json_encode}; CRM.config.locale = {$locale|@json_encode}; CRM.config.cid = {$cid|@json_encode}; - $.datepicker._defaults.dateFormat = CRM.config.dateInputFormat = {$config->dateInputFormat|@json_encode}; - CRM.config.timeIs24Hr = {if $config->timeInputFormat eq 2}true{else}false{/if}; + $.datepicker._defaults.dateFormat = CRM.config.dateInputFormat = {$dateInputFormat|@json_encode}; + CRM.config.timeIs24Hr = {if $timeInputFormat eq 2}true{else}false{/if}; CRM.config.ajaxPopupsEnabled = {$ajaxPopupsEnabled|@json_encode}; CRM.config.allowAlertAutodismissal = {$allowAlertAutodismissal|@json_encode}; CRM.config.resourceCacheCode = {$resourceCacheCode|@json_encode}; @@ -30,7 +30,7 @@ // Initialize CRM.url and CRM.formatMoney CRM.url({ldelim}back: '{crmURL p="civicrm/placeholder-url-path" q="civicrm-placeholder-url-query=1" h=0 fb=1}', front: '{crmURL p="civicrm/placeholder-url-path" q="civicrm-placeholder-url-query=1" h=0 fe=1}'{rdelim}); - CRM.formatMoney('init', false, {$moneyFormat}); + CRM.formatMoney('init', false, {$moneyFormat|@json_encode}); // Localize select2 $.fn.select2.defaults.formatNoMatches = "{ts escape='js'}None found.{/ts}"; diff --git a/civicrm/templates/CRM/common/status.tpl b/civicrm/templates/CRM/common/status.tpl index 27f5fbc0fa..5ff662baf0 100644 --- a/civicrm/templates/CRM/common/status.tpl +++ b/civicrm/templates/CRM/common/status.tpl @@ -12,7 +12,7 @@ {if $session->getStatus(false)} {assign var="status" value=$session->getStatus(true)} {foreach name=statLoop item=statItem from=$status} - {if $urlIsPublic} + {if !empty($urlIsPublic)} {assign var="infoType" value="no-popup `$statItem.type`"} {else} {assign var="infoType" value=$statItem.type} diff --git a/civicrm/templates/Civi/Angular/Page/Main.tpl b/civicrm/templates/Civi/Angular/Page/Main.tpl index 4918da28ae..fd8af0b59b 100644 --- a/civicrm/templates/Civi/Angular/Page/Main.tpl +++ b/civicrm/templates/Civi/Angular/Page/Main.tpl @@ -5,8 +5,8 @@ } </script> -<div ng-app="crmApp"> +<crm-angular-js modules="crmApp"> <div ng-view></div> -</div> +</crm-angular-js> {/literal} diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 0aa3d3835a..ab9058ca6a 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd::getLoader(); +return ComposerAutoloaderInitf5d7800057351310fcea45738163c661::getLoader(); diff --git a/civicrm/vendor/composer/autoload_classmap.php b/civicrm/vendor/composer/autoload_classmap.php index f2352a7a10..5893ad7f56 100644 --- a/civicrm/vendor/composer/autoload_classmap.php +++ b/civicrm/vendor/composer/autoload_classmap.php @@ -24,7 +24,6 @@ return array( 'ICallbackNamed' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', 'PDF417' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/pdf417.php', 'PEAR_Exception' => $vendorDir . '/pear/pear_exception/PEAR/Exception.php', - 'PclZip' => $vendorDir . '/pclzip/pclzip/pclzip.lib.php', 'QRcode' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/qrcode.php', 'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php', 'TCPDF2DBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php', diff --git a/civicrm/vendor/composer/autoload_files.php b/civicrm/vendor/composer/autoload_files.php index f59f8ca843..072cfaaec4 100644 --- a/civicrm/vendor/composer/autoload_files.php +++ b/civicrm/vendor/composer/autoload_files.php @@ -14,6 +14,7 @@ return array( 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', + '7e9bd612cc444b3eed788ebbe46263a0' => $vendorDir . '/laminas/laminas-zendframework-bridge/src/autoload.php', 'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php', '9e4824c5afbdc1482b6025ce3d4dfde8' => $vendorDir . '/league/csv/src/functions_include.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php index 8c77725a82..7e640e0330 100644 --- a/civicrm/vendor/composer/autoload_psr4.php +++ b/civicrm/vendor/composer/autoload_psr4.php @@ -10,7 +10,6 @@ return array( 'tubalmartin\\CssMin\\' => array($vendorDir . '/tubalmartin/cssmin/src'), 'phpseclib\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'), 'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'), - 'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper/src'), 'When\\' => array($vendorDir . '/tplaner/when/src'), 'TYPO3\\PharStreamWrapper\\' => array($vendorDir . '/typo3/phar-stream-wrapper/src'), 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), @@ -33,7 +32,6 @@ return array( 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), 'PhpOffice\\PhpWord\\' => array($vendorDir . '/phpoffice/phpword/src/PhpWord'), - 'PhpOffice\\Common\\' => array($vendorDir . '/phpoffice/common/src/Common'), 'Padaliyajay\\PHPAutoprefixer\\' => array($vendorDir . '/padaliyajay/php-autoprefixer/src'), 'MimeTyper\\' => array($vendorDir . '/adrienrn/php-mimetyper/src'), 'MJS\\TopSort\\Tests\\' => array($vendorDir . '/marcj/topsort/tests/Tests'), @@ -41,6 +39,8 @@ return array( 'League\\OAuth2\\Client\\' => array($vendorDir . '/league/oauth2-client/src', $vendorDir . '/league/oauth2-google/src'), 'League\\Csv\\' => array($vendorDir . '/league/csv/src'), 'LastCall\\DownloadsPlugin\\' => array($vendorDir . '/civicrm/composer-downloads-plugin/src'), + 'Laminas\\ZendFrameworkBridge\\' => array($vendorDir . '/laminas/laminas-zendframework-bridge/src'), + 'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 1aef4430ec..fe18c134f1 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 ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd +class ComposerAutoloaderInitf5d7800057351310fcea45738163c661 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitf5d7800057351310fcea45738163c661', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitf5d7800057351310fcea45738163c661', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInitd57997205be3721e32c907dd430b7abd::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitf5d7800057351310fcea45738163c661::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInitd57997205be3721e32c907dd430b7abd $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInitd57997205be3721e32c907dd430b7abd::$files; + $includeFiles = Composer\Autoload\ComposerStaticInitf5d7800057351310fcea45738163c661::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequired57997205be3721e32c907dd430b7abd($fileIdentifier, $file); + composerRequiref5d7800057351310fcea45738163c661($fileIdentifier, $file); } return $loader; } } -function composerRequired57997205be3721e32c907dd430b7abd($fileIdentifier, $file) +function composerRequiref5d7800057351310fcea45738163c661($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 f8cf1855c9..fd24629fc6 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInitd57997205be3721e32c907dd430b7abd +class ComposerStaticInitf5d7800057351310fcea45738163c661 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -15,6 +15,7 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', + '7e9bd612cc444b3eed788ebbe46263a0' => __DIR__ . '/..' . '/laminas/laminas-zendframework-bridge/src/autoload.php', 'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php', '9e4824c5afbdc1482b6025ce3d4dfde8' => __DIR__ . '/..' . '/league/csv/src/functions_include.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', @@ -39,10 +40,6 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd array ( 'cweagans\\Composer\\' => 18, ), - 'Z' => - array ( - 'Zend\\Escaper\\' => 13, - ), 'W' => array ( 'When\\' => 5, @@ -76,7 +73,6 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd 'Psr\\Container\\' => 14, 'Psr\\Cache\\' => 10, 'PhpOffice\\PhpWord\\' => 18, - 'PhpOffice\\Common\\' => 17, 'Padaliyajay\\PHPAutoprefixer\\' => 28, ), 'M' => @@ -90,6 +86,8 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd 'League\\OAuth2\\Client\\' => 21, 'League\\Csv\\' => 11, 'LastCall\\DownloadsPlugin\\' => 25, + 'Laminas\\ZendFrameworkBridge\\' => 28, + 'Laminas\\Escaper\\' => 16, ), 'G' => array ( @@ -139,10 +137,6 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd array ( 0 => __DIR__ . '/..' . '/cweagans/composer-patches/src', ), - 'Zend\\Escaper\\' => - array ( - 0 => __DIR__ . '/..' . '/zendframework/zend-escaper/src', - ), 'When\\' => array ( 0 => __DIR__ . '/..' . '/tplaner/when/src', @@ -231,10 +225,6 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd array ( 0 => __DIR__ . '/..' . '/phpoffice/phpword/src/PhpWord', ), - 'PhpOffice\\Common\\' => - array ( - 0 => __DIR__ . '/..' . '/phpoffice/common/src/Common', - ), 'Padaliyajay\\PHPAutoprefixer\\' => array ( 0 => __DIR__ . '/..' . '/padaliyajay/php-autoprefixer/src', @@ -264,6 +254,14 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd array ( 0 => __DIR__ . '/..' . '/civicrm/composer-downloads-plugin/src', ), + 'Laminas\\ZendFrameworkBridge\\' => + array ( + 0 => __DIR__ . '/..' . '/laminas/laminas-zendframework-bridge/src', + ), + 'Laminas\\Escaper\\' => + array ( + 0 => __DIR__ . '/..' . '/laminas/laminas-escaper/src', + ), 'GuzzleHttp\\Psr7\\' => array ( 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', @@ -446,7 +444,6 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd 'ICallbackNamed' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', 'PDF417' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/pdf417.php', 'PEAR_Exception' => __DIR__ . '/..' . '/pear/pear_exception/PEAR/Exception.php', - 'PclZip' => __DIR__ . '/..' . '/pclzip/pclzip/pclzip.lib.php', 'QRcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/qrcode.php', 'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php', 'TCPDF2DBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php', @@ -575,11 +572,11 @@ class ComposerStaticInitd57997205be3721e32c907dd430b7abd public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInitd57997205be3721e32c907dd430b7abd::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInitd57997205be3721e32c907dd430b7abd::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInitd57997205be3721e32c907dd430b7abd::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInitd57997205be3721e32c907dd430b7abd::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInitd57997205be3721e32c907dd430b7abd::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitf5d7800057351310fcea45738163c661::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitf5d7800057351310fcea45738163c661::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitf5d7800057351310fcea45738163c661::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInitf5d7800057351310fcea45738163c661::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInitf5d7800057351310fcea45738163c661::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index ef83ab487f..de85329898 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -569,17 +569,17 @@ }, { "name": "dompdf/dompdf", - "version": "v0.8.6", - "version_normalized": "0.8.6.0", + "version": "v1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" + "reference": "8768448244967a46d6e67b891d30878e0e15d25c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/8768448244967a46d6e67b891d30878e0e15d25c", + "reference": "8768448244967a46d6e67b891d30878e0e15d25c", "shasum": "" }, "require": { @@ -587,11 +587,11 @@ "ext-mbstring": "*", "phenx/php-font-lib": "^0.5.2", "phenx/php-svg-lib": "^0.3.3", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "mockery/mockery": "^1.3", - "phpunit/phpunit": "^7.5", + "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5" }, "suggest": { @@ -600,7 +600,7 @@ "ext-imagick": "Improves image processing performance", "ext-zlib": "Needed for pdf stream compression" }, - "time": "2020-08-30T22:54:22+00:00", + "time": "2021-01-08T14:18:52+00:00", "type": "library", "extra": { "branch-alias": { @@ -635,7 +635,11 @@ } ], "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", - "homepage": "https://github.com/dompdf/dompdf" + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v1.0.2" + } }, { "name": "electrolinux/phpquery", @@ -931,6 +935,121 @@ "url" ] }, + { + "name": "laminas/laminas-escaper", + "version": "2.6.1", + "version_normalized": "2.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-escaper": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "time": "2019-12-31T16:43:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + } + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "version_normalized": "1.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "time": "2020-09-14T14:23:00+00:00", + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + } + }, { "name": "league/csv", "version": "9.2.1", @@ -1254,45 +1373,6 @@ "random" ] }, - { - "name": "pclzip/pclzip", - "version": "2.8.2", - "version_normalized": "2.8.2.0", - "source": { - "type": "git", - "url": "https://github.com/ivanlanin/pclzip.git", - "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ivanlanin/pclzip/zipball/19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", - "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", - "shasum": "" - }, - "time": "2014-06-05T11:42:24+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "pclzip.lib.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Vincent Blavet" - } - ], - "description": "A PHP library that offers compression and extraction functions for Zip formatted archives", - "homepage": "http://www.phpconcept.net/pclzip", - "keywords": [ - "php", - "zip" - ] - }, { "name": "pear/auth_sasl", "version": "v1.1.0", @@ -1866,17 +1946,17 @@ }, { "name": "pear/validate_finance_creditcard", - "version": "dev-master", - "version_normalized": "9999999-dev", + "version": "0.7.0", + "version_normalized": "0.7.0.0", "source": { "type": "git", "url": "https://github.com/pear/Validate_Finance_CreditCard.git", - "reference": "a74da657d7a6f24b7e669294b32812e9a947519f" + "reference": "f138fb80b2305c1fe7ca33216b895b868396f1e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Validate_Finance_CreditCard/zipball/a74da657d7a6f24b7e669294b32812e9a947519f", - "reference": "a74da657d7a6f24b7e669294b32812e9a947519f", + "url": "https://api.github.com/repos/pear/Validate_Finance_CreditCard/zipball/f138fb80b2305c1fe7ca33216b895b868396f1e9", + "reference": "f138fb80b2305c1fe7ca33216b895b868396f1e9", "shasum": "" }, "require": { @@ -1886,9 +1966,9 @@ "require-dev": { "phpunit/phpunit": "*" }, - "time": "2016-09-12T08:01:21+00:00", + "time": "2021-05-19T22:03:15+00:00", "type": "library", - "installation-source": "source", + "installation-source": "dist", "autoload": { "psr-0": { "Validate": "./" @@ -1908,7 +1988,11 @@ "role": "Lead" } ], - "description": "Validation class for credit cards." + "description": "Validation class for credit cards.", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Validate_Finance_CreditCard", + "source": "https://github.com/pear/Validate_Finance_CreditCard" + } }, { "name": "phenx/php-font-lib", @@ -1991,100 +2075,37 @@ "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib" }, - { - "name": "phpoffice/common", - "version": "0.2.9", - "version_normalized": "0.2.9.0", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/Common.git", - "reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/Common/zipball/edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d", - "reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d", - "shasum": "" - }, - "require": { - "pclzip/pclzip": "^2.8", - "php": ">=5.3.0" - }, - "require-dev": { - "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "2.*", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^4.8.36 || ^7.0", - "sebastian/phpcpd": "2.*", - "squizlabs/php_codesniffer": "2.*" - }, - "time": "2018-07-13T14:12:34+00:00", - "type": "library", - "extra": { - "patches_applied": { - "Fix handling of libxml_disable_entity_loader": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpoffice-common-xml-entity-fix.patch" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpOffice\\Common\\": "src/Common/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Mark Baker" - }, - { - "name": "Franck Lefevre", - "homepage": "http://rootslabs.net" - } - ], - "description": "PHPOffice Common", - "homepage": "http://phpoffice.github.io", - "keywords": [ - "common", - "component", - "office", - "php" - ] - }, { "name": "phpoffice/phpword", - "version": "0.15.0", - "version_normalized": "0.15.0.0", + "version": "0.18.1", + "version_normalized": "0.18.1.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "dfa2f36cad2b632b7ab1c56473e4f5db9a7caf7f" + "reference": "06b90e39a36872c6ee73534e1a073f4b3132fc6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/dfa2f36cad2b632b7ab1c56473e4f5db9a7caf7f", - "reference": "dfa2f36cad2b632b7ab1c56473e4f5db9a7caf7f", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/06b90e39a36872c6ee73534e1a073f4b3132fc6a", + "reference": "06b90e39a36872c6ee73534e1a073f4b3132fc6a", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^5.3.3 || ^7.0", - "phpoffice/common": "^0.2.9", - "zendframework/zend-escaper": "^2.2" + "laminas/laminas-escaper": "^2.2", + "php": "^5.3.3 || ^7.0 || ^8.0" }, "require-dev": { - "dompdf/dompdf": "0.8.*", + "dompdf/dompdf": "0.8.* || 1.0.*", "ext-gd": "*", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^2.2", - "mpdf/mpdf": "5.7.4 || 6.* || 7.*", + "mpdf/mpdf": "5.7.4 || 6.* || 7.* || 8.*", "php-coveralls/php-coveralls": "1.1.0 || ^2.0", - "phploc/phploc": "2.* || 3.* || 4.*", + "phploc/phploc": "2.* || 3.* || 4.* || 5.* || 6.* || 7.*", "phpmd/phpmd": "2.*", "phpunit/phpunit": "^4.8.36 || ^7.0", - "squizlabs/php_codesniffer": "^2.9", + "squizlabs/php_codesniffer": "^2.9 || ^3.5", "tecnickcom/tcpdf": "6.*" }, "suggest": { @@ -2094,14 +2115,11 @@ "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": "2018-07-14T16:59:43+00:00", + "time": "2021-03-08T01:06:35+00:00", "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.16-dev" - }, - "patches_applied": { - "Fix handling of libxml_disable_entity_loader": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpword-libxml-fix-global-handling.patch" + "dev-develop": "0.18-dev" } }, "installation-source": "dist", @@ -2123,6 +2141,10 @@ "email": "me@gabrielbull.com", "homepage": "http://gabrielbull.com/" }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, { "name": "Ivan Lanin", "homepage": "http://ivan.lanin.org" @@ -2131,10 +2153,6 @@ "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" } @@ -2165,7 +2183,11 @@ "template processor", "word", "writer" - ] + ], + "support": { + "issues": "https://github.com/PHPOffice/PHPWord/issues", + "source": "https://github.com/PHPOffice/PHPWord/tree/0.18.1" + } }, { "name": "phpseclib/phpseclib", @@ -2665,17 +2687,17 @@ }, { "name": "symfony/config", - "version": "v3.4.40", - "version_normalized": "3.4.40.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "3634991bea549e73c45a964c38f30ceeae6ed877" + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/3634991bea549e73c45a964c38f30ceeae6ed877", - "reference": "3634991bea549e73c45a964c38f30ceeae6ed877", + "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", "shasum": "" }, "require": { @@ -2696,13 +2718,8 @@ "suggest": { "symfony/yaml": "To use the yaml reference dumper" }, - "time": "2020-04-12T14:33:46+00:00", + "time": "2020-10-24T10:57:07+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -2727,21 +2744,24 @@ } ], "description": "Symfony Config Component", - "homepage": "https://symfony.com" + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v3.4.47" + } }, { "name": "symfony/dependency-injection", - "version": "v3.4.40", - "version_normalized": "3.4.40.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d10ff5503b0b27711087eef4ac7835a752fe42fd" + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d10ff5503b0b27711087eef4ac7835a752fe42fd", - "reference": "d10ff5503b0b27711087eef4ac7835a752fe42fd", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", "shasum": "" }, "require": { @@ -2769,13 +2789,8 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, - "time": "2020-04-13T09:33:40+00:00", + "time": "2020-10-24T10:57:07+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -2800,21 +2815,24 @@ } ], "description": "Symfony DependencyInjection Component", - "homepage": "https://symfony.com" + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v3.4.47" + } }, { "name": "symfony/event-dispatcher", - "version": "v3.4.40", - "version_normalized": "3.4.40.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48" + "reference": "31fde73757b6bad247c54597beef974919ec6860" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9d4e22943b73acc1ba50595b7de1a01fe9dbad48", - "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", + "reference": "31fde73757b6bad247c54597beef974919ec6860", "shasum": "" }, "require": { @@ -2826,6 +2844,7 @@ "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0|~4.0", + "symfony/debug": "~3.4|~4.4", "symfony/dependency-injection": "~3.3|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/stopwatch": "~2.8|~3.0|~4.0" @@ -2834,13 +2853,8 @@ "symfony/dependency-injection": "", "symfony/http-kernel": "" }, - "time": "2020-03-15T09:38:08+00:00", + "time": "2020-10-24T10:57:07+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -2865,34 +2879,32 @@ } ], "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com" + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + } }, { "name": "symfony/filesystem", - "version": "v3.4.40", - "version_normalized": "3.4.40.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515" + "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/78a93e5606a19d0fb490afc3c4a9b7ecd86e1515", - "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "symfony/polyfill-ctype": "~1.8" }, - "time": "2020-04-12T16:54:01+00:00", + "time": "2020-10-24T10:57:07+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -2917,33 +2929,31 @@ } ], "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com" + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v3.4.47" + } }, { "name": "symfony/finder", - "version": "v3.4.40", - "version_normalized": "3.4.40.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200" + "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200", - "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200", + "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", + "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, - "time": "2020-02-14T07:34:21+00:00", + "time": "2020-11-16T17:02:08+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -2968,7 +2978,10 @@ } ], "description": "Symfony Finder Component", - "homepage": "https://symfony.com" + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v3.4.47" + } }, { "name": "symfony/polyfill-ctype", @@ -3275,29 +3288,24 @@ }, { "name": "symfony/process", - "version": "v3.4.40", - "version_normalized": "3.4.40.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271" + "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f5104c9dcbc2cfad45d01d5150c1da9836967271", - "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271", + "url": "https://api.github.com/repos/symfony/process/zipball/b8648cf1d5af12a44a51d07ef9bf980921f15fca", + "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, - "time": "2020-04-12T14:33:46+00:00", + "time": "2020-10-24T10:57:07+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -3322,21 +3330,24 @@ } ], "description": "Symfony Process Component", - "homepage": "https://symfony.com" + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v3.4.47" + } }, { "name": "symfony/var-dumper", - "version": "v3.4.44", - "version_normalized": "3.4.44.0", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3e31b82077039b1ea3b5a203ec1e3016606f4484" + "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3e31b82077039b1ea3b5a203ec1e3016606f4484", - "reference": "3e31b82077039b1ea3b5a203ec1e3016606f4484", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d", + "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d", "shasum": "" }, "require": { @@ -3355,13 +3366,8 @@ "ext-intl": "To show region name in time zone dump", "ext-symfony_debug": "" }, - "time": "2020-08-17T07:27:37+00:00", + "time": "2020-10-24T10:57:07+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "installation-source": "dist", "autoload": { "files": [ @@ -3393,27 +3399,30 @@ "keywords": [ "debug", "dump" - ] + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v3.4.47" + } }, { "name": "tecnickcom/tcpdf", - "version": "6.3.5", - "version_normalized": "6.3.5.0", + "version": "6.4.1", + "version_normalized": "6.4.1.0", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549" + "reference": "5ba838befdb37ef06a16d9f716f35eb03cb1b329" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/19a535eaa7fb1c1cac499109deeb1a7a201b4549", - "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/5ba838befdb37ef06a16d9f716f35eb03cb1b329", + "reference": "5ba838befdb37ef06a16d9f716f35eb03cb1b329", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2020-02-14T14:20:12+00:00", + "time": "2021-03-27T16:00:33+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3457,7 +3466,11 @@ "pdf", "pdf417", "qrcode" - ] + ], + "support": { + "issues": "https://github.com/tecnickcom/TCPDF/issues", + "source": "https://github.com/tecnickcom/TCPDF/tree/6.4.1" + } }, { "name": "togos/gitignore", @@ -3796,54 +3809,6 @@ "unserialize" ] }, - { - "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" - ], - "abandoned": "laminas/laminas-escaper" - }, { "name": "zetacomponents/base", "version": "1.9.1", diff --git a/civicrm/vendor/dompdf/dompdf/README.md b/civicrm/vendor/dompdf/dompdf/README.md index 568dc3f824..a46f2f341f 100644 --- a/civicrm/vendor/dompdf/dompdf/README.md +++ b/civicrm/vendor/dompdf/dompdf/README.md @@ -53,7 +53,8 @@ Follow us on []( * php-font-lib * php-svg-lib -Note that some required dependencies may have further dependencies (notably php-svg-lib requires sabberworm/php-css-parser). +Note that some required dependencies may have further dependencies +(notably php-svg-lib requires sabberworm/php-css-parser). ### Recommendations @@ -199,6 +200,18 @@ $dompdf->setOptions($options); See [Dompdf\Options](src/Options.php) for a list of available options. +### Resource Reference Requirements + +In order to protect potentially sensitive information Dompdf imposes +restrictions on files referenced from the local file system or the web. + +Files accessed through web-based protocols have the following requirements: + * The Dompdf option "isRemoteEnabled" must be set to "true" + * PHP must either have the curl extension enabled or the + allow_url_fopen setting set to true + +Files accessed through the local file system have the following requirement: + * The file must fall within the path(s) specified for the Dompdf "chroot" option ## Limitations (Known Issues) @@ -221,4 +234,5 @@ See [Dompdf\Options](src/Options.php) for a list of available options. [](http://goo.gl/DSvWf) -*If you find this project useful, please consider making a donation. Any funds donated will be used to help further development on this project.)* +*If you find this project useful, please consider making a donation. +Any funds donated will be used to help further development on this project.)* diff --git a/civicrm/vendor/dompdf/dompdf/VERSION b/civicrm/vendor/dompdf/dompdf/VERSION index 7fc2521fd7..6d7de6e6ab 100644 --- a/civicrm/vendor/dompdf/dompdf/VERSION +++ b/civicrm/vendor/dompdf/dompdf/VERSION @@ -1 +1 @@ -0.8.6 +1.0.2 diff --git a/civicrm/vendor/dompdf/dompdf/composer.json b/civicrm/vendor/dompdf/dompdf/composer.json index 262614dbef..a7d38cb1ed 100644 --- a/civicrm/vendor/dompdf/dompdf/composer.json +++ b/civicrm/vendor/dompdf/dompdf/composer.json @@ -32,14 +32,14 @@ } }, "require": { - "php": "^7.1", + "php": "^7.1 || ^8.0", "ext-dom": "*", "ext-mbstring": "*", "phenx/php-font-lib": "^0.5.2", "phenx/php-svg-lib": "^0.3.3" }, "require-dev": { - "phpunit/phpunit": "^7.5", + "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5", "mockery/mockery": "^1.3" }, diff --git a/civicrm/vendor/dompdf/dompdf/lib/Cpdf.php b/civicrm/vendor/dompdf/dompdf/lib/Cpdf.php index 0a6e9b53bd..7150a3e70f 100644 --- a/civicrm/vendor/dompdf/dompdf/lib/Cpdf.php +++ b/civicrm/vendor/dompdf/dompdf/lib/Cpdf.php @@ -1028,7 +1028,7 @@ class Cpdf } } - return 'SUB' . str_pad($base_26,3 , 'A', STR_PAD_LEFT); + return 'SUB' . str_pad($base_26, 3 , 'A', STR_PAD_LEFT); } /** @@ -2617,7 +2617,6 @@ EOT; } return null; - } /** @@ -3171,7 +3170,7 @@ EOT; $id = $this->catalogId; - $this->o_indirect_references($this->indirectReferenceId, 'add', ['Javascript' => $js_id]); + $this->o_indirect_references($this->indirectReferenceId, 'add', ['JavaScript' => $js_id]); } if ($this->fileIdentifier === '') { @@ -4277,9 +4276,7 @@ EOT; * @param string|null $contactinfo * @return int */ - function addSignature($signcert, $privkey, $password = '', - $name = null, $location = null, $reason = null, $contactinfo = null - ) { + function addSignature($signcert, $privkey, $password = '', $name = null, $location = null, $reason = null, $contactinfo = null) { $sigId = ++$this->numObj; $this->o_sig($sigId, 'new', [ 'SignCert' => $signcert, @@ -5533,17 +5530,17 @@ EOT; * add a PNG image into the document, from a GD object * this should work with remote files * + * @param resource $img A GD resource * @param string $file The PNG file * @param float $x X position * @param float $y Y position * @param float $w Width * @param float $h Height - * @param resource $img A GD resource * @param bool $is_mask true if the image is a mask * @param bool $mask true if the image is masked * @throws Exception */ - function addImagePng($file, $x, $y, $w = 0.0, $h = 0.0, &$img, $is_mask = false, $mask = null) + function addImagePng(&$img, $file, $x, $y, $w = 0.0, $h = 0.0, $is_mask = false, $mask = null) { if (!function_exists("imagepng")) { throw new \Exception("The PHP GD extension is required, but is not installed."); @@ -5595,7 +5592,7 @@ EOT; } } //End isset($this->imagelist[$file]) (png Duplicate removal) - $this->addPngFromBuf($file, $x, $y, $w, $h, $data, $is_mask, $mask); + $this->addPngFromBuf($data, $file, $x, $y, $w, $h, $is_mask, $mask); } /** @@ -5759,12 +5756,12 @@ EOT; // embed mask image if ($tempfile_alpha) { - $this->addImagePng($tempfile_alpha, $x, $y, $w, $h, $imgalpha, true); + $this->addImagePng($imgalpha, $tempfile_alpha, $x, $y, $w, $h, true); imagedestroy($imgalpha); } // embed image, masked with previously embedded mask - $this->addImagePng($tempfile_plain, $x, $y, $w, $h, $imgplain, false, ($tempfile_alpha !== null)); + $this->addImagePng($imgplain, $tempfile_plain, $x, $y, $w, $h, false, ($tempfile_alpha !== null)); imagedestroy($imgplain); // remove temp files @@ -5844,7 +5841,7 @@ EOT; imagecopy($img, $imgtmp, 0, 0, 0, 0, $sx, $sy); imagedestroy($imgtmp); } - $this->addImagePng($file, $x, $y, $w, $h, $img); + $this->addImagePng($img, $file, $x, $y, $w, $h); if ($img) { imagedestroy($img); @@ -5880,16 +5877,16 @@ EOT; /** * add a PNG image into the document, from a memory buffer of the file * + * @param $data * @param $file * @param $x * @param $y * @param float $w * @param float $h - * @param $data * @param bool $is_mask * @param null $mask */ - function addPngFromBuf($file, $x, $y, $w = 0.0, $h = 0.0, &$data, $is_mask = false, $mask = null) + function addPngFromBuf(&$data, $file, $x, $y, $w = 0.0, $h = 0.0, $is_mask = false, $mask = null) { if (isset($this->imagelist[$file])) { $data = null; @@ -6218,31 +6215,31 @@ EOT; $h = $w * $imageHeight / $imageWidth; } - $this->addJpegImage_common($data, $x, $y, $w, $h, $imageWidth, $imageHeight, $channels, $img); + $this->addJpegImage_common($data, $img, $imageWidth, $imageHeight, $x, $y, $w, $h, $channels); } /** * common code used by the two JPEG adding functions * @param $data + * @param $imgname + * @param $imageWidth + * @param $imageHeight * @param $x * @param $y * @param int $w * @param int $h - * @param $imageWidth - * @param $imageHeight * @param int $channels - * @param $imgname */ private function addJpegImage_common( &$data, + $imgname, + $imageWidth, + $imageHeight, $x, $y, $w = 0, $h = 0, - $imageWidth, - $imageHeight, - $channels = 3, - $imgname + $channels = 3 ) { if ($this->image_iscached($imgname)) { $label = $this->imagelist[$imgname]['label']; diff --git a/civicrm/vendor/dompdf/dompdf/src/Adapter/CPDF.php b/civicrm/vendor/dompdf/dompdf/src/Adapter/CPDF.php index 9d8f156741..d7d46a2c64 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Adapter/CPDF.php +++ b/civicrm/vendor/dompdf/dompdf/src/Adapter/CPDF.php @@ -180,7 +180,7 @@ class CPDF implements Canvas * @param string $orientation The orientation of the document (either 'landscape' or 'portrait') * @param Dompdf $dompdf The Dompdf instance */ - public function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf) + public function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf = null) { if (is_array($paper)) { $size = $paper; @@ -194,7 +194,11 @@ class CPDF implements Canvas [$size[2], $size[3]] = [$size[3], $size[2]]; } - $this->_dompdf = $dompdf; + if ($dompdf === null) { + $this->_dompdf = new Dompdf(); + } else { + $this->_dompdf = $dompdf; + } $this->_pdf = new \Dompdf\Cpdf( $size, diff --git a/civicrm/vendor/dompdf/dompdf/src/Adapter/GD.php b/civicrm/vendor/dompdf/dompdf/src/Adapter/GD.php index 229776b266..e5bd40f024 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Adapter/GD.php +++ b/civicrm/vendor/dompdf/dompdf/src/Adapter/GD.php @@ -138,7 +138,7 @@ class GD implements Canvas * @param float $aa_factor Anti-aliasing factor, 1 for no AA * @param array $bg_color Image background color: array(r,g,b,a), 0 <= r,g,b,a <= 1 */ - public function __construct($size = 'letter', $orientation = "portrait", Dompdf $dompdf, $aa_factor = 1.0, $bg_color = [1, 1, 1, 0]) + public function __construct($size = 'letter', $orientation = "portrait", Dompdf $dompdf = null, $aa_factor = 1.0, $bg_color = [1, 1, 1, 0]) { if (!is_array($size)) { @@ -155,7 +155,11 @@ class GD implements Canvas list($size[2], $size[3]) = [$size[3], $size[2]]; } - $this->_dompdf = $dompdf; + if ($dompdf === null) { + $this->_dompdf = new Dompdf(); + } else { + $this->_dompdf = $dompdf; + } $this->dpi = $this->get_dompdf()->getOptions()->getDpi(); diff --git a/civicrm/vendor/dompdf/dompdf/src/Adapter/PDFLib.php b/civicrm/vendor/dompdf/dompdf/src/Adapter/PDFLib.php index 8f13be7390..3f20d240b8 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Adapter/PDFLib.php +++ b/civicrm/vendor/dompdf/dompdf/src/Adapter/PDFLib.php @@ -205,7 +205,7 @@ class PDFLib implements Canvas * @param string $orientation The orientation of the document (either 'landscape' or 'portrait') * @param Dompdf $dompdf */ - public function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf) + public function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf = null) { if (is_array($paper)) { $size = $paper; @@ -222,7 +222,11 @@ class PDFLib implements Canvas $this->_width = $size[2] - $size[0]; $this->_height = $size[3] - $size[1]; - $this->_dompdf = $dompdf; + if ($dompdf === null) { + $this->_dompdf = new Dompdf(); + } else { + $this->_dompdf = $dompdf; + } $this->_pdf = new \PDFLib(); diff --git a/civicrm/vendor/dompdf/dompdf/src/Canvas.php b/civicrm/vendor/dompdf/dompdf/src/Canvas.php index d33b0b95a0..b809e7aece 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Canvas.php +++ b/civicrm/vendor/dompdf/dompdf/src/Canvas.php @@ -24,7 +24,7 @@ namespace Dompdf; */ interface Canvas { - function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf); + function __construct($paper = "letter", $orientation = "portrait", Dompdf $dompdf = null); /** * @return Dompdf diff --git a/civicrm/vendor/dompdf/dompdf/src/Cellmap.php b/civicrm/vendor/dompdf/dompdf/src/Cellmap.php index 6fe9973716..aea16a59f2 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Cellmap.php +++ b/civicrm/vendor/dompdf/dompdf/src/Cellmap.php @@ -434,24 +434,21 @@ class Cellmap $col =& $this->get_column($j); $col["used-width"] = $width; $next_col =& $this->get_column($j + 1); - $next_col["x"] = $next_col["x"] + $width; + $next_col["x"] = $col["x"] + $width; } /** * @param int $i - * @param mixed $height + * @param long $height */ public function set_row_height($i, $height) { $row =& $this->get_row($i); - - if ($row["height"] !== null && $height <= $row["height"]) { - return; + if ($height > $row["height"]) { + $row["height"] = $height; } - - $row["height"] = $height; $next_row =& $this->get_row($i + 1); - $next_row["y"] = $row["y"] + $height; + $next_row["y"] = $row["y"] + $row["height"]; } /** @@ -647,12 +644,12 @@ class Cellmap $width = $style->width; $val = null; - if (Helpers::is_percent($width)) { + if (Helpers::is_percent($width) && $colspan === 1) { $var = "percent"; $val = (float)rtrim($width, "% ") / $colspan; - } else if ($width !== "auto") { + } else if ($width !== "auto" && $colspan === 1) { $var = "absolute"; - $val = $style->length_in_pt($frame_min) / $colspan; + $val = $style->length_in_pt($frame_min); } $min = 0; @@ -674,10 +671,10 @@ class Cellmap $max += $col["max-width"]; } - if ($frame_min > $min) { + if ($frame_min > $min && $colspan === 1) { // The frame needs more space. Expand each sub-column // FIXME try to avoid putting this dummy value when table-layout:fixed - $inc = ($this->is_layout_fixed() ? 10e-10 : ($frame_min - $min) / $colspan); + $inc = ($this->is_layout_fixed() ? 10e-10 : ($frame_min - $min)); for ($c = 0; $c < $colspan; $c++) { $col =& $this->get_column($this->__col + $c); $col["min-width"] += $inc; diff --git a/civicrm/vendor/dompdf/dompdf/src/Css/Color.php b/civicrm/vendor/dompdf/dompdf/src/Css/Color.php index 4591037795..601a2e04b1 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Css/Color.php +++ b/civicrm/vendor/dompdf/dompdf/src/Css/Color.php @@ -183,6 +183,7 @@ class Color static $cache = []; $color = strtolower($color); + $alpha = 1.0; if (isset($cache[$color])) { return $cache[$color]; @@ -203,14 +204,18 @@ class Color return $cache[$color] = self::getArray($color[1] . $color[1] . $color[2] . $color[2] . $color[3] . $color[3]); } // #rgba format else if ($length == 5 && $color[0] === "#") { - $alpha = round(hexdec($color[4] . $color[4])/255, 2); + if (ctype_xdigit($color[4])) { + $alpha = round(hexdec($color[4] . $color[4])/255, 2); + } return $cache[$color] = self::getArray($color[1] . $color[1] . $color[2] . $color[2] . $color[3] . $color[3], $alpha); } // #rrggbb format else if ($length == 7 && $color[0] === "#") { return $cache[$color] = self::getArray(mb_substr($color, 1, 6)); } // #rrggbbaa format else if ($length == 9 && $color[0] === "#") { - $alpha = round(hexdec(mb_substr($color, 7, 2))/255, 2); + if (ctype_xdigit(mb_substr($color, 7, 2))) { + $alpha = round(hexdec(mb_substr($color, 7, 2))/255, 2); + } return $cache[$color] = self::getArray(mb_substr($color, 1, 6), $alpha); } // rgb( r,g,b ) / rgba( r,g,b,α ) format else if (mb_strpos($color, "rgb") !== false) { @@ -226,7 +231,6 @@ class Color // alpha transparency // FIXME: not currently using transparency - $alpha = 1.0; if (count($triplet) == 4) { $alpha = (trim(array_pop($triplet))); if (Helpers::is_percent($alpha)) { diff --git a/civicrm/vendor/dompdf/dompdf/src/Css/Style.php b/civicrm/vendor/dompdf/dompdf/src/Css/Style.php index e2fc6c1076..250a25efdb 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Css/Style.php +++ b/civicrm/vendor/dompdf/dompdf/src/Css/Style.php @@ -422,7 +422,7 @@ class Style $d["src"] = ""; $d["unicode_range"] = ""; - // vendor-previxed properties + // vendor-prefixed properties $d["_dompdf_background_image_resolution"] = &$d["background_image_resolution"]; $d["_dompdf_image_resolution"] = &$d["image_resolution"]; $d["_dompdf_keep"] = ""; @@ -794,7 +794,13 @@ class Style unset($this->_prop_cache[$shorthand]); } } - $this->__set($prop, $val); + //FIXME: temporary hack around lack of persistence of base href for URLs + if (($prop === "background_image" || $prop === "list_style_image") && isset($style->_props_computed[$prop])) { + $this->__set($prop, $style->_props_computed[$prop]); + } else { + // computed value not set, recompute use the specified value + $this->__set($prop, $val); + } } } } @@ -1692,7 +1698,9 @@ class Style } else if ( (($style === "border" || $style === "outline") && $type === "width" && strpos($val, "%") !== false) || - (($style === "margin" || $style === "padding") && (strpos($val, "%") !== false || $val === "auto")) + ($style === "padding" && strpos($val, "%") !== false) + || + ($style === "margin" && (strpos($val, "%") !== false || $val === "auto")) ) { $this->_props_computed[$prop] = $val; } elseif (($style === "border" || $style === "outline") && $type === "width" && strpos($val, "%") === false) { @@ -1806,7 +1814,7 @@ class Style if (empty($val) || $val === "none") { $path = "none"; - } else if (mb_strpos($val, "url") === false) { + } elseif (mb_strpos($val, "url") === false) { $path = "none"; //Don't resolve no image -> otherwise would prefix path and no longer recognize as none } else { $val = preg_replace("/url\(\s*['\"]?([^'\")]+)['\"]?\s*\)/", "\\1", trim($val)); @@ -1817,7 +1825,7 @@ class Style $this->_stylesheet->get_host(), $this->_stylesheet->get_base_path(), $val); - if ($parsed_url["protocol"] == "" && $this->_stylesheet->get_protocol() == "") { + if (($parsed_url["protocol"] == "" || $parsed_url["protocol"] == "file://") && ($this->_stylesheet->get_protocol() == "" || $this->_stylesheet->get_protocol() == "file://")) { $path = realpath($path); // If realpath returns FALSE then specifically state that there is no background image if (!$path) { @@ -1884,7 +1892,12 @@ class Style function set_background_image($val) { $this->_props["background_image"] = $val; - $this->_props_computed["background_image"] = "url(" . $this->_image($val) . ")"; + $parsed_val = $this->_image($val); + if ($parsed_val === "none") { + $this->_props_computed["background_image"] = "none"; + } else { + $this->_props_computed["background_image"] = "url(" . $parsed_val . ")"; + } $this->_prop_cache["background_image"] = null; } @@ -2486,30 +2499,29 @@ class Style protected function _set_border($side, $border_spec, $important) { $border_spec = preg_replace("/\s*\,\s*/", ",", $border_spec); - //$border_spec = str_replace(",", " ", $border_spec); // Why did we have this ?? rbg(10, 102, 10) > rgb(10 102 10) $arr = explode(" ", $border_spec); - // FIXME: handle partial values - //For consistency of individual and combined properties, and with ie8 and firefox3 - //reset all attributes, even if only partially given - //$this->_set_style_side_type('border', $side, 'style', self::$_defaults['border_' . $side . '_style'], $important); - //$this->_set_style_side_type('border', $side, 'width', self::$_defaults['border_' . $side . '_width'], $important); - //$this->_set_style_side_type('border', $side, 'color', self::$_defaults['border_' . $side . '_color'], $important); - foreach ($arr as $value) { $value = trim($value); - if (in_array($value, self::$BORDER_STYLES)) { - $this->_set_style_side_type('border', $side, 'style', $value, $important); - } elseif (preg_match("/[.0-9]+(?:px|pt|pc|em|ex|%|in|mm|cm)|(?:thin|medium|thick)/", $value)) { - $this->_set_style_side_type('border', $side, 'width', $value, $important); - } elseif ($value === "inherit") { - $this->_set_style_side_type('border', $side, 'style', $value, $important); - $this->_set_style_side_type('border', $side, 'width', $value, $important); - $this->_set_style_side_type('border', $side, 'color', $value, $important); + $prop = ""; + if (strtolower($value) === "inherit") { + $this->__set("border_${side}_color", "inherit"); + $this->__set("border_${side}_style", "inherit"); + $this->__set("border_${side}_width", "inherit"); + continue; + } elseif (in_array($value, self::$BORDER_STYLES)) { + $prop = "border_${side}_style"; + } elseif ($value === "0" || preg_match("/[.0-9]+(?:px|pt|pc|em|ex|%|in|mm|cm)|(?:thin|medium|thick)/", $value)) { + $prop = "border_${side}_width"; } else { // must be color - $this->_set_style_side_type('border', $side, 'color', $this->munge_color($value), $important); + $prop = "border_${side}_color"; } + + if ($important) { + $this->_important_props[$prop] = true; + } + $this->__set($prop, $value); } } @@ -2835,7 +2847,7 @@ class Style if (in_array($value, self::$BORDER_STYLES)) { $this->__set("outline_style", $value); - } else if (preg_match("/[.0-9]+(?:px|pt|pc|em|ex|%|in|mm|cm)|(?:thin|medium|thick)/", $value)) { + } else if ($value === "0" || preg_match("/[.0-9]+(?:px|pt|pc|em|ex|%|in|mm|cm)|(?:thin|medium|thick)/", $value)) { $this->__set("outline_width", $value); } else { // must be color @@ -2911,7 +2923,12 @@ class Style function set_list_style_image($val) { $this->_props["list_style_image"] = $val; - $this->_props_computed["list_style_image"] = "url(" . $this->_image($val) . ")"; + $parsed_val = $this->_image($val); + if ($parsed_val === "none") { + $this->_props_computed["list_style_image"] = "none"; + } else { + $this->_props_computed["list_style_image"] = "url(" . $parsed_val . ")"; + } $this->_prop_cache["list_style_image"] = null; } @@ -3301,7 +3318,7 @@ class Style $this->_props_computed["z_index"] = null; $this->_prop_cache["z_index"] = null; - if (round($val) != $val && $val !== "auto") { + if ($val !== "auto" && round($val) != $val) { return; } diff --git a/civicrm/vendor/dompdf/dompdf/src/Css/Stylesheet.php b/civicrm/vendor/dompdf/dompdf/src/Css/Stylesheet.php index f175d970d0..5efaf98ef3 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Css/Stylesheet.php +++ b/civicrm/vendor/dompdf/dompdf/src/Css/Stylesheet.php @@ -360,11 +360,7 @@ class Stylesheet list($this->_protocol, $this->_base_host, $this->_base_path, $filename) = $parsed_url; - if ($this->_protocol == "") { - $file = $this->_base_path . $filename; - } else { - $file = Helpers::build_url($this->_protocol, $this->_base_host, $this->_base_path, $filename); - } + $file = Helpers::build_url($this->_protocol, $this->_base_host, $this->_base_path, $filename); $options = $this->_dompdf->getOptions(); // Download the remote file @@ -377,9 +373,17 @@ class Stylesheet $rootDir = realpath($options->getRootDir()); if (strpos($realfile, $rootDir) !== 0) { - $chroot = realpath($options->getChroot()); - if (!$chroot || strpos($realfile, $chroot) !== 0) { - Helpers::record_warnings(E_USER_WARNING, "Permission denied on $file. The file could not be found under the directory specified by Options::chroot.", __FILE__, __LINE__); + $chroot = $options->getChroot(); + $chrootValid = false; + foreach($chroot as $chrootPath) { + $chrootPath = realpath($chrootPath); + if ($chrootPath !== false && strpos($realfile, $chrootPath) === 0) { + $chrootValid = true; + break; + } + } + if ($chrootValid !== true) { + Helpers::record_warnings(E_USER_WARNING, "Permission denied on $file. The file could not be found under the paths specified by Options::chroot.", __FILE__, __LINE__); return; } } @@ -1424,42 +1428,33 @@ class Stylesheet $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss(); $parsed_url = "none"; - if (mb_strpos($val, "url") === false) { + if (empty($val) || $val === "none") { + $path = "none"; + } elseif (mb_strpos($val, "url") === false) { $path = "none"; //Don't resolve no image -> otherwise would prefix path and no longer recognize as none } else { $val = preg_replace("/url\(\s*['\"]?([^'\")]+)['\"]?\s*\)/", "\\1", trim($val)); // Resolve the url now in the context of the current stylesheet $parsed_url = Helpers::explode_url($val); - if ($parsed_url["protocol"] == "" && $this->get_protocol() == "") { - if ($parsed_url["path"][0] === '/' || $parsed_url["path"][0] === '\\') { - $path = $_SERVER["DOCUMENT_ROOT"] . '/'; - } else { - $path = $this->get_base_path(); - } - - $path .= $parsed_url["path"] . $parsed_url["file"]; + $path = Helpers::build_url($this->_protocol, + $this->_base_host, + $this->_base_path, + $val); + if (($parsed_url["protocol"] == "" || $parsed_url["protocol"] == "file://") && ($this->_protocol == "" || $this->_protocol == "file://")) { $path = realpath($path); // If realpath returns FALSE then specifically state that there is no background image - // FIXME: Is this causing problems for imported CSS files? There are some './none' references when running the test cases. if (!$path) { $path = 'none'; } - } else { - $path = Helpers::build_url($this->get_protocol(), - $this->get_host(), - $this->get_base_path(), - $val); } } - if ($DEBUGCSS) { print "<pre>[_image\n"; print_r($parsed_url); - print $this->get_protocol() . "\n" . $this->get_base_path() . "\n" . $path . "\n"; - print "_image]</pre>";; + print $this->_protocol . "\n" . $this->_base_path . "\n" . $path . "\n"; + print "_image]</pre>"; } - return $path; } diff --git a/civicrm/vendor/dompdf/dompdf/src/Dompdf.php b/civicrm/vendor/dompdf/dompdf/src/Dompdf.php index 4d736a3499..6658555b63 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Dompdf.php +++ b/civicrm/vendor/dompdf/dompdf/src/Dompdf.php @@ -179,11 +179,18 @@ class Dompdf private $systemLocale = null; /** - * Tells if the system's locale is the C standard one + * The system's mbstring internal encoding * - * @var bool + * @var string + */ + private $mbstringEncoding = null; + + /** + * The system's PCRE JIT configuration + * + * @var string */ - private $localeStandard = false; + private $pcreJit = null; /** * The default view of the PDF in the viewer @@ -272,13 +279,6 @@ class Dompdf */ public function __construct($options = null) { - mb_internal_encoding('UTF-8'); - - if (version_compare(PHP_VERSION, '7.0.0') >= 0) - { - @ini_set('pcre.jit', 0); - } - if (isset($options) && $options instanceof Options) { $this->setOptions($options); } elseif (is_array($options)) { @@ -288,12 +288,12 @@ class Dompdf } $versionFile = realpath(__DIR__ . '/../VERSION'); - if (file_exists($versionFile) && ($version = file_get_contents($versionFile)) !== false && $version !== '$Format:<%h>$') { + if (file_exists($versionFile) && ($version = trim(file_get_contents($versionFile))) !== false && $version !== '$Format:<%h>$') { $this->version = sprintf('dompdf %s', $version); } - $this->localeStandard = sprintf('%.1f', 1.0) == '1.0'; - $this->saveLocale(); + $this->setPhpConfig(); + $this->paperSize = $this->options->getDefaultPaperSize(); $this->paperOrientation = $this->options->getDefaultPaperOrientation(); @@ -301,33 +301,48 @@ class Dompdf $this->setFontMetrics(new FontMetrics($this->getCanvas(), $this->getOptions())); $this->css = new Stylesheet($this); - $this->restoreLocale(); + $this->restorePhpConfig(); } /** - * Save the system's locale configuration and - * set the right value for numeric formatting + * Save the system's existing locale, PCRE JIT, and MBString encoding + * configuration and configure the system for Dompdf processing */ - private function saveLocale() + private function setPhpConfig() { - if ($this->localeStandard) { - return; + if (sprintf('%.1f', 1.0) !== '1.0') { + $this->systemLocale = setlocale(LC_NUMERIC, "0"); + setlocale(LC_NUMERIC, "C"); + } + + if (version_compare(PHP_VERSION, '7.0.0') >= 0) { + $this->pcreJit = @ini_get('pcre.jit'); + @ini_set('pcre.jit', '0'); } - $this->systemLocale = setlocale(LC_NUMERIC, "0"); - setlocale(LC_NUMERIC, "C"); + $this->mbstringEncoding = mb_internal_encoding(); + mb_internal_encoding('UTF-8'); } /** * Restore the system's locale configuration */ - private function restoreLocale() + private function restorePhpConfig() { - if ($this->localeStandard) { - return; + if (!empty($this->systemLocale)) { + setlocale(LC_NUMERIC, $this->systemLocale); + $this->systemLocale = null; } - setlocale(LC_NUMERIC, $this->systemLocale); + if (!empty($this->pcreJit)) { + @ini_set('pcre.jit', $this->pcreJit); + $this->pcreJit = null; + } + + if (!empty($this->mbstringEncoding)) { + mb_internal_encoding($this->mbstringEncoding); + $this->mbstringEncoding = null; + } } /** @@ -350,7 +365,7 @@ class Dompdf */ public function loadHtmlFile($file, $encoding = null) { - $this->saveLocale(); + $this->setPhpConfig(); if (!$this->protocol && !$this->baseHost && !$this->basePath) { [$this->protocol, $this->baseHost, $this->basePath] = Helpers::explode_url($file); @@ -370,9 +385,17 @@ class Dompdf if ($protocol == "" || $protocol === "file://") { $realfile = realpath($uri); - $chroot = realpath($this->options->getChroot()); - if ($chroot && strpos($realfile, $chroot) !== 0) { - throw new Exception("Permission denied on $file. The file could not be found under the directory specified by Options::chroot."); + $chroot = $this->options->getChroot(); + $chrootValid = false; + foreach($chroot as $chrootPath) { + $chrootPath = realpath($chrootPath); + if ($chrootPath !== false && strpos($realfile, $chrootPath) === 0) { + $chrootValid = true; + break; + } + } + if ($chrootValid !== true) { + throw new Exception("Permission denied on $file. The file could not be found under the paths specified by Options::chroot."); } $ext = strtolower(pathinfo($realfile, PATHINFO_EXTENSION)); @@ -402,7 +425,7 @@ class Dompdf } } - $this->restoreLocale(); + $this->restorePhpConfig(); $this->loadHtml($contents, $encoding); } @@ -442,7 +465,7 @@ class Dompdf */ public function loadHtml($str, $encoding = null) { - $this->saveLocale(); + $this->setPhpConfig(); // Determine character encoding when $encoding parameter not used if ($encoding === null) { @@ -534,7 +557,7 @@ class Dompdf $this->loadDOM($doc, $quirksmode); } finally { restore_error_handler(); - $this->restoreLocale(); + $this->restorePhpConfig(); } } @@ -720,7 +743,7 @@ class Dompdf */ public function render() { - $this->saveLocale(); + $this->setPhpConfig(); $options = $this->options; $logOutputFile = $options->getLogOutputFile(); @@ -836,7 +859,7 @@ class Dompdf ob_end_clean(); } - $this->restoreLocale(); + $this->restorePhpConfig(); } /** @@ -898,14 +921,14 @@ class Dompdf */ public function stream($filename = "document.pdf", $options = []) { - $this->saveLocale(); + $this->setPhpConfig(); $canvas = $this->getCanvas(); if (!is_null($canvas)) { $canvas->stream($filename, $options); } - $this->restoreLocale(); + $this->restorePhpConfig(); } /** @@ -922,7 +945,7 @@ class Dompdf */ public function output($options = []) { - $this->saveLocale(); + $this->setPhpConfig(); $canvas = $this->getCanvas(); if (is_null($canvas)) { @@ -931,7 +954,7 @@ class Dompdf $output = $canvas->output($options); - $this->restoreLocale(); + $this->restorePhpConfig(); return $output; } diff --git a/civicrm/vendor/dompdf/dompdf/src/FontMetrics.php b/civicrm/vendor/dompdf/dompdf/src/FontMetrics.php index 9af41ba70d..2fdd2ee24d 100644 --- a/civicrm/vendor/dompdf/dompdf/src/FontMetrics.php +++ b/civicrm/vendor/dompdf/dompdf/src/FontMetrics.php @@ -184,12 +184,17 @@ class FontMetrics $remoteHash = md5($remoteFile); $prefix = $fontname . "_" . $styleString; - $prefix = preg_replace("/[^\\pL\d]+/u", "-", $prefix); $prefix = trim($prefix, "-"); if (function_exists('iconv')) { - $prefix = iconv('utf-8', 'us-ascii//TRANSLIT', $prefix); + $prefix = @iconv('utf-8', 'us-ascii//TRANSLIT', $prefix); } - $prefix = preg_replace("/[^-\w]+/", "", $prefix); + $prefix_encoding = mb_detect_encoding($prefix, mb_detect_order(), true); + $substchar = mb_substitute_character(); + mb_substitute_character(0x005F); + $prefix = mb_convert_encoding($prefix, "ISO-8859-1", $prefix_encoding); + mb_substitute_character($substchar); + $prefix = preg_replace("[\W]", "_", $prefix); + $prefix = preg_replace("/[^-_\w]+/", "", $prefix); $localFile = $fontDir . "/" . $prefix . "_" . $remoteHash; @@ -213,9 +218,17 @@ class FontMetrics $rootDir = realpath($this->options->getRootDir()); if (strpos($realfile, $rootDir) !== 0) { - $chroot = realpath($this->options->getChroot()); - if (!$chroot || strpos($realfile, $chroot) !== 0) { - Helpers::record_warnings(E_USER_WARNING, "Permission denied on $remoteFile. The file could not be found under the directory specified by Options::chroot.", __FILE__, __LINE__); + $chroot = $this->options->getChroot(); + $chrootValid = false; + foreach($chroot as $chrootPath) { + $chrootPath = realpath($chrootPath); + if ($chrootPath !== false && strpos($realfile, $chrootPath) === 0) { + $chrootValid = true; + break; + } + } + if ($chrootValid !== true) { + Helpers::record_warnings(E_USER_WARNING, "Permission denied on $remoteFile. The file could not be found under the paths specified by Options::chroot.", __FILE__, __LINE__); return false; } } diff --git a/civicrm/vendor/dompdf/dompdf/src/FrameDecorator/Text.php b/civicrm/vendor/dompdf/dompdf/src/FrameDecorator/Text.php index 92eafc2888..9948fb5ea5 100644 --- a/civicrm/vendor/dompdf/dompdf/src/FrameDecorator/Text.php +++ b/civicrm/vendor/dompdf/dompdf/src/FrameDecorator/Text.php @@ -171,7 +171,10 @@ class Text extends AbstractFrameDecorator } $split = $this->_frame->get_node()->splitText($offset); - + if ($split === false) { + return null; + } + $deco = $this->copy($split); $p = $this->get_parent(); diff --git a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Block.php b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Block.php index 8dc628a3bc..1647606da2 100644 --- a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Block.php +++ b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Block.php @@ -375,7 +375,7 @@ class Block extends AbstractFrameReflower } else { // Expand the height if overflow is visible - if ($height === "auto" && $content_height > $height /* && $style->overflow === "visible" */) { + if ($height === "auto" && $content_height > 0 /* && $style->overflow === "visible" */) { $height = $content_height; } @@ -404,16 +404,16 @@ class Block extends AbstractFrameReflower } } - if ($max_height !== "none" && $min_height > $max_height) { + if ($max_height !== "none" && $max_height !== "auto" && (float)$min_height > (float)$max_height) { // Swap 'em list($max_height, $min_height) = [$min_height, $max_height]; } - if ($max_height !== "none" && $height > $max_height) { + if ($max_height !== "none" && $max_height !== "auto" && $height > (float)$max_height) { $height = $max_height; } - if ($height < $min_height) { + if ($height < (float)$min_height) { $height = $min_height; } } diff --git a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Image.php b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Image.php index 6619397c46..77ced334e4 100644 --- a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Image.php +++ b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Image.php @@ -124,36 +124,36 @@ class Image extends AbstractFrameReflower $min_height = $style->length_in_pt($style->min_height, $h); $max_height = $style->length_in_pt($style->max_height, $h); - if ($max_width !== "none" && $width > $max_width) { + if ($max_width !== "none" && $max_width !== "auto" && $width > (float)$max_width) { if (!$height_forced) { - $height *= $max_width / $width; + $height *= (float)$max_width / $width; } - $width = $max_width; + $width = (float)$max_width; } - if ($min_width !== "none" && $width < $min_width) { + if ($min_width !== "none" && $min_width !== "auto" && $width < (float)$min_width) { if (!$height_forced) { - $height *= $min_width / $width; + $height *= (float)$min_width / $width; } - $width = $min_width; + $width = (float)$min_width; } - if ($max_height !== "none" && $height > $max_height) { + if ($max_height !== "none" && $max_height !== "auto" && $height > (float)$max_height) { if (!$width_forced) { - $width *= $max_height / $height; + $width *= (float)$max_height / $height; } - $height = $max_height; + $height = (float)$max_height; } - if ($min_height !== "none" && $height < $min_height) { + if ($min_height !== "none" && $min_height !== "auto" && $height < (float)$min_height) { if (!$width_forced) { - $width *= $min_height / $height; + $width *= (float)$min_height / $height; } - $height = $min_height; + $height = (float)$min_height; } } diff --git a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Table.php b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Table.php index ebf430efe4..c2a68dee50 100644 --- a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Table.php +++ b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Table.php @@ -343,16 +343,16 @@ class Table extends AbstractFrameReflower } } - if ($max_height !== "none" && $min_height > $max_height) { + if ($max_height !== "none" && $max_height !== "auto" && (float)$min_height > (float)$max_height) { // Swap 'em list($max_height, $min_height) = [$min_height, $max_height]; } - if ($max_height !== "none" && $height > $max_height) { + if ($max_height !== "none" && $max_height !== "auto" && $height > (float)$max_height) { $height = $max_height; } - if ($height < $min_height) { + if ($height < (float)$min_height) { $height = $min_height; } } else { diff --git a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Text.php b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Text.php index ea92343ce9..314f41c621 100644 --- a/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Text.php +++ b/civicrm/vendor/dompdf/dompdf/src/FrameReflower/Text.php @@ -20,6 +20,10 @@ use Dompdf\Helpers; */ class Text extends AbstractFrameReflower { + /** + * PHP string represantation of HTML entity <shy> + */ + const SOFT_HYPHEN = "\xC2\xAD"; /** * @var BlockFrameDecorator @@ -36,7 +40,7 @@ class Text extends AbstractFrameReflower public static $_whitespace_pattern = '/([^\S\xA0]+)/u'; // The regex splits on everything that's a separator (^\S double negative), excluding nbsp (\xa0), plus dashes // This currently excludes the "narrow nbsp" character - public static $_wordbreak_pattern = '/([^\S\xA0]+|-+)/u'; + public static $_wordbreak_pattern = '/([^\S\xA0]+|\-+|\xAD+)/u'; /** * @var FontMetrics @@ -84,7 +88,8 @@ class Text extends AbstractFrameReflower $char_spacing = (float)$style->length_in_pt($style->letter_spacing); // Determine the frame width including margin, padding & border - $text_width = $this->getFontMetrics()->getTextWidth($text, $font, $size, $word_spacing, $char_spacing); + $visible_text = preg_replace('/\xAD/u', '', $text); + $text_width = $this->getFontMetrics()->getTextWidth($visible_text, $font, $size, $word_spacing, $char_spacing); $mbp_width = (float)$style->length_in_pt([$style->margin_left, $style->border_left_width, @@ -119,15 +124,29 @@ class Text extends AbstractFrameReflower $str = ""; reset($words); - // @todo support <shy>, <wbr> + $shy_width = $this->getFontMetrics()->getTextWidth(self::SOFT_HYPHEN, $font, $size); + + // @todo support <wbr> for ($i = 0; $i < $wc; $i += 2) { $word = $words[$i] . (isset($words[$i + 1]) ? $words[$i + 1] : ""); $word_width = $this->getFontMetrics()->getTextWidth($word, $font, $size, $word_spacing, $char_spacing); if ($width + $word_width + $mbp_width > $available_width) { + // If the previous split happened by soft hyphen, we have to append its width again + // because the last hyphen of a line won't be removed. + if (isset($words[$i - 1]) && self::SOFT_HYPHEN === $words[$i - 1]) { + $width += $shy_width; + } break; } - $width += $word_width; + // If the word is splitted by soft hyphen, but no line break is needed + // we have to reduce the width. But the str is not modified, otherwise + // the wrong offset is calculated at the end of this method. + if (isset($words[$i + 1]) && self::SOFT_HYPHEN === $words[$i + 1]) { + $width += $word_width - $shy_width; + } else { + $width += $word_width; + } $str .= $word; } @@ -294,6 +313,15 @@ class Text extends AbstractFrameReflower // split the line if required $frame->split_text($split); + $t = $frame->get_text(); + + // Remove inner shoft hyphens + $shyPosition = mb_strpos($t, self::SOFT_HYPHEN); + if (false !== $shyPosition && $shyPosition < mb_strlen($t) - 1) { + $t = str_replace(self::SOFT_HYPHEN, '', mb_substr($t, 0, -1)) . mb_substr($t, -1); + $frame->set_text($t); + } + // Do we need to trim spaces on wrapped lines? This might be desired, however, we // can't trim the lines here or the layout will be affected if trimming the line // leaves enough space to fit the next word in the text stream (because pdf layout @@ -331,6 +359,9 @@ class Text extends AbstractFrameReflower $t = ltrim($t); } + // Remove soft hyphens + $t = str_replace(self::SOFT_HYPHEN, '', $t); + $frame->set_text($t); } diff --git a/civicrm/vendor/dompdf/dompdf/src/Image/Cache.php b/civicrm/vendor/dompdf/dompdf/src/Image/Cache.php index 9f9130fd7c..c37f9b001a 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Image/Cache.php +++ b/civicrm/vendor/dompdf/dompdf/src/Image/Cache.php @@ -127,9 +127,17 @@ class Cache $rootDir = realpath($dompdf->getOptions()->getRootDir()); if (strpos($realfile, $rootDir) !== 0) { - $chroot = realpath($dompdf->getOptions()->getChroot()); - if (!$chroot || strpos($realfile, $chroot) !== 0) { - throw new ImageException("Permission denied on $resolved_url. The file could not be found under the directory specified by Options::chroot.", E_WARNING); + $chroot = $dompdf->getOptions()->getChroot(); + $chrootValid = false; + foreach($chroot as $chrootPath) { + $chrootPath = realpath($chrootPath); + if ($chrootPath !== false && strpos($realfile, $chrootPath) === 0) { + $chrootValid = true; + break; + } + } + if ($chrootValid !== true) { + throw new ImageException("Permission denied on $resolved_url. The file could not be found under the paths specified by Options::chroot.", E_WARNING); } } @@ -165,6 +173,7 @@ class Cache $type = "png"; $message = self::$error_message; Helpers::record_warnings($e->getCode(), $e->getMessage() . " \n $url", $e->getFile(), $e->getLine()); + self::$_cache[$full_url] = $resolved_url; } return [$resolved_url, $type, $message]; @@ -172,7 +181,7 @@ class Cache /** * Unlink all cached images (i.e. temporary images either downloaded - * or converted) + * or converted) except for the bundled "broken image" */ static function clear() { @@ -181,6 +190,9 @@ class Cache } foreach (self::$_cache as $file) { + if ($file === self::$broken_image) { + continue; + } if (self::$_dompdf->getOptions()->getDebugPng()) { print "[clear unlink $file]"; } diff --git a/civicrm/vendor/dompdf/dompdf/src/Options.php b/civicrm/vendor/dompdf/dompdf/src/Options.php index b46c396b6a..4ee591aad1 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Options.php +++ b/civicrm/vendor/dompdf/dompdf/src/Options.php @@ -47,7 +47,8 @@ class Options * dompdf's "chroot" * * Prevents dompdf from accessing system files or other files on the webserver. - * All local files opened by dompdf must be in a subdirectory of this directory. + * All local files opened by dompdf must be in a subdirectory of this directory + * or array of directories. * DO NOT set it to '/' since this could allow an attacker to use dompdf to * read any files on the server. This should be an absolute path. * @@ -57,7 +58,7 @@ class Options * documentation is available on the dompdf wiki at: * https://github.com/dompdf/dompdf/wiki * - * @var string + * @var array */ private $chroot; @@ -274,27 +275,16 @@ class Options */ private $pdflibLicense = ""; - /** - * @var string - * @deprecated - */ - private $adminUsername = "user"; - - /** - * @var string - * @deprecated - */ - private $adminPassword = "password"; - /** * @param array $attributes */ public function __construct(array $attributes = null) { - $this->setChroot(realpath(__DIR__ . "/../")); - $this->setRootDir($this->getChroot()); + $rootDir = realpath(__DIR__ . "/../"); + $this->setChroot(array($rootDir)); + $this->setRootDir($rootDir); $this->setTempDir(sys_get_temp_dir()); - $this->setFontDir($this->chroot . "/lib/fonts"); + $this->setFontDir($rootDir . "/lib/fonts"); $this->setFontCache($this->getFontDir()); $this->setLogOutputFile($this->getTempDir() . "/log.htm"); @@ -366,10 +356,6 @@ class Options $this->setPdfBackend($value); } elseif ($key === 'pdflibLicense' || $key === 'pdflib_license') { $this->setPdflibLicense($value); - } elseif ($key === 'adminUsername' || $key === 'admin_username') { - $this->setAdminUsername($value); - } elseif ($key === 'adminPassword' || $key === 'admin_password') { - $this->setAdminPassword($value); } } return $this; @@ -433,50 +419,10 @@ class Options return $this->getPdfBackend(); } elseif ($key === 'pdflibLicense' || $key === 'pdflib_license') { return $this->getPdflibLicense(); - } elseif ($key === 'adminUsername' || $key === 'admin_username') { - return $this->getAdminUsername(); - } elseif ($key === 'adminPassword' || $key === 'admin_password') { - return $this->getAdminPassword(); } return null; } - /** - * @param string $adminPassword - * @return $this - */ - public function setAdminPassword($adminPassword) - { - $this->adminPassword = $adminPassword; - return $this; - } - - /** - * @return string - */ - public function getAdminPassword() - { - return $this->adminPassword; - } - - /** - * @param string $adminUsername - * @return $this - */ - public function setAdminUsername($adminUsername) - { - $this->adminUsername = $adminUsername; - return $this; - } - - /** - * @return string - */ - public function getAdminUsername() - { - return $this->adminUsername; - } - /** * @param string $pdfBackend * @return $this @@ -514,21 +460,29 @@ class Options } /** - * @param string $chroot + * @param array|string $chroot * @return $this */ - public function setChroot($chroot) + public function setChroot($chroot, $delimiter = ',') { - $this->chroot = $chroot; + if (is_string($chroot)) { + $this->chroot = explode($delimiter, $chroot); + } elseif (is_array($chroot)) { + $this->chroot = $chroot; + } return $this; } /** - * @return string + * @return array */ public function getChroot() { - return $this->chroot; + $chroot = []; + if (is_array($this->chroot)) { + $chroot = $this->chroot; + } + return $chroot; } /** diff --git a/civicrm/vendor/dompdf/dompdf/src/Renderer/AbstractRenderer.php b/civicrm/vendor/dompdf/dompdf/src/Renderer/AbstractRenderer.php index 8c8d2d49e6..241ea1d48b 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Renderer/AbstractRenderer.php +++ b/civicrm/vendor/dompdf/dompdf/src/Renderer/AbstractRenderer.php @@ -421,7 +421,7 @@ abstract class AbstractRenderer //don't create temp file, but place gd object directly into the pdf if (!$is_png && $this->_canvas instanceof CPDF) { // Note: CPDF_Adapter image converts y position - $this->_canvas->get_cpdf()->addImagePng($filedummy, $x, $this->_canvas->get_height() - $y - $height, $width, $height, $bg); + $this->_canvas->get_cpdf()->addImagePng($bg, $filedummy, $x, $this->_canvas->get_height() - $y - $height, $width, $height); } else { $tmp_dir = $this->_dompdf->getOptions()->getTempDir(); $tmp_name = @tempnam($tmp_dir, "bg_dompdf_img_"); @@ -845,7 +845,7 @@ abstract class AbstractRenderer * * @var $top */ - protected function _border_line($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $pattern_name, $r1 = 0, $r2 = 0) + protected function _border_line($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $pattern_name = "none", $r1 = 0, $r2 = 0) { /** used by $$side */ list($top, $right, $bottom, $left) = $widths; diff --git a/civicrm/vendor/dompdf/dompdf/src/Renderer/Block.php b/civicrm/vendor/dompdf/dompdf/src/Renderer/Block.php index 1a054e30dc..5d932a9129 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Renderer/Block.php +++ b/civicrm/vendor/dompdf/dompdf/src/Renderer/Block.php @@ -73,9 +73,11 @@ class Block extends AbstractRenderer if ($options->getDebugLayout()) { if ($options->getDebugLayoutBlocks()) { - $this->_debug_layout($frame->get_border_box(), "red"); + $debug_border_box = $frame->get_border_box(); + $this->_debug_layout([$debug_border_box['x'], $debug_border_box['y'], (float)$debug_border_box['w'], (float)$debug_border_box['h']], "red"); if ($options->getDebugLayoutPaddingBox()) { - $this->_debug_layout($frame->get_padding_box(), "red", [0.5, 0.5]); + $debug_padding_box = $frame->get_padding_box(); + $this->_debug_layout([$debug_padding_box['x'], $debug_padding_box['y'], (float)$debug_padding_box['w'], (float)$debug_padding_box['h']], "red", [0.5, 0.5]); } } diff --git a/civicrm/vendor/dompdf/dompdf/src/Renderer/Image.php b/civicrm/vendor/dompdf/dompdf/src/Renderer/Image.php index afcaa90151..7750794cd8 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Renderer/Image.php +++ b/civicrm/vendor/dompdf/dompdf/src/Renderer/Image.php @@ -129,10 +129,12 @@ class Image extends Block } if ($this->_dompdf->getOptions()->getDebugLayout() && $this->_dompdf->getOptions()->getDebugLayoutBlocks()) { - $this->_debug_layout($frame->get_border_box(), "blue"); + $debug_border_box = $frame->get_border_box(); + $this->_debug_layout([$debug_border_box['x'], $debug_border_box['y'], (float)$debug_border_box['w'], (float)$debug_border_box['h']], "blue"); if ($this->_dompdf->getOptions()->getDebugLayoutPaddingBox()) { - $this->_debug_layout($frame->get_padding_box(), "blue", [0.5, 0.5]); - } + $debug_padding_box = $frame->get_padding_box(); + $this->_debug_layout([$debug_padding_box['x'], $debug_padding_box['y'], (float)$debug_padding_box['w'], (float)$debug_padding_box['h']], "blue", [0.5, 0.5]); + } } $id = $frame->get_node()->getAttribute("id"); diff --git a/civicrm/vendor/dompdf/dompdf/src/Renderer/Inline.php b/civicrm/vendor/dompdf/dompdf/src/Renderer/Inline.php index a2587827f9..7c8f91978d 100644 --- a/civicrm/vendor/dompdf/dompdf/src/Renderer/Inline.php +++ b/civicrm/vendor/dompdf/dompdf/src/Renderer/Inline.php @@ -143,12 +143,17 @@ class Inline extends AbstractRenderer $w += (float)$child_w; } - $h = max($h, $child_h, $child_h2); + if ($child_h === 'auto') { + list($child_w, $child_h2) = $this->get_child_size($child, $do_debug_layout_line); + } + $h = max($h, (float)$child_h, (float)$child_h2); if ($do_debug_layout_line) { - $this->_debug_layout($child->get_border_box(), "blue"); + $debug_border_box = $child->get_border_box(); + $this->_debug_layout([$debug_border_box['x'], $debug_border_box['y'], (float)$debug_border_box['w'], (float)$debug_border_box['h']], "blue"); if ($this->_dompdf->getOptions()->getDebugLayoutPaddingBox()) { - $this->_debug_layout($child->get_padding_box(), "blue", [0.5, 0.5]); + $debug_padding_box = $child->get_padding_box(); + $this->_debug_layout([$debug_padding_box['x'], $debug_padding_box['y'], (float)$debug_padding_box['w'], (float)$debug_padding_box['h']], "blue", [0.5, 0.5]); } } } diff --git a/civicrm/vendor/laminas/laminas-escaper/CHANGELOG.md b/civicrm/vendor/laminas/laminas-escaper/CHANGELOG.md new file mode 100644 index 0000000000..086e889c4d --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/CHANGELOG.md @@ -0,0 +1,73 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 2.6.1 - 2019-09-05 + +### Added + +- [zendframework/zend-escaper#32](https://github.com/zendframework/zend-escaper/pull/32) adds support for PHP 7.3. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 2.6.0 - 2018-04-25 + +### Added + +- [zendframework/zend-escaper#28](https://github.com/zendframework/zend-escaper/pull/28) adds support for PHP 7.1 and 7.2. + +### Changed + +- [zendframework/zend-escaper#25](https://github.com/zendframework/zend-escaper/pull/25) changes the behavior of the `Escaper` constructor; it now raises an + exception for non-null, non-string `$encoding` arguments. + +### Deprecated + +- Nothing. + +### Removed + +- [zendframework/zend-escaper#28](https://github.com/zendframework/zend-escaper/pull/28) removes support for PHP 5.5. + +- [zendframework/zend-escaper#28](https://github.com/zendframework/zend-escaper/pull/28) removes support for HHVM. + +### Fixed + +- Nothing. + +## 2.5.2 - 2016-06-30 + +### Added + +- [zendframework/zend-escaper#11](https://github.com/zendframework/zend-escaper/pull/11), + [zendframework/zend-escaper#12](https://github.com/zendframework/zend-escaper/pull/12), and + [zendframework/zend-escaper#13](https://github.com/zendframework/zend-escaper/pull/13) prepare and + publish documentation to https://docs.laminas.dev/laminas-escaper/ + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [zendframework/zend-escaper#3](https://github.com/zendframework/zend-escaper/pull/3) updates the + the escaping mechanism to add support for escaping characters outside the Basic + Multilingual Plane when escaping for JS, CSS, or HTML attributes. diff --git a/civicrm/vendor/laminas/laminas-escaper/COPYRIGHT.md b/civicrm/vendor/laminas/laminas-escaper/COPYRIGHT.md new file mode 100644 index 0000000000..c4fc4fee19 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/COPYRIGHT.md @@ -0,0 +1,2 @@ +Copyright (c) 2019, Laminas Foundation. +All rights reserved. (https://getlaminas.org/) diff --git a/civicrm/vendor/zendframework/zend-escaper/LICENSE.txt b/civicrm/vendor/laminas/laminas-escaper/LICENSE.md similarity index 54% rename from civicrm/vendor/zendframework/zend-escaper/LICENSE.txt rename to civicrm/vendor/laminas/laminas-escaper/LICENSE.md index 6eab5aa14f..09f53edc11 100644 --- a/civicrm/vendor/zendframework/zend-escaper/LICENSE.txt +++ b/civicrm/vendor/laminas/laminas-escaper/LICENSE.md @@ -1,19 +1,19 @@ -Copyright (c) 2005-2015, Zend Technologies USA, Inc. +Copyright (c) 2019, Laminas Foundation All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: +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 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. +- 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 Zend Technologies USA, Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. +- Neither the name of Laminas Foundation 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 diff --git a/civicrm/vendor/laminas/laminas-escaper/README.md b/civicrm/vendor/laminas/laminas-escaper/README.md new file mode 100644 index 0000000000..a779778a73 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/README.md @@ -0,0 +1,28 @@ +# laminas-escaper + +[](https://travis-ci.org/laminas/laminas-escaper) +[](https://coveralls.io/github/laminas/laminas-escaper?branch=master) + +The OWASP Top 10 web security risks study lists Cross-Site Scripting (XSS) in +second place. PHP’s sole functionality against XSS is limited to two functions +of which one is commonly misapplied. Thus, the laminas-escaper component was written. +It offers developers a way to escape output and defend from XSS and related +vulnerabilities by introducing contextual escaping based on peer-reviewed rules. + +## Installation + +Run the following to install this library: + +```bash +$ composer require laminas/laminas-escaper +``` + +## Documentation + +Browse the documentation online at https://docs.laminas.dev/laminas-escaper/ + +## Support + +* [Issues](https://github.com/laminas/laminas-escaper/issues/) +* [Chat](https://laminas.dev/chat/) +* [Forum](https://discourse.laminas.dev/) diff --git a/civicrm/vendor/laminas/laminas-escaper/composer.json b/civicrm/vendor/laminas/laminas-escaper/composer.json new file mode 100644 index 0000000000..c39174ff52 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/composer.json @@ -0,0 +1,58 @@ +{ + "name": "laminas/laminas-escaper", + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "license": "BSD-3-Clause", + "keywords": [ + "laminas", + "escaper" + ], + "homepage": "https://laminas.dev", + "support": { + "docs": "https://docs.laminas.dev/laminas-escaper/", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "source": "https://github.com/laminas/laminas-escaper", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "chat": "https://laminas.dev/chat", + "forum": "https://discourse.laminas.dev" + }, + "config": { + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "require": { + "php": "^5.6 || ^7.0", + "laminas/laminas-zendframework-bridge": "^1.0" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "LaminasTest\\Escaper\\": "test/" + } + }, + "scripts": { + "check": [ + "@cs-check", + "@test" + ], + "cs-check": "phpcs", + "cs-fix": "phpcbf", + "test": "phpunit --colors=always", + "test-coverage": "phpunit --colors=always --coverage-clover clover.xml" + }, + "replace": { + "zendframework/zend-escaper": "self.version" + } +} diff --git a/civicrm/vendor/zendframework/zend-escaper/src/Escaper.php b/civicrm/vendor/laminas/laminas-escaper/src/Escaper.php similarity index 87% rename from civicrm/vendor/zendframework/zend-escaper/src/Escaper.php rename to civicrm/vendor/laminas/laminas-escaper/src/Escaper.php index 072d543f71..9f903a5931 100644 --- a/civicrm/vendor/zendframework/zend-escaper/src/Escaper.php +++ b/civicrm/vendor/laminas/laminas-escaper/src/Escaper.php @@ -1,13 +1,12 @@ <?php + /** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License + * @see https://github.com/laminas/laminas-escaper for the canonical source repository + * @copyright https://github.com/laminas/laminas-escaper/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-escaper/blob/master/LICENSE.md New BSD License */ -namespace Zend\Escaper; +namespace Laminas\Escaper; /** * Context specific methods for use in secure output escaping @@ -24,12 +23,12 @@ class Escaper * * @var array */ - protected static $htmlNamedEntityMap = array( + protected static $htmlNamedEntityMap = [ 34 => 'quot', // quotation mark 38 => 'amp', // ampersand 60 => 'lt', // less-than sign 62 => 'gt', // greater-than sign - ); + ]; /** * Current encoding for escaping. If not UTF-8, we convert strings from this encoding @@ -41,13 +40,11 @@ class Escaper /** * Holds the value of the special flags passed as second parameter to - * htmlspecialchars(). We modify these for PHP 5.4 to take advantage - * of the new ENT_SUBSTITUTE flag for correctly dealing with invalid - * UTF-8 sequences. + * htmlspecialchars(). * - * @var string + * @var int */ - protected $htmlSpecialCharsFlags = ENT_QUOTES; + protected $htmlSpecialCharsFlags; /** * Static Matcher which escapes characters for HTML Attribute contexts @@ -75,7 +72,7 @@ class Escaper * * @var array */ - protected $supportedEncodings = array( + protected $supportedEncodings = [ 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', 'ibm866', '866', 'cp1251', 'windows-1251', @@ -85,12 +82,11 @@ class Escaper 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', 'cp932', '932', 'euc-jp', 'eucjp', 'eucjp-win', 'macroman' - ); + ]; /** * Constructor: Single parameter allows setting of global encoding for use by - * the current object. If PHP 5.4 is detected, additional ENT_SUBSTITUTE flag - * is set for htmlspecialchars() calls. + * the current object. * * @param string $encoding * @throws Exception\InvalidArgumentException @@ -98,7 +94,11 @@ class Escaper public function __construct($encoding = null) { if ($encoding !== null) { - $encoding = (string) $encoding; + if (! is_string($encoding)) { + throw new Exception\InvalidArgumentException( + get_class($this) . ' constructor parameter must be a string, received ' . gettype($encoding) + ); + } if ($encoding === '') { throw new Exception\InvalidArgumentException( get_class($this) . ' constructor parameter does not allow a blank value' @@ -106,7 +106,7 @@ class Escaper } $encoding = strtolower($encoding); - if (!in_array($encoding, $this->supportedEncodings)) { + if (! in_array($encoding, $this->supportedEncodings)) { throw new Exception\InvalidArgumentException( 'Value of \'' . $encoding . '\' passed to ' . get_class($this) . ' constructor parameter is invalid. Provide an encoding supported by htmlspecialchars()' @@ -116,14 +116,13 @@ class Escaper $this->encoding = $encoding; } - if (defined('ENT_SUBSTITUTE')) { - $this->htmlSpecialCharsFlags|= ENT_SUBSTITUTE; - } + // We take advantage of ENT_SUBSTITUTE flag to correctly deal with invalid UTF-8 sequences. + $this->htmlSpecialCharsFlags = ENT_QUOTES | ENT_SUBSTITUTE; // set matcher callbacks - $this->htmlAttrMatcher = array($this, 'htmlAttrMatcher'); - $this->jsMatcher = array($this, 'jsMatcher'); - $this->cssMatcher = array($this, 'cssMatcher'); + $this->htmlAttrMatcher = [$this, 'htmlAttrMatcher']; + $this->jsMatcher = [$this, 'jsMatcher']; + $this->cssMatcher = [$this, 'cssMatcher']; } /** @@ -248,7 +247,7 @@ class Escaper * replace it with while grabbing the integer value of the character. */ if (strlen($chr) > 1) { - $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); + $chr = $this->convertEncoding($chr, 'UTF-32BE', 'UTF-8'); } $hex = bin2hex($chr); @@ -281,7 +280,13 @@ class Escaper return sprintf('\\x%02X', ord($chr)); } $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); - return sprintf('\\u%04s', strtoupper(bin2hex($chr))); + $hex = strtoupper(bin2hex($chr)); + if (strlen($hex) <= 4) { + return sprintf('\\u%04s', $hex); + } + $highSurrogate = substr($hex, 0, 4); + $lowSurrogate = substr($hex, 4, 4); + return sprintf('\\u%04s\\u%04s', $highSurrogate, $lowSurrogate); } /** @@ -297,7 +302,7 @@ class Escaper if (strlen($chr) == 1) { $ord = ord($chr); } else { - $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); + $chr = $this->convertEncoding($chr, 'UTF-32BE', 'UTF-8'); $ord = hexdec(bin2hex($chr)); } return sprintf('\\%X ', $ord); @@ -319,7 +324,7 @@ class Escaper $result = $this->convertEncoding($string, 'UTF-8', $this->getEncoding()); } - if (!$this->isUtf8($result)) { + if (! $this->isUtf8($result)) { throw new Exception\RuntimeException( sprintf('String to be escaped was not valid UTF-8 or could not be converted: %s', $result) ); diff --git a/civicrm/vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php b/civicrm/vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php new file mode 100644 index 0000000000..7ebe04ef6b --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php @@ -0,0 +1,13 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-escaper for the canonical source repository + * @copyright https://github.com/laminas/laminas-escaper/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-escaper/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\Escaper\Exception; + +interface ExceptionInterface +{ +} diff --git a/civicrm/vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php b/civicrm/vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php new file mode 100644 index 0000000000..f5bf1fa5c0 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php @@ -0,0 +1,17 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-escaper for the canonical source repository + * @copyright https://github.com/laminas/laminas-escaper/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-escaper/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\Escaper\Exception; + +/** + * Invalid argument exception + */ +class InvalidArgumentException extends \InvalidArgumentException implements + ExceptionInterface +{ +} diff --git a/civicrm/vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php b/civicrm/vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php new file mode 100644 index 0000000000..ab1903fd2b --- /dev/null +++ b/civicrm/vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php @@ -0,0 +1,17 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-escaper for the canonical source repository + * @copyright https://github.com/laminas/laminas-escaper/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-escaper/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\Escaper\Exception; + +/** + * Invalid argument exception + */ +class RuntimeException extends \RuntimeException implements + ExceptionInterface +{ +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/.github/FUNDING.yml b/civicrm/vendor/laminas/laminas-zendframework-bridge/.github/FUNDING.yml new file mode 100644 index 0000000000..6674aab603 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/.github/FUNDING.yml @@ -0,0 +1 @@ +community_bridge: laminas-project diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/.github/workflows/release-on-milestone-closed.yml b/civicrm/vendor/laminas/laminas-zendframework-bridge/.github/workflows/release-on-milestone-closed.yml new file mode 100644 index 0000000000..6066f8b20a --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/.github/workflows/release-on-milestone-closed.yml @@ -0,0 +1,71 @@ +# Alternate workflow example. +# This one is identical to the one in release-on-milestone.yml, with one change: +# the Release step uses the ORGANIZATION_ADMIN_TOKEN instead, to allow it to +# trigger a release workflow event. This is useful if you have other actions +# that intercept that event. + +name: "Automatic Releases" + +on: + milestone: + types: + - "closed" + +jobs: + release: + name: "GIT tag, release & create merge-up PR" + runs-on: ubuntu-latest + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Release" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:release" + env: + "GITHUB_TOKEN": ${{ secrets.ORGANIZATION_ADMIN_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Create Merge-Up Pull Request" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:create-merge-up-pull-request" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Create and/or Switch to new Release Branch" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:switch-default-branch-to-next-minor" + env: + "GITHUB_TOKEN": ${{ secrets.ORGANIZATION_ADMIN_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Bump Changelog Version On Originating Release Branch" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:bump-changelog" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Create new milestones" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:create-milestones" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/CHANGELOG.md b/civicrm/vendor/laminas/laminas-zendframework-bridge/CHANGELOG.md new file mode 100644 index 0000000000..fee5e07a7f --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/CHANGELOG.md @@ -0,0 +1,686 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.1.1 - 2020-09-14 + +### Fixed + +- [#71](https://github.com/laminas/laminas-zendframework-bridge/pull/71) fixes detection of the vendor directory when the `COMPOSER_VENDOR_DIR` env variable is missing or empty. Previously, this could lead to scenarios where a non-existent path was used for finding the bridge autoloader. + + +----- + +### Release Notes for [1.1.1](https://github.com/laminas/laminas-zendframework-bridge/milestone/5) + + + +### 1.1.1 + +- Total issues resolved: **0** +- Total pull requests resolved: **1** +- Total contributors: **1** + +#### Bug + + - [71: Verify `COMPOSER_VENDOR_DIR` in conditional](https://github.com/laminas/laminas-zendframework-bridge/pull/71) thanks to @aaronbushnell + +## 1.1.0 - 2020-08-18 + +### Added + +- [#68](https://github.com/laminas/laminas-zendframework-bridge/pull/68) adds support for the upcoming PHP 8.0 release. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#67](https://github.com/laminas/laminas-zendframework-bridge/pull/67) fixes how the Composer autoload file is found, looking first in the `COMPOSER_VENDOR_DIR` before trying to resolve relative to where the package is installed. + +## 1.0.4 - 2020-05-20 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#66](https://github.com/laminas/laminas-zendframework-bridge/pull/66) ensures that references to BjyAuthorize templates are not rewritten, so that they can be resolved during runtime. + +## 1.0.3 - 2020-04-03 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#63](https://github.com/laminas/laminas-zendframework-bridge/pull/63) fixes handling of dependency configuration to ensure each of delegators, initializers, and abstract factories are properly handled during configuraiton post processing. The new approach should allow delegators to work post-migration to Laminas or Mezzio. + +- [#61](https://github.com/laminas/laminas-zendframework-bridge/pull/61) ensures configuration for delegator factories gets rewritten; the functionality broke in version 1.0.1. + +## 1.0.2 - 2020-03-26 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#55](https://github.com/laminas/laminas-zendframework-bridge/pull/55) adds provisions to ensure that references to legacy classes/interfaces in dependency configuration always create aliases from the legacy to the new classes. Previously, we did straight replacements in the configuration, which could lead to the legacy service no longer being available. Now it will remain available. + +- [#59](https://github.com/laminas/laminas-zendframework-bridge/pull/59) fixes the replacement rules such as to avoid replacing references to API Skeletons packages, classes, or configuration keys. + +- [#57](https://github.com/laminas/laminas-zendframework-bridge/pull/57) fixes how references to the "zf-apigility" key are replaced. Previously, they were rewritten to "laminas-api-tools", but the correct replacement is "api-tools". + +- [#56](https://github.com/laminas/laminas-zendframework-bridge/pull/56) provides a mechanism to add additional maps with multiple levels of namespace separator escaping, in order to ensure that all various known permutations are matched. The escaping is applied to both the original and target, to ensure that rewrites conform to the original escaping. + +- [#56](https://github.com/laminas/laminas-zendframework-bridge/pull/56) makes changes to the replacement rules to ensure we do not replace references to "Zend" or "ZF" if they occur as subnamespaces OR as class names (formerly, we only enforced subnamespaces). Additional rules were provided for cases where one or both occur within our own packages. + +- [#52](https://github.com/laminas/laminas-zendframework-bridge/pull/52) fixes a scenario whereby factory _values_ were not being rewritten during configuration post processing. + +- [#52](https://github.com/laminas/laminas-zendframework-bridge/pull/52) fixes an issue that occurs with the configuration post processor. Previously, when a service name used as a factory or invokable was encountered that referenced a legacy class, it would get rewritten. This would cause issues if the service was not exposed in the original legacy package, however, as there would now be no alias of the legacy service to the new one. This patch modifies the configuration post processor such that it now tests to see if a service name it will rename exists as an alias; if not, it also creates the alias. + +## 1.0.1 - 2020-01-07 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#47](https://github.com/laminas/laminas-zendframework-bridge/pull/47) adds entries for rewriting the various `::*Zend()` methods exposed in the psr7bridge to `::*Laminas()` during migrations. + +- [#46](https://github.com/laminas/laminas-zendframework-bridge/pull/46) adds a rule to rewrite the config key `use_zend_loader` to `use_laminas_loader`. + +- [#45](https://github.com/laminas/laminas-zendframework-bridge/pull/45) adds a rule to exclude rewriting of view paths provided by the various Doctrine modules targeting the developer tools. + +## 1.0.0 - 2019-12-31 + +### Added + +- First stable release. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.4.5 - 2019-12-23 + +### Added + +- Nothing. + +### Changed + +- [#42](https://github.com/laminas/laminas-zendframework-bridge/pull/42) modifies the replacement rules to no longer rewrite zf-deploy; the package will not be coming to the new organizations. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.4.4 - 2019-12-18 + +### Added + +- Nothing. + +### Changed + +- [#40](https://github.com/laminas/laminas-zendframework-bridge/pull/40) adds exclusion rules for subnamespaces that reference Zend, ZF, ZendService, or ZendOAuth to ensure they are not rewritten. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#40](https://github.com/laminas/laminas-zendframework-bridge/pull/40) adds exclusions for classes referencing Zend Server product features to ensure they are not rewritten (e.g., `ZendServerDisk`, `ZendServerShm`, `ZendMonitor`). + +## 0.4.3 - 2019-12-17 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#39](https://github.com/laminas/laminas-zendframework-bridge/pull/39) fixes an issue when using the Auryn DI container. The class `Northwoods\Container\Zend\Config` was incorrectly being renamed to `Northwoods\Container\Laminas\Config` (which should not happen, as it is not a class under our control). + +## 0.4.2 - 2019-12-16 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#36](https://github.com/laminas/laminas-zendframework-bridge/pull/36) adds some cases for classes that contain the verbiage "Expressive" and "Apigility" ot ensure they are rewritten correctly. + +## 0.4.1 - 2019-12-10 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#35](https://github.com/laminas/laminas-zendframework-bridge/pull/35) removes zend-debug from the replacement list, as it is not being brought over to Laminas. + +## 0.4.0 - 2019-11-27 + +### Added + +- Nothing. + +### Changed + +- [#32](https://github.com/laminas/laminas-zendframework-bridge/pull/32) changes all references to Expressive to instead reference Mezzio. + +- [#32](https://github.com/laminas/laminas-zendframework-bridge/pull/32) changes all references to Apigility to instead reference Laminas API Tools. The vendor becomes laminas-api-tools, the URL becomes api-tools.getlaminas.org, packages and repos are prefixed with api-tools, and namespaces become `Laminas\ApiTools`. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.3.8 - 2019-11-14 + +### Added + +- [#29](https://github.com/laminas/laminas-zendframework-bridge/pull/29) adds entries to translate `ZendDeveloperTools` to `Laminas\DeveloperTools`, and vice-versa. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.3.7 - 2019-11-12 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#28](https://github.com/laminas/laminas-zendframework-bridge/pull/28) updates the `zenddevelopertools` string to rewrite to `laminas-developer-tools` instead of `laminasdevelopertools`. + +## 0.3.6 - 2019-11-07 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#27](https://github.com/laminas/laminas-zendframework-bridge/pull/27) adds a rewrite rule for zend-framework.flf => laminas-project.flf. + +## 0.3.5 - 2019-11-06 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#25](https://github.com/laminas/laminas-zendframework-bridge/pull/25) adds entries for ZendHttp and ZendModule, which are file name segments in files from the zend-feed and zend-config-aggregator-module packages, respectively. + +## 0.3.4 - 2019-11-06 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#24](https://github.com/laminas/laminas-zendframework-bridge/pull/24) adds a rule to never rewrite the string `Doctrine\Zend`. + +- [#23](https://github.com/laminas/laminas-zendframework-bridge/pull/23) adds a missing map for each of ZendAcl and ZendRbac, which occur in the zend-expressive-authorization-acl and zend-expressive-authorization-rbac packages, respectively. + +## 0.3.3 - 2019-11-06 + +### Added + +- [#22](https://github.com/laminas/laminas-zendframework-bridge/pull/22) adds configuration post-processing features, exposed both as a laminas-config-aggregator post processor (for use with Expressive applications) and as a laminas-modulemanager `EVENT_MERGE_CONFIG` listener (for use with MVC applications). When registered, it will post-process the configuration, replacing known Zend Framework-specific strings with their Laminas replacements. A ruleset is provided that ensures dependency configuration is rewritten in a safe manner, routing configuration is skipped, and certain top-level configuration keys are matched exactly (instead of potentially as substrings or word stems). A later release of laminas-migration will auto-register these tools in applications when possible. + +### Changed + +- [#22](https://github.com/laminas/laminas-zendframework-bridge/pull/22) removes support for PHP versions prior to PHP 5.6. We have decided to only support supported PHP versions, whether that support is via php.net or commercial. The lowest supported PHP version we have found is 5.6. Users wishing to migrate to Laminas must at least update to PHP 5.6 before doing so. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.3.2 - 2019-10-30 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- [#21](https://github.com/laminas/laminas-zendframework-bridge/pull/21) removes rewriting of the Amazon library, as it is not moving to Laminas. + +- [#21](https://github.com/laminas/laminas-zendframework-bridge/pull/21) removes rewriting of the GCM and APNS libraries, as they are not moving to Laminas. + +### Fixed + +- [#21](https://github.com/laminas/laminas-zendframework-bridge/pull/21) fixes how the recaptcha and twitter library package and namespaces are rewritten. + +## 0.3.1 - 2019-04-25 + +### Added + +- [#20](https://github.com/laminas/laminas-zendframework-bridge/pull/20) provides an additional autoloader that is _prepended_ to the autoloader + stack. This new autoloader will create class aliases for interfaces, classes, + and traits referenced in type hints and class declarations, ensuring PHP is + able to resolve them correctly during class_alias operations. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.3.0 - 2019-04-12 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- [#16](https://github.com/laminas/laminas-zendframework-bridge/pull/16) removes the `RewriteRules::classRewrite()` method, as it is no longer + needed due to internal refactoring. + +### Fixed + +- [#16](https://github.com/laminas/laminas-zendframework-bridge/pull/16) fixes how the rewrite rules detect the word `Zend` in subnamespaces and + class names to be both more robust and simpler. + +## 0.2.5 - 2019-04-11 + +### Added + +- [#12](https://github.com/laminas/laminas-zendframework-bridge/pull/12) adds functionality for ensuring we alias namespaces and classes that + include the word `Zend` in them; e.g., `Zend\Expressive\ZendView\ZendViewRendererFactory` + will now alias to `Expressive\LaminasView\LaminasViewRendererFactory`. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.2.4 - 2019-04-11 + +### Added + +- [#11](https://github.com/laminas/laminas-zendframework-bridge/pull/11) adds maps for the Expressive router adapter packages. + +- [#10](https://github.com/laminas/laminas-zendframework-bridge/pull/10) adds a map for the Psr7Bridge package, as it used `Zend` within a subnamespace. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 0.2.3 - 2019-04-10 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#9](https://github.com/laminas/laminas-zendframework-bridge/pull/9) fixes the mapping for the Problem Details package. + +## 0.2.2 - 2019-04-10 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Added a check that the discovered alias exists as a class, interface, or trait + before attempting to call `class_alias()`. + +## 0.2.1 - 2019-04-10 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- [#8](https://github.com/laminas/laminas-zendframework-bridge/pull/8) fixes mappings for each of zend-expressive-authentication-zendauthentication, + zend-expressive-zendrouter, and zend-expressive-zendviewrenderer. + +## 0.2.0 - 2019-04-01 + +### Added + +- Nothing. + +### Changed + +- [#4](https://github.com/laminas/laminas-zendframework-bridge/pull/4) rewrites the autoloader to be class-based, via the class + `Laminas\ZendFrameworkBridge\Autoloader`. Additionally, the new approach + provides a performance boost by using a balanced tree algorithm, ensuring + matches occur faster. + +### Deprecated + +- Nothing. + +### Removed + +- [#4](https://github.com/laminas/laminas-zendframework-bridge/pull/4) removes function aliasing. Function aliasing will move to the packages that + provide functions. + +### Fixed + +- Nothing. + +## 0.1.0 - 2019-03-27 + +### Added + +- Adds an autoloader file that registers with `spl_autoload_register` a routine + for aliasing legacy ZF class/interface/trait names to Laminas Project + equivalents. + +- Adds autoloader files for aliasing legacy ZF package functions to Laminas + Project equivalents. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/COPYRIGHT.md b/civicrm/vendor/laminas/laminas-zendframework-bridge/COPYRIGHT.md new file mode 100644 index 0000000000..0a8cccc06b --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/COPYRIGHT.md @@ -0,0 +1 @@ +Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. (https://getlaminas.org/) diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/LICENSE.md b/civicrm/vendor/laminas/laminas-zendframework-bridge/LICENSE.md new file mode 100644 index 0000000000..10b40f1423 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/LICENSE.md @@ -0,0 +1,26 @@ +Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. + +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 Laminas Foundation 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. diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/README.md b/civicrm/vendor/laminas/laminas-zendframework-bridge/README.md new file mode 100644 index 0000000000..fd7953823b --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/README.md @@ -0,0 +1,24 @@ +# laminas-zendframework-bridge + +[](https://travis-ci.com/laminas/laminas-zendframework-bridge) +[](https://coveralls.io/github/laminas/laminas-zendframework-bridge?branch=master) + +This library provides a custom autoloader that aliases legacy Zend Framework, +Apigility, and Expressive classes to their replacements under the Laminas +Project. + +This package should be installed only if you are also using the composer plugin +that installs Laminas packages to replace ZF/Apigility/Expressive packages. + +## Installation + +Run the following to install this library: + +```bash +$ composer require laminas/laminas-zendframework-bridge +``` + +## Support + +* [Issues](https://github.com/laminas/laminas-zendframework-bridge/issues/) +* [Forum](https://discourse.laminas.dev/) diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/composer.json b/civicrm/vendor/laminas/laminas-zendframework-bridge/composer.json new file mode 100644 index 0000000000..34af15a43a --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/composer.json @@ -0,0 +1,58 @@ +{ + "name": "laminas/laminas-zendframework-bridge", + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "license": "BSD-3-Clause", + "keywords": [ + "autoloading", + "laminas", + "zf", + "zendframework" + ], + "support": { + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "source": "https://github.com/laminas/laminas-zendframework-bridge", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "forum": "https://discourse.laminas.dev/" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "autoload-dev": { + "files": [ + "test/classes.php" + ], + "psr-4": { + "LaminasTest\\ZendFrameworkBridge\\": "test/", + "LaminasTest\\ZendFrameworkBridge\\TestAsset\\": "test/TestAsset/classes/", + "Laminas\\ApiTools\\": "test/TestAsset/LaminasApiTools/", + "Mezzio\\": "test/TestAsset/Mezzio/", + "Laminas\\": "test/TestAsset/Laminas/" + } + }, + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "config": { + "sort-packages": true + }, + "scripts": { + "cs-check": "phpcs", + "cs-fix": "phpcbf", + "test": "phpunit --colors=always", + "test-coverage": "phpunit --colors=always --coverage-clover clover.xml" + } +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/config/replacements.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/config/replacements.php new file mode 100644 index 0000000000..f5344355f1 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/config/replacements.php @@ -0,0 +1,372 @@ +<?php + +return [ + // NEVER REWRITE + 'zendframework/zendframework' => 'zendframework/zendframework', + 'zend-developer-tools/toolbar/bjy' => 'zend-developer-tools/toolbar/bjy', + 'zend-developer-tools/toolbar/doctrine' => 'zend-developer-tools/toolbar/doctrine', + + // NAMESPACES + // Zend Framework components + 'Zend\\AuraDi\\Config' => 'Laminas\\AuraDi\\Config', + 'Zend\\Authentication' => 'Laminas\\Authentication', + 'Zend\\Barcode' => 'Laminas\\Barcode', + 'Zend\\Cache' => 'Laminas\\Cache', + 'Zend\\Captcha' => 'Laminas\\Captcha', + 'Zend\\Code' => 'Laminas\\Code', + 'ZendCodingStandard\\Sniffs' => 'LaminasCodingStandard\\Sniffs', + 'ZendCodingStandard\\Utils' => 'LaminasCodingStandard\\Utils', + 'Zend\\ComponentInstaller' => 'Laminas\\ComponentInstaller', + 'Zend\\Config' => 'Laminas\\Config', + 'Zend\\ConfigAggregator' => 'Laminas\\ConfigAggregator', + 'Zend\\ConfigAggregatorModuleManager' => 'Laminas\\ConfigAggregatorModuleManager', + 'Zend\\ConfigAggregatorParameters' => 'Laminas\\ConfigAggregatorParameters', + 'Zend\\Console' => 'Laminas\\Console', + 'Zend\\ContainerConfigTest' => 'Laminas\\ContainerConfigTest', + 'Zend\\Crypt' => 'Laminas\\Crypt', + 'Zend\\Db' => 'Laminas\\Db', + 'ZendDeveloperTools' => 'Laminas\\DeveloperTools', + 'Zend\\Di' => 'Laminas\\Di', + 'Zend\\Diactoros' => 'Laminas\\Diactoros', + 'ZendDiagnostics\\Check' => 'Laminas\\Diagnostics\\Check', + 'ZendDiagnostics\\Result' => 'Laminas\\Diagnostics\\Result', + 'ZendDiagnostics\\Runner' => 'Laminas\\Diagnostics\\Runner', + 'Zend\\Dom' => 'Laminas\\Dom', + 'Zend\\Escaper' => 'Laminas\\Escaper', + 'Zend\\EventManager' => 'Laminas\\EventManager', + 'Zend\\Feed' => 'Laminas\\Feed', + 'Zend\\File' => 'Laminas\\File', + 'Zend\\Filter' => 'Laminas\\Filter', + 'Zend\\Form' => 'Laminas\\Form', + 'Zend\\Http' => 'Laminas\\Http', + 'Zend\\HttpHandlerRunner' => 'Laminas\\HttpHandlerRunner', + 'Zend\\Hydrator' => 'Laminas\\Hydrator', + 'Zend\\I18n' => 'Laminas\\I18n', + 'Zend\\InputFilter' => 'Laminas\\InputFilter', + 'Zend\\Json' => 'Laminas\\Json', + 'Zend\\Ldap' => 'Laminas\\Ldap', + 'Zend\\Loader' => 'Laminas\\Loader', + 'Zend\\Log' => 'Laminas\\Log', + 'Zend\\Mail' => 'Laminas\\Mail', + 'Zend\\Math' => 'Laminas\\Math', + 'Zend\\Memory' => 'Laminas\\Memory', + 'Zend\\Mime' => 'Laminas\\Mime', + 'Zend\\ModuleManager' => 'Laminas\\ModuleManager', + 'Zend\\Mvc' => 'Laminas\\Mvc', + 'Zend\\Navigation' => 'Laminas\\Navigation', + 'Zend\\Paginator' => 'Laminas\\Paginator', + 'Zend\\Permissions' => 'Laminas\\Permissions', + 'Zend\\Pimple\\Config' => 'Laminas\\Pimple\\Config', + 'Zend\\ProblemDetails' => 'Mezzio\\ProblemDetails', + 'Zend\\ProgressBar' => 'Laminas\\ProgressBar', + 'Zend\\Psr7Bridge' => 'Laminas\\Psr7Bridge', + 'Zend\\Router' => 'Laminas\\Router', + 'Zend\\Serializer' => 'Laminas\\Serializer', + 'Zend\\Server' => 'Laminas\\Server', + 'Zend\\ServiceManager' => 'Laminas\\ServiceManager', + 'ZendService\\ReCaptcha' => 'Laminas\\ReCaptcha', + 'ZendService\\Twitter' => 'Laminas\\Twitter', + 'Zend\\Session' => 'Laminas\\Session', + 'Zend\\SkeletonInstaller' => 'Laminas\\SkeletonInstaller', + 'Zend\\Soap' => 'Laminas\\Soap', + 'Zend\\Stdlib' => 'Laminas\\Stdlib', + 'Zend\\Stratigility' => 'Laminas\\Stratigility', + 'Zend\\Tag' => 'Laminas\\Tag', + 'Zend\\Test' => 'Laminas\\Test', + 'Zend\\Text' => 'Laminas\\Text', + 'Zend\\Uri' => 'Laminas\\Uri', + 'Zend\\Validator' => 'Laminas\\Validator', + 'Zend\\View' => 'Laminas\\View', + 'ZendXml' => 'Laminas\\Xml', + 'Zend\\Xml2Json' => 'Laminas\\Xml2Json', + 'Zend\\XmlRpc' => 'Laminas\\XmlRpc', + 'ZendOAuth' => 'Laminas\\OAuth', + + // class ZendAcl in zend-expressive-authorization-acl + 'ZendAcl' => 'LaminasAcl', + 'Zend\\Expressive\\Authorization\\Acl\\ZendAcl' => 'Mezzio\\Authorization\\Acl\\LaminasAcl', + // class ZendHttpClientDecorator in zend-feed + 'ZendHttp' => 'LaminasHttp', + // class ZendModuleProvider in zend-config-aggregator-modulemanager + 'ZendModule' => 'LaminasModule', + // class ZendRbac in zend-expressive-authorization-rbac + 'ZendRbac' => 'LaminasRbac', + 'Zend\\Expressive\\Authorization\\Rbac\\ZendRbac' => 'Mezzio\\Authorization\\Rbac\\LaminasRbac', + // class ZendRouter in zend-expressive-router-zendrouter + 'ZendRouter' => 'LaminasRouter', + 'Zend\\Expressive\\Router\\ZendRouter' => 'Mezzio\\Router\\LaminasRouter', + // class ZendViewRenderer in zend-expressive-zendviewrenderer + 'ZendViewRenderer' => 'LaminasViewRenderer', + 'Zend\\Expressive\\ZendView\\ZendViewRenderer' => 'Mezzio\\LaminasView\\LaminasViewRenderer', + 'a\\Zend' => 'a\\Zend', + 'b\\Zend' => 'b\\Zend', + 'c\\Zend' => 'c\\Zend', + 'd\\Zend' => 'd\\Zend', + 'e\\Zend' => 'e\\Zend', + 'f\\Zend' => 'f\\Zend', + 'g\\Zend' => 'g\\Zend', + 'h\\Zend' => 'h\\Zend', + 'i\\Zend' => 'i\\Zend', + 'j\\Zend' => 'j\\Zend', + 'k\\Zend' => 'k\\Zend', + 'l\\Zend' => 'l\\Zend', + 'm\\Zend' => 'm\\Zend', + 'n\\Zend' => 'n\\Zend', + 'o\\Zend' => 'o\\Zend', + 'p\\Zend' => 'p\\Zend', + 'q\\Zend' => 'q\\Zend', + 'r\\Zend' => 'r\\Zend', + 's\\Zend' => 's\\Zend', + 't\\Zend' => 't\\Zend', + 'u\\Zend' => 'u\\Zend', + 'v\\Zend' => 'v\\Zend', + 'w\\Zend' => 'w\\Zend', + 'x\\Zend' => 'x\\Zend', + 'y\\Zend' => 'y\\Zend', + 'z\\Zend' => 'z\\Zend', + + // Expressive + 'Zend\\Expressive' => 'Mezzio', + 'ZendAuthentication' => 'LaminasAuthentication', + 'ZendAcl' => 'LaminasAcl', + 'ZendRbac' => 'LaminasRbac', + 'ZendRouter' => 'LaminasRouter', + 'ExpressiveUrlGenerator' => 'MezzioUrlGenerator', + 'ExpressiveInstaller' => 'MezzioInstaller', + + // Apigility + 'ZF\\Apigility' => 'Laminas\\ApiTools', + 'ZF\\ApiProblem' => 'Laminas\\ApiTools\\ApiProblem', + 'ZF\\AssetManager' => 'Laminas\\ApiTools\\AssetManager', + 'ZF\\ComposerAutoloading' => 'Laminas\\ComposerAutoloading', + 'ZF\\Configuration' => 'Laminas\\ApiTools\\Configuration', + 'ZF\\ContentNegotiation' => 'Laminas\\ApiTools\\ContentNegotiation', + 'ZF\\ContentValidation' => 'Laminas\\ApiTools\\ContentValidation', + 'ZF\\DevelopmentMode' => 'Laminas\\DevelopmentMode', + 'ZF\\Doctrine\\QueryBuilder' => 'Laminas\\ApiTools\\Doctrine\\QueryBuilder', + 'ZF\\Hal' => 'Laminas\\ApiTools\\Hal', + 'ZF\\HttpCache' => 'Laminas\\ApiTools\\HttpCache', + 'ZF\\MvcAuth' => 'Laminas\\ApiTools\\MvcAuth', + 'ZF\\OAuth2' => 'Laminas\\ApiTools\\OAuth2', + 'ZF\\Rest' => 'Laminas\\ApiTools\\Rest', + 'ZF\\Rpc' => 'Laminas\\ApiTools\\Rpc', + 'ZF\\Versioning' => 'Laminas\\ApiTools\\Versioning', + 'a\\ZF' => 'a\\ZF', + 'b\\ZF' => 'b\\ZF', + 'c\\ZF' => 'c\\ZF', + 'd\\ZF' => 'd\\ZF', + 'e\\ZF' => 'e\\ZF', + 'f\\ZF' => 'f\\ZF', + 'g\\ZF' => 'g\\ZF', + 'h\\ZF' => 'h\\ZF', + 'i\\ZF' => 'i\\ZF', + 'j\\ZF' => 'j\\ZF', + 'k\\ZF' => 'k\\ZF', + 'l\\ZF' => 'l\\ZF', + 'm\\ZF' => 'm\\ZF', + 'n\\ZF' => 'n\\ZF', + 'o\\ZF' => 'o\\ZF', + 'p\\ZF' => 'p\\ZF', + 'q\\ZF' => 'q\\ZF', + 'r\\ZF' => 'r\\ZF', + 's\\ZF' => 's\\ZF', + 't\\ZF' => 't\\ZF', + 'u\\ZF' => 'u\\ZF', + 'v\\ZF' => 'v\\ZF', + 'w\\ZF' => 'w\\ZF', + 'x\\ZF' => 'x\\ZF', + 'y\\ZF' => 'y\\ZF', + 'z\\ZF' => 'z\\ZF', + + 'ApigilityModuleInterface' => 'ApiToolsModuleInterface', + 'ApigilityProviderInterface' => 'ApiToolsProviderInterface', + 'ApigilityVersionController' => 'ApiToolsVersionController', + + // PACKAGES + // ZF components, MVC + 'zendframework/skeleton-application' => 'laminas/skeleton-application', + 'zendframework/zend-auradi-config' => 'laminas/laminas-auradi-config', + 'zendframework/zend-authentication' => 'laminas/laminas-authentication', + 'zendframework/zend-barcode' => 'laminas/laminas-barcode', + 'zendframework/zend-cache' => 'laminas/laminas-cache', + 'zendframework/zend-captcha' => 'laminas/laminas-captcha', + 'zendframework/zend-code' => 'laminas/laminas-code', + 'zendframework/zend-coding-standard' => 'laminas/laminas-coding-standard', + 'zendframework/zend-component-installer' => 'laminas/laminas-component-installer', + 'zendframework/zend-composer-autoloading' => 'laminas/laminas-composer-autoloading', + 'zendframework/zend-config-aggregator' => 'laminas/laminas-config-aggregator', + 'zendframework/zend-config' => 'laminas/laminas-config', + 'zendframework/zend-console' => 'laminas/laminas-console', + 'zendframework/zend-container-config-test' => 'laminas/laminas-container-config-test', + 'zendframework/zend-crypt' => 'laminas/laminas-crypt', + 'zendframework/zend-db' => 'laminas/laminas-db', + 'zendframework/zend-developer-tools' => 'laminas/laminas-developer-tools', + 'zendframework/zend-diactoros' => 'laminas/laminas-diactoros', + 'zendframework/zenddiagnostics' => 'laminas/laminas-diagnostics', + 'zendframework/zend-di' => 'laminas/laminas-di', + 'zendframework/zend-dom' => 'laminas/laminas-dom', + 'zendframework/zend-escaper' => 'laminas/laminas-escaper', + 'zendframework/zend-eventmanager' => 'laminas/laminas-eventmanager', + 'zendframework/zend-feed' => 'laminas/laminas-feed', + 'zendframework/zend-file' => 'laminas/laminas-file', + 'zendframework/zend-filter' => 'laminas/laminas-filter', + 'zendframework/zend-form' => 'laminas/laminas-form', + 'zendframework/zend-httphandlerrunner' => 'laminas/laminas-httphandlerrunner', + 'zendframework/zend-http' => 'laminas/laminas-http', + 'zendframework/zend-hydrator' => 'laminas/laminas-hydrator', + 'zendframework/zend-i18n' => 'laminas/laminas-i18n', + 'zendframework/zend-i18n-resources' => 'laminas/laminas-i18n-resources', + 'zendframework/zend-inputfilter' => 'laminas/laminas-inputfilter', + 'zendframework/zend-json' => 'laminas/laminas-json', + 'zendframework/zend-json-server' => 'laminas/laminas-json-server', + 'zendframework/zend-ldap' => 'laminas/laminas-ldap', + 'zendframework/zend-loader' => 'laminas/laminas-loader', + 'zendframework/zend-log' => 'laminas/laminas-log', + 'zendframework/zend-mail' => 'laminas/laminas-mail', + 'zendframework/zend-math' => 'laminas/laminas-math', + 'zendframework/zend-memory' => 'laminas/laminas-memory', + 'zendframework/zend-mime' => 'laminas/laminas-mime', + 'zendframework/zend-modulemanager' => 'laminas/laminas-modulemanager', + 'zendframework/zend-mvc' => 'laminas/laminas-mvc', + 'zendframework/zend-navigation' => 'laminas/laminas-navigation', + 'zendframework/zend-oauth' => 'laminas/laminas-oauth', + 'zendframework/zend-paginator' => 'laminas/laminas-paginator', + 'zendframework/zend-permissions-acl' => 'laminas/laminas-permissions-acl', + 'zendframework/zend-permissions-rbac' => 'laminas/laminas-permissions-rbac', + 'zendframework/zend-pimple-config' => 'laminas/laminas-pimple-config', + 'zendframework/zend-progressbar' => 'laminas/laminas-progressbar', + 'zendframework/zend-psr7bridge' => 'laminas/laminas-psr7bridge', + 'zendframework/zend-recaptcha' => 'laminas/laminas-recaptcha', + 'zendframework/zend-router' => 'laminas/laminas-router', + 'zendframework/zend-serializer' => 'laminas/laminas-serializer', + 'zendframework/zend-server' => 'laminas/laminas-server', + 'zendframework/zend-servicemanager' => 'laminas/laminas-servicemanager', + 'zendframework/zendservice-recaptcha' => 'laminas/laminas-recaptcha', + 'zendframework/zendservice-twitter' => 'laminas/laminas-twitter', + 'zendframework/zend-session' => 'laminas/laminas-session', + 'zendframework/zend-skeleton-installer' => 'laminas/laminas-skeleton-installer', + 'zendframework/zend-soap' => 'laminas/laminas-soap', + 'zendframework/zend-stdlib' => 'laminas/laminas-stdlib', + 'zendframework/zend-stratigility' => 'laminas/laminas-stratigility', + 'zendframework/zend-tag' => 'laminas/laminas-tag', + 'zendframework/zend-test' => 'laminas/laminas-test', + 'zendframework/zend-text' => 'laminas/laminas-text', + 'zendframework/zend-uri' => 'laminas/laminas-uri', + 'zendframework/zend-validator' => 'laminas/laminas-validator', + 'zendframework/zend-view' => 'laminas/laminas-view', + 'zendframework/zend-xml2json' => 'laminas/laminas-xml2json', + 'zendframework/zend-xml' => 'laminas/laminas-xml', + 'zendframework/zend-xmlrpc' => 'laminas/laminas-xmlrpc', + + // Expressive packages + 'zendframework/zend-expressive' => 'mezzio/mezzio', + 'zendframework/zend-expressive-zendrouter' => 'mezzio/mezzio-laminasrouter', + 'zendframework/zend-problem-details' => 'mezzio/mezzio-problem-details', + 'zendframework/zend-expressive-zendviewrenderer' => 'mezzio/mezzio-laminasviewrenderer', + + // Apigility packages + 'zfcampus/apigility-documentation' => 'laminas-api-tools/documentation', + 'zfcampus/statuslib-example' => 'laminas-api-tools/statuslib-example', + 'zfcampus/zf-apigility' => 'laminas-api-tools/api-tools', + 'zfcampus/zf-api-problem' => 'laminas-api-tools/api-tools-api-problem', + 'zfcampus/zf-asset-manager' => 'laminas-api-tools/api-tools-asset-manager', + 'zfcampus/zf-configuration' => 'laminas-api-tools/api-tools-configuration', + 'zfcampus/zf-content-negotiation' => 'laminas-api-tools/api-tools-content-negotiation', + 'zfcampus/zf-content-validation' => 'laminas-api-tools/api-tools-content-validation', + 'zfcampus/zf-development-mode' => 'laminas/laminas-development-mode', + 'zfcampus/zf-doctrine-querybuilder' => 'laminas-api-tools/api-tools-doctrine-querybuilder', + 'zfcampus/zf-hal' => 'laminas-api-tools/api-tools-hal', + 'zfcampus/zf-http-cache' => 'laminas-api-tools/api-tools-http-cache', + 'zfcampus/zf-mvc-auth' => 'laminas-api-tools/api-tools-mvc-auth', + 'zfcampus/zf-oauth2' => 'laminas-api-tools/api-tools-oauth2', + 'zfcampus/zf-rest' => 'laminas-api-tools/api-tools-rest', + 'zfcampus/zf-rpc' => 'laminas-api-tools/api-tools-rpc', + 'zfcampus/zf-versioning' => 'laminas-api-tools/api-tools-versioning', + + // CONFIG KEYS, SCRIPT NAMES, ETC + // ZF components + '::fromZend' => '::fromLaminas', // psr7bridge + '::toZend' => '::toLaminas', // psr7bridge + 'use_zend_loader' => 'use_laminas_loader', // zend-modulemanager + 'zend-config' => 'laminas-config', + 'zend-developer-tools/' => 'laminas-developer-tools/', + 'zend-tag-cloud' => 'laminas-tag-cloud', + 'zenddevelopertools' => 'laminas-developer-tools', + 'zendbarcode' => 'laminasbarcode', + 'ZendBarcode' => 'LaminasBarcode', + 'zendcache' => 'laminascache', + 'ZendCache' => 'LaminasCache', + 'zendconfig' => 'laminasconfig', + 'ZendConfig' => 'LaminasConfig', + 'zendfeed' => 'laminasfeed', + 'ZendFeed' => 'LaminasFeed', + 'zendfilter' => 'laminasfilter', + 'ZendFilter' => 'LaminasFilter', + 'zendform' => 'laminasform', + 'ZendForm' => 'LaminasForm', + 'zendi18n' => 'laminasi18n', + 'ZendI18n' => 'LaminasI18n', + 'zendinputfilter' => 'laminasinputfilter', + 'ZendInputFilter' => 'LaminasInputFilter', + 'zendlog' => 'laminaslog', + 'ZendLog' => 'LaminasLog', + 'zendmail' => 'laminasmail', + 'ZendMail' => 'LaminasMail', + 'zendmvc' => 'laminasmvc', + 'ZendMvc' => 'LaminasMvc', + 'zendpaginator' => 'laminaspaginator', + 'ZendPaginator' => 'LaminasPaginator', + 'zendserializer' => 'laminasserializer', + 'ZendSerializer' => 'LaminasSerializer', + 'zendtag' => 'laminastag', + 'ZendTag' => 'LaminasTag', + 'zendtext' => 'laminastext', + 'ZendText' => 'LaminasText', + 'zendvalidator' => 'laminasvalidator', + 'ZendValidator' => 'LaminasValidator', + 'zendview' => 'laminasview', + 'ZendView' => 'LaminasView', + 'zend-framework.flf' => 'laminas-project.flf', + + // Expressive-related + "'zend-expressive'" => "'mezzio'", + '"zend-expressive"' => '"mezzio"', + 'zend-expressive.' => 'mezzio.', + 'zend-expressive-authorization' => 'mezzio-authorization', + 'zend-expressive-hal' => 'mezzio-hal', + 'zend-expressive-session' => 'mezzio-session', + 'zend-expressive-swoole' => 'mezzio-swoole', + 'zend-expressive-tooling' => 'mezzio-tooling', + + // Apigility-related + "'zf-apigility'" => "'api-tools'", + '"zf-apigility"' => '"api-tools"', + 'zf-apigility/' => 'api-tools/', + 'zf-apigility-admin' => 'api-tools-admin', + 'zf-content-negotiation' => 'api-tools-content-negotiation', + 'zf-hal' => 'api-tools-hal', + 'zf-rest' => 'api-tools-rest', + 'zf-rpc' => 'api-tools-rpc', + 'zf-content-validation' => 'api-tools-content-validation', + 'zf-apigility-ui' => 'api-tools-ui', + 'zf-apigility-documentation-blueprint' => 'api-tools-documentation-blueprint', + 'zf-apigility-documentation-swagger' => 'api-tools-documentation-swagger', + 'zf-apigility-welcome' => 'api-tools-welcome', + 'zf-api-problem' => 'api-tools-api-problem', + 'zf-configuration' => 'api-tools-configuration', + 'zf-http-cache' => 'api-tools-http-cache', + 'zf-mvc-auth' => 'api-tools-mvc-auth', + 'zf-oauth2' => 'api-tools-oauth2', + 'zf-versioning' => 'api-tools-versioning', + 'ZfApigilityDoctrineQueryProviderManager' => 'LaminasApiToolsDoctrineQueryProviderManager', + 'ZfApigilityDoctrineQueryCreateFilterManager' => 'LaminasApiToolsDoctrineQueryCreateFilterManager', + 'zf-apigility-doctrine' => 'api-tools-doctrine', + 'zf-development-mode' => 'laminas-development-mode', + 'zf-doctrine-querybuilder' => 'api-tools-doctrine-querybuilder', + + // 3rd party Apigility packages + 'api-skeletons/zf-' => 'api-skeletons/zf-', // api-skeletons packages + 'zf-oauth2-' => 'zf-oauth2-', // api-skeletons OAuth2-related packages + 'ZF\\OAuth2\\Client' => 'ZF\\OAuth2\\Client', // api-skeletons/zf-oauth2-client + 'ZF\\OAuth2\\Doctrine' => 'ZF\\OAuth2\\Doctrine', // api-skeletons/zf-oauth2-doctrine +]; diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php new file mode 100644 index 0000000000..6048766a27 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php @@ -0,0 +1,172 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository + * @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\ZendFrameworkBridge; + +use ArrayObject; +use Composer\Autoload\ClassLoader; +use RuntimeException; + +use function array_values; +use function class_alias; +use function class_exists; +use function explode; +use function file_exists; +use function interface_exists; +use function spl_autoload_register; +use function strlen; +use function strtr; +use function substr; +use function trait_exists; + +/** + * Alias legacy Zend Framework project classes/interfaces/traits to Laminas equivalents. + */ +class Autoloader +{ + /** + * Attach autoloaders for managing legacy ZF artifacts. + * + * We attach two autoloaders: + * + * - The first is _prepended_ to handle new classes and add aliases for + * legacy classes. PHP expects any interfaces implemented, classes + * extended, or traits used when declaring class_alias() to exist and/or + * be autoloadable already at the time of declaration. If not, it will + * raise a fatal error. This autoloader helps mitigate errors in such + * situations. + * + * - The second is _appended_ in order to create aliases for legacy + * classes. + */ + public static function load() + { + $loaded = new ArrayObject([]); + + spl_autoload_register(self::createPrependAutoloader( + RewriteRules::namespaceReverse(), + self::getClassLoader(), + $loaded + ), true, true); + + spl_autoload_register(self::createAppendAutoloader( + RewriteRules::namespaceRewrite(), + $loaded + )); + } + + /** + * @return ClassLoader + * @throws RuntimeException + */ + private static function getClassLoader() + { + if (getenv('COMPOSER_VENDOR_DIR') && file_exists(getenv('COMPOSER_VENDOR_DIR') . '/autoload.php')) { + return include getenv('COMPOSER_VENDOR_DIR') . '/autoload.php'; + } + + if (file_exists(__DIR__ . '/../../../autoload.php')) { + return include __DIR__ . '/../../../autoload.php'; + } + + if (file_exists(__DIR__ . '/../vendor/autoload.php')) { + return include __DIR__ . '/../vendor/autoload.php'; + } + + throw new RuntimeException('Cannot detect composer autoload. Please run composer install'); + } + + /** + * @return callable + */ + private static function createPrependAutoloader(array $namespaces, ClassLoader $classLoader, ArrayObject $loaded) + { + /** + * @param string $class Class name to autoload + * @return void + */ + return static function ($class) use ($namespaces, $classLoader, $loaded) { + if (isset($loaded[$class])) { + return; + } + + $segments = explode('\\', $class); + + $i = 0; + $check = ''; + + while (isset($segments[$i + 1], $namespaces[$check . $segments[$i] . '\\'])) { + $check .= $segments[$i] . '\\'; + ++$i; + } + + if ($check === '') { + return; + } + + if ($classLoader->loadClass($class)) { + $legacy = $namespaces[$check] + . strtr(substr($class, strlen($check)), [ + 'ApiTools' => 'Apigility', + 'Mezzio' => 'Expressive', + 'Laminas' => 'Zend', + ]); + class_alias($class, $legacy); + } + }; + } + + /** + * @return callable + */ + private static function createAppendAutoloader(array $namespaces, ArrayObject $loaded) + { + /** + * @param string $class Class name to autoload + * @return void + */ + return static function ($class) use ($namespaces, $loaded) { + $segments = explode('\\', $class); + + if ($segments[0] === 'ZendService' && isset($segments[1])) { + $segments[0] .= '\\' . $segments[1]; + unset($segments[1]); + $segments = array_values($segments); + } + + $i = 0; + $check = ''; + + // We are checking segments of the namespace to match quicker + while (isset($segments[$i + 1], $namespaces[$check . $segments[$i] . '\\'])) { + $check .= $segments[$i] . '\\'; + ++$i; + } + + if ($check === '') { + return; + } + + $alias = $namespaces[$check] + . strtr(substr($class, strlen($check)), [ + 'Apigility' => 'ApiTools', + 'Expressive' => 'Mezzio', + 'Zend' => 'Laminas', + 'AbstractZendServer' => 'AbstractZendServer', + 'ZendServerDisk' => 'ZendServerDisk', + 'ZendServerShm' => 'ZendServerShm', + 'ZendMonitor' => 'ZendMonitor', + ]); + + $loaded[$alias] = true; + if (class_exists($alias) || interface_exists($alias) || trait_exists($alias)) { + class_alias($alias, $class); + } + }; + } +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php new file mode 100644 index 0000000000..bac7b97479 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php @@ -0,0 +1,434 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository + * @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\ZendFrameworkBridge; + +use function array_intersect_key; +use function array_key_exists; +use function array_pop; +use function array_push; +use function count; +use function in_array; +use function is_array; +use function is_callable; +use function is_int; +use function is_string; + +class ConfigPostProcessor +{ + /** @internal */ + const SERVICE_MANAGER_KEYS_OF_INTEREST = [ + 'aliases' => true, + 'factories' => true, + 'invokables' => true, + 'services' => true, + ]; + + /** @var array String keys => string values */ + private $exactReplacements = [ + 'zend-expressive' => 'mezzio', + 'zf-apigility' => 'api-tools', + ]; + + /** @var Replacements */ + private $replacements; + + /** @var callable[] */ + private $rulesets; + + public function __construct() + { + $this->replacements = new Replacements(); + + /* Define the rulesets for replacements. + * + * Each ruleset has the following signature: + * + * @param mixed $value + * @param string[] $keys Full nested key hierarchy leading to the value + * @return null|callable + * + * If no match is made, a null is returned, allowing it to fallback to + * the next ruleset in the list. If a match is made, a callback is returned, + * and that will be used to perform the replacement on the value. + * + * The callback should have the following signature: + * + * @param mixed $value + * @param string[] $keys + * @return mixed The transformed value + */ + $this->rulesets = [ + // Exact values + function ($value) { + return is_string($value) && isset($this->exactReplacements[$value]) + ? [$this, 'replaceExactValue'] + : null; + }, + + // Router (MVC applications) + // We do not want to rewrite these. + function ($value, array $keys) { + $key = array_pop($keys); + // Only worried about a top-level "router" key. + return $key === 'router' && count($keys) === 0 && is_array($value) + ? [$this, 'noopReplacement'] + : null; + }, + + // service- and pluginmanager handling + function ($value) { + return is_array($value) && array_intersect_key(self::SERVICE_MANAGER_KEYS_OF_INTEREST, $value) !== [] + ? [$this, 'replaceDependencyConfiguration'] + : null; + }, + + // Array values + function ($value, array $keys) { + return 0 !== count($keys) && is_array($value) + ? [$this, '__invoke'] + : null; + }, + ]; + } + + /** + * @param string[] $keys Hierarchy of keys, for determining location in + * nested configuration. + * @return array + */ + public function __invoke(array $config, array $keys = []) + { + $rewritten = []; + + foreach ($config as $key => $value) { + // Determine new key from replacements + $newKey = is_string($key) ? $this->replace($key, $keys) : $key; + + // Keep original values with original key, if the key has changed, but only at the top-level. + if (empty($keys) && $newKey !== $key) { + $rewritten[$key] = $value; + } + + // Perform value replacements, if any + $newValue = $this->replace($value, $keys, $newKey); + + // Key does not already exist and/or is not an array value + if (! array_key_exists($newKey, $rewritten) || ! is_array($rewritten[$newKey])) { + // Do not overwrite existing values with null values + $rewritten[$newKey] = array_key_exists($newKey, $rewritten) && null === $newValue + ? $rewritten[$newKey] + : $newValue; + continue; + } + + // New value is null; nothing to do. + if (null === $newValue) { + continue; + } + + // Key already exists as an array value, but $value is not an array + if (! is_array($newValue)) { + $rewritten[$newKey][] = $newValue; + continue; + } + + // Key already exists as an array value, and $value is also an array + $rewritten[$newKey] = static::merge($rewritten[$newKey], $newValue); + } + + return $rewritten; + } + + /** + * Perform substitutions as needed on an individual value. + * + * The $key is provided to allow fine-grained selection of rewrite rules. + * + * @param mixed $value + * @param string[] $keys Key hierarchy + * @param null|int|string $key + * @return mixed + */ + private function replace($value, array $keys, $key = null) + { + // Add new key to the list of keys. + // We do not need to remove it later, as we are working on a copy of the array. + array_push($keys, $key); + + // Identify rewrite strategy and perform replacements + $rewriteRule = $this->replacementRuleMatch($value, $keys); + return $rewriteRule($value, $keys); + } + + /** + * Merge two arrays together. + * + * If an integer key exists in both arrays, the value from the second array + * will be appended to the first array. If both values are arrays, they are + * merged together, else the value of the second array overwrites the one + * of the first array. + * + * Based on zend-stdlib Zend\Stdlib\ArrayUtils::merge + * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) + * + * @return array + */ + public static function merge(array $a, array $b) + { + foreach ($b as $key => $value) { + if (! isset($a[$key]) && ! array_key_exists($key, $a)) { + $a[$key] = $value; + continue; + } + + if (null === $value && array_key_exists($key, $a)) { + // Leave as-is if value from $b is null + continue; + } + + if (is_int($key)) { + $a[] = $value; + continue; + } + + if (is_array($value) && is_array($a[$key])) { + $a[$key] = static::merge($a[$key], $value); + continue; + } + + $a[$key] = $value; + } + + return $a; + } + + /** + * @param mixed $value + * @param null|int|string $key + * @return callable Callable to invoke with value + */ + private function replacementRuleMatch($value, $key = null) + { + foreach ($this->rulesets as $ruleset) { + $result = $ruleset($value, $key); + if (is_callable($result)) { + return $result; + } + } + return [$this, 'fallbackReplacement']; + } + + /** + * Replace a value using the translation table, if the value is a string. + * + * @param mixed $value + * @return mixed + */ + private function fallbackReplacement($value) + { + return is_string($value) + ? $this->replacements->replace($value) + : $value; + } + + /** + * Replace a value matched exactly. + * + * @param mixed $value + * @return mixed + */ + private function replaceExactValue($value) + { + return $this->exactReplacements[$value]; + } + + private function replaceDependencyConfiguration(array $config) + { + $aliases = isset($config['aliases']) && is_array($config['aliases']) + ? $this->replaceDependencyAliases($config['aliases']) + : []; + + if ($aliases) { + $config['aliases'] = $aliases; + } + + $config = $this->replaceDependencyInvokables($config); + $config = $this->replaceDependencyFactories($config); + $config = $this->replaceDependencyServices($config); + + $keys = self::SERVICE_MANAGER_KEYS_OF_INTEREST; + foreach ($config as $key => $data) { + if (isset($keys[$key])) { + continue; + } + + $config[$key] = is_array($data) ? $this->__invoke($data, [$key]) : $data; + } + + return $config; + } + + /** + * Rewrite dependency aliases array + * + * In this case, we want to keep the alias as-is, but rewrite the target. + * + * We need also provide an additional alias if the alias key is a legacy class. + * + * @return array + */ + private function replaceDependencyAliases(array $aliases) + { + foreach ($aliases as $alias => $target) { + if (! is_string($alias) || ! is_string($target)) { + continue; + } + + $newTarget = $this->replacements->replace($target); + $newAlias = $this->replacements->replace($alias); + + $notIn = [$newTarget]; + $name = $newTarget; + while (isset($aliases[$name])) { + $notIn[] = $aliases[$name]; + $name = $aliases[$name]; + } + + if ($newAlias === $alias && ! in_array($alias, $notIn, true)) { + $aliases[$alias] = $newTarget; + continue; + } + + if (isset($aliases[$newAlias])) { + continue; + } + + if (! in_array($newAlias, $notIn, true)) { + $aliases[$alias] = $newAlias; + $aliases[$newAlias] = $newTarget; + } + } + + return $aliases; + } + + /** + * Rewrite dependency invokables array + * + * In this case, we want to keep the alias as-is, but rewrite the target. + * + * We need also provide an additional alias if invokable is defined with + * an alias which is a legacy class. + * + * @return array + */ + private function replaceDependencyInvokables(array $config) + { + if (empty($config['invokables']) || ! is_array($config['invokables'])) { + return $config; + } + + foreach ($config['invokables'] as $alias => $target) { + if (! is_string($alias)) { + continue; + } + + $newTarget = $this->replacements->replace($target); + $newAlias = $this->replacements->replace($alias); + + if ($alias === $target || isset($config['aliases'][$newAlias])) { + $config['invokables'][$alias] = $newTarget; + continue; + } + + $config['invokables'][$newAlias] = $newTarget; + + if ($newAlias === $alias) { + continue; + } + + $config['aliases'][$alias] = $newAlias; + + unset($config['invokables'][$alias]); + } + + return $config; + } + + /** + * @param mixed $value + * @return mixed Returns $value verbatim. + */ + private function noopReplacement($value) + { + return $value; + } + + private function replaceDependencyFactories(array $config) + { + if (empty($config['factories']) || ! is_array($config['factories'])) { + return $config; + } + + foreach ($config['factories'] as $service => $factory) { + if (! is_string($service)) { + continue; + } + + $replacedService = $this->replacements->replace($service); + $factory = is_string($factory) ? $this->replacements->replace($factory) : $factory; + $config['factories'][$replacedService] = $factory; + + if ($replacedService === $service) { + continue; + } + + unset($config['factories'][$service]); + if (isset($config['aliases'][$service])) { + continue; + } + + $config['aliases'][$service] = $replacedService; + } + + return $config; + } + + private function replaceDependencyServices(array $config) + { + if (empty($config['services']) || ! is_array($config['services'])) { + return $config; + } + + foreach ($config['services'] as $service => $serviceInstance) { + if (! is_string($service)) { + continue; + } + + $replacedService = $this->replacements->replace($service); + $serviceInstance = is_array($serviceInstance) ? $this->__invoke($serviceInstance) : $serviceInstance; + + $config['services'][$replacedService] = $serviceInstance; + + if ($service === $replacedService) { + continue; + } + + unset($config['services'][$service]); + + if (isset($config['aliases'][$service])) { + continue; + } + + $config['aliases'][$service] = $replacedService; + } + + return $config; + } +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Module.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Module.php new file mode 100644 index 0000000000..d10cb43dd8 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Module.php @@ -0,0 +1,54 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository + * @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\ZendFrameworkBridge; + +use Laminas\ModuleManager\Listener\ConfigMergerInterface; +use Laminas\ModuleManager\ModuleEvent; +use Laminas\ModuleManager\ModuleManager; + +class Module +{ + /** + * Initialize the module. + * + * Type-hinting deliberately omitted to allow unit testing + * without dependencies on packages that do not exist yet. + * + * @param ModuleManager $moduleManager + */ + public function init($moduleManager) + { + $moduleManager + ->getEventManager() + ->attach('mergeConfig', [$this, 'onMergeConfig']); + } + + /** + * Perform substitutions in the merged configuration. + * + * Rewrites keys and values matching known ZF classes, namespaces, and + * configuration keys to their Laminas equivalents. + * + * Type-hinting deliberately omitted to allow unit testing + * without dependencies on packages that do not exist yet. + * + * @param ModuleEvent $event + */ + public function onMergeConfig($event) + { + /** @var ConfigMergerInterface */ + $configMerger = $event->getConfigListener(); + $processor = new ConfigPostProcessor(); + $configMerger->setMergedConfig( + $processor( + $configMerger->getMergedConfig($returnAsObject = false) + ) + ); + } +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php new file mode 100644 index 0000000000..ca445c01f9 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php @@ -0,0 +1,46 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository + * @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\ZendFrameworkBridge; + +use function array_merge; +use function str_replace; +use function strpos; +use function strtr; + +class Replacements +{ + /** @var string[] */ + private $replacements; + + public function __construct(array $additionalReplacements = []) + { + $this->replacements = array_merge( + require __DIR__ . '/../config/replacements.php', + $additionalReplacements + ); + + // Provide multiple variants of strings containing namespace separators + foreach ($this->replacements as $original => $replacement) { + if (false === strpos($original, '\\')) { + continue; + } + $this->replacements[str_replace('\\', '\\\\', $original)] = str_replace('\\', '\\\\', $replacement); + $this->replacements[str_replace('\\', '\\\\\\\\', $original)] = str_replace('\\', '\\\\\\\\', $replacement); + } + } + + /** + * @param string $value + * @return string + */ + public function replace($value) + { + return strtr($value, $this->replacements); + } +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php new file mode 100644 index 0000000000..8dc999f45e --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php @@ -0,0 +1,79 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository + * @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License + */ + +namespace Laminas\ZendFrameworkBridge; + +class RewriteRules +{ + /** + * @return array + */ + public static function namespaceRewrite() + { + return [ + // Expressive + 'Zend\\ProblemDetails\\' => 'Mezzio\\ProblemDetails\\', + 'Zend\\Expressive\\' => 'Mezzio\\', + + // Laminas + 'Zend\\' => 'Laminas\\', + 'ZF\\ComposerAutoloading\\' => 'Laminas\\ComposerAutoloading\\', + 'ZF\\DevelopmentMode\\' => 'Laminas\\DevelopmentMode\\', + + // Apigility + 'ZF\\Apigility\\' => 'Laminas\\ApiTools\\', + 'ZF\\' => 'Laminas\\ApiTools\\', + + // ZendXml, API wrappers, zend-http OAuth support, zend-diagnostics, ZendDeveloperTools + 'ZendXml\\' => 'Laminas\\Xml\\', + 'ZendOAuth\\' => 'Laminas\\OAuth\\', + 'ZendDiagnostics\\' => 'Laminas\\Diagnostics\\', + 'ZendService\\ReCaptcha\\' => 'Laminas\\ReCaptcha\\', + 'ZendService\\Twitter\\' => 'Laminas\\Twitter\\', + 'ZendDeveloperTools\\' => 'Laminas\\DeveloperTools\\', + ]; + } + + /** + * @return array + */ + public static function namespaceReverse() + { + return [ + // ZendXml, ZendOAuth, ZendDiagnostics, ZendDeveloperTools + 'Laminas\\Xml\\' => 'ZendXml\\', + 'Laminas\\OAuth\\' => 'ZendOAuth\\', + 'Laminas\\Diagnostics\\' => 'ZendDiagnostics\\', + 'Laminas\\DeveloperTools\\' => 'ZendDeveloperTools\\', + + // Zend Service + 'Laminas\\ReCaptcha\\' => 'ZendService\\ReCaptcha\\', + 'Laminas\\Twitter\\' => 'ZendService\\Twitter\\', + + // Zend + 'Laminas\\' => 'Zend\\', + + // Expressive + 'Mezzio\\ProblemDetails\\' => 'Zend\\ProblemDetails\\', + 'Mezzio\\' => 'Zend\\Expressive\\', + + // Laminas to ZfCampus + 'Laminas\\ComposerAutoloading\\' => 'ZF\\ComposerAutoloading\\', + 'Laminas\\DevelopmentMode\\' => 'ZF\\DevelopmentMode\\', + + // Apigility + 'Laminas\\ApiTools\\Admin\\' => 'ZF\\Apigility\\Admin\\', + 'Laminas\\ApiTools\\Doctrine\\' => 'ZF\\Apigility\\Doctrine\\', + 'Laminas\\ApiTools\\Documentation\\' => 'ZF\\Apigility\\Documentation\\', + 'Laminas\\ApiTools\\Example\\' => 'ZF\\Apigility\\Example\\', + 'Laminas\\ApiTools\\Provider\\' => 'ZF\\Apigility\\Provider\\', + 'Laminas\\ApiTools\\Welcome\\' => 'ZF\\Apiglity\\Welcome\\', + 'Laminas\\ApiTools\\' => 'ZF\\', + ]; + } +} diff --git a/civicrm/vendor/laminas/laminas-zendframework-bridge/src/autoload.php b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/autoload.php new file mode 100644 index 0000000000..9f2f2adf85 --- /dev/null +++ b/civicrm/vendor/laminas/laminas-zendframework-bridge/src/autoload.php @@ -0,0 +1,9 @@ +<?php + +/** + * @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository + * @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md + * @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License + */ + +Laminas\ZendFrameworkBridge\Autoloader::load(); diff --git a/civicrm/vendor/pclzip/pclzip/composer.json b/civicrm/vendor/pclzip/pclzip/composer.json deleted file mode 100644 index a4df7fb6e3..0000000000 --- a/civicrm/vendor/pclzip/pclzip/composer.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "pclzip/pclzip", - "type": "library", - "description": "A PHP library that offers compression and extraction functions for Zip formatted archives", - "keywords": ["php", "zip"], - "homepage": "http://www.phpconcept.net/pclzip", - "license": ["LGPL-2.1"], - "authors": [ - { - "name": "Vincent Blavet" - } - ], - "autoload": { - "classmap": ["pclzip.lib.php"] - } -} diff --git a/civicrm/vendor/pclzip/pclzip/gnu-lgpl.txt b/civicrm/vendor/pclzip/pclzip/gnu-lgpl.txt deleted file mode 100644 index 583509c7ef..0000000000 --- a/civicrm/vendor/pclzip/pclzip/gnu-lgpl.txt +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - <one line to give the library's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - <signature of Ty Coon>, 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/civicrm/vendor/pclzip/pclzip/pclzip.lib.php b/civicrm/vendor/pclzip/pclzip/pclzip.lib.php deleted file mode 100644 index 33be0d7869..0000000000 --- a/civicrm/vendor/pclzip/pclzip/pclzip.lib.php +++ /dev/null @@ -1,5414 +0,0 @@ -<?php -// -------------------------------------------------------------------------------- -// PhpConcept Library - Zip Module 2.8.2 -// -------------------------------------------------------------------------------- -// License GNU/LGPL - Vincent Blavet - August 2009 -// http://www.phpconcept.net -// -------------------------------------------------------------------------------- -// -// Presentation : -// PclZip is a PHP library that manage ZIP archives. -// So far tests show that archives generated by PclZip are readable by -// WinZip application and other tools. -// -// Description : -// See readme.txt and http://www.phpconcept.net -// -// Warning : -// This library and the associated files are non commercial, non professional -// work. -// It should not have unexpected results. However if any damage is caused by -// this software the author can not be responsible. -// The use of this software is at the risk of the user. -// -// -------------------------------------------------------------------------------- -// $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); -} - -// -------------------------------------------------------------------------------- -// ***** 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 -{ - // ----- Filename of the zip file - public $zipname = ''; - - // ----- File descriptor of the zip file - public $zip_fd = 0; - - // ----- Internal error handling - 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 - 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) - { - - // ----- Tests the zlib - if (!function_exists('gzopen')) { - 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) - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- 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); - - // ----- 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 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; - } - - // ----- 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; - } - - // ----- 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 { - } - } - } - - // ----- 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; - } - - // ----- Call the create fct - $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); - 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) - // -------------------------------------------------------------------------------- - 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); - - // ----- 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 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; - } - - // ----- 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; - } - - // ----- 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; - } - } - - // ----- 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; - } - - // ----- Call the create fct - $v_result = $this->privAdd($v_filedescr_list, $p_result_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. - // -------------------------------------------------------------------------------- - public function listContent() - { - $v_result = 1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return (0); - } - - // ----- Call the extracting fct - $p_list = array(); - if (($v_result = $this->privList($p_list)) != 1) { - unset($p_list); - - return (0); - } - - // ----- 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; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - 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); - - // ----- 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); - } - - // ----- 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); - } - - // ----- 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; - } - } - } - - // ----- 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; - } - $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); - } - - // ----- 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); - } - - // ----- 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; - } - } - - // ----- 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); - } - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : deleteByIndex() - // Description : - // ***** Deprecated ***** - // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. - // -------------------------------------------------------------------------------- - public function deleteByIndex($p_index) - { - - $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); - - // ----- 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() - { - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - $this->privSwapBackMagicQuotes(); - - return (0); - } - - // ----- Default properties - $v_prop = array(); - $v_prop['comment'] = ''; - $v_prop['nb'] = 0; - $v_prop['status'] = 'not_exist'; - - // ----- Look if file exists - if (@is_file($this->zipname)) { - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in binary read mode'); - - // ----- Return - return 0; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { - $this->privSwapBackMagicQuotes(); - - return 0; - } - - // ----- Close the zip file - $this->privCloseFd(); - - // ----- Set the user attributes - $v_prop['comment'] = $v_central_dir['comment']; - $v_prop['nb'] = $v_central_dir['entries']; - $v_prop['status'] = 'ok'; - } - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- 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(); - - // ----- Look if the $p_archive is a PclZip object - if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) { - - // ----- Duplicate the archive - $v_result = $this->privDuplicate($p_archive->zipname); - - // ----- Look if the $p_archive is a string (so a filename) - } elseif (is_string($p_archive)) { - - // ----- 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); - } - - // ----- 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; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return (0); - } - - // ----- 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)) { - - // ----- Create a temporary archive - $v_object_archive = new PclZip($p_archive_to_add); - - // ----- 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; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : errorCode() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - public function errorCode() - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - return (PclErrorCode()); - } else { - return ($this->error_code); - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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'; - } - - if ($p_with_code) { - return ($v_value . ' (' . $this->error_code . ')'); - } else { - return ($v_value); - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : errorInfo() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - public 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 . "]"); - } - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // ***** 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(); - - // ----- 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 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 - - // ----- Check the central header - // TBC - - // ----- 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; - - // ----- 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"); - - // ----- 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]) . "'"); - - // ----- 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(); - } - - // ----- Next options - $i++; - } - - // ----- 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(); - } - } - } - } - - // ----- Look for default values - if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { - - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privOptionDefaultThreshold() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- 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)); - - 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; - } - - $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit * PCLZIP_TEMPORARY_FILE_RATIO); - - // ----- 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]); - } - - // ----- 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; - - // ----- 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"); - - // ----- 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(); - } - - $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); - - if ($p_filedescr['filename'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); - - return PclZip::errorCode(); - } - - break; - - 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(); - } - - $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 $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 $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 $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; - } - - // ----- 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; - } - - // ----- 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(); - - // ----- Return - return $v_result; - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($this->zip_fd); - - // ----- 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; - } - - // ----- 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; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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_READ_OPEN_FAIL, 'Zip file \'' . $this->zipname . '\' already open'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- 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; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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; - - // ----- 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; - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($this->zip_fd); - - // ----- 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]); - } - - // ----- Zip file comment - $v_comment = ''; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_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_size, $v_offset, $v_comment)) != 1) { - // ----- Reset the file list - unset($v_header_list); - - // ----- Return - return $v_result; - } - - // ----- 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 : - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- Store the file infos - $p_result_list[$v_nb++] = $v_header; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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']; - - // 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(); - } - - // ----- 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); - - // ----- 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']); - } - - // ----- 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); - } - - // ------ 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'] = ''; - } - - // ----- 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"; - $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']); - } - } - - // ----- 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'] .= '/'; - } - - // ----- 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])) { - - // ----- 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; - } - - // ----- Update the informations - // Nothing can be modified - } - - // ----- 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(); - } - - // ----- 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(); - } - - // ----- 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; - } - - // ----- Close the file - @fclose($v_file); - @gzclose($v_file_compressed); - - // ----- 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(); - } - - // ----- 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(); - } - - // ----- 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); - - // ----- Check some parameters - $v_data_header['os'] = bin2hex($v_data_header['os']); - - // ----- 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); - - // ----- 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; - - // ----- Close the file - @fclose($v_file_compressed); - - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - 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'); - - return PclZip::errorCode(); - } - - // ----- 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; - } - - // ----- Close the file - @fclose($v_file_compressed); - - // ----- Unlink the temporary file - @unlink($v_gzip_temp_name); - - // ----- 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 : - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- 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; - } - - // ----- 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)); - } - } - } - - // ----- 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; - } - } - } - - // ----- 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; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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']); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteCentralFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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']); - } - if ($p_header['comment_len'] != 0) { - fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteCentralHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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)); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privList() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in binary read mode'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { - $this->privSwapBackMagicQuotes(); - - return $v_result; - } - - // ----- Go to beginning of Central Dir - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_central_dir['offset'])) { - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- 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; - - // ----- Get the only interesting attributes - $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); - unset($v_header); - } - - // ----- Close the zip file - $this->privCloseFd(); - - // ----- 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 : - // -------------------------------------------------------------------------------- - public 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']; - - // ----- 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; - - // ----- 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); - } - } - - // ----- 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); - - // ----- Open the zip file - if (($v_result = $this->privOpenFd('rb')) != 1) { - $this->privSwapBackMagicQuotes(); - - return $v_result; - } - - // ----- 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']; - - // ----- Read each entry - $j_start = 0; - for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) { - - // ----- 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(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the file header - $v_header = array(); - if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - 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 - /* - elseif ( (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 - } elseif ((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 - } elseif ((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 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; - } - - $v_extract = false; - } - - // ----- 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; - } - } - } - } - - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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) - { - $v_result = 1; - - // ----- Read the file header - if (($v_result = $this->privReadFileHeader($v_header)) != 1) { - // ----- Return - return $v_result; - } - - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC - } - - // ----- 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) { - - $p_entry['status'] = "filtered"; - - return $v_result; - } - - // ----- Get the basename of the path - $p_entry['filename'] = basename($p_entry['filename']); - - // ----- Look for path to remove - } elseif ($p_remove_path != "") { - if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) { - - // ----- Change the file status - $p_entry['status'] = "filtered"; - - // ----- Return - return $v_result; - } - - $p_remove_path_size = strlen($p_remove_path); - if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) { - - // ----- Remove the path - $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); - - } - } - - // ----- Add the path - if ($p_path != '') { - $p_entry['filename'] = $p_path . "/" . $p_entry['filename']; - } - - // ----- 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) { - - PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, "Filename '" . $p_entry['filename'] . "' is " . "outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); - - 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']; - } - - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { - - // ----- 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 the file status - $p_entry['status'] = "already_a_directory"; - - // ----- 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_ALREADY_A_DIRECTORY, "Filename '" . $p_entry['filename'] . "' is " . "already used by an existing directory"); - - return PclZip::errorCode(); - } - - // ----- Look if file is write protected - } elseif (!is_writeable($p_entry['filename'])) { - - // ----- Change the file status - $p_entry['status'] = "write_protected"; - - // ----- 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, "Filename '" . $p_entry['filename'] . "' exists " . "and is write protected"); - - return PclZip::errorCode(); - } - - // ----- 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"; - - // ----- 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']; - } elseif (!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"; - - // ----- Return - //return $v_result; - $v_result = 1; - } - } - } - - // ----- 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) { - - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - - // ----- Change the file status - $p_entry['status'] = "write_error"; - - // ----- 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); - - // ----- Change the file mtime - touch($p_entry['filename'], $p_entry['mtime']); - - } 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 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; - } - - // ----- Look for extract in memory - } else { - - // ----- Read the compressed file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- Decompress the file - $v_file_content = @gzinflate($v_buffer); - unset($v_buffer); - if ($v_file_content === false) { - - // ----- Change the file status - // TBC - $p_entry['status'] = "error"; - - return $v_result; - } - - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - - // ----- Change the file status - $p_entry['status'] = "write_error"; - - return $v_result; - } - - // ----- Write the uncompressed data - @fwrite($v_dest_file, $v_file_content, $p_entry['size']); - unset($v_file_content); - - // ----- Closing the destination file - @fclose($v_dest_file); - - } - - // ----- Change the file mtime - @touch($p_entry['filename'], $p_entry['mtime']); - } - - // ----- 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]); - } - - } - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - - // ----- 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 - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileUsingTempFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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(); - } - - // ----- 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); - - // ----- 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; - } - - // ----- Write gz file format footer - $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); - @fwrite($v_dest_file, $v_binary_data, 8); - - // ----- 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; - } - - // ----- 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['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); - - // ----- Delete the temporary file - @unlink($v_gzip_temp_name); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // 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 - } - - // ----- 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']; - } - - // ----- Trace - - // ----- 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['compressed_size'] == $p_entry['size']) { - - // ----- Read the file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- Send the file to the output - echo $v_buffer; - unset($v_buffer); - } else { - - // ----- Read the compressed file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- 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); - } - } - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - - // ----- 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; - - // ----- Read the file header - $v_header = array(); - if (($v_result = $this->privReadFileHeader($v_header)) != 1) { - // ----- Return - return $v_result; - } - - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC - } - - // ----- 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']; - } - - // ----- 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['compressed_size'] == $p_entry['size']) - if ($p_entry['compression'] == 0) { - - // ----- Reading the file - $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); - } 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 - } - } - - // ----- Trace - } else { - // TBC : error : can not extract a folder in a string - } - - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - - // ----- 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); - - // ----- Swap the content to header - $v_local_header['content'] = $p_string; - $p_string = ''; - - // ----- 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); - - // ----- 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; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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) { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the first 42 bytes of the header - $v_binary_data = fread($this->zip_fd, 26); - - // ----- 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)); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Extract the values - $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); - - // ----- Get filename - $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); - - // ----- Get extra_fields - if ($v_data['extra_len'] != 0) { - $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); - } else { - $p_header['extra'] = ''; - } - - // ----- 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(); - } - - // TBC - //for (reset($v_data); $key = key($v_data); next($v_data)) { - //} - - // ----- Set the stored filename - $p_header['stored_filename'] = $p_header['filename']; - - // ----- Set the status field - $p_header['status'] = "ok"; - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadCentralFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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) { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the first 42 bytes of the header - $v_binary_data = fread($this->zip_fd, 42); - - // ----- 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)); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- 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; - - // ----- 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(); - } - - // ----- Set the stored filename - $p_header['stored_filename'] = $p_header['filename']; - - // ----- Set default status to ok - $p_header['status'] = 'ok'; - - // ----- Look if it is a directory - if (substr($p_header['filename'], -1) == '/') { - //$p_header['external'] = 0x41FF0010; - $p_header['external'] = 0x00000010; - } - - // ----- 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; - - // ----- 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']) { - } - - // ----- 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 $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadEndCentralDir() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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 . '\''); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- 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 . '\''); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read for bytes - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = @unpack('Vid', $v_binary_data); - - // ----- Check signature - if ($v_data['id'] == 0x06054b50) { - $v_found = 1; - } - - $v_pos = ftell($this->zip_fd); - } - - // ----- 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 - return PclZip::errorCode(); - } - - // ----- 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++; - } - - // ----- Look if not found end of central dir - if ($v_pos == $v_size) { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); - - // ----- Return - return PclZip::errorCode(); - } - } - - // ----- Read the first 18 bytes of the header - $v_binary_data = fread($this->zip_fd, 18); - - // ----- Look for invalid block size - if (strlen($v_binary_data) != 18) { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : " . strlen($v_binary_data)); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- 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(); - } - } - - // ----- 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'] = ''; - } - - $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']; - - // TBC - //for (reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { - //} - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDeleteByRule() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { - $this->privCloseFd(); - - return $v_result; - } - - // ----- Go to beginning of File - @rewind($this->zip_fd); - - // ----- 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(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read each entry - $v_header_list = array(); - $j_start = 0; - for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) { - - // ----- 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(); - - 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 - /* - elseif ( (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 - } elseif ((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 - } elseif ((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++; - } - } - - // ----- Look if something need to be deleted - if ($v_nb_extracted > 0) { - - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; - - // ----- Creates a temporary zip archive - $v_temp_zip = new PclZip($v_zip_temp_name); - - // ----- Open the temporary zip file in write mode - if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { - $this->privCloseFd(); - - // ----- Return - return $v_result; - } - - // ----- 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; - } - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($v_temp_zip->zip_fd); - - // ----- 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; - } - - // ----- Transform the header to a 'usable' info - $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); - } - - // ----- Zip file comment - $v_comment = ''; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; - } - - // ----- 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; - } - - // ----- Close - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - - // ----- 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); - - // ----- 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; - } - - if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { - return $v_result; - } - - $this->privCloseFd(); - } - - // ----- 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; - - // ----- Remove the final '/' - if (($p_is_dir) && (substr($p_dir, -1) == '/')) { - $p_dir = substr($p_dir, 0, strlen($p_dir) - 1); - } - - // ----- Check the directory availability - if ((is_dir($p_dir)) || ($p_dir == "")) { - return 1; - } - - // ----- Extract parent directory - $p_parent_dir = dirname($p_dir); - - // ----- 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; - } - } - } - - // ----- 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 PclZip::errorCode(); - } - - // ----- 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 : - // -------------------------------------------------------------------------------- - public function privMerge(&$p_archive_to_add) - { - $v_result = 1; - - // ----- Look if the archive_to_add exists - if (!is_file($p_archive_to_add->zipname)) { - - // ----- Nothing to merge, so merge is a success - $v_result = 1; - - // ----- Return - return $v_result; - } - - // ----- Look if the archive exists - if (!is_file($this->zipname)) { - - // ----- Do a duplicate - $v_result = $this->privDuplicate($p_archive_to_add->zipname); - - // ----- Return - return $v_result; - } - - // ----- Open the zip file - if (($v_result = $this->privOpenFd('rb')) != 1) { - // ----- Return - return $v_result; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { - $this->privCloseFd(); - - return $v_result; - } - - // ----- Go to beginning of File - @rewind($this->zip_fd); - - // ----- Open the archive_to_add file - if (($v_result = $p_archive_to_add->privOpenFd('rb')) != 1) { - $this->privCloseFd(); - - // ----- Return - return $v_result; - } - - // ----- 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 $v_result; - } - - // ----- Go to beginning of File - @rewind($p_archive_to_add->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(); - $p_archive_to_add->privCloseFd(); - - 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; - } - - // ----- 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; - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($v_zip_temp_fd); - - // ----- 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; - } - - // ----- 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; - } - - // ----- Merge the file comments - $v_comment = $v_central_dir['comment'] . ' ' . $v_central_dir_to_add['comment']; - - // ----- Calculate the size of the (new) central header - $v_size = @ftell($v_zip_temp_fd) - $v_offset; - - // ----- 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; - - // ----- 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; - - // ----- Reset the file list - unset($v_header_list); - - // ----- 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(); - $p_archive_to_add->privCloseFd(); - - // ----- Close the temporary file - @fclose($v_zip_temp_fd); - - // ----- 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; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDuplicate() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public function privDuplicate($p_archive_filename) - { - $v_result = 1; - - // ----- Look if the $p_archive_filename exists - if (!is_file($p_archive_filename)) { - - // ----- Nothing to duplicate, so duplicate is a success. - $v_result = 1; - - // ----- Return - return $v_result; - } - - // ----- Open the zip file - if (($v_result = $this->privOpenFd('wb')) != 1) { - // ----- Return - return $v_result; - } - - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) { - $this->privCloseFd(); - - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \'' . $p_archive_filename . '\' 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 = 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 - $this->privCloseFd(); - - // ----- Close the temporary file - @fclose($v_zip_temp_fd); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privErrorLog() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - public 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 : - // -------------------------------------------------------------------------------- - public function privErrorReset() - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - PclErrorReset(); - } else { - $this->error_code = 0; - $this->error_string = ''; - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDisableMagicQuotes() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- Look if already done - if ($this->magic_quotes_status != -1) { - return $v_result; - } - - // ----- Get and memorize the magic_quote value - $this->magic_quotes_status = @get_magic_quotes_runtime(); - - // ----- Disable magic_quotes - if ($this->magic_quotes_status == 1) { - @set_magic_quotes_runtime(0); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privSwapBackMagicQuotes() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - public 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; - } - - // ----- Look if something to do - if ($this->magic_quotes_status != -1) { - return $v_result; - } - - // ----- Swap back magic_quotes - if ($this->magic_quotes_status == 1) { - @set_magic_quotes_runtime($this->magic_quotes_status); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- -} - -// End of class -// -------------------------------------------------------------------------------- - -// -------------------------------------------------------------------------------- -// 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 - } 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--; - } - } - } - - // ----- 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) -{ - $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_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_path_size = sizeof($v_list_path); - - // ----- Study directories paths - $i = 0; - $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; - } - - // ----- 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++; - } - - // ----- 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; - } 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) -{ - $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; - } - } 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) -{ - $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; - } 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) -{ - - $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; - } - } - - $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) -{ - 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, '\\', '/'); - } - } - - return $p_path; -} -// -------------------------------------------------------------------------------- diff --git a/civicrm/vendor/pclzip/pclzip/readme.txt b/civicrm/vendor/pclzip/pclzip/readme.txt deleted file mode 100644 index 115c22edf1..0000000000 --- a/civicrm/vendor/pclzip/pclzip/readme.txt +++ /dev/null @@ -1,421 +0,0 @@ -// -------------------------------------------------------------------------------- -// PclZip 2.8.2 - readme.txt -// -------------------------------------------------------------------------------- -// License GNU/LGPL - August 2009 -// Vincent Blavet - vincent@phpconcept.net -// http://www.phpconcept.net -// -------------------------------------------------------------------------------- -// $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $ -// -------------------------------------------------------------------------------- - - - -0 - Sommaire -============ - 1 - Introduction - 2 - What's new - 3 - Corrected bugs - 4 - Known bugs or limitations - 5 - License - 6 - Warning - 7 - Documentation - 8 - Author - 9 - Contribute - -1 - Introduction -================ - - PclZip is a library that allow you to manage a Zip archive. - - Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip - -2 - What's new -============== - - Version 2.8.2 : - - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with - extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string - can also be modified in the post-extract call back. - **Bugs correction : - - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly - - Remove use of eval() and do direct call to callback functions - - Correct support of 64bits systems (Thanks to WordPress team) - - Version 2.8.1 : - - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is - deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will - automatically replace it by PCLZIP_OPT_BY_PREG. - - Version 2.8 : - - Improve extraction of zip archive for large files by using temporary files - This feature is working like the one defined in r2.7. - Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF, - PCLZIP_OPT_TEMP_FILE_THRESHOLD - - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto - sense of temporary file use. - - Bug correction : Reduce filepath in returned file list to remove ennoying - './/' preambule in file path. - - Version 2.7 : - - Improve creation of zip archive for large files : - PclZip will now autosense the configured memory and use temporary files - when large file is suspected. - This feature can also ne triggered by manual options in create() and add() - methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files, - 'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic, - 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size - threshold to use temporary files. - Using "temporary files" rather than "memory" might take more time, but - might give the ability to zip very large files : - Tested on my win laptop with a 88Mo file : - Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo) - Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo) - - Replace use of mktime() by time() to limit the E_STRICT error messages. - - Bug correction : When adding files with full windows path (drive letter) - PclZip is now working. Before, if the drive letter is not the default - path, PclZip was not able to add the file. - - Version 2.6 : - - Code optimisation - - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to - add a comment for a specific file. (Don't really know if this is usefull) - - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string - as a file. - - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with - a file. - - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted - with current time - - Add CRC value in the informations returned back for each file after an - action. - - Add missing closedir() statement. - - When adding a folder, and removing the path of this folder, files were - incorrectly added with a '/' at the beginning. Which means files are - related to root in unix systems. Corrected. - - Add conditional if before constant definition. This will allow users - to redefine constants without changing the file, and then improve - upgrade of pclzip code for new versions. - - Version 2.5 : - - Introduce the ability to add file/folder with individual properties (file descriptor). - This gives for example the ability to change the filename of a zipped file. - . Able to add files individually - . Able to change full name - . Able to change short name - . Compatible with global options - - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME - - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE - - Add a security control feature. PclZip can extract any file in any folder - of a system. People may use this to upload a zip file and try to override - a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the - ability to forgive any directory transversal behavior. - - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path - - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION - - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend - by current path (getcwd()) - - Version 2.4 : - - Code improvment : try to speed up the code by removing unusefull call to pack() - - Correct bug in delete() : delete() should be called with no argument. This was not - the case in 2.3. This is corrected in 2.4. - - Correct a bug in path_inclusion function. When the path has several '../../', the - result was bad. - - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will - disable it while working and det it back to its original value. - This resolve a lots of bad formated archive errors. - - Bug correction : PclZip now correctly unzip file in some specific situation, - when compressed content has same size as uncompressed content. - - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH', - directories are not any more created. - - Code improvment : correct unclosed opendir(), better handling of . and .. in - loops. - - - Version 2.3 : - - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not - give the same result in PHP4 and PHP5 .... - - Version 2.2 : - - Try development of PCLZIP_OPT_CRYPT ..... - However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers, - the result (greater than a long) is not supported by PHP. Even the use of bcmath - functions does not help. I did not find yet a solution ...; - - Add missing '/' at end of directory entries - - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or - error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION. - - Corrected : Bad "version need to extract" field in local file header - - Add private method privCheckFileHeaders() in order to check local and central - file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives - the ability to have a local file header without size, compressed size and crc filled. - - Add a generic status 'error' for file status - - Add control of compression type. PclZip only support deflate compression method. - Before v2.2, PclZip does not check the compression method used in an archive while - extracting. With v2.2 PclZip returns a new error status for a file using an unsupported - compression method. New status is "unsupported_compression". New error code is - PCLZIP_ERR_UNSUPPORTED_COMPRESSION. - - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files - when errors like 'a folder with same name exists' or 'a newer file exists' or - 'a write protected file' exists, rather than set a status for the concerning file - and resume the extract of the zip. - - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the - replacement of the file, even if a newer version of the file exists. - Note that today if a file with the same name already exists but is older it will be - replaced by the extracted one. - - Improve PclZipUtilOption() - - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central - directory structure is the last data in the archive. Crypt encryption/decryption of - zip archive put trailing 0 bytes after decryption. PclZip is now supporting this. - - Version 2.1 : - - Add the ability to abort the extraction by using a user callback function. - The user can now return the value '2' in its callback which indicates to stop the - extraction. For a pre call-back extract is stopped before the extration of the current - file. For a post call back, the extraction is stopped after. - - Add the ability to extract a file (or several files) directly in the standard output. - This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract(). - - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT, - PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments - in the zip archive. - - When merging two archives, the comments are not any more lost, but merged, with a - blank space separator. - - Corrected bug : Files are not deleted when all files are asked to be deleted. - - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature. - - - Version 2.0 : - ***** Warning : Some new features may break the backward compatibility for your scripts. - Please carefully read the readme file. - - Add the ability to delete by Index, name and regular expression. This feature is - performed by the method delete(), which uses the optional parameters - PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG. - - Add the ability to extract by regular expression. To extract by regexp you must use the method - extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG - (depending if you want to use ereg() or preg_match() syntax) followed by the - regular expression pattern. - - Add the ability to extract by index, directly with the extract() method. This is a - code improvment of the extractByIndex() method. - - Add the ability to extract by name. To extract by name you must use the method - extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to - extract or an array of filenames to extract. To extract all a folder, use the folder - name rather than the filename with a '/' at the end. - - Add the ability to add files without compression. This is done with a new attribute - which is PCLZIP_OPT_NO_COMPRESSION. - - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly - in a string without using any file (or temporary file). - - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string. - The default separator is now a comma (,) and not any more a blank space. - THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with - your script. - - Improve algorythm performance by removing the use of temporary files when adding or - extracting files in an archive. - - Add (correct) detection of empty filename zipping. This can occurs when the removed - path is the same - as a zipped dir. The dir is not zipped (['status'] = filtered), only its content. - - Add better support for windows paths (thanks for help from manus@manusfreedom.com). - - Corrected bug : When the archive file already exists with size=0, the add() method - fails. Corrected in 2.0. - - Remove the use of OS_WINDOWS constant. Use php_uname() function rather. - - Control the order of index ranges in extract by index feature. - - Change the internal management of folders (better handling of internal flag). - - - Version 1.3 : - - Removing the double include check. This is now done by include_once() and require_once() - PHP directives. - - Changing the error handling mecanism : Remove the use of an external error library. - The former PclError...() functions are replaced by internal equivalent methods. - By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library. - Introducing the use of constants for error codes rather than integer values. This will help - in futur improvment. - Introduction of error handling functions like errorCode(), errorName() and errorInfo(). - - Remove the deprecated use of calling function with arguments passed by reference. - - Add the calling of extract(), extractByIndex(), create() and add() functions - with variable options rather than fixed arguments. - - Add the ability to remove all the file path while extracting or adding, - without any need to specify the path to remove. - This is available for extract(), extractByIndex(), create() and add() functionS by using - the new variable options parameters : - - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct. - - Ability to change the mode of a file after the extraction (chmod()). - This is available for extract() and extractByIndex() functionS by using - the new variable options parameters. - - PCLZIP_OPT_SET_CHMOD : by setting the value of this option. - - Ability to definition call-back options. These call-back will be called during the adding, - or the extracting of file (extract(), extractByIndex(), create() and add() functions) : - - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user - can trigerred the change the filename of the extracted file. The user can triggered the - skip of the extraction. This is adding a 'skipped' status in the file list result value. - - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file. - Nothing can be triggered from that point. - - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user - can trigerred the change the stored filename of the added file. The user can triggered the - skip of the add. This is adding a 'skipped' status in the file list result value. - - PCLZIP_CB_POST_ADD : will be called after each add of a file. - Nothing can be triggered from that point. - - Two status are added in the file list returned as function result : skipped & filename_too_long - 'skipped' is used when a call-back function ask for skipping the file. - 'filename_too_long' is used while adding a file with a too long filename to archive (the file is - not added) - - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into - a directory. - - Add a check of the presence of the archive file before some actions (like list, ...) - - Add the initialisation of field "index" in header array. This means that by - default index will be -1 when not explicitly set by the methods. - - Version 1.2 : - - Adding a duplicate function. - - Adding a merge function. The merge function is a "quick merge" function, - it just append the content of an archive at the end of the first one. There - is no check for duplicate files or more recent files. - - Improve the search of the central directory end. - - Version 1.1.2 : - - - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license - (see License section). - - Adding the optional support of a static temporary directory. You will need to configure - the constant PCLZIP_TEMPORARY_DIR if you want to use this feature. - - Improving the rename() function. In some cases rename() does not work (different - Filesystems), so it will be replaced by a copy() + unlink() functions. - - Version 1.1.1 : - - - Maintenance release, no new feature. - - Version 1.1 : - - - New method Add() : adding files in the archive - - New method ExtractByIndex() : partial extract of the archive, files are identified by - their index in the archive - - New method DeleteByIndex() : delete some files/folder entries from the archive, - files are identified by their index in the archive. - - Adding a test of the zlib extension presence. If not present abort the script. - - Version 1.0.1 : - - - No new feature - - -3 - Corrected bugs -================== - - Corrected in Version 2.0 : - - Corrected : During an extraction, if a call-back fucntion is used and try to skip - a file, all the extraction process is stopped. - - Corrected in Version 1.3 : - - Corrected : Support of static synopsis for method extract() is broken. - - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF). - - Corrected : When an extract is done with a remove_path parameter, the entry for - the directory with exactly the same path is not skipped/filtered. - - Corrected : extractByIndex() and deleteByIndex() were not managing index in the - right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This - is due to a sort of the index resulting table that puts 11 before 3-5 (sort on - string and not interger). The sort is temporarilly removed, this means that - you must provide a sorted list of index ranges. - - Corrected in Version 1.2 : - - - Nothing. - - Corrected in Version 1.1.2 : - - - Corrected : Winzip is unable to delete or add new files in a PclZip created archives. - - Corrected in Version 1.1.1 : - - - Corrected : When archived file is not compressed (0% compression), the - extract method fails. - - Corrected in Version 1.1 : - - - Corrected : Adding a complete tree of folder may result in a bad archive - creation. - - Corrected in Version 1.0.1 : - - - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024). - - -4 - Known bugs or limitations -============================= - - Please publish bugs reports in SourceForge : - http://sourceforge.net/tracker/?group_id=40254&atid=427564 - - In Version 2.x : - - PclZip does only support file uncompressed or compressed with deflate (compression method 8) - - PclZip does not support password protected zip archive - - Some concern were seen when changing mtime of a file while archiving. - Seems to be linked to Daylight Saving Time (PclTest_changing_mtime). - - In Version 1.2 : - - - merge() methods does not check for duplicate files or last date of modifications. - - In Version 1.1 : - - - Limitation : Using 'extract' fields in the file header in the zip archive is not supported. - - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to - add a file in a PclZip created archive. (Corrected in v.1.2) - - In Version 1.0.1 : - - - Adding a complete tree of folder may result in a bad archive - creation. (Corrected in V.1.1). - - Path given to methods must be in the unix format (/) and not the Windows format (\). - Workaround : Use only / directory separators. - - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz - added suffix. Files with these names may already exist and may be overwritten. - Workaround : none. - - PclZip does not check if the zlib extension is present. If it is absent, the zip - file is not created and the lib abort without warning. - Workaround : enable the zlib extension on the php install - - In Version 1.0 : - - - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024). - (Corrected in v.1.0.1) - - Limitation : Multi-disk zip archive are not supported. - - -5 - License -=========== - - Since version 1.1.2, PclZip Library is released under GNU/LGPL license. - This library is free, so you can use it at no cost. - - HOWEVER, if you release a script, an application, a library or any kind of - code using PclZip library (or a part of it), YOU MUST : - - Indicate in the documentation (or a readme file), that your work - uses PclZip Library, and make a reference to the author and the web site - http://www.phpconcept.net - - Gives the ability to the final user to update the PclZip libary. - - I will also appreciate that you send me a mail (vincent@phpconcept.net), just to - be aware that someone is using PclZip. - - For more information about GNU/LGPL license : http://www.gnu.org - -6 - Warning -================= - - This library and the associated files are non commercial, non professional work. - It should not have unexpected results. However if any damage is caused by this software - the author can not be responsible. - The use of this software is at the risk of the user. - -7 - Documentation -================= - PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php - A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/ - -8 - Author -========== - - This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time. - -9 - Contribute -============== - If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net. - If you can help in financing PhpConcept hosting service, please go to - http://www.phpconcept.net/soutien.php diff --git a/civicrm/vendor/pear/validate_finance_creditcard/.travis.yml b/civicrm/vendor/pear/validate_finance_creditcard/.travis.yml index df4d642077..6eaf80c4a7 100644 --- a/civicrm/vendor/pear/validate_finance_creditcard/.travis.yml +++ b/civicrm/vendor/pear/validate_finance_creditcard/.travis.yml @@ -1,7 +1,20 @@ language: php +matrix: + fast_finish: true + allow_failures: + - php: nightly + include: + - php: 5.4.45 + dist: trusty + - php: 5.5.38 + dist: trusty + - php: 5.6 + - php: 7.0 + - php: 7.1 + - php: 7.2 + - php: 7.3 + - php: 7.4 + - php: nightly install: - pear install package.xml -php: - - 5.4 -sudo: false -script: phpunit tests/ +script: pear run-tests tests/ \ No newline at end of file diff --git a/civicrm/vendor/pear/validate_finance_creditcard/README.md b/civicrm/vendor/pear/validate_finance_creditcard/README.md index 93e6c44f0a..5675e9f020 100644 --- a/civicrm/vendor/pear/validate_finance_creditcard/README.md +++ b/civicrm/vendor/pear/validate_finance_creditcard/README.md @@ -1,3 +1,5 @@ +[](https://travis-ci.org/pear/Validate_Finance_CreditCard) + Validate_Finance_CreditCard =========================== diff --git a/civicrm/vendor/pear/validate_finance_creditcard/package.xml b/civicrm/vendor/pear/validate_finance_creditcard/package.xml index 3ca34d1493..e862fd1696 100644 --- a/civicrm/vendor/pear/validate_finance_creditcard/package.xml +++ b/civicrm/vendor/pear/validate_finance_creditcard/package.xml @@ -14,11 +14,11 @@ <email>Philippe.Jausions@11abacus.com</email> <active>yes</active> </lead> - <date>2016-01-29</date> - <time>00:34:33</time> + <date>2021-05-19</date> + <time>22:57:33</time> <version> - <release>0.6.0</release> - <api>0.6.0</api> + <release>0.7.0</release> + <api>0.7.0</api> </version> <stability> <release>alpha</release> @@ -26,7 +26,8 @@ </stability> <license>New BSD</license> <notes> - - Update to use PHP 5 method syntax. Allows use in PHP 7 environments. + - Recognise new MasterCard 2-series BIN numbers + - Update travis-ci configuration </notes> <contents> <dir name="/"> @@ -42,6 +43,7 @@ </dir> <!-- /Validate/Finance --> </dir> <!-- /Validate --> <file name="LICENSE" role="doc" /> + <file name="README.md" role="doc" /> </dir> <!-- / --> </contents> <dependencies> @@ -59,6 +61,21 @@ </dependencies> <phprelease /> <changelog> + <release> + <version> + <release>0.6.0</release> + <api>0.6.0</api> + </version> + <stability> + <release>alpha</release> + <api>alpha</api> + </stability> + <date>2016-01-29</date> + <license>New BSD</license> + <notes> + - Update to use PHP 5 method syntax. Allows use in PHP 7 environments. + </notes> + </release> <release> <version> <release>0.5.2</release> diff --git a/civicrm/vendor/phpoffice/common/.gitignore b/civicrm/vendor/phpoffice/common/.gitignore deleted file mode 100644 index 605fc80c32..0000000000 --- a/civicrm/vendor/phpoffice/common/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -.DS_Store -._* -.Spotlight-V100 -.Trashes -Thumbs.db -Desktop.ini -.idea -build/ -phpunit.xml -composer.phar -vendor -*.settings -*.project -*.buildpath - -/samples/results -/phpunit.bat -/todo.txt -/samples/Sample_00_Test.php -/samples/#47 -/samples/#70 -/samples/#71 -/samples/Github_*.* -/samples/#83/*.lnk -/composer.lock diff --git a/civicrm/vendor/phpoffice/common/.scrutinizer.yml b/civicrm/vendor/phpoffice/common/.scrutinizer.yml deleted file mode 100644 index 6d188bee8f..0000000000 --- a/civicrm/vendor/phpoffice/common/.scrutinizer.yml +++ /dev/null @@ -1,24 +0,0 @@ -filter: - excluded_paths: [ 'vendor/*', 'tests/*', 'samples/*' ] - -before_commands: - - "composer install --prefer-source --dev" - -tools: - php_code_sniffer: - enabled: true - config: - standard: PSR2 - php_mess_detector: - enabled: true - config: - ruleset: phpmd.xml.dist - external_code_coverage: - enabled: true - timeout: 900 - php_cpd: true - # php_sim: # Temporarily disabled to allow focus on things other than duplicates - # min_mass: 40 - php_pdepend: true - php_analyzer: true - sensiolabs_security_checker: true \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/common/.travis.yml b/civicrm/vendor/phpoffice/common/.travis.yml deleted file mode 100644 index e5f01f1afc..0000000000 --- a/civicrm/vendor/phpoffice/common/.travis.yml +++ /dev/null @@ -1,60 +0,0 @@ -language: php - -php: - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - hhvm - -matrix: - allow_failures: - - php: 7.1 - - php: 7.2 - - php: hhvm - -env: - global: - ## - secure: "LtlUOzC8FtqgbqUTmU7EU281NSCb58UFdvnz8lelNIDltBdP4eayN/TsgNIePB4jXg2d2R56ZA6j/grhE/md6jdUkulV355H3GrH/hIZmmQ+F9+87agnwLzb9+MJbqXoiE7VvjY3zGIO09G897SUfsfu6JWEcscYFlsH6KcXM6M=" - -before_script: - ## Packages - - sudo apt-get -qq update > /dev/null - - sudo apt-get -qq install graphviz > /dev/null - ## Composer - - composer self-update - - composer install --prefer-source --dev - ## PHPDocumentor - - mkdir -p build/docs - - mkdir -p build/coverage - -script: - ## PHP_CodeSniffer - - ./vendor/bin/phpcs src/ tests/ --standard=PSR2 -n - ## PHP Copy/Paste Detector - # - ./vendor/bin/phpcpd src/ - ## PHP Mess Detector - - ./vendor/bin/phpmd src/,tests/ text ./phpmd.xml.dist - ## PHPUnit - - ./vendor/bin/phpunit -c ./ --coverage-text --coverage-html ./build/coverage - ## PHPLOC - - ./vendor/bin/phploc src/ - ## PHPDocumentor - - ./vendor/bin/phpdoc -q -d ./src -t ./build/docs --template="responsive-twig" - -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 - -notifications: - webhooks: - urls: - - https://webhooks.gitter.im/e/e019b92a7793d27e080c - on_success: change # options: [always|never|change] default: always - on_failure: always # options: [always|never|change] default: always - on_start: false # default: false \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/common/.travis_shell_after_success.sh b/civicrm/vendor/phpoffice/common/.travis_shell_after_success.sh deleted file mode 100644 index bbfb7cb811..0000000000 --- a/civicrm/vendor/phpoffice/common/.travis_shell_after_success.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -echo "--DEBUG--" -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/Common" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_PHP_VERSION" == "5.5" ]; then - - echo -e "Publishing PHPDoc...\n" - - cp -R build/docs $HOME/docs-latest - cp -R build/coverage $HOME/coverage-latest - - cd $HOME - git config --global user.email "travis@travis-ci.org" - git config --global user.name "travis-ci" - git clone --quiet --branch=gh-pages https://${GH_TOKEN}@github.com/PHPOffice/Common gh-pages > /dev/null - - cd gh-pages - echo "--DEBUG : Suppression" - git rm -rf ./docs/$TRAVIS_BRANCH - - echo "--DEBUG : Dossier" - mkdir -p docs/$TRAVIS_BRANCH - mkdir -p coverage/$TRAVIS_BRANCH - - echo "--DEBUG : Copie" - cp -Rf $HOME/docs-latest/* ./docs/$TRAVIS_BRANCH/ - cp -Rf $HOME/coverage-latest/* ./coverage/$TRAVIS_BRANCH/ - - echo "--DEBUG : Git" - git add -f . - git commit -m "PHPDocumentor (Travis Build: $TRAVIS_BUILD_NUMBER - Branch: $TRAVIS_BRANCH)" - git push -fq origin gh-pages > /dev/null - - echo -e "Published PHPDoc to gh-pages.\n" - -fi diff --git a/civicrm/vendor/phpoffice/common/CHANGELOG.md b/civicrm/vendor/phpoffice/common/CHANGELOG.md deleted file mode 100644 index 9ab6d68856..0000000000 --- a/civicrm/vendor/phpoffice/common/CHANGELOG.md +++ /dev/null @@ -1,61 +0,0 @@ -# Changelog -## 0.1.0 - -### Features -- Initial Release - -## 0.1.1 - -### Features -- Added String::chr for suppporting Unicode Characters - -## 0.2.0 - -### Changes -- Renamed String class in Text class for supporting PHP7 - -## 0.2.1 - -### Features -- Added XMLReader from PHPWord - -## 0.2.2 - -### BugFix -- Fixed "Class 'PhpOffice\Common\ZipArchive' not found in /src/Common/XMLReader.php on line 54" - -## 0.2.3 - -### Features -- Added missing features for supporting PHPWord - -## 0.2.4 - -### Changes -- XMLWriter : Refactoring for improving performances - -## 0.2.5 - -### Features -- Added Zip Adapters (PclZip & ZipArchive) - -## 0.2.6 - -### Changes -- `\PhpOffice\Common\Text::utf8ToUnicode()` became `public`. - -## 0.2.7 - -### Features -- Added `\PhpOffice\Common\File::fileGetContents()` (with support of zip://) -- Added Support for PHP 7.1 - -## 0.2.8 - -### Features -- Added possibility to register namespaces to DOMXpath -- Added Utility to get an Office compatible hash of a password -- Write attribute's value of type float independently of locale - -## 0.2.9 -- Fix XML Entity injection vulnerability \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/common/COPYING b/civicrm/vendor/phpoffice/common/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/civicrm/vendor/phpoffice/common/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/civicrm/vendor/phpoffice/common/COPYING.LESSER b/civicrm/vendor/phpoffice/common/COPYING.LESSER deleted file mode 100644 index 65c5ca88a6..0000000000 --- a/civicrm/vendor/phpoffice/common/COPYING.LESSER +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/civicrm/vendor/phpoffice/common/LICENSE b/civicrm/vendor/phpoffice/common/LICENSE deleted file mode 100644 index dba7f0ee79..0000000000 --- a/civicrm/vendor/phpoffice/common/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -PHPOffice Common, a shared PHP library for PHPOffice Libraries - -Copyright (c) 2015-2015 PHPOffice. - -PHPOffice Common is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License version 3 as published by -the Free Software Foundation. - -PHPOffice Common is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License version 3 for more details. - -You should have received a copy of the GNU Lesser General Public License version 3 -along with PHPOffice Common. If not, see <http://www.gnu.org/licenses/>. diff --git a/civicrm/vendor/phpoffice/common/PATCHES.txt b/civicrm/vendor/phpoffice/common/PATCHES.txt deleted file mode 100644 index e76194dada..0000000000 --- a/civicrm/vendor/phpoffice/common/PATCHES.txt +++ /dev/null @@ -1,7 +0,0 @@ -This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches) -Patches applied to this directory: - -Fix handling of libxml_disable_entity_loader -Source: https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpoffice-common-xml-entity-fix.patch - - diff --git a/civicrm/vendor/phpoffice/common/README.md b/civicrm/vendor/phpoffice/common/README.md deleted file mode 100644 index a55ff1d5eb..0000000000 --- a/civicrm/vendor/phpoffice/common/README.md +++ /dev/null @@ -1,33 +0,0 @@ -[](https://packagist.org/packages/phpoffice/common) -[](https://travis-ci.org/PHPOffice/Common) -[](https://scrutinizer-ci.com/g/PHPOffice/Common/) -[](https://scrutinizer-ci.com/g/PHPOffice/Common/) -[](https://packagist.org/packages/phpoffice/common) -[](https://packagist.org/packages/phpoffice/common) -[](https://gitter.im/PHPOffice/Common) - - -PHPOffice Common is a library written in pure PHP that provides a set of components for PHPOffice librairies. - -PHPOffice Common is an open source project licensed under the terms of [LGPL version 3](https://github.com/PHPOffice/Common/blob/develop/COPYING.LESSER). PHPOffice Common is aimed to be a high quality software product by incorporating [continuous integration](https://travis-ci.org/PHPOffice/Common) and [unit testing](http://phpoffice.github.io/Common/coverage/develop/). You can learn more about PHPPowerPoint by reading the [API Documentation](http://phpoffice.github.io/Common/docs/develop/). - -Read more about PHPPowerPoint: - -- [Requirements](#requirements) -- [Contributing](#contributing) -- [API Documentation](http://phpoffice.github.io/Common/docs/master/) - -### Requirements - -PHPOffice Common requires the following: - -- PHP 5.3+ - -## Contributing - -We welcome everyone to contribute to PHPOffice Common. Below are some of the things that you can do to contribute: - -- Read [our contributing guide](https://github.com/PHPOffice/Common/blob/master/CONTRIBUTING.md) -- [Fork us](https://github.com/PHPOffice/Common/fork) and [request a pull](https://github.com/PHPOffice/Common/pulls) to the [develop](https://github.com/PHPOffice/Common/tree/develop) branch -- Submit [bug reports or feature requests](https://github.com/PHPOffice/Common/issues) to GitHub -- Follow [@PHPOffice](https://twitter.com/PHPOffice) on Twitter diff --git a/civicrm/vendor/phpoffice/common/VERSION b/civicrm/vendor/phpoffice/common/VERSION deleted file mode 100644 index d81f1c3fc7..0000000000 --- a/civicrm/vendor/phpoffice/common/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.2.9 \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/common/composer.json b/civicrm/vendor/phpoffice/common/composer.json deleted file mode 100644 index 2a75a30c80..0000000000 --- a/civicrm/vendor/phpoffice/common/composer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "phpoffice/common", - "description": "PHPOffice Common", - "keywords": ["PHP","Office","Common","component"], - "homepage": "http://phpoffice.github.io", - "type": "library", - "license": "LGPL", - "authors": [ - { - "name": "Mark Baker" - }, - { - "name": "Franck Lefevre", - "homepage": "http://rootslabs.net" - } - ], - "require": { - "php": ">=5.3.0", - "pclzip/pclzip": "^2.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.0", - "phpdocumentor/phpdocumentor":"2.*", - "phpmd/phpmd": "2.*", - "sebastian/phpcpd": "2.*", - "phploc/phploc": "2.*", - "squizlabs/php_codesniffer": "2.*" - }, - "autoload": { - "psr-4": { - "PhpOffice\\Common\\": "src/Common/" - } - } -} diff --git a/civicrm/vendor/phpoffice/common/phpmd.xml.dist b/civicrm/vendor/phpoffice/common/phpmd.xml.dist deleted file mode 100644 index bae0df3b72..0000000000 --- a/civicrm/vendor/phpoffice/common/phpmd.xml.dist +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<ruleset name="PHPOffice Common PHP Mess Detector Rule Set" - xmlns="http://pmd.sf.net/ruleset/1.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" - xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> - <rule ref="rulesets/naming.xml"> - <exclude name="LongVariable" /> - </rule> - <rule ref="rulesets/naming.xml/LongVariable"> - <properties> - <property name="maximum" value="32" /> - </properties> - </rule> - <rule ref="rulesets/design.xml/ExitExpression" /> - <rule ref="rulesets/design.xml/EvalExpression" /> - <rule ref="rulesets/design.xml/GotoStatement" /> - <rule ref="rulesets/design.xml/DepthOfInheritance" /> - <rule ref="rulesets/design.xml/CouplingBetweenObjects"> - <!-- AbstractContainer needs more coupling (default: 13) --> - <properties> - <property name="minimum" value="20" /> - </properties> - </rule> - <rule ref="rulesets/design.xml/NumberOfChildren"> - <!-- AbstractStyle needs more children (default: 15) --> - <properties> - <property name="minimum" value="30" /> - </properties> - </rule> - <rule ref="rulesets/unusedcode.xml" /> - <rule ref="rulesets/controversial.xml" /> -</ruleset> \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/common/phpunit.xml.dist b/civicrm/vendor/phpoffice/common/phpunit.xml.dist deleted file mode 100644 index 7b09d34828..0000000000 --- a/civicrm/vendor/phpoffice/common/phpunit.xml.dist +++ /dev/null @@ -1,24 +0,0 @@ -<phpunit backupGlobals="false" - backupStaticAttributes="false" - bootstrap="./tests/bootstrap.php" - colors="true" - convertErrorsToExceptions="true" - convertNoticesToExceptions="true" - convertWarningsToExceptions="true" - processIsolation="false" - stopOnFailure="false"> - <testsuites> - <testsuite name="PhpOffice Common Test Suite"> - <directory>./tests/Common</directory> - </testsuite> - </testsuites> - <filter> - <whitelist> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - <logging> - <log type="coverage-html" target="./build/coverage" /> - <log type="coverage-clover" target="./build/logs/clover.xml" /> - </logging> -</phpunit> \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/PclZipAdapter.php b/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/PclZipAdapter.php deleted file mode 100644 index 053531f111..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/PclZipAdapter.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php -namespace PhpOffice\Common\Adapter\Zip; - -use PclZip; - -class PclZipAdapter implements ZipInterface -{ - /** - * @var PclZip - */ - protected $oPclZip; - - /** - * @var string - */ - protected $tmpDir; - - public function open($filename) - { - $this->oPclZip = new PclZip($filename); - $this->tmpDir = sys_get_temp_dir(); - return $this; - } - - public function close() - { - return $this; - } - - public function addFromString($localname, $contents) - { - $pathData = pathinfo($localname); - - $hFile = fopen($this->tmpDir.'/'.$pathData['basename'], "wb"); - fwrite($hFile, $contents); - fclose($hFile); - - $res = $this->oPclZip->add($this->tmpDir.'/'.$pathData['basename'], PCLZIP_OPT_REMOVE_PATH, $this->tmpDir, PCLZIP_OPT_ADD_PATH, $pathData['dirname']); - if ($res == 0) { - throw new \Exception("Error zipping files : " . $this->oPclZip->errorInfo(true)); - } - unlink($this->tmpDir.'/'.$pathData['basename']); - return $this; - } -} diff --git a/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipArchiveAdapter.php b/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipArchiveAdapter.php deleted file mode 100644 index da2c34626e..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipArchiveAdapter.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -namespace PhpOffice\Common\Adapter\Zip; - -use ZipArchive; - -class ZipArchiveAdapter implements ZipInterface -{ - /** - * @var ZipArchive - */ - protected $oZipArchive; - - /** - * @var string - */ - protected $filename; - - public function open($filename) - { - $this->filename = $filename; - $this->oZipArchive = new ZipArchive(); - - if ($this->oZipArchive->open($this->filename, ZipArchive::OVERWRITE) === true) { - return $this; - } - if ($this->oZipArchive->open($this->filename, ZipArchive::CREATE) === true) { - return $this; - } - throw new \Exception("Could not open $this->filename for writing."); - } - - public function close() - { - if ($this->oZipArchive->close() === false) { - throw new \Exception("Could not close zip file $this->filename."); - } - return $this; - } - - public function addFromString($localname, $contents) - { - if ($this->oZipArchive->addFromString($localname, $contents) === false) { - throw new \Exception("Error zipping files : " . $localname); - } - - return $this; - } -} diff --git a/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipInterface.php b/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipInterface.php deleted file mode 100644 index e8dbc8c285..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/Adapter/Zip/ZipInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php - -namespace PhpOffice\Common\Adapter\Zip; - -interface ZipInterface -{ - /** - * Open a ZIP file archive - * @param string $filename - * @return $this - * @throws \Exception - */ - public function open($filename); - - /** - * Close the active archive (opened or newly created) - * @return $this - * @throws \Exception - */ - public function close(); - - /** - * Add a file to a ZIP archive using its contents - * @param string $localname The name of the entry to create. - * @param string $contents The contents to use to create the entry. It is used in a binary safe mode. - * @return $this - * @throws \Exception - */ - public function addFromString($localname, $contents); -} diff --git a/civicrm/vendor/phpoffice/common/src/Common/Autoloader.php b/civicrm/vendor/phpoffice/common/src/Common/Autoloader.php deleted file mode 100644 index 8b976c9747..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/Autoloader.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * This file is part of PHPOffice Common - * - * PHPOffice Common 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/Common/contributors. - * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors - * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 - */ - -namespace PhpOffice\Common; - -/** - * Autoloader - */ -class Autoloader -{ - /** @const string */ - const NAMESPACE_PREFIX = 'PhpOffice\\Common\\'; - - /** - * Register - * - * @return void - */ - public static function register() - { - spl_autoload_register(array(new self, 'autoload')); - } - - /** - * Autoload - * - * @param string $class - */ - public static function autoload($class) - { - $prefixLength = strlen(self::NAMESPACE_PREFIX); - if (0 === strncmp(self::NAMESPACE_PREFIX, $class, $prefixLength)) { - $file = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, $prefixLength)); - $file = realpath(__DIR__ . (empty($file) ? '' : DIRECTORY_SEPARATOR) . $file . '.php'); - if (file_exists($file)) { - /** @noinspection PhpIncludeInspection Dynamic includes */ - require_once $file; - } - } - } -} diff --git a/civicrm/vendor/phpoffice/common/src/Common/File.php b/civicrm/vendor/phpoffice/common/src/Common/File.php deleted file mode 100644 index 8cb5907e21..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/File.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php -/** - * This file is part of PHPOffice Common - * - * PHPOffice Common 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. - * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors - * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 - */ - -namespace PhpOffice\Common; - -/** - * Drawing - */ -class File -{ - /** - * Verify if a file exists - * - * @param string $pFilename Filename - * @return bool - */ - public static function fileExists($pFilename) - { - // Sick construction, but it seems that - // file_exists returns strange values when - // doing the original file_exists on ZIP archives... - if (strtolower(substr($pFilename, 0, 3)) == 'zip') { - // Open ZIP file and verify if the file exists - $zipFile = substr($pFilename, 6, strpos($pFilename, '#') - 6); - $archiveFile = substr($pFilename, strpos($pFilename, '#') + 1); - - $zip = new \ZipArchive(); - if ($zip->open($zipFile) === true) { - $returnValue = ($zip->getFromName($archiveFile) !== false); - $zip->close(); - - return $returnValue; - } - - return false; - } - - // Regular file_exists - return file_exists($pFilename); - } - /** - * Returns the content of a file - * - * @param string $pFilename Filename - * @return string - */ - public static function fileGetContents($pFilename) - { - if (!self::fileExists($pFilename)) { - return false; - } - if (strtolower(substr($pFilename, 0, 3)) == 'zip') { - // Open ZIP file and verify if the file exists - $zipFile = substr($pFilename, 6, strpos($pFilename, '#') - 6); - $archiveFile = substr($pFilename, strpos($pFilename, '#') + 1); - - $zip = new \ZipArchive(); - if ($zip->open($zipFile) === true) { - $returnValue = $zip->getFromName($archiveFile); - $zip->close(); - return $returnValue; - } - return false; - } - // Regular file contents - return file_get_contents($pFilename); - } - - /** - * Returns canonicalized absolute pathname, also for ZIP archives - * - * @param string $pFilename - * @return string - */ - public static function realpath($pFilename) - { - // Try using realpath() - $returnValue = realpath($pFilename); - - // Found something? - if ($returnValue == '' || is_null($returnValue)) { - $pathArray = explode('/', $pFilename); - while (in_array('..', $pathArray) && $pathArray[0] != '..') { - $numPathArray = count($pathArray); - for ($i = 0; $i < $numPathArray; ++$i) { - if ($pathArray[$i] == '..' && $i > 0) { - unset($pathArray[$i]); - unset($pathArray[$i - 1]); - break; - } - } - } - $returnValue = implode('/', $pathArray); - } - - // Return - return $returnValue; - } -} diff --git a/civicrm/vendor/phpoffice/common/src/Common/Font.php b/civicrm/vendor/phpoffice/common/src/Common/Font.php deleted file mode 100644 index 03a8e73840..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/Font.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php -/** - * This file is part of PHPOffice Common - * - * PHPOffice Common 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/Common/contributors. - * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors - * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 - */ - -namespace PhpOffice\Common; - -/** - * Font - */ -class Font -{ - /** - * Calculate an (approximate) pixel size, based on a font points size - * - * @param int $fontSizeInPoints Font size (in points) - * @return int Font size (in pixels) - */ - public static function fontSizeToPixels($fontSizeInPoints = 12) - { - return ((16 / 12) * $fontSizeInPoints); - } - - /** - * Calculate an (approximate) pixel size, based on inch size - * - * @param int $sizeInInch Font size (in inch) - * @return int Size (in pixels) - */ - public static function inchSizeToPixels($sizeInInch = 1) - { - return ($sizeInInch * 96); - } - - /** - * Calculate an (approximate) pixel size, based on centimeter size - * - * @param int $sizeInCm Font size (in centimeters) - * @return int Size (in pixels) - */ - public static function centimeterSizeToPixels($sizeInCm = 1) - { - return ($sizeInCm * 37.795275591); - } - - /** - * Convert centimeter to twip - * - * @param int $sizeInCm - * @return double - */ - public static function centimeterSizeToTwips($sizeInCm = 1) - { - return $sizeInCm / 2.54 * 1440; - } - - /** - * Convert inch to twip - * - * @param int $sizeInInch - * @return double - */ - public static function inchSizeToTwips($sizeInInch = 1) - { - return $sizeInInch * 1440; - } - - /** - * Convert pixel to twip - * - * @param int $sizeInPixel - * @return double - */ - public static function pixelSizeToTwips($sizeInPixel = 1) - { - return $sizeInPixel / 96 * 1440; - } - - /** - * Calculate twip based on point size, used mainly for paragraph spacing - * - * @param integer $sizeInPoint Size in point - * @return integer Size (in twips) - */ - public static function pointSizeToTwips($sizeInPoint = 1) - { - return $sizeInPoint / 72 * 1440; - } -} diff --git a/civicrm/vendor/phpoffice/common/src/Common/Microsoft/OLERead.php b/civicrm/vendor/phpoffice/common/src/Common/Microsoft/OLERead.php deleted file mode 100644 index fa1df12d90..0000000000 --- a/civicrm/vendor/phpoffice/common/src/Common/Microsoft/OLERead.php +++ /dev/null @@ -1,320 +0,0 @@ -<?php -/** - * This file is part of PHPOffice Common - * - * PHPOffice Common 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/Common/contributors. - * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors - * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 - */ - -namespace PhpOffice\Common\Microsoft; - -if (!defined('IDENTIFIER_OLE')) { - define('IDENTIFIER_OLE', pack('CCCCCCCC', 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1)); -} - -class OLERead -{ - private $data = ''; - - // OLE identifier - const IDENTIFIER_OLE = IDENTIFIER_OLE; - - // Size of a sector = 512 bytes - const BIG_BLOCK_SIZE = 0x200; - - // Size of a short sector = 64 bytes - const SMALL_BLOCK_SIZE = 0x40; - - // Size of a directory entry always = 128 bytes - const PROPERTY_STORAGE_BLOCK_SIZE = 0x80; - - // Minimum size of a standard stream = 4096 bytes, streams smaller than this are stored as short streams - const SMALL_BLOCK_THRESHOLD = 0x1000; - - // header offsets - const NUM_BIG_BLOCK_DEPOT_BLOCKS_POS = 0x2c; - const ROOT_START_BLOCK_POS = 0x30; - const SMALL_BLOCK_DEPOT_BLOCK_POS = 0x3c; - const EXTENSION_BLOCK_POS = 0x44; - const NUM_EXTENSION_BLOCK_POS = 0x48; - const BIG_BLOCK_DEPOT_BLOCKS_POS = 0x4c; - - // property storage offsets (directory offsets) - const SIZE_OF_NAME_POS = 0x40; - const TYPE_POS = 0x42; - const START_BLOCK_POS = 0x74; - const SIZE_POS = 0x78; - - public $summaryInformation = null; - public $docSummaryInfos = null; - public $powerpointDocument = null; - public $currentUser = null; - public $pictures = null; - public $rootEntry = null; - public $props = array(); - public $smallBlockChain = null; - public $bigBlockChain = null; - public $entry = null; - - /** - * Read the file - * - * @param $sFileName string Filename - * @throws \Exception - */ - public function read($sFileName) - { - // Check if file exists and is readable - if (!is_readable($sFileName)) { - throw new \Exception("Could not open " . $sFileName . " for reading! File does not exist, or it is not readable."); - } - - // Get the file identifier - // Don't bother reading the whole file until we know it's a valid OLE file - $this->data = file_get_contents($sFileName, false, null, 0, 8); - - // Check OLE identifier - if ($this->data != self::IDENTIFIER_OLE) { - throw new \Exception('The filename ' . $sFileName . ' is not recognised as an OLE file'); - } - - // Get the file data - $this->data = file_get_contents($sFileName); - - // Total number of sectors used for the SAT - $numBigBlkDepotBlks = self::getInt4d($this->data, self::NUM_BIG_BLOCK_DEPOT_BLOCKS_POS); - - // SecID of the first sector of the directory stream - $rootStartBlock = self::getInt4d($this->data, self::ROOT_START_BLOCK_POS); - - // SecID of the first sector of the SSAT (or -2 if not extant) - $sbdStartBlock = self::getInt4d($this->data, self::SMALL_BLOCK_DEPOT_BLOCK_POS); - - // SecID of the first sector of the MSAT (or -2 if no additional sectors are used) - $extensionBlock = self::getInt4d($this->data, self::EXTENSION_BLOCK_POS); - - // Total number of sectors used by MSAT - $numExtensionBlocks = self::getInt4d($this->data, self::NUM_EXTENSION_BLOCK_POS); - - $bigBlockDepotBlocks = array(); - $pos = self::BIG_BLOCK_DEPOT_BLOCKS_POS; - - $bbdBlocks = $numBigBlkDepotBlks; - - if ($numExtensionBlocks != 0) { - $bbdBlocks = (self::BIG_BLOCK_SIZE - self::BIG_BLOCK_DEPOT_BLOCKS_POS)/4; - } - - for ($i = 0; $i < $bbdBlocks; ++$i) { - $bigBlockDepotBlocks[$i] = self::getInt4d($this->data, $pos); - $pos += 4; - } - - for ($j = 0; $j < $numExtensionBlocks; ++$j) { - $pos = ($extensionBlock + 1) * self::BIG_BLOCK_SIZE; - $blocksToRead = min($numBigBlkDepotBlks - $bbdBlocks, self::BIG_BLOCK_SIZE / 4 - 1); - - for ($i = $bbdBlocks; $i < $bbdBlocks + $blocksToRead; ++$i) { - $bigBlockDepotBlocks[$i] = self::getInt4d($this->data, $pos); - $pos += 4; - } - - $bbdBlocks += $blocksToRead; - if ($bbdBlocks < $numBigBlkDepotBlks) { - $extensionBlock = self::getInt4d($this->data, $pos); - } - } - - $this->bigBlockChain = ''; - $bbs = self::BIG_BLOCK_SIZE / 4; - for ($i = 0; $i < $numBigBlkDepotBlks; ++$i) { - $pos = ($bigBlockDepotBlocks[$i] + 1) * self::BIG_BLOCK_SIZE; - - $this->bigBlockChain .= substr($this->data, $pos, 4*$bbs); - $pos += 4*$bbs; - } - - $sbdBlock = $sbdStartBlock; - $this->smallBlockChain = ''; - while ($sbdBlock != -2) { - $pos = ($sbdBlock + 1) * self::BIG_BLOCK_SIZE; - - $this->smallBlockChain .= substr($this->data, $pos, 4*$bbs); - $pos += 4*$bbs; - - $sbdBlock = self::getInt4d($this->bigBlockChain, $sbdBlock*4); - } - - // read the directory stream - $block = $rootStartBlock; - $this->entry = $this->readData($block); - - $this->readPropertySets(); - } - - /** - * Extract binary stream data - * - * @return string - */ - public function getStream($stream) - { - if ($stream === null) { - return null; - } - - $streamData = ''; - - if ($this->props[$stream]['size'] < self::SMALL_BLOCK_THRESHOLD) { - $rootdata = $this->readData($this->props[$this->rootEntry]['startBlock']); - - $block = $this->props[$stream]['startBlock']; - - while ($block != -2) { - $pos = $block * self::SMALL_BLOCK_SIZE; - $streamData .= substr($rootdata, $pos, self::SMALL_BLOCK_SIZE); - - $block = self::getInt4d($this->smallBlockChain, $block*4); - } - - return $streamData; - } - - $numBlocks = $this->props[$stream]['size'] / self::BIG_BLOCK_SIZE; - if ($this->props[$stream]['size'] % self::BIG_BLOCK_SIZE != 0) { - ++$numBlocks; - } - - if ($numBlocks == 0) { - return ''; - } - - $block = $this->props[$stream]['startBlock']; - - 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; - } - - /** - * Read a standard stream (by joining sectors using information from SAT) - * - * @param int $blID Sector ID where the stream starts - * @return string Data for standard stream - */ - private function readData($blID) - { - $block = $blID; - $data = ''; - - while ($block != -2) { - $pos = ($block + 1) * self::BIG_BLOCK_SIZE; - $data .= substr($this->data, $pos, self::BIG_BLOCK_SIZE); - $block = self::getInt4d($this->bigBlockChain, $block*4); - } - return $data; - } - - /** - * Read entries in the directory stream. - */ - private function readPropertySets() - { - $offset = 0; - - // loop through entires, each entry is 128 bytes - $entryLen = strlen($this->entry); - while ($offset < $entryLen) { - // entry data (128 bytes) - $data = substr($this->entry, $offset, self::PROPERTY_STORAGE_BLOCK_SIZE); - - // size in bytes of name - $nameSize = ord($data[self::SIZE_OF_NAME_POS]) | (ord($data[self::SIZE_OF_NAME_POS+1]) << 8); - - // type of entry - $type = ord($data[self::TYPE_POS]); - - // sectorID of first sector or short sector, if this entry refers to a stream (the case with workbook) - // sectorID of first sector of the short-stream container stream, if this entry is root entry - $startBlock = self::getInt4d($data, self::START_BLOCK_POS); - - $size = self::getInt4d($data, self::SIZE_POS); - - $name = str_replace("\x00", "", substr($data, 0, $nameSize)); - if ($size > 0) { - $this->props[] = array ( - 'name' => $name, - 'type' => $type, - 'startBlock' => $startBlock, - 'size' => $size); - - // tmp helper to simplify checks - $upName = strtoupper($name); - - switch ($upName) { - case 'ROOT ENTRY': - case 'R': - $this->rootEntry = count($this->props) - 1; - break; - case chr(1).'COMPOBJ': - break; - case chr(1).'OLE': - break; - case chr(5).'SUMMARYINFORMATION': - $this->summaryInformation = count($this->props) - 1; - break; - case chr(5).'DOCUMENTSUMMARYINFORMATION': - $this->docSummaryInfos = count($this->props) - 1; - break; - case 'CURRENT USER': - $this->currentUser = count($this->props) - 1; - break; - case 'PICTURES': - $this->pictures = count($this->props) - 1; - break; - case 'POWERPOINT DOCUMENT': - $this->powerpointDocument = count($this->props) - 1; - break; - default: - throw new \Exception('OLE Block Not defined: $upName : '.$upName. ' - $name : "'.$name.'"'); - } - } - - $offset += self::PROPERTY_STORAGE_BLOCK_SIZE; - } - } - - /** - * Read 4 bytes of data at specified position - * - * @param string $data - * @param int $pos - * @return int - */ - private static function getInt4d($data, $pos) - { - // FIX: represent numbers correctly on 64-bit system - // http://sourceforge.net/tracker/index.php?func=detail&aid=1487372&group_id=99160&atid=623334 - // Hacked by Andreas Rehm 2006 to ensure correct result of the <<24 block on 32 and 64bit systems - $or24 = ord($data[$pos + 3]); - if ($or24 >= 128) { - // negative number - $ord24 = -abs((256 - $or24) << 24); - } else { - $ord24 = ($or24 & 127) << 24; - } - return ord($data[$pos]) | (ord($data[$pos + 1]) << 8) | (ord($data[$pos + 2]) << 16) | $ord24; - } -} diff --git a/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/bug_report.md b/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..fcb3a65db1 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help improve PHPWord +labels: Bug Report + +--- + +### Describe the Bug + +A clear and concise description of what the bug is. + +### Steps to Reproduce + +Please provide a code sample that reproduces the issue. + +```php +<?php +require __DIR__ . '/vendor/autoload.php'; + +$phpWord = new \PhpOffice\PhpWord\PhpWord(); +$section = $phpWord->addSection(); +$section->... +``` + +### Expected Behavior + +A clear and concise description of what you expected to happen. + +### Current Behavior + +What is the current behavior? + +### Context + +Please fill in your environment information: + +- PHP Version: +- PHPWord Version: diff --git a/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/feature_request.md b/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..171e8378e1 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest an idea for this project +labels: Change Request + +--- + +### Is your feature request related to a problem? Please describe. + +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +### Describe the solution you'd like + +A clear and concise description of what you want to happen. + +### Describe alternatives you've considered + +A clear and concise description of any alternative solutions or features you've considered. + +### Additional context + +Add any other context or screenshots about the feature request here. diff --git a/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/how-to-use.md b/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/how-to-use.md new file mode 100644 index 0000000000..0fef996b19 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/ISSUE_TEMPLATE/how-to-use.md @@ -0,0 +1,14 @@ +--- +name: How to Use PHPWord +about: Find out how to use PHPWord +labels: WontFix + +--- + +***Please do not use the issue tracker to ask how to use PHPWord.*** + +Documentation is available on [Read the Docs](https://phpword.readthedocs.io/en/latest/). + +Sample code is in the [`/samples/` directory](https://github.com/PHPOffice/PHPWord/tree/develop/samples). + +Usage questions belong on [Stack Overflow](https://stackoverflow.com/questions/tagged/phpword). diff --git a/civicrm/vendor/phpoffice/phpword/.github/PULL_REQUEST_TEMPLATE.md b/civicrm/vendor/phpoffice/phpword/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..5430a996ec --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ +### Description + +Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. + +Fixes # (issue) + +### Checklist: + +- [ ] I have run `composer run-script check --timeout=0` and no errors were reported +- [ ] The new code is covered by unit tests (check build/coverage for coverage report) +- [ ] I have updated the documentation to describe the changes diff --git a/civicrm/vendor/phpoffice/phpword/.github/support.yml b/civicrm/vendor/phpoffice/phpword/.github/support.yml new file mode 100644 index 0000000000..c1b039ccac --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/support.yml @@ -0,0 +1,15 @@ +# Label used to mark issues as support requests +supportLabel: Question +# Comment to post on issues marked as support requests. Add a link +# to a support page, or set to `false` to disable +supportComment: > + This looks like a support question. Please ask your support questions on + [StackOverflow](http://stackoverflow.com/questions/tagged/phpword), + or [Gitter](https://gitter.im/PHPOffice/PHPWord). + + Thank you for your contributions. + +# Whether to close issues marked as support requests +close: true +# Whether to lock issues marked as support requests +lock: false diff --git a/civicrm/vendor/phpoffice/phpword/.github/workflows/ci.yml b/civicrm/vendor/phpoffice/phpword/.github/workflows/ci.yml new file mode 100644 index 0000000000..ef68663314 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/workflows/ci.yml @@ -0,0 +1,170 @@ +name: CI +on: + - push + - pull_request +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + php-version: + - '7.2' + - "7.3" + - "7.4" + - "8.0" + + name: PHP ${{ matrix.php-version }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib + coverage: none + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Update PHPUnit version for PHP 8 + id: composer-lock + if: "startsWith(matrix.php-version, '8.')" + run: | + rm -f composer.lock + echo "::set-output name=flags::--ignore-platform-reqs" + composer remove phpunit/phpunit --dev --no-update --no-interaction + composer require phpunit/phpunit ^8.0 --dev --no-update + + - name: Install dependencies + run: composer update --no-progress --prefer-dist --optimize-autoloader ${{ steps.composer-lock.outputs.flags }} + + - name: Update code to make PHPUnit 8 compatible + if: "startsWith(matrix.php-version, '8.')" + run: | + find ./tests/ -name "*.php" -type f -exec sed -i -e 's/function setUpBeforeClass()$/function setUpBeforeClass(): void/' {} \; + find ./tests/ -name "*.php" -type f -exec sed -i -e 's/function tearDownAfterClass()$/function tearDownAfterClass(): void/' {} \; + find ./tests/ -name "*.php" -type f -exec sed -i -e 's/function setUp()$/function setUp(): void/' {} \; + find ./tests/ -name "*.php" -type f -exec sed -i -e 's/function tearDown()$/function tearDown(): void/' {} \; + find ./tests/ -name "*.php" -type f -exec sed -i -e 's/->assertContains(/->assertStringContainsString(/' {} \; + find ./tests/ -name "*.php" -type f -exec sed -i -e 's/->assertNotContains(/->assertStringNotContainsString(/' {} \; + find ./tests/ -name "*.php" -type f -exec sed -i -e "s/->assertInternalType('array', /->assertIsArray(/" {} \; + sed -i "s/\$this->addWarning('The @expectedException,/\/\/\$this->addWarning('The @expectedException,/" ./vendor/phpunit/phpunit/src/Framework/TestCase.php + sed -i "s/self::createWarning('The optional \$delta/\/\/self::createWarning('The optional \$delta/" ./vendor/phpunit/phpunit/src/Framework/Assert.php + + - name: Setup problem matchers for PHP + run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" + + - name: Setup problem matchers for PHPUnit + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: Configure matchers + uses: mheap/phpunit-matcher-action@v1 + + - name: Test with PHPUnit + run: ./vendor/bin/phpunit --teamcity --no-coverage -c ./ + + php-cs-fixer: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib + coverage: none + tools: cs2pr + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code style with PHP-CS-Fixer + run: ./vendor/bin/php-cs-fixer fix --format=checkstyle | cs2pr + + phpcs: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib + coverage: none + tools: cs2pr + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code style with PHP_CodeSniffer + run: ./vendor/bin/phpcs src/ tests/ --standard=PSR2 -n --ignore=src/PhpWord/Shared/PCLZip --report=checkstyle | cs2pr + + coverage: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib + coverage: xdebug + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Coverage + run: | + ./vendor/bin/phpunit --coverage-clover coverage-clover.xml + curl -LO https://scrutinizer-ci.com/ocular.phar + php ocular.phar code-coverage:upload --format=php-clover coverage-clover.xml diff --git a/civicrm/vendor/phpoffice/phpword/.github/workflows/github-pages.yml b/civicrm/vendor/phpoffice/phpword/.github/workflows/github-pages.yml new file mode 100644 index 0000000000..a7850833a3 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github/workflows/github-pages.yml @@ -0,0 +1,29 @@ +name: GithHub Pages +on: + push: + tags: + - '*' + +jobs: + github-pages: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + coverage: none # remove xdebug + + - name: Build API documentation + run: | + curl -LO https://github.com/phpDocumentor/phpDocumentor/releases/download/v3.0.0/phpDocumentor.phar + php phpDocumentor.phar --directory src/ --target docs/api + + - name: Deploy to GithHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/api diff --git a/civicrm/vendor/phpoffice/phpword/.github_changelog_generator b/civicrm/vendor/phpoffice/phpword/.github_changelog_generator new file mode 100644 index 0000000000..9a4515e9fb --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.github_changelog_generator @@ -0,0 +1,8 @@ +user=PHPOffice +project=PHPWord + +since-tag=0.17.0 +future-release=0.18.0 + +issues=false +pulls=true diff --git a/civicrm/vendor/phpoffice/phpword/CHANGELOG.md b/civicrm/vendor/phpoffice/phpword/CHANGELOG.md index a166345cba..e97f298a73 100644 --- a/civicrm/vendor/phpoffice/phpword/CHANGELOG.md +++ b/civicrm/vendor/phpoffice/phpword/CHANGELOG.md @@ -1,8 +1,117 @@ -Change Log -========== +# Changelog All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [0.18.1](https://github.com/PHPOffice/PHPWord/tree/0.18.1) (2021-03-08) + +[Full Changelog](https://github.com/PHPOffice/PHPWord/compare/0.18.0...0.18.1) + +### Bug fixes +- Fix BC break in #1946. This package does not replace laminas/laminas-zendframework-bridge [\#2032](https://github.com/PHPOffice/PHPWord/pull/2032) ([mussbach](https://github.com/mussbach)) + +## [0.18.0](https://github.com/PHPOffice/PHPWord/tree/0.18.0) (2021-02-12) + +[Full Changelog](https://github.com/PHPOffice/PHPWord/compare/0.17.0...0.18.0) + +### Enhancements +- Add support for charts in template processor [\#2012](https://github.com/PHPOffice/PHPWord/pull/2012) ([dbarzin](https://github.com/dbarzin)) +- add/setting page element border style. [\#1986](https://github.com/PHPOffice/PHPWord/pull/1986) ([emnabs](https://github.com/emnabs)) +- allow to use customized pdf library [\#1983](https://github.com/PHPOffice/PHPWord/pull/1983) ([SailorMax](https://github.com/SailorMax)) +- feat: Update addHtml to handle style inheritance [\#1965](https://github.com/PHPOffice/PHPWord/pull/1965) ([Julien1138](https://github.com/Julien1138)) +- Add parsing of Shape node values [\#1924](https://github.com/PHPOffice/PHPWord/pull/1924) ([sven-ahrens](https://github.com/sven-ahrens)) +- Allow to redefine TCPDF object [\#1907](https://github.com/PHPOffice/PHPWord/pull/1907) ([SailorMax](https://github.com/SailorMax)) +- Enhancements to addHTML parser [\#1902](https://github.com/PHPOffice/PHPWord/pull/1902) ([lubosdz](https://github.com/lubosdz)) +- Make Default Paper Configurable [\#1851](https://github.com/PHPOffice/PHPWord/pull/1851) ([oleibman](https://github.com/oleibman)) +- Implement various missing features for the ODT writer [\#1796](https://github.com/PHPOffice/PHPWord/pull/1796) ([oleibman](https://github.com/oleibman)) +- Added support for "cloudConvert" images [\#1794](https://github.com/PHPOffice/PHPWord/pull/1794) ([ErnestStaug](https://github.com/ErnestStaug)) +- Add support for several features for the RTF writer [\#1775](https://github.com/PHPOffice/PHPWord/pull/1775) ([oleibman](https://github.com/oleibman)) +- Add font style for Field elements [\#1774](https://github.com/PHPOffice/PHPWord/pull/1774) ([oleibman](https://github.com/oleibman)) +- Add support for ListItemRun in HTML writer [\#1766](https://github.com/PHPOffice/PHPWord/pull/1766) ([stefan-91](https://github.com/stefan-91)) +- Improvements in RTF writer [\#1755](https://github.com/PHPOffice/PHPWord/pull/1755) ([oleibman](https://github.com/oleibman)) +- Allow a closure to be passed with image replacement tags [\#1716](https://github.com/PHPOffice/PHPWord/pull/1716) ([mbardelmeijer](https://github.com/mbardelmeijer)) +- Add Option for Dynamic Chart Legend Position [\#1699](https://github.com/PHPOffice/PHPWord/pull/1699) ([Stephan212](https://github.com/Stephan212)) +- Add parsing of HTML checkbox input field [\#1832](https://github.com/PHPOffice/PHPWord/pull/1832) ([Matze2010](https://github.com/Matze2010)) + +### Bug fixes +- Fix image stroke in libreoffice 7.x [\#1992](https://github.com/PHPOffice/PHPWord/pull/1992) ([Adizbek](https://github.com/Adizbek)) +- Fix deprecated warning for non-hexadecimal number [\#1988](https://github.com/PHPOffice/PHPWord/pull/1988) ([Ciki](https://github.com/Ciki)) +- Fix limit not taken into account when adding image in template [\#1967](https://github.com/PHPOffice/PHPWord/pull/1967) ([jsochor](https://github.com/jsochor)) +- Add null check when setComplexValue is not found [\#1936](https://github.com/PHPOffice/PHPWord/pull/1936) ([YannikFirre](https://github.com/YannikFirre)) +- Some document have non-standard locale code [\#1824](https://github.com/PHPOffice/PHPWord/pull/1824) ([ErnestStaug](https://github.com/ErnestStaug)) +- Fixes PHPDoc @param and @return types for several Converter methods [\#1818](https://github.com/PHPOffice/PHPWord/pull/1818) ([caugner](https://github.com/caugner)) +- Update the regexp to avoid catastrophic backtracking [\#1809](https://github.com/PHPOffice/PHPWord/pull/1809) ([juzser](https://github.com/juzser)) +- Fix PHPUnit tests on develop branch [\#1771](https://github.com/PHPOffice/PHPWord/pull/1771) ([mdupont](https://github.com/mdupont)) +- TemplateProcessor cloneBlock wrongly clones images [\#1763](https://github.com/PHPOffice/PHPWord/pull/1763) ([alarai](https://github.com/alarai)) + +### Miscellaneous +- Compatibility with PHP 7.4, PHP 8.0 and migrate to Laminas Escaper [\#1946](https://github.com/PHPOffice/PHPWord/pull/1946) ([liborm85](https://github.com/liborm85)) +- Remove legacy PHPOffice/Common package, fix PHP 8.0 compatibility [\#1996](https://github.com/PHPOffice/PHPWord/pull/1996) ([liborm85](https://github.com/liborm85)) +- Improve Word2007 Test Coverage [\#1858](https://github.com/PHPOffice/PHPWord/pull/1858) ([oleibman](https://github.com/oleibman)) +- Fix typo in docs. Update templates-processing.rst [\#1952](https://github.com/PHPOffice/PHPWord/pull/1952) ([mnvx](https://github.com/mnvx)) +- Fix documentation and method name for FootnoteProperties [\#1776](https://github.com/PHPOffice/PHPWord/pull/1776) ([mdupont](https://github.com/mdupont)) +- fix: documentation about paragraph indentation [\#1764](https://github.com/PHPOffice/PHPWord/pull/1764) ([mdupont](https://github.com/mdupont)) +- Update templates-processing.rst [\#1745](https://github.com/PHPOffice/PHPWord/pull/1745) ([igronus](https://github.com/igronus)) +- Unused variables $rows, $cols in sample [\#1877](https://github.com/PHPOffice/PHPWord/pull/1877) ([ThanasisMpalatsoukas](https://github.com/ThanasisMpalatsoukas)) +- Add unit test for NumberingStyle [\#1744](https://github.com/PHPOffice/PHPWord/pull/1744) ([Manunchik](https://github.com/Manunchik)) +- Add unit test for PhpWord Settings [\#1743](https://github.com/PHPOffice/PHPWord/pull/1743) ([Manunchik](https://github.com/Manunchik)) +- Add unit test for Media elements [\#1742](https://github.com/PHPOffice/PHPWord/pull/1742) ([Manunchik](https://github.com/Manunchik)) +- Update templates processing docs [\#1729](https://github.com/PHPOffice/PHPWord/pull/1729) ([hcdias](https://github.com/hcdias)) + +v0.17.0 (01 oct 2019) +---------------------- +### Added +- Add methods setValuesFromArray and cloneRowFromArray to the TemplateProcessor @geraldb-nicat #670 +- Set complex type in template @troosan #1565 +- implement support for section vAlign @troosan #1569 +- ParseStyle for border-color @Gllrm0 #1551 +- Html writer auto invert text color @SailorMax #1387 +- Add RightToLeft table presentation. @troosan #1550 +- Add support for page vertical alignment. @troosan #672 #1569 +- Adding setNumId method for ListItem style @eweso #1329 +- Add support for basic fields in RTF writer. @Samuel-BF #1717 + +### Fixed +- Fix HTML border-color parsing. @troosan #1551 #1570 +- Language::validateLocale should pass with locale 'zxx'. @efpapado #1558 +- can't align center vertically with the text @ter987 #672 +- fix parsing of border-color and add test @troosan #1570 +- TrackChange doesn't handle all return types of \DateTime::createFromFormat(...) @superhaggis #1584 +- To support PreserveText inside sub container @bhattnishant #1637 +- No nested w:pPr elements in ListItemRun. @waltertamboer #1628 +- Ensure that entity_loader disable variable is re-set back to the original setting @seamuslee001 #1585 + +### Miscellaneous +- Use embedded http server to test loading of remote images @troosan #1544 +- Change private to protected to be able extending class Html @SpinyMan #1646 +- Fix apt-get crash in Travis CI for PHP 5.3 @mdupont #1707 + +v0.16.0 (30 dec 2018) +---------------------- +### Added +- Add getVariableCount method in TemplateProcessor. @nicoder #1272 +- Add setting Chart Title and Legend visibility @Tom-Magill #1433 +- Add ability to pass a Style object in Section constructor @ndench #1416 +- Add support for hidden text @Alexmg86 #1527 +- Add support for setting images in TemplateProcessor @SailorMax #1170 +- Add "Plain Text" type to SDT (Structured Document Tags) @morrisdj #1541 +- Added possibility to index variables inside cloned block in TemplateProcessor @JPBetley #817 +- Added possibility to replace variables inside cloned block with values in TemplateProcessor @DIDoS #1392 + +### Fixed +- Fix regex in `cloneBlock` function @nicoder #1269 +- HTML Title Writer loses text when Title contains a TextRun instead a string. @begnini #1436 +- Fix regex in fixBrokenMacros, make it less greedy @MuriloSo @brainwood @yurii-sio2 #1502 #1345 +- 240 twips are being added to line spacing, should not happen when using lineRule fixed @troosan #1509 #1505 +- Adding table layout to the generated HTML @aarangara #1441 +- Fix loading of Sharepoint document @Garrcomm #1498 +- RTF writer: Round getPageSizeW and getPageSizeH to avoid decimals @Patrick64 #1493 +- Fix parsing of Office 365 documents @Timanx #1485 +- For RTF writers, sizes should should never have decimals @Samuel-BF #1536 +- Style Name Parsing fails if document generated by a non-english word version @begnini #1434 + +### Miscellaneous +- Get rid of duplicated code in TemplateProcessor @abcdmitry #1161 + v0.15.0 (14 Jul 2018) ---------------------- ### Added @@ -46,7 +155,7 @@ v0.15.0 (14 Jul 2018) - Remove zend-stdlib dependency @Trainmaster #1284 - The default unit for `\PhpOffice\PhpWord\Style\Image` changed from `px` to `pt`. -### Miscelaneous +### Miscellaneous - Drop GitHub pages, switch to coveralls for code coverage analysis @czosel #1360 v0.14.0 (29 Dec 2017) diff --git a/civicrm/vendor/phpoffice/phpword/CONTRIBUTING.md b/civicrm/vendor/phpoffice/phpword/CONTRIBUTING.md index e62f2e6f04..ac262a0f34 100644 --- a/civicrm/vendor/phpoffice/phpword/CONTRIBUTING.md +++ b/civicrm/vendor/phpoffice/phpword/CONTRIBUTING.md @@ -1,13 +1,30 @@ # Contributing to PHPWord -PHPWord is built by the crowd and for the crowd. Every contribution is welcome; either by [submitting](https://github.com/PHPOffice/PHPWord/issues) bug issues or suggesting improvements, or in a more active form like [requesting](https://github.com/PHPOffice/PHPWord/pulls) a pull. +PHPWord is built by the crowd and for the crowd. Every contribution is welcome; either by [reporting a bug](https://github.com/PHPOffice/PHPWord/issues/new?labels=Bug+Report&template=bug_report.md) or [suggesting improvements](https://github.com/PHPOffice/PHPWord/issues/new?labels=Change+Request&template=feature_request.md), or in a more active form like [requesting a pull](https://github.com/PHPOffice/PHPWord/pulls). -We want to create a high quality document writer and reader library that people can use with more confidence and less bugs. We want to collaborate happily, code joyfully, and get alive merrily. Thus, below are some guidelines, that we expect to be followed by each contributor. +We want to create a high quality document writer and reader library that people can use with more confidence and fewer bugs. We want to collaborate happily, code joyfully, and live merrily. Thus, below are some guidelines that we expect to be followed by each contributor: -- **Be brief, but be bold**. State your issues briefly. But speak out your ideas loudly, even if you can't or don't know how to implement it right away. The world will be better with limitless innovations. -- **Follow PHP-FIG standards**. We follow PHP Standards Recommendations (PSRs) by [PHP Framework Interoperability Group](http://www.php-fig.org/). If you're not familiar with these standards, please, [familiarize yourself now](https://github.com/php-fig/fig-standards). Also, please, use [PHPCodeSniffer](http://pear.php.net/package/PHP_CodeSniffer/) to validate your code against PSRs. -- **Test your code**. Nobody else knows your code better than you. So, it's completely your mission to test the changes you made before pull request submission. We use [PHPUnit](https://phpunit.de/) for our testing purposes and recommend you using this tool too. [Here](https://phpunit.de/presentations.html) you can find PHPUnit best practices and additional information on effective unit testing, which helps us making PHPWord better day to day. Do not hesitate to smoke it carefully. It's a great investment in quality of your work, and it saves you years of life. -- **Request pull in separate branch**. Do not submit your request to the master branch. But create a separate branch named specifically for the issue that you addressed. Read [GitHub manual](https://help.github.com/articles/using-pull-requests) to find out more about this. If you are new to GitHub, read [this short manual](https://help.github.com/articles/fork-a-repo) to get yourself familiar with forks and how git works in general. [This video](http://www.youtube.com/watch?v=-zvHQXnBO6c) explains how to synchronize your Github Fork with the Branch of PHPWord. +- **Be brief, but be bold**. State your issues briefly. But speak out your ideas loudly, even if you can't or don't know how to implement them right away. The world will be better with limitless innovations. +- **Follow PHP-FIG standards**. We follow PHP Standards Recommendations (PSRs) by [PHP Framework Interoperability Group](http://www.php-fig.org/). If you're not familiar with these standards, [familiarize yourself now](https://github.com/php-fig/fig-standards). Also, please run `composer fix` to automatically fix your code to match these recommendations. +- **Test your code**. No one knows your code better than you, so we depend on you to test the changes you make before pull request submission. We use [PHPUnit](https://phpunit.de/) for our testing purposes and request that you use this tool too. Tests can be ran with `composer test`. [Documentation for writing tests with PHPUnit is available on Read the Docs.](https://phpunit.readthedocs.io) +- **Use best practices when submitting pull requests**. Create a separate branch named specifically for the issue that you are addressing. Read the [GitHub manual](https://help.github.com/articles/about-pull-requests) to learn more about pull requests and GitHub. If you are new to GitHub, read [this short manual](https://help.github.com/articles/fork-a-repo) to get yourself familiar with forks and how git works in general. [This video](http://www.youtube.com/watch?v=-zvHQXnBO6c) explains how to synchronize your fork on GitHub with the upstream branch from PHPWord. + +## Getting Started + +1. [Clone](https://help.github.com/en/articles/cloning-a-repository) [PHPWord](https://github.com/PHPOffice/PHPWord/) +2. [Install Composer](https://getcomposer.org/download/) if you don't already have it +3. Open your terminal and: + 1. Switch to the directory PHPWord was cloned to (e.g., `cd ~/Projects/PHPWord/`) + 2. Run `composer install` to install the dependencies + +You're ready to start working on PHPWord! Tests belong in the `/tests/PhpWord/` directory, the source code is in `/src/PhpWord/`, and any documentation should go in `/docs/`. Familiarize yourself with the codebase and try your hand at fixing [one of our outstanding issues](https://github.com/PHPOffice/PHPWord/issues). Before you get started, check the [existing pull requests](https://github.com/PHPOffice/PHPWord/pulls) to make sure no one else is already working on it. + +Once you have an issue you want to start working on, you'll need to write tests for it, and then you can start implementing the changes necessary to pass the new tests. To run the tests, you can run one of the following commands in your terminal: + +- `composer test-no-coverage` to run all of the tests +- `composer test` to run all of the tests and generate test coverage reports + +When you're ready to submit your new (and fully tested) feature, ensure `composer check` passes and [submit a pull request to PHPWord](https://github.com/PHPOffice/PHPWord/issues/new). That's it. Thank you for your interest in PHPWord, and welcome! diff --git a/civicrm/vendor/phpoffice/phpword/PATCHES.txt b/civicrm/vendor/phpoffice/phpword/PATCHES.txt deleted file mode 100644 index f5bbac14e5..0000000000 --- a/civicrm/vendor/phpoffice/phpword/PATCHES.txt +++ /dev/null @@ -1,7 +0,0 @@ -This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches) -Patches applied to this directory: - -Fix handling of libxml_disable_entity_loader -Source: https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/phpword-libxml-fix-global-handling.patch - - diff --git a/civicrm/vendor/phpoffice/phpword/README.md b/civicrm/vendor/phpoffice/phpword/README.md index 7531a6bc11..30b008a28e 100644 --- a/civicrm/vendor/phpoffice/phpword/README.md +++ b/civicrm/vendor/phpoffice/phpword/README.md @@ -1,16 +1,23 @@ #  +Master: [](https://packagist.org/packages/phpoffice/phpword) [](https://travis-ci.org/PHPOffice/PHPWord) -[](https://scrutinizer-ci.com/g/PHPOffice/PHPWord/) -[](https://coveralls.io/github/PHPOffice/PHPWord?branch=develop) +[](https://scrutinizer-ci.com/g/PHPOffice/PHPWord/) +[](https://coveralls.io/github/PHPOffice/PHPWord?branch=master) [](https://packagist.org/packages/phpoffice/phpword) [](https://packagist.org/packages/phpoffice/phpword) [](https://gitter.im/PHPOffice/PHPWord) +Develop: +[](https://packagist.org/packages/phpoffice/phpword#dev-develop) +[](https://travis-ci.org/PHPOffice/PHPWord/branches) +[](https://scrutinizer-ci.com/g/PHPOffice/PHPWord/?branch=develop) +[](https://coveralls.io/github/PHPOffice/PHPWord?branch=develop) + PHPWord is a library written in pure PHP that provides a set of classes to write to and read from different document file formats. The current version of PHPWord supports Microsoft [Office Open XML](http://en.wikipedia.org/wiki/Office_Open_XML) (OOXML or OpenXML), OASIS [Open Document Format for Office Applications](http://en.wikipedia.org/wiki/OpenDocument) (OpenDocument or ODF), [Rich Text Format](http://en.wikipedia.org/wiki/Rich_Text_Format) (RTF), HTML, and PDF. -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/). +PHPWord is an open source project licensed under the terms of [LGPL version 3](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/). If you have any questions, please ask on [StackOverFlow](https://stackoverflow.com/questions/tagged/phpword) @@ -55,8 +62,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](http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.html) +- [Laminas Escaper component](https://docs.laminas.dev/laminas-escaper/intro/) - [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,7 +72,7 @@ PHPWord requires the following: ## Installation PHPWord is installed via [Composer](https://getcomposer.org/). -To [add a dependency](https://getcomposer.org/doc/04-schema.md#package-links>) to PHPWord in your project, either +To [add a dependency](https://getcomposer.org/doc/04-schema.md#package-links) to PHPWord in your project, either Run the following to use the latest stable version ```sh @@ -81,7 +87,7 @@ You can of course also manually edit your composer.json file ```json { "require": { - "phpoffice/phpword": "v0.14.*" + "phpoffice/phpword": "v0.16.*" } } ``` @@ -161,13 +167,13 @@ $objWriter->save('helloWorld.html'); ``` More examples are provided in the [samples folder](samples/). For an easy access to those samples launch `php -S localhost:8000` in the samples directory then browse to [http://localhost:8000](http://localhost:8000) to view the samples. -You can also read the [Developers' Documentation](http://phpword.readthedocs.org/) and the [API Documentation](http://phpoffice.github.io/PHPWord/docs/master/) for more detail. +You can also read the [Developers' Documentation](http://phpword.readthedocs.org/) for more detail. ## Contributing We welcome everyone to contribute to PHPWord. Below are some of the things that you can do to contribute. -- Read [our contributing guide](https://github.com/PHPOffice/PHPWord/blob/master/CONTRIBUTING.md). +- Read [our contributing guide](CONTRIBUTING.md). - [Fork us](https://github.com/PHPOffice/PHPWord/fork) and [request a pull](https://github.com/PHPOffice/PHPWord/pulls) to the [develop](https://github.com/PHPOffice/PHPWord/tree/develop) branch. - Submit [bug reports or feature requests](https://github.com/PHPOffice/PHPWord/issues) to GitHub. - Follow [@PHPWord](https://twitter.com/PHPWord) and [@PHPOffice](https://twitter.com/PHPOffice) on Twitter. diff --git a/civicrm/vendor/phpoffice/phpword/composer.json b/civicrm/vendor/phpoffice/phpword/composer.json index 5d8a855b53..eb50847f29 100644 --- a/civicrm/vendor/phpoffice/phpword/composer.json +++ b/civicrm/vendor/phpoffice/phpword/composer.json @@ -45,7 +45,7 @@ "php-cs-fixer fix --ansi --dry-run --diff", "phpcs --report-width=200 --report-summary --report-full samples/ src/ tests/ --ignore=src/PhpWord/Shared/PCLZip --standard=PSR2 -n", "phpmd src/,tests/ text ./phpmd.xml.dist --exclude pclzip.lib.php", - "@test" + "@test-no-coverage" ], "fix": [ "php-cs-fixer fix --ansi" @@ -58,22 +58,21 @@ "fix": "Fixes issues found by PHP-CS" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "ext-xml": "*", - "zendframework/zend-escaper": "^2.2", - "phpoffice/common": "^0.2.9" + "laminas/laminas-escaper": "^2.2" }, "require-dev": { "ext-zip": "*", "ext-gd": "*", "phpunit/phpunit": "^4.8.36 || ^7.0", - "squizlabs/php_codesniffer": "^2.9", + "squizlabs/php_codesniffer": "^2.9 || ^3.5", "friendsofphp/php-cs-fixer": "^2.2", "phpmd/phpmd": "2.*", - "phploc/phploc": "2.* || 3.* || 4.*", - "dompdf/dompdf":"0.8.*", + "phploc/phploc": "2.* || 3.* || 4.* || 5.* || 6.* || 7.*", + "dompdf/dompdf":"0.8.* || 1.0.*", "tecnickcom/tcpdf": "6.*", - "mpdf/mpdf": "5.7.4 || 6.* || 7.*", + "mpdf/mpdf": "5.7.4 || 6.* || 7.* || 8.*", "php-coveralls/php-coveralls": "1.1.0 || ^2.0" }, "suggest": { @@ -90,7 +89,7 @@ }, "extra": { "branch-alias": { - "dev-develop": "0.16-dev" + "dev-develop": "0.18-dev" } } } diff --git a/civicrm/vendor/phpoffice/phpword/phpword.ini.dist b/civicrm/vendor/phpoffice/phpword/phpword.ini.dist index 0f4cc358df..f3f66dbe2e 100644 --- a/civicrm/vendor/phpoffice/phpword/phpword.ini.dist +++ b/civicrm/vendor/phpoffice/phpword/phpword.ini.dist @@ -14,3 +14,7 @@ outputEscapingEnabled = false defaultFontName = Arial defaultFontSize = 10 + +[Paper] + +defaultPaper = "A4" diff --git a/civicrm/vendor/phpoffice/phpword/sonar-project.properties b/civicrm/vendor/phpoffice/phpword/sonar-project.properties new file mode 100644 index 0000000000..7741cfb475 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/sonar-project.properties @@ -0,0 +1,17 @@ +# must be unique in a given SonarQube instance +sonar.projectKey=phpoffice:phpword +# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1. +sonar.projectName=PHPWord +sonar.projectVersion=0.16 + +# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. +# This property is optional if sonar.modules is set. +sonar.sources=src +sonar.tests=tests +sonar.php.coverage.reportPaths=build/logs/clover.xml +sonar.php.tests.reportPath=build/logs/logfile.xml + +# Encoding of the source code. Default is default system encoding +#sonar.sourceEncoding=UTF-8 + +sonar.host.url=http://localhost:9000 \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php index 204d4a7399..6a1ed93013 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php @@ -31,7 +31,7 @@ namespace PhpOffice\PhpWord\Element; * @method Footnote addFootnote(mixed $pStyle = null) * @method Endnote addEndnote(mixed $pStyle = null) * @method CheckBox addCheckBox(string $name, $text, mixed $fStyle = null, mixed $pStyle = null) - * @method Title addTitle(string $text, int $depth = 1) + * @method Title addTitle(mixed $text, int $depth = 1) * @method TOC addTOC(mixed $fontStyle = null, mixed $tocStyle = null, int $minDepth = 1, int $maxDepth = 9) * @method PageBreak addPageBreak() * @method Table addTable(mixed $style = null) @@ -41,7 +41,7 @@ namespace PhpOffice\PhpWord\Element; * @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) + * @method Chart addChart(string $type, array $categories, array $values, array $style = null, $seriesName = null) * @method FormField addFormField(string $type, mixed $fStyle = null, mixed $pStyle = null) * @method SDT addSDT(string $type) * @@ -109,6 +109,7 @@ abstract class AbstractContainer extends AbstractElement } 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); } } @@ -254,7 +255,7 @@ abstract class AbstractContainer extends AbstractElement // Special condition, e.g. preservetext can only exists in cell when // the cell is located in header or footer $validSubcontainers = array( - 'PreserveText' => array(array('Cell'), array('Header', 'Footer')), + 'PreserveText' => array(array('Cell'), array('Header', 'Footer', 'Section')), 'Footnote' => array(array('Cell', 'TextRun'), array('Section')), 'Endnote' => array(array('Cell', 'TextRun'), array('Section')), ); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php index e3e54ed426..46372b71db 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php @@ -96,7 +96,7 @@ abstract class AbstractElement /** * A reference to the parent * - * @var \PhpOffice\PhpWord\Element\AbstractElement + * @var AbstractElement|null */ private $parent; @@ -335,6 +335,11 @@ abstract class AbstractElement $this->commentRangeEnd->setEndElement($this); } + /** + * Get parent element + * + * @return AbstractElement|null + */ public function getParent() { return $this->parent; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php index 16b020d741..856f68600b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; /** * Bookmark element @@ -45,7 +45,7 @@ class Bookmark extends AbstractElement */ public function __construct($name = '') { - $this->name = CommonText::toUTF8($name); + $this->name = SharedText::toUTF8($name); } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php index f3e87176ef..beabf8a0a8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; /** * Check box element @@ -55,7 +55,7 @@ class CheckBox extends Text */ public function setName($name) { - $this->name = CommonText::toUTF8($name); + $this->name = SharedText::toUTF8($name); return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php index 2efc6b0b9f..3d1503fe22 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php @@ -17,6 +17,8 @@ namespace PhpOffice\PhpWord\Element; +use PhpOffice\PhpWord\Style\Font; + /** * Field element * @@ -115,10 +117,42 @@ class Field extends AbstractElement /** * Font style * - * @var \PhpOffice\PhpWord\Style\Font + * @var string|\PhpOffice\PhpWord\Style\Font */ protected $fontStyle; + /** + * Set Font style + * + * @param string|array|\PhpOffice\PhpWord\Style\Font $style + * @return string|\PhpOffice\PhpWord\Style\Font + */ + public function setFontStyle($style = null) + { + if ($style instanceof Font) { + $this->fontStyle = $style; + } elseif (is_array($style)) { + $this->fontStyle = new Font('text'); + $this->fontStyle->setStyleByArray($style); + } elseif (null === $style) { + $this->fontStyle = null; + } else { + $this->fontStyle = $style; + } + + return $this->fontStyle; + } + + /** + * Get Font style + * + * @return string|\PhpOffice\PhpWord\Style\Font + */ + public function getFontStyle() + { + return $this->fontStyle; + } + /** * Create a new Field Element * @@ -126,13 +160,15 @@ class Field extends AbstractElement * @param array $properties * @param array $options * @param TextRun|string|null $text + * @param string|array|\PhpOffice\PhpWord\Style\Font $fontStyle */ - public function __construct($type = null, $properties = array(), $options = array(), $text = null) + public function __construct($type = null, $properties = array(), $options = array(), $text = null, $fontStyle = null) { $this->setType($type); $this->setProperties($properties); $this->setOptions($options); $this->setText($text); + $this->setFontStyle($fontStyle); } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php index bae87ff5d8..2e25fd18e5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php @@ -454,7 +454,7 @@ class Image extends AbstractElement } else { $this->sourceType = self::SOURCE_GD; } - } elseif (@file_exists($this->source)) { + } elseif ((strpos($this->source, chr(0)) === false) && @file_exists($this->source)) { $this->memoryImage = false; $this->sourceType = self::SOURCE_LOCAL; } else { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php index 2bec32ddc4..25a87feecb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Style\Paragraph; @@ -79,8 +79,8 @@ class Link extends AbstractElement */ public function __construct($source, $text = null, $fontStyle = null, $paragraphStyle = null, $internal = false) { - $this->source = CommonText::toUTF8($source); - $this->text = is_null($text) ? $this->source : CommonText::toUTF8($text); + $this->source = SharedText::toUTF8($source); + $this->text = is_null($text) ? $this->source : SharedText::toUTF8($text); $this->fontStyle = $this->setNewStyle(new Font('text'), $fontStyle); $this->paragraphStyle = $this->setNewStyle(new Paragraph(), $paragraphStyle); $this->internal = $internal; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php index 8b064c47b5..40381de0d9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; use PhpOffice\PhpWord\Style\ListItem as ListItemStyle; /** @@ -57,7 +57,7 @@ class ListItem extends AbstractElement */ public function __construct($text, $depth = 0, $fontStyle = null, $listStyle = null, $paragraphStyle = null) { - $this->textObject = new Text(CommonText::toUTF8($text), $fontStyle, $paragraphStyle); + $this->textObject = new Text(SharedText::toUTF8($text), $fontStyle, $paragraphStyle); $this->depth = $depth; // Version >= 0.10.0 will pass numbering style name. Older version will use old method diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php index 374f1a9984..c0e64268ba 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Style\Paragraph; @@ -59,7 +59,7 @@ class PreserveText extends AbstractElement $this->fontStyle = $this->setNewStyle(new Font('text'), $fontStyle); $this->paragraphStyle = $this->setNewStyle(new Paragraph(), $paragraphStyle); - $this->text = CommonText::toUTF8($text); + $this->text = SharedText::toUTF8($text); $matches = preg_split('/({.*?})/', $this->text, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); if (isset($matches[0])) { $this->text = $matches; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php index a866d1bdac..5548f768c7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php @@ -90,7 +90,7 @@ class SDT extends Text */ public function setType($value) { - $enum = array('comboBox', 'dropDownList', 'date'); + $enum = array('plainText', 'comboBox', 'dropDownList', 'date'); $this->type = $this->setEnumVal($value, $enum, 'comboBox'); 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 d612fc0172..caf2ca2738 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Section.php @@ -59,14 +59,16 @@ class Section extends AbstractContainer * Create new instance * * @param int $sectionCount - * @param array $style + * @param null|array|\PhpOffice\PhpWord\Style $style */ public function __construct($sectionCount, $style = null) { $this->sectionId = $sectionCount; $this->setDocPart($this->container, $this->sectionId); - $this->style = new SectionStyle(); - $this->setStyle($style); + if (null === $style) { + $style = new SectionStyle(); + } + $this->style = $this->setNewStyle(new SectionStyle(), $style); } /** @@ -144,6 +146,20 @@ class Section extends AbstractContainer * * @return FootnoteProperties */ + public function getFootnoteProperties() + { + return $this->footnoteProperties; + } + + /** + * Get the footnote properties + * + * @deprecated Use the `getFootnoteProperties` method instead + * + * @return FootnoteProperties + * + * @codeCoverageIgnore + */ public function getFootnotePropoperties() { return $this->footnoteProperties; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php index f4d7f08185..1ad497b08d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Style\Paragraph; @@ -136,7 +136,7 @@ class Text extends AbstractElement */ public function setText($text) { - $this->text = CommonText::toUTF8($text); + $this->text = SharedText::toUTF8($text); return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php index d01f7f339d..f061b3d568 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Element; -use PhpOffice\Common\Text as CommonText; +use PhpOffice\PhpWord\Shared\Text as SharedText; use PhpOffice\PhpWord\Style; /** @@ -62,7 +62,7 @@ class Title extends AbstractElement public function __construct($text, $depth = 1) { if (is_string($text)) { - $this->text = CommonText::toUTF8($text); + $this->text = SharedText::toUTF8($text); } elseif ($text instanceof TextRun) { $this->text = $text; } else { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php index 410ffb7c9e..91c221f2a8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php @@ -58,13 +58,13 @@ class TrackChange extends AbstractContainer * * @param string $changeType * @param string $author - * @param null|int|\DateTime $date + * @param null|int|bool|\DateTime $date */ public function __construct($changeType = null, $author = null, $date = null) { $this->changeType = $changeType; $this->author = $author; - if ($date !== null) { + if ($date !== null && $date !== false) { $this->date = ($date instanceof \DateTime) ? $date : new \DateTime('@' . $date); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php index b8e0b2169c..42eb22a777 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php @@ -26,8 +26,14 @@ class Rtf extends AbstractEscaper { protected function escapeAsciiCharacter($code) { - if (20 > $code || $code >= 80) { - return '{\u' . $code . '}'; + if ($code == 9) { + return '{\\tab}'; + } + if (0x20 > $code || $code >= 0x80) { + return '{\\u' . $code . '}'; + } + if ($code == 123 || $code == 125 || $code == 92) { // open or close brace or backslash + return '\\' . chr($code); } return chr($code); @@ -35,7 +41,7 @@ class Rtf extends AbstractEscaper protected function escapeMultibyteCharacter($code) { - return '\uc0{\u' . $code . '}'; + return '\\uc0{\\u' . $code . '}'; } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php index 27ef89aecb..8a2f7d31ab 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php @@ -507,7 +507,7 @@ class DocInfo case 'date': // Date return strtotime($propertyValue); case 'bool': // Boolean - return ($propertyValue == 'true') ? true : false; + return $propertyValue == 'true'; } return $propertyValue; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php index 15aa3ff189..a46d43b945 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Metadata; -use PhpOffice\Common\Microsoft\PasswordEncoder; +use PhpOffice\PhpWord\Shared\Microsoft\PasswordEncoder; use PhpOffice\PhpWord\SimpleType\DocProtect; /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php index d494522955..b4c194ca2a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader; -use PhpOffice\Common\Drawing; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\Drawing; use PhpOffice\PhpWord\Shared\OLERead; use PhpOffice\PhpWord\Style; @@ -1581,7 +1581,7 @@ class MsDoc extends AbstractReader implements ReaderInterface // Variables $sprmCPicLocation = null; $sprmCFData = null; - $sprmCFSpec = null; + //$sprmCFSpec = null; do { // Variables @@ -1619,7 +1619,7 @@ class MsDoc extends AbstractReader implements ReaderInterface break; // sprmCFData case 0x06: - $sprmCFData = dechex($operand) == 0x00 ? false : true; + $sprmCFData = dechex($operand) != 0x00; break; // sprmCFItalic case 0x36: @@ -1830,7 +1830,7 @@ class MsDoc extends AbstractReader implements ReaderInterface break; // sprmCFSpec case 0x55: - $sprmCFSpec = $operand; + //$sprmCFSpec = $operand; break; // sprmCFtcBi case 0x5E: @@ -2094,11 +2094,11 @@ class MsDoc extends AbstractReader implements ReaderInterface $sprmCPicLocation += 1; // stPicName - $stPicName = ''; + //$stPicName = ''; for ($inc = 0; $inc <= $cchPicName; $inc++) { - $chr = self::getInt1d($this->dataData, $sprmCPicLocation); + //$chr = self::getInt1d($this->dataData, $sprmCPicLocation); $sprmCPicLocation += 1; - $stPicName .= chr($chr); + //$stPicName .= chr($chr); } } @@ -2143,11 +2143,11 @@ class MsDoc extends AbstractReader implements ReaderInterface $sprmCPicLocation += 1; // nameData if ($cbName > 0) { - $nameData = ''; + //$nameData = ''; for ($inc = 0; $inc <= ($cbName / 2); $inc++) { - $chr = self::getInt2d($this->dataData, $sprmCPicLocation); + //$chr = self::getInt2d($this->dataData, $sprmCPicLocation); $sprmCPicLocation += 2; - $nameData .= chr($chr); + //$nameData .= chr($chr); } } // embeddedBlip @@ -2185,6 +2185,8 @@ class MsDoc extends AbstractReader implements ReaderInterface $sprmCPicLocation += $embeddedBlipRH['recLen']; break; + case self::OFFICEARTBLIPPNG: + break; default: // print_r(dechex($embeddedBlipRH['recType'])); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php index 0b58dc50e1..d0aa9138fa 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Reader for ODText 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 9dfd645320..cec064181f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Content.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Content.php @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Reader\ODText; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\Element\TrackChange; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Content reader 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 8801a5439a..9a3d83414f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Meta.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Meta.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader\ODText; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Meta reader diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php index deed3ce39c..699a4eadd1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; use PhpOffice\PhpWord\Shared\ZipArchive; /** @@ -62,6 +62,9 @@ class Word2007 extends AbstractReader implements ReaderInterface foreach ($steps as $step) { $stepPart = $step['stepPart']; $stepItems = $step['stepItems']; + if (!isset($relationships[$stepPart])) { + continue; + } foreach ($relationships[$stepPart] as $relItem) { $relType = $relItem['type']; if (isset($stepItems[$relType])) { 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 5e5eb1d6a8..729c0b95b0 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/AbstractPart.php @@ -17,12 +17,12 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\ComplexType\TblWidth as TblWidthComplexType; use PhpOffice\PhpWord\Element\AbstractContainer; use PhpOffice\PhpWord\Element\TextRun; use PhpOffice\PhpWord\Element\TrackChange; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Abstract part reader @@ -95,7 +95,7 @@ abstract class AbstractPart /** * Read w:p. * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @param \PhpOffice\PhpWord\Element\AbstractContainer $parent * @param string $docPart @@ -202,7 +202,7 @@ abstract class AbstractPart /** * Read w:r. * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @param \PhpOffice\PhpWord\Element\AbstractContainer $parent * @param string $docPart @@ -270,6 +270,10 @@ abstract class AbstractPart $name = $xmlReader->getAttribute('name', $node, 'wp:inline/a:graphic/a:graphicData/pic:pic/pic:nvPicPr/pic:cNvPr'); $embedId = $xmlReader->getAttribute('r:embed', $node, 'wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:blip'); + if ($name === null && $embedId === null) { // some Converters puts images on a different path + $name = $xmlReader->getAttribute('name', $node, 'wp:anchor/a:graphic/a:graphicData/pic:pic/pic:nvPicPr/pic:cNvPr'); + $embedId = $xmlReader->getAttribute('r:embed', $node, 'wp:anchor/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:blip'); + } $target = $this->getMediaTarget($docPart, $embedId); if (!is_null($target)) { $imageSource = "zip://{$this->docFile}#{$target}"; @@ -288,6 +292,19 @@ abstract class AbstractPart $parent->addTextBreak(); } elseif ($node->nodeName == 'w:tab') { $parent->addText("\t"); + } elseif ($node->nodeName == 'mc:AlternateContent') { + if ($node->hasChildNodes()) { + // Get fallback instead of mc:Choice to make sure it is compatible + $fallbackElements = $node->getElementsByTagName('Fallback'); + + if ($fallbackElements->length) { + $fallback = $fallbackElements->item(0); + // TextRun + $textContent = htmlspecialchars($fallback->nodeValue, ENT_QUOTES, 'UTF-8'); + + $parent->addText($textContent, $fontStyle, $paragraphStyle); + } + } } elseif ($node->nodeName == 'w:t' || $node->nodeName == 'w:delText') { // TextRun $textContent = htmlspecialchars($xmlReader->getValue('.', $node), ENT_QUOTES, 'UTF-8'); @@ -297,6 +314,8 @@ abstract class AbstractPart $target = $this->getMediaTarget($docPart, $rId); if (!is_null($target)) { $parent->addLink($target, $textContent, $fontStyle, $paragraphStyle); + } else { + $parent->addText($textContent, $fontStyle, $paragraphStyle); } } else { /** @var AbstractElement $element */ @@ -314,7 +333,7 @@ abstract class AbstractPart /** * Read w:tbl. * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @param mixed $parent * @param string $docPart @@ -336,7 +355,7 @@ abstract class AbstractPart } 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'); - $rowHRule = $rowHRule == 'exact' ? true : false; + $rowHRule = $rowHRule == 'exact'; $rowStyle = array( 'tblHeader' => $xmlReader->elementExists('w:trPr/w:tblHeader', $tblNode), 'cantSplit' => $xmlReader->elementExists('w:trPr/w:cantSplit', $tblNode), @@ -372,7 +391,7 @@ abstract class AbstractPart /** * Read w:pPr. * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @return array|null */ @@ -407,7 +426,7 @@ abstract class AbstractPart /** * Read w:rPr * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @return array|null */ @@ -444,6 +463,7 @@ abstract class AbstractPart 'rtl' => array(self::READ_TRUE, 'w:rtl'), 'lang' => array(self::READ_VALUE, 'w:lang'), 'position' => array(self::READ_VALUE, 'w:position'), + 'hidden' => array(self::READ_TRUE, 'w:vanish'), ); return $this->readStyleDefs($xmlReader, $styleNode, $styleDefs); @@ -452,7 +472,7 @@ abstract class AbstractPart /** * Read w:tblPr * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @return string|array|null * @todo Capture w:tblStylePr w:type="firstRow" @@ -480,6 +500,7 @@ abstract class AbstractPart $styleDefs["border{$ucfSide}Style"] = array(self::READ_VALUE, "w:tblBorders/w:$side", 'w:val'); } $styleDefs['layout'] = array(self::READ_VALUE, 'w:tblLayout', 'w:type'); + $styleDefs['bidiVisual'] = array(self::READ_TRUE, 'w:bidiVisual'); $styleDefs['cellSpacing'] = array(self::READ_VALUE, 'w:tblCellSpacing', 'w:w'); $style = $this->readStyleDefs($xmlReader, $styleNode, $styleDefs); @@ -501,7 +522,7 @@ abstract class AbstractPart /** * Read w:tblpPr * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @return array */ @@ -526,7 +547,7 @@ abstract class AbstractPart /** * Read w:tblInd * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @return TblWidthComplexType */ @@ -544,7 +565,7 @@ abstract class AbstractPart /** * Read w:tcPr * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @return array */ @@ -565,11 +586,11 @@ abstract class AbstractPart * Returns the first child element found * * @param XMLReader $xmlReader - * @param \DOMElement $parentNode - * @param string|array $elements + * @param \DOMElement|null $parentNode + * @param string|array|null $elements * @return string|null */ - private function findPossibleElement(XMLReader $xmlReader, \DOMElement $parentNode = null, $elements) + private function findPossibleElement(XMLReader $xmlReader, \DOMElement $parentNode = null, $elements = null) { if (is_array($elements)) { //if element is an array, we take the first element that exists in the XML @@ -612,7 +633,7 @@ abstract class AbstractPart /** * Read style definition * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $parentNode * @param array $styleDefs * @ignoreScrutinizerPatch 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 36eecebeae..d241df184a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCore.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCore.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Core properties reader 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 a6835aacc1..feb41006c9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCustom.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCustom.php @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\Metadata\DocInfo; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Custom properties reader 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 4e37541b70..13a92e4786 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Document.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Document.php @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\Element\Section; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Document reader @@ -97,7 +97,7 @@ class Document extends AbstractPart /** * Read w:sectPr * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $domNode * @ignoreScrutinizerPatch * @return array @@ -106,6 +106,7 @@ class Document extends AbstractPart { $styleDefs = array( 'breakType' => array(self::READ_VALUE, 'w:type'), + 'vAlign' => array(self::READ_VALUE, 'w:vAlign'), 'pageSizeW' => array(self::READ_VALUE, 'w:pgSz', 'w:w'), 'pageSizeH' => array(self::READ_VALUE, 'w:pgSz', 'w:h'), 'orientation' => array(self::READ_VALUE, 'w:pgSz', 'w:orient'), @@ -140,7 +141,7 @@ class Document extends AbstractPart /** * Read w:p node. * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $node * @param \PhpOffice\PhpWord\Element\Section &$section * @@ -169,7 +170,7 @@ class Document extends AbstractPart /** * Read w:sectPr node. * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $node * @param \PhpOffice\PhpWord\Element\Section &$section */ 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 634f473910..a8829d0bad 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Footnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Footnotes.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Footnotes reader 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 3f57cbf8be..dea8f3ee62 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Numbering.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Numbering.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; /** * Numbering reader @@ -89,7 +89,7 @@ class Numbering extends AbstractPart /** * Read numbering level definition from w:abstractNum and w:num * - * @param \PhpOffice\Common\XMLReader $xmlReader + * @param \PhpOffice\PhpWord\Shared\XMLReader $xmlReader * @param \DOMElement $subnode * @param int $levelId * @return array diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php index 3084943b37..0a59e0454d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\ComplexType\TrackChangesView; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; use PhpOffice\PhpWord\Style\Language; /** 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 f343ad9296..37ce4909af 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Styles.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Styles.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Reader\Word2007; -use PhpOffice\Common\XMLReader; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLReader; use PhpOffice\PhpWord\Style\Language; /** @@ -64,11 +64,12 @@ class Styles extends AbstractPart if ($nodes->length > 0) { foreach ($nodes as $node) { $type = $xmlReader->getAttribute('w:type', $node); - $name = $xmlReader->getAttribute('w:styleId', $node); + $name = $xmlReader->getAttribute('w:val', $node, 'w:name'); if (is_null($name)) { - $name = $xmlReader->getAttribute('w:val', $node, 'w:name'); + $name = $xmlReader->getAttribute('w:styleId', $node); } - preg_match('/Heading(\d)/', $name, $headingMatches); + $headingMatches = array(); + preg_match('/Heading\s*(\d)/i', $name, $headingMatches); // $default = ($xmlReader->getAttribute('w:default', $node) == 1); switch ($type) { case 'paragraph': diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php index 8de1a8df80..80e512d2a7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php @@ -70,6 +70,7 @@ class Settings const DEFAULT_FONT_SIZE = 10; const DEFAULT_FONT_COLOR = '000000'; const DEFAULT_FONT_CONTENT_TYPE = 'default'; // default|eastAsia|cs + const DEFAULT_PAPER = 'A4'; /** * Compatibility option for XMLWriter @@ -119,6 +120,12 @@ class Settings */ private static $defaultFontSize = self::DEFAULT_FONT_SIZE; + /** + * Default paper + * @var string + */ + private static $defaultPaper = self::DEFAULT_PAPER; + /** * The user defined temporary directory. * @@ -432,6 +439,33 @@ class Settings return $config; } + /** + * Get default paper + * + * @return string + */ + public static function getDefaultPaper() + { + return self::$defaultPaper; + } + + /** + * Set default paper + * + * @param string $value + * @return bool + */ + public static function setDefaultPaper($value) + { + if (is_string($value) && trim($value) !== '') { + self::$defaultPaper = $value; + + return true; + } + + return false; + } + /** * Return the compatibility option used by the XMLWriter * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php index c53f0030ce..05755ef796 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php @@ -133,7 +133,7 @@ class Converter * Convert inch to EMU * * @param float $inch - * @return float + * @return int */ public static function inchToEmu($inch = 1) { @@ -143,7 +143,7 @@ class Converter /** * Convert pixel to twip * - * @param int $pixel + * @param float $pixel * @return float */ public static function pixelToTwip($pixel = 1) @@ -154,7 +154,7 @@ class Converter /** * Convert pixel to centimeter * - * @param int $pixel + * @param float $pixel * @return float */ public static function pixelToCm($pixel = 1) @@ -165,7 +165,7 @@ class Converter /** * Convert pixel to point * - * @param int $pixel + * @param float $pixel * @return float */ public static function pixelToPoint($pixel = 1) @@ -176,7 +176,7 @@ class Converter /** * Convert pixel to EMU * - * @param int $pixel + * @param float $pixel * @return int */ public static function pixelToEmu($pixel = 1) @@ -187,7 +187,7 @@ class Converter /** * Convert point to twip unit * - * @param int $point + * @param float $point * @return float */ public static function pointToTwip($point = 1) @@ -198,7 +198,7 @@ class Converter /** * Convert point to pixel * - * @param int $point + * @param float $point * @return float */ public static function pointToPixel($point = 1) @@ -209,7 +209,7 @@ class Converter /** * Convert point to EMU * - * @param int $point + * @param float $point * @return float */ public static function pointToEmu($point = 1) @@ -217,10 +217,21 @@ class Converter return round($point / self::INCH_TO_POINT * self::INCH_TO_PIXEL * self::PIXEL_TO_EMU); } + /** + * Convert point to cm + * + * @param float $point + * @return float + */ + public static function pointToCm($point = 1) + { + return $point / self::INCH_TO_POINT * self::INCH_TO_CM; + } + /** * Convert EMU to pixel * - * @param int $emu + * @param float $emu * @return float */ public static function emuToPixel($emu = 1) @@ -231,7 +242,7 @@ class Converter /** * Convert pica to point * - * @param int $pica + * @param float $pica * @return float */ public static function picaToPoint($pica = 1) @@ -242,7 +253,7 @@ class Converter /** * Convert degree to angle * - * @param int $degree + * @param float $degree * @return int */ public static function degreeToAngle($degree = 1) @@ -253,7 +264,7 @@ class Converter /** * Convert angle to degrees * - * @param int $angle + * @param float $angle * @return int */ public static function angleToDegree($angle = 1) @@ -261,6 +272,50 @@ class Converter return round($angle / self::DEGREE_TO_ANGLE); } + /** + * Convert colorname as string to RGB + * + * @param string $value color name + * @return string color as hex RGB string, or original value if unknown + */ + public static function stringToRgb($value) + { + switch ($value) { + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_YELLOW: + return 'FFFF00'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_LIGHTGREEN: + return '90EE90'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_CYAN: + return '00FFFF'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_MAGENTA: + return 'FF00FF'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_BLUE: + return '0000FF'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_RED: + return 'FF0000'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKBLUE: + return '00008B'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKCYAN: + return '008B8B'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKGREEN: + return '006400'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKMAGENTA: + return '8B008B'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKRED: + return '8B0000'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKYELLOW: + return '8B8B00'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_DARKGRAY: + return 'A9A9A9'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_LIGHTGRAY: + return 'D3D3D3'; + case \PhpOffice\PhpWord\Style\Font::FGCOLOR_BLACK: + return '000000'; + } + + return $value; + } + /** * Convert HTML hexadecimal to RGB * @@ -271,6 +326,8 @@ class Converter { if ($value[0] == '#') { $value = substr($value, 1); + } else { + $value = self::stringToRgb($value); } if (strlen($value) == 6) { @@ -281,9 +338,9 @@ class Converter return false; } - $red = hexdec($red); - $green = hexdec($green); - $blue = hexdec($blue); + $red = ctype_xdigit($red) ? hexdec($red) : 0; + $green = ctype_xdigit($green) ? hexdec($green) : 0; + $blue = ctype_xdigit($blue) ? hexdec($blue) : 0; return array($red, $green, $blue); } @@ -299,6 +356,7 @@ class Converter if ($value == '0') { return 0; } + $matches = array(); if (preg_match('/^[+-]?([0-9]+\.?[0-9]*)?(px|em|ex|%|in|cm|mm|pt|pc)$/i', $value, $matches)) { $size = $matches[1]; $unit = $matches[2]; @@ -332,4 +390,37 @@ class Converter { return self::pointToTwip(self::cssToPoint($value)); } + + /** + * Transforms a size in CSS format (eg. 10px, 10px, ...) to pixel + * + * @param string $value + * @return float + */ + public static function cssToPixel($value) + { + return self::pointToPixel(self::cssToPoint($value)); + } + + /** + * Transforms a size in CSS format (eg. 10px, 10px, ...) to cm + * + * @param string $value + * @return float + */ + public static function cssToCm($value) + { + return self::pointToCm(self::cssToPoint($value)); + } + + /** + * Transforms a size in CSS format (eg. 10px, 10px, ...) to emu + * + * @param string $value + * @return float + */ + public static function cssToEmu($value) + { + return self::pointToEmu(self::cssToPoint($value)); + } } diff --git a/civicrm/vendor/phpoffice/common/src/Common/Drawing.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Drawing.php similarity index 88% rename from civicrm/vendor/phpoffice/common/src/Common/Drawing.php rename to civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Drawing.php index 21417e2053..531ee24544 100644 --- a/civicrm/vendor/phpoffice/common/src/Common/Drawing.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Drawing.php @@ -1,23 +1,24 @@ <?php /** - * This file is part of PHPOffice Common + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. * - * PHPOffice Common is free software distributed under the terms of the GNU Lesser + * 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. * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2018 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ -namespace PhpOffice\Common; +namespace PhpOffice\PhpWord\Shared; /** - * \PhpOffice\Common\Drawing + * Drawing */ class Drawing { @@ -45,6 +46,7 @@ class Drawing if ($pValue == 0) { return 0; } + return round($pValue / 9525); } @@ -70,9 +72,10 @@ class Drawing if ($pValue == 0) { return 0; } - return ((($pValue * 1.333333333) / self::DPI_96) * 2.54); + + return (($pValue * 1.333333333) / self::DPI_96) * 2.54; } - + /** * Convert points width to pixels * @@ -84,6 +87,7 @@ class Drawing if ($pValue == 0) { return 0; } + return $pValue * 1.333333333; } @@ -96,7 +100,7 @@ class Drawing public static function pixelsToCentimeters($pValue = 0) { //return $pValue * 0.028; - return (($pValue / self::DPI_96) * 2.54); + return ($pValue / self::DPI_96) * 2.54; } /** @@ -110,6 +114,7 @@ class Drawing if ($pValue == 0) { return 0; } + return ($pValue / 2.54) * self::DPI_96; } @@ -135,13 +140,14 @@ class Drawing if ($pValue == 0) { return 0; } + return round($pValue / 60000); } /** * Convert centimeters width to twips * - * @param integer $pValue + * @param int $pValue * @return float */ public static function centimetersToTwips($pValue = 0) @@ -149,13 +155,14 @@ class Drawing if ($pValue == 0) { return 0; } + return $pValue * 566.928; } /** * Convert twips width to centimeters * - * @param integer $pValue + * @param int $pValue * @return float */ public static function twipsToCentimeters($pValue = 0) @@ -163,13 +170,14 @@ class Drawing if ($pValue == 0) { return 0; } + return $pValue / 566.928; } /** * Convert inches width to twips * - * @param integer $pValue + * @param int $pValue * @return float */ public static function inchesToTwips($pValue = 0) @@ -177,13 +185,14 @@ class Drawing if ($pValue == 0) { return 0; } + return $pValue * 1440; } /** * Convert twips width to inches * - * @param integer $pValue + * @param int $pValue * @return float */ public static function twipsToInches($pValue = 0) @@ -191,13 +200,14 @@ class Drawing if ($pValue == 0) { return 0; } + return $pValue / 1440; } /** * Convert twips width to pixels * - * @param integer $pValue + * @param int $pValue * @return float */ public static function twipsToPixels($pValue = 0) @@ -205,6 +215,7 @@ class Drawing if ($pValue == 0) { return 0; } + return round($pValue / 15.873984); } @@ -212,7 +223,7 @@ class Drawing * Convert HTML hexadecimal to RGB * * @param string $pValue HTML Color in hexadecimal - * @return array Value in RGB + * @return array|false Value in RGB */ public static function htmlToRGB($pValue) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php index 8d439e3043..eabd102d61 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php @@ -23,6 +23,7 @@ use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\Settings; use PhpOffice\PhpWord\SimpleType\Jc; use PhpOffice\PhpWord\SimpleType\NumberFormat; +use PhpOffice\PhpWord\Style\Paragraph; /** * Common Html functions @@ -31,9 +32,9 @@ use PhpOffice\PhpWord\SimpleType\NumberFormat; */ class Html { - private static $listIndex = 0; - private static $xpath; - private static $options; + protected static $listIndex = 0; + protected static $xpath; + protected static $options; /** * Add HTML parts. @@ -61,17 +62,19 @@ class Html // Preprocess: remove all line ends, decode HTML entity, // fix ampersand and angle brackets and add body tag for HTML fragments $html = str_replace(array("\n", "\r"), '', $html); - $html = str_replace(array('<', '>', '&'), array('_lt_', '_gt_', '_amp_'), $html); + $html = str_replace(array('<', '>', '&', '"'), array('_lt_', '_gt_', '_amp_', '_quot_'), $html); $html = html_entity_decode($html, ENT_QUOTES, 'UTF-8'); $html = str_replace('&', '&', $html); - $html = str_replace(array('_lt_', '_gt_', '_amp_'), array('<', '>', '&'), $html); + $html = str_replace(array('_lt_', '_gt_', '_amp_', '_quot_'), array('<', '>', '&', '"'), $html); if (false === $fullHTML) { $html = '<body>' . $html . '</body>'; } // Load DOM - $orignalLibEntityLoader = libxml_disable_entity_loader(true); + if (\PHP_VERSION_ID < 80000) { + $orignalLibEntityLoader = libxml_disable_entity_loader(true); + } $dom = new \DOMDocument(); $dom->preserveWhiteSpace = $preserveWhiteSpace; $dom->loadXML($html); @@ -79,7 +82,9 @@ class Html $node = $dom->getElementsByTagName('body'); self::parseNode($node->item(0), $element); - libxml_disable_entity_loader($orignalLibEntityLoader); + if (\PHP_VERSION_ID < 80000) { + libxml_disable_entity_loader($orignalLibEntityLoader); + } } /** @@ -95,15 +100,43 @@ class Html $attributes = $node->attributes; // get all the attributes(eg: id, class) foreach ($attributes as $attribute) { - switch ($attribute->name) { + $val = $attribute->value; + switch (strtolower($attribute->name)) { case 'style': $styles = self::parseStyle($attribute, $styles); break; case 'align': - $styles['alignment'] = self::mapAlign($attribute->value); + $styles['alignment'] = self::mapAlign(trim($val)); break; case 'lang': - $styles['lang'] = $attribute->value; + $styles['lang'] = $val; + break; + case 'width': + // tables, cells + if (false !== strpos($val, '%')) { + // e.g. <table width="100%"> or <td width="50%"> + $styles['width'] = (int) $val * 50; + $styles['unit'] = \PhpOffice\PhpWord\SimpleType\TblWidth::PERCENT; + } else { + // e.g. <table width="250> where "250" = 250px (always pixels) + $styles['width'] = Converter::pixelToTwip($val); + $styles['unit'] = \PhpOffice\PhpWord\SimpleType\TblWidth::TWIP; + } + break; + case 'cellspacing': + // tables e.g. <table cellspacing="2">, where "2" = 2px (always pixels) + $val = (int) $val . 'px'; + $styles['cellSpacing'] = Converter::cssToTwip($val); + break; + case 'bgcolor': + // tables, rows, cells e.g. <tr bgColor="#FF0000"> + $styles['bgColor'] = trim($val, '# '); + break; + case 'valign': + // cells e.g. <td valign="middle"> + if (preg_match('#(?:top|bottom|middle|baseline)#i', $val, $matches)) { + $styles['valign'] = self::mapAlignVertical($matches[0]); + } break; } } @@ -160,6 +193,8 @@ class Html 'img' => array('Image', $node, $element, $styles, null, null, null), 'br' => array('LineBreak', null, $element, $styles, null, null, null), 'a' => array('Link', $node, $element, $styles, null, null, null), + 'input' => array('Input', $node, $element, $styles, null, null, null), + 'hr' => array('HorizRule', $node, $element, $styles, null, null, null), ); $newElement = null; @@ -177,7 +212,7 @@ class Html } } $method = "parse{$method}"; - $newElement = call_user_func_array(array('PhpOffice\PhpWord\Shared\Html', $method), $arguments); + $newElement = call_user_func_array(array('PhpOffice\PhpWord\Shared\Html', $method), array_values($arguments)); // Retrieve back variables from arguments foreach ($keys as $key) { @@ -191,7 +226,7 @@ class Html $newElement = $element; } - self::parseChildNodes($node, $newElement, $styles, $data); + static::parseChildNodes($node, $newElement, $styles, $data); } /** @@ -202,7 +237,7 @@ class Html * @param array $styles * @param array $data */ - private static function parseChildNodes($node, $element, $styles, $data) + protected static function parseChildNodes($node, $element, $styles, $data) { if ('li' != $node->nodeName) { $cNodes = $node->childNodes; @@ -224,7 +259,7 @@ class Html * @param array &$styles * @return \PhpOffice\PhpWord\Element\TextRun */ - private static function parseParagraph($node, $element, &$styles) + protected static function parseParagraph($node, $element, &$styles) { $styles['paragraph'] = self::recursiveParseStylesInHierarchy($node, $styles['paragraph']); $newElement = $element->addTextRun($styles['paragraph']); @@ -232,6 +267,30 @@ class Html return $newElement; } + /** + * Parse input node + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\AbstractContainer $element + * @param array &$styles + */ + protected static function parseInput($node, $element, &$styles) + { + $attributes = $node->attributes; + if (null === $attributes->getNamedItem('type')) { + return; + } + + $inputType = $attributes->getNamedItem('type')->value; + switch ($inputType) { + case 'checkbox': + $checked = ($checked = $attributes->getNamedItem('checked')) && $checked->value === 'true' ? true : false; + $textrun = $element->addTextRun($styles['paragraph']); + $textrun->addFormField('checkbox')->setValue($checked); + break; + } + } + /** * Parse heading node * @@ -243,7 +302,7 @@ class Html * @todo Think of a clever way of defining header styles, now it is only based on the assumption, that * Heading1 - Heading6 are already defined somewhere */ - private static function parseHeading($element, &$styles, $argument1) + protected static function parseHeading($element, &$styles, $argument1) { $styles['paragraph'] = $argument1; $newElement = $element->addTextRun($styles['paragraph']); @@ -258,7 +317,7 @@ class Html * @param \PhpOffice\PhpWord\Element\AbstractContainer $element * @param array &$styles */ - private static function parseText($node, $element, &$styles) + protected static function parseText($node, $element, &$styles) { $styles['font'] = self::recursiveParseStylesInHierarchy($node, $styles['font']); @@ -279,7 +338,7 @@ class Html * @param string $argument1 Style name * @param string $argument2 Style value */ - private static function parseProperty(&$styles, $argument1, $argument2) + protected static function parseProperty(&$styles, $argument1, $argument2) { $styles['font'][$argument1] = $argument2; } @@ -290,7 +349,7 @@ class Html * @param \DOMNode $node * @param array &$styles */ - private static function parseSpan($node, &$styles) + protected static function parseSpan($node, &$styles) { self::parseInlineStyle($node, $styles['font']); } @@ -305,7 +364,7 @@ class Html * * @todo As soon as TableItem, RowItem and CellItem support relative width and height */ - private static function parseTable($node, $element, &$styles) + protected static function parseTable($node, $element, &$styles) { $elementStyles = self::parseInlineStyle($node, $styles['table']); @@ -334,7 +393,7 @@ class Html * @param array &$styles * @return Row $element */ - private static function parseRow($node, $element, &$styles) + protected static function parseRow($node, $element, &$styles) { $rowStyles = self::parseInlineStyle($node, $styles['row']); if ($node->parentNode->nodeName == 'thead') { @@ -352,7 +411,7 @@ class Html * @param array &$styles * @return \PhpOffice\PhpWord\Element\Cell|\PhpOffice\PhpWord\Element\TextRun $element */ - private static function parseCell($node, $element, &$styles) + protected static function parseCell($node, $element, &$styles) { $cellStyles = self::recursiveParseStylesInHierarchy($node, $styles['cell']); @@ -360,10 +419,14 @@ class Html if (!empty($colspan)) { $cellStyles['gridSpan'] = $colspan - 0; } - $cell = $element->addCell(null, $cellStyles); + + // set cell width to control column widths + $width = isset($cellStyles['width']) ? $cellStyles['width'] : null; + unset($cellStyles['width']); // would not apply + $cell = $element->addCell($width, $cellStyles); if (self::shouldAddTextRun($node)) { - return $cell->addTextRun(self::parseInlineStyle($node, $styles['paragraph'])); + return $cell->addTextRun(self::filterOutNonInheritedStyles(self::parseInlineStyle($node, $styles['paragraph']))); } return $cell; @@ -375,7 +438,7 @@ class Html * @param \DOMNode $node * @return bool Returns true if the node contains an HTML element that cannot be added to TextRun */ - private static function shouldAddTextRun(\DOMNode $node) + protected static function shouldAddTextRun(\DOMNode $node) { $containsBlockElement = self::$xpath->query('.//table|./p|./ul|./ol', $node)->length > 0; if ($containsBlockElement) { @@ -392,17 +455,53 @@ class Html * @param \DOMNode $node * @param array &$styles */ - private static function recursiveParseStylesInHierarchy(\DOMNode $node, array $style) + protected static function recursiveParseStylesInHierarchy(\DOMNode $node, array $style) { - $parentStyle = self::parseInlineStyle($node, array()); - $style = array_merge($parentStyle, $style); + $parentStyle = array(); if ($node->parentNode != null && XML_ELEMENT_NODE == $node->parentNode->nodeType) { - $style = self::recursiveParseStylesInHierarchy($node->parentNode, $style); + $parentStyle = self::recursiveParseStylesInHierarchy($node->parentNode, array()); } + if ($node->nodeName === '#text') { + $parentStyle = array_merge($parentStyle, $style); + } else { + $parentStyle = self::filterOutNonInheritedStyles($parentStyle); + } + $style = self::parseInlineStyle($node, $parentStyle); return $style; } + /** + * Removes non-inherited styles from array + * + * @param array &$styles + */ + protected static function filterOutNonInheritedStyles(array $styles) + { + $nonInheritedStyles = array( + 'borderSize', + 'borderTopSize', + 'borderRightSize', + 'borderBottomSize', + 'borderLeftSize', + 'borderColor', + 'borderTopColor', + 'borderRightColor', + 'borderBottomColor', + 'borderLeftColor', + 'borderStyle', + 'spaceAfter', + 'spaceBefore', + 'underline', + 'strikethrough', + 'hidden', + ); + + $styles = array_diff_key($styles, array_flip($nonInheritedStyles)); + + return $styles; + } + /** * Parse list node * @@ -411,7 +510,7 @@ class Html * @param array &$styles * @param array &$data */ - private static function parseList($node, $element, &$styles, &$data) + protected static function parseList($node, $element, &$styles, &$data) { $isOrderedList = $node->nodeName === 'ol'; if (isset($data['listdepth'])) { @@ -419,7 +518,32 @@ class Html } else { $data['listdepth'] = 0; $styles['list'] = 'listStyle_' . self::$listIndex++; - $element->getPhpWord()->addNumberingStyle($styles['list'], self::getListStyle($isOrderedList)); + $style = $element->getPhpWord()->addNumberingStyle($styles['list'], self::getListStyle($isOrderedList)); + + // extract attributes start & type e.g. <ol type="A" start="3"> + $start = 0; + $type = ''; + foreach ($node->attributes as $attribute) { + switch ($attribute->name) { + case 'start': + $start = (int) $attribute->value; + break; + case 'type': + $type = $attribute->value; + break; + } + } + + $levels = $style->getLevels(); + /** @var \PhpOffice\PhpWord\Style\NumberingLevel */ + $level = $levels[0]; + if ($start > 0) { + $level->setStart($start); + } + $type = $type ? self::mapListType($type) : null; + if ($type) { + $level->setFormat($type); + } } if ($node->parentNode->nodeName === 'li') { return $element->getParent(); @@ -430,7 +554,7 @@ class Html * @param bool $isOrderedList * @return array */ - private static function getListStyle($isOrderedList) + protected static function getListStyle($isOrderedList) { if ($isOrderedList) { return array( @@ -476,7 +600,7 @@ class Html * @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 */ - private static function parseListItem($node, $element, &$styles, $data) + protected static function parseListItem($node, $element, &$styles, $data) { $cNodes = $node->childNodes; if (!empty($cNodes)) { @@ -494,14 +618,15 @@ class Html * @param array $styles * @return array */ - private static function parseStyle($attribute, $styles) + protected static function parseStyle($attribute, $styles) { $properties = explode(';', trim($attribute->value, " \t\n\r\0\x0B;")); foreach ($properties as $property) { list($cKey, $cValue) = array_pad(explode(':', $property, 2), 2, null); $cValue = trim($cValue); - switch (trim($cKey)) { + $cKey = strtolower(trim($cKey)); + switch ($cKey) { case 'text-decoration': switch ($cValue) { case 'underline': @@ -515,6 +640,9 @@ class Html case 'text-align': $styles['alignment'] = self::mapAlign($cValue); break; + case 'display': + $styles['hidden'] = $cValue === 'none' || $cValue === 'hidden'; + break; case 'direction': $styles['rtl'] = $cValue === 'rtl'; break; @@ -532,18 +660,27 @@ class Html $styles['bgColor'] = trim($cValue, '#'); break; case 'line-height': + $matches = array(); if (preg_match('/([0-9]+\.?[0-9]*[a-z]+)/', $cValue, $matches)) { + //matches number with a unit, e.g. 12px, 15pt, 20mm, ... $spacingLineRule = \PhpOffice\PhpWord\SimpleType\LineSpacingRule::EXACT; - $spacing = Converter::cssToTwip($matches[1]) / \PhpOffice\PhpWord\Style\Paragraph::LINE_HEIGHT; + $spacing = Converter::cssToTwip($matches[1]); } elseif (preg_match('/([0-9]+)%/', $cValue, $matches)) { + //matches percentages $spacingLineRule = \PhpOffice\PhpWord\SimpleType\LineSpacingRule::AUTO; - $spacing = ((int) $matches[1]) / 100; + //we are subtracting 1 line height because the Spacing writer is adding one line + $spacing = ((((int) $matches[1]) / 100) * Paragraph::LINE_HEIGHT) - Paragraph::LINE_HEIGHT; } else { + //any other, wich is a multiplier. E.g. 1.2 $spacingLineRule = \PhpOffice\PhpWord\SimpleType\LineSpacingRule::AUTO; - $spacing = $cValue; + //we are subtracting 1 line height because the Spacing writer is adding one line + $spacing = ($cValue * Paragraph::LINE_HEIGHT) - Paragraph::LINE_HEIGHT; } $styles['spacingLineRule'] = $spacingLineRule; - $styles['lineHeight'] = $spacing; + $styles['line-spacing'] = $spacing; + break; + case 'letter-spacing': + $styles['letter-spacing'] = Converter::cssToTwip($cValue); break; case 'text-indent': $styles['indentation']['firstLine'] = Converter::cssToTwip($cValue); @@ -562,14 +699,21 @@ class Html } $styles['italic'] = $tValue; break; + case 'margin': + $cValue = Converter::cssToTwip($cValue); + $styles['spaceBefore'] = $cValue; + $styles['spaceAfter'] = $cValue; + break; case 'margin-top': - $styles['spaceBefore'] = Converter::cssToPoint($cValue); + // BC change: up to ver. 0.17.0 incorrectly converted to points - Converter::cssToPoint($cValue) + $styles['spaceBefore'] = Converter::cssToTwip($cValue); break; case 'margin-bottom': - $styles['spaceAfter'] = Converter::cssToPoint($cValue); + // BC change: up to ver. 0.17.0 incorrectly converted to points - Converter::cssToPoint($cValue) + $styles['spaceAfter'] = Converter::cssToTwip($cValue); break; case 'border-color': - $styles['color'] = trim($cValue, '#'); + self::mapBorderColor($styles, $cValue); break; case 'border-width': $styles['borderSize'] = Converter::cssToPoint($cValue); @@ -590,10 +734,38 @@ class Html } 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]); + case 'border-top': + case 'border-bottom': + case 'border-right': + case 'border-left': + // must have exact order [width color style], e.g. "1px #0011CC solid" or "2pt green solid" + // Word does not accept shortened hex colors e.g. #CCC, only full e.g. #CCCCCC + if (preg_match('/([0-9]+[^0-9]*)\s+(\#[a-fA-F0-9]+|[a-zA-Z]+)\s+([a-z]+)/', $cValue, $matches)) { + if (false !== strpos($cKey, '-')) { + $tmp = explode('-', $cKey); + $which = $tmp[1]; + $which = ucfirst($which); // e.g. bottom -> Bottom + } else { + $which = ''; + } + // Note - border width normalization: + // Width of border in Word is calculated differently than HTML borders, usually showing up too bold. + // Smallest 1px (or 1pt) appears in Word like 2-3px/pt in HTML once converted to twips. + // Therefore we need to normalize converted twip value to cca 1/2 of value. + // This may be adjusted, if better ratio or formula found. + // BC change: up to ver. 0.17.0 was $size converted to points - Converter::cssToPoint($size) + $size = Converter::cssToTwip($matches[1]); + $size = (int) ($size / 2); + // valid variants may be e.g. borderSize, borderTopSize, borderLeftColor, etc .. + $styles["border{$which}Size"] = $size; // twips + $styles["border{$which}Color"] = trim($matches[2], '#'); + $styles["border{$which}Style"] = self::mapBorderStyle($matches[3]); + } + break; + case 'vertical-align': + // https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align + if (preg_match('#(?:top|bottom|middle|sub|baseline)#i', $cValue, $matches)) { + $styles['valign'] = self::mapAlignVertical($matches[0]); } break; } @@ -610,7 +782,7 @@ class Html * * @return \PhpOffice\PhpWord\Element\Image **/ - private static function parseImage($node, $element) + protected static function parseImage($node, $element) { $style = array(); $src = null; @@ -638,14 +810,14 @@ class Html case 'float': if (trim($v) == 'right') { $style['hPos'] = \PhpOffice\PhpWord\Style\Image::POS_RIGHT; - $style['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_PAGE; + $style['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_MARGIN; // inner section area $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['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_MARGIN; // inner section area $style['pos'] = \PhpOffice\PhpWord\Style\Image::POS_RELATIVE; $style['wrap'] = \PhpOffice\PhpWord\Style\Image::WRAP_TIGHT; $style['overlap'] = true; @@ -713,7 +885,7 @@ class Html * @param string $cssBorderStyle * @return null|string */ - private static function mapBorderStyle($cssBorderStyle) + protected static function mapBorderStyle($cssBorderStyle) { switch ($cssBorderStyle) { case 'none': @@ -726,13 +898,27 @@ class Html } } + protected static function mapBorderColor(&$styles, $cssBorderColor) + { + $numColors = substr_count($cssBorderColor, '#'); + if ($numColors === 1) { + $styles['borderColor'] = trim($cssBorderColor, '#'); + } elseif ($numColors > 1) { + $colors = explode(' ', $cssBorderColor); + $borders = array('borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'); + for ($i = 0; $i < min(4, $numColors, count($colors)); $i++) { + $styles[$borders[$i]] = trim($colors[$i], '#'); + } + } + } + /** * Transforms a HTML/CSS alignment into a \PhpOffice\PhpWord\SimpleType\Jc * * @param string $cssAlignment * @return string|null */ - private static function mapAlign($cssAlignment) + protected static function mapAlign($cssAlignment) { switch ($cssAlignment) { case 'right': @@ -744,8 +930,58 @@ class Html default: return Jc::START; } + } - return null; + /** + * Transforms a HTML/CSS vertical alignment + * + * @param string $alignment + * @return string|null + */ + protected static function mapAlignVertical($alignment) + { + $alignment = strtolower($alignment); + switch ($alignment) { + case 'top': + case 'baseline': + case 'bottom': + return $alignment; + case 'middle': + return 'center'; + case 'sub': + return 'bottom'; + case 'text-top': + case 'baseline': + return 'top'; + default: + // @discuss - which one should apply: + // - Word uses default vert. alignment: top + // - all browsers use default vert. alignment: middle + // Returning empty string means attribute wont be set so use Word default (top). + return ''; + } + } + + /** + * Map list style for ordered list + * + * @param string $cssListType + */ + protected static function mapListType($cssListType) + { + switch ($cssListType) { + case 'a': + return NumberFormat::LOWER_LETTER; // a, b, c, .. + case 'A': + return NumberFormat::UPPER_LETTER; // A, B, C, .. + case 'i': + return NumberFormat::LOWER_ROMAN; // i, ii, iii, iv, .. + case 'I': + return NumberFormat::UPPER_ROMAN; // I, II, III, IV, .. + case '1': + default: + return NumberFormat::DECIMAL; // 1, 2, 3, .. + } } /** @@ -753,7 +989,7 @@ class Html * * @param \PhpOffice\PhpWord\Element\AbstractContainer $element */ - private static function parseLineBreak($element) + protected static function parseLineBreak($element) { $element->addTextBreak(); } @@ -765,7 +1001,7 @@ class Html * @param \PhpOffice\PhpWord\Element\AbstractContainer $element * @param array $styles */ - private static function parseLink($node, $element, &$styles) + protected static function parseLink($node, $element, &$styles) { $target = null; foreach ($node->attributes as $attribute) { @@ -783,4 +1019,38 @@ class Html return $element->addLink($target, $node->textContent, $styles['font'], $styles['paragraph']); } + + /** + * Render horizontal rule + * Note: Word rule is not the same as HTML's <hr> since it does not support width and thus neither alignment + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\AbstractContainer $element + */ + protected static function parseHorizRule($node, $element) + { + $styles = self::parseInlineStyle($node); + + // <hr> is implemented as an empty paragraph - extending 100% inside the section + // Some properties may be controlled, e.g. <hr style="border-bottom: 3px #DDDDDD solid; margin-bottom: 0;"> + + $fontStyle = $styles + array('size' => 3); + + $paragraphStyle = $styles + array( + 'lineHeight' => 0.25, // multiply default line height - e.g. 1, 1.5 etc + 'spacing' => 0, // twip + 'spaceBefore' => 120, // twip, 240/2 (default line height) + 'spaceAfter' => 120, // twip + 'borderBottomSize' => empty($styles['line-height']) ? 1 : $styles['line-height'], + 'borderBottomColor' => empty($styles['color']) ? '000000' : $styles['color'], + 'borderBottomStyle' => 'single', // same as "solid" + ); + + $element->addText('', $fontStyle, $paragraphStyle); + + // Notes: <hr/> cannot be: + // - table - throws error "cannot be inside textruns", e.g. lists + // - line - that is a shape, has different behaviour + // - repeated text, e.g. underline "_", because of unpredictable line wrapping + } } diff --git a/civicrm/vendor/phpoffice/common/src/Common/Microsoft/PasswordEncoder.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php similarity index 95% rename from civicrm/vendor/phpoffice/common/src/Common/Microsoft/PasswordEncoder.php rename to civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php index f620f4c7a9..fc0c7ecdf8 100644 --- a/civicrm/vendor/phpoffice/common/src/Common/Microsoft/PasswordEncoder.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php @@ -1,20 +1,21 @@ <?php /** - * This file is part of PHPOffice Common + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. * - * PHPOffice Common is free software distributed under the terms of the GNU Lesser + * 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/Common/contributors. + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2018 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ -namespace PhpOffice\Common\Microsoft; +namespace PhpOffice\PhpWord\Shared\Microsoft; /** * Password encoder for microsoft office applications diff --git a/civicrm/vendor/phpoffice/common/src/Common/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Text.php similarity index 81% rename from civicrm/vendor/phpoffice/common/src/Common/Text.php rename to civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Text.php index 91c790ae99..c4a1ad620f 100644 --- a/civicrm/vendor/phpoffice/common/src/Common/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Text.php @@ -1,20 +1,21 @@ <?php /** - * This file is part of PHPOffice Common + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. * - * PHPOffice Common is free software distributed under the terms of the GNU Lesser + * 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/Common/contributors. + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2018 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ -namespace PhpOffice\Common; +namespace PhpOffice\PhpWord\Shared; /** * Text @@ -35,8 +36,8 @@ class Text { for ($i = 0; $i <= 19; ++$i) { if ($i != 9 && $i != 10 && $i != 13) { - $find = '_x' . sprintf('%04s', strtoupper(dechex($i))) . '_'; - $replace = chr($i); + $find = '_x' . sprintf('%04s', strtoupper(dechex($i))) . '_'; + $replace = chr($i); self::$controlCharacters[$find] = $replace; } } @@ -68,7 +69,8 @@ class Text /** * Return a number formatted for being integrated in xml files * @param float $number - * @param integer $decimals + * @param int $decimals + * @return string */ public static function numberFormat($number, $decimals) { @@ -77,23 +79,25 @@ class Text /** * @param int $dec - * @link http://stackoverflow.com/a/7153133/2235790 + * @see http://stackoverflow.com/a/7153133/2235790 * @author velcrow + * @return string */ public static function chr($dec) { - if ($dec<=0x7F) { + if ($dec <= 0x7F) { return chr($dec); } - if ($dec<=0x7FF) { - return chr(($dec>>6)+192).chr(($dec&63)+128); + if ($dec <= 0x7FF) { + return chr(($dec >> 6) + 192) . chr(($dec & 63) + 128); } - if ($dec<=0xFFFF) { - return chr(($dec>>12)+224).chr((($dec>>6)&63)+128).chr(($dec&63)+128); + if ($dec <= 0xFFFF) { + return chr(($dec >> 12) + 224) . chr((($dec >> 6) & 63) + 128) . chr(($dec & 63) + 128); } - if ($dec<=0x1FFFFF) { - return chr(($dec>>18)+240).chr((($dec>>12)&63)+128).chr((($dec>>6)&63)+128).chr(($dec&63)+128); + if ($dec <= 0x1FFFFF) { + return chr(($dec >> 18) + 240) . chr((($dec >> 12) & 63) + 128) . chr((($dec >> 6) & 63) + 128) . chr(($dec & 63) + 128); } + return ''; } @@ -116,7 +120,7 @@ class Text * Check if a string contains UTF-8 data * * @param string $value - * @return boolean + * @return bool */ public static function isUTF8($value = '') { @@ -158,7 +162,7 @@ class Text * @param string $text UTF8 text * @return array * @since 0.11.0 - * @link http://www.randomchaos.com/documents/?source=php_and_unicode + * @see http://www.randomchaos.com/documents/?source=php_and_unicode */ public static function utf8ToUnicode($text) { @@ -198,7 +202,7 @@ class Text * @param array $unicode * @return string * @since 0.11.0 - * @link http://www.randomchaos.com/documents/?source=php_and_unicode + * @see http://www.randomchaos.com/documents/?source=php_and_unicode */ private static function unicodeToEntities($unicode) { diff --git a/civicrm/vendor/phpoffice/common/src/Common/XMLReader.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/XMLReader.php similarity index 87% rename from civicrm/vendor/phpoffice/common/src/Common/XMLReader.php rename to civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/XMLReader.php index 6c720aeb5e..3905c52f19 100644 --- a/civicrm/vendor/phpoffice/common/src/Common/XMLReader.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/XMLReader.php @@ -1,20 +1,21 @@ <?php /** - * This file is part of PHPOffice Common + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. * - * PHPOffice Common is free software distributed under the terms of the GNU Lesser + * 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/Common/contributors. + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2018 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ -namespace PhpOffice\Common; +namespace PhpOffice\PhpWord\Shared; /** * XML Reader wrapper @@ -42,8 +43,8 @@ class XMLReader * * @param string $zipFile * @param string $xmlFile - * @return \DOMDocument|false * @throws \Exception + * @return \DOMDocument|false */ public function getDomFromZip($zipFile, $xmlFile) { @@ -71,10 +72,14 @@ class XMLReader */ public function getDomFromString($content) { - $originalLibXMLEntityValue = libxml_disable_entity_loader(true); + if (\PHP_VERSION_ID < 80000) { + $originalLibXMLEntityValue = libxml_disable_entity_loader(true); + } $this->dom = new \DOMDocument(); $this->dom->loadXML($content); - libxml_disable_entity_loader($originalLibXMLEntityValue); + if (\PHP_VERSION_ID < 80000) { + libxml_disable_entity_loader($originalLibXMLEntityValue); + } return $this->dom; } @@ -107,8 +112,8 @@ class XMLReader * * @param string $prefix The prefix * @param string $namespaceURI The URI of the namespace - * @return bool true on success or false on failure * @throws \InvalidArgumentException If called before having loaded the DOM document + * @return bool true on success or false on failure */ public function registerNamespace($prefix, $namespaceURI) { @@ -118,6 +123,7 @@ class XMLReader if ($this->xpath === null) { $this->xpath = new \DOMXpath($this->dom); } + return $this->xpath->registerNamespace($prefix, $namespaceURI); } @@ -187,7 +193,7 @@ class XMLReader * * @param string $path * @param \DOMElement $contextNode - * @return integer + * @return int */ public function countElements($path, \DOMElement $contextNode = null) { @@ -201,7 +207,7 @@ class XMLReader * * @param string $path * @param \DOMElement $contextNode - * @return boolean + * @return bool */ public function elementExists($path, \DOMElement $contextNode = null) { diff --git a/civicrm/vendor/phpoffice/common/src/Common/XMLWriter.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/XMLWriter.php similarity index 88% rename from civicrm/vendor/phpoffice/common/src/Common/XMLWriter.php rename to civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/XMLWriter.php index 43e5b6657c..930ad62ee1 100644 --- a/civicrm/vendor/phpoffice/common/src/Common/XMLWriter.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/XMLWriter.php @@ -1,20 +1,21 @@ <?php /** - * This file is part of PHPOffice Common + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. * - * PHPOffice Common is free software distributed under the terms of the GNU Lesser + * 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/Common/contributors. + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/Common - * @copyright 2009-2016 PHPOffice Common contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2018 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ -namespace PhpOffice\Common; +namespace PhpOffice\PhpWord\Shared; /** * XMLWriter @@ -46,10 +47,11 @@ class XMLWriter extends \XMLWriter private $tempFileName = ''; /** - * Create a new \PhpOffice\PhpPowerpoint\Shared\XMLWriter instance + * Create a new \PhpOffice\PhpWord\Shared\XMLWriter instance * * @param int $pTemporaryStorage Temporary storage location * @param string $pTemporaryStorageDir Temporary storage folder + * @param bool $compatibility */ public function __construct($pTemporaryStorage = self::STORAGE_MEMORY, $pTemporaryStorageDir = null, $compatibility = false) { @@ -86,7 +88,7 @@ class XMLWriter extends \XMLWriter return; } if (PHP_OS != 'WINNT' && @unlink($this->tempFileName) === false) { - throw new \Exception('The file '.$this->tempFileName.' could not be deleted.'); + throw new \Exception('The file ' . $this->tempFileName . ' could not be deleted.'); } } @@ -102,10 +104,10 @@ class XMLWriter extends \XMLWriter } $this->flush(); + return file_get_contents($this->tempFileName); } - /** * Write simple element and attribute(s) block * @@ -116,7 +118,6 @@ class XMLWriter extends \XMLWriter * @param string $element * @param string|array $attributes * @param string $value - * @return void */ public function writeElementBlock($element, $attributes, $value = null) { @@ -137,7 +138,6 @@ class XMLWriter extends \XMLWriter * @param string $element * @param string $attribute * @param mixed $value - * @return void */ public function writeElementIf($condition, $element, $attribute = null, $value = null) { @@ -158,7 +158,6 @@ class XMLWriter extends \XMLWriter * @param bool $condition * @param string $attribute * @param mixed $value - * @return void */ public function writeAttributeIf($condition, $attribute, $value) { @@ -177,6 +176,7 @@ class XMLWriter extends \XMLWriter if (is_float($value)) { $value = json_encode($value); } + return parent::writeAttribute($name, $value); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php index 2783e17e1c..bc71e74b17 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php @@ -129,6 +129,7 @@ class ZipArchive { $result = true; $this->filename = $filename; + $this->tempDir = Settings::getTempDir(); if (!$this->usePclzip) { $zip = new \ZipArchive(); @@ -139,7 +140,6 @@ class ZipArchive $this->numFiles = $zip->numFiles; } else { $zip = new \PclZip($this->filename); - $this->tempDir = Settings::getTempDir(); $zipContent = $zip->listContent(); $this->numFiles = is_array($zipContent) ? count($zipContent) : 0; } @@ -245,14 +245,20 @@ class ZipArchive $pathRemoved = $filenameParts['dirname']; $pathAdded = $localnameParts['dirname']; - $res = $zip->add($filename, PCLZIP_OPT_REMOVE_PATH, $pathRemoved, PCLZIP_OPT_ADD_PATH, $pathAdded); + if (!$this->usePclzip) { + $pathAdded = $pathAdded . '/' . ltrim(str_replace('\\', '/', substr($filename, strlen($pathRemoved))), '/'); + //$res = $zip->addFile($filename, $pathAdded); + $res = $zip->addFromString($pathAdded, file_get_contents($filename)); // addFile can't use subfolders in some cases + } else { + $res = $zip->add($filename, PCLZIP_OPT_REMOVE_PATH, $pathRemoved, PCLZIP_OPT_ADD_PATH, $pathAdded); + } if ($tempFile) { // Remove temp file, if created unlink($this->tempDir . DIRECTORY_SEPARATOR . $localnameParts['basename']); } - return ($res == 0) ? false : true; + return $res != 0; } /** @@ -283,7 +289,7 @@ class ZipArchive // Remove temp file @unlink($this->tempDir . DIRECTORY_SEPARATOR . $filenameParts['basename']); - return ($res == 0) ? false : true; + return $res != 0; } /** @@ -303,7 +309,7 @@ class ZipArchive if (is_null($entries)) { $result = $zip->extract(PCLZIP_OPT_PATH, $destination); - return ($result > 0) ? true : false; + return $result > 0; } // Extract by entries diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Border.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Border.php new file mode 100644 index 0000000000..a73c7b4a67 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Border.php @@ -0,0 +1,58 @@ +<?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-2018 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Border Styles. + * + * @since 0.18.0 + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_Border.html + */ +final class Border extends AbstractEnum +{ + const SINGLE = 'single'; //A single line + const DASH_DOT_STROKED = 'dashDotStroked'; //A line with a series of alternating thin and thick strokes + const DASHED = 'dashed'; //A dashed line + const DASH_SMALL_GAP = 'dashSmallGap'; //A dashed line with small gaps + const DOT_DASH = 'dotDash'; //A line with alternating dots and dashes + const DOT_DOT_DASH = 'dotDotDash'; //A line with a repeating dot - dot - dash sequence + const DOTTED = 'dotted'; //A dotted line + const DOUBLE = 'double'; //A double line + const DOUBLE_WAVE = 'doubleWave'; //A double wavy line + const INSET = 'inset'; //An inset set of lines + const NIL = 'nil'; //No border + const NONE = 'none'; //No border + const OUTSET = 'outset'; //An outset set of lines + const THICK = 'thick'; //A single line + const THICK_THIN_LARGE_GAP = 'thickThinLargeGap'; //A thick line contained within a thin line with a large-sized intermediate gap + const THICK_THIN_MEDIUM_GAP = 'thickThinMediumGap'; //A thick line contained within a thin line with a medium-sized intermediate gap + const THICK_THIN_SMALL_GAP = 'thickThinSmallGap'; //A thick line contained within a thin line with a small intermediate gap + const THIN_THICK_LARGE_GAP = 'thinThickLargeGap'; //A thin line contained within a thick line with a large-sized intermediate gap + const THIN_THICK_MEDIUM_GAP = 'thinThickMediumGap'; //A thick line contained within a thin line with a medium-sized intermediate gap + const THIN_THICK_SMALL_GAP = 'thinThickSmallGap'; //A thick line contained within a thin line with a small intermediate gap + const THIN_THICK_THINLARGE_GAP = 'thinThickThinLargeGap'; //A thin-thick-thin line with a large gap + const THIN_THICK_THIN_MEDIUM_GAP = 'thinThickThinMediumGap'; //A thin-thick-thin line with a medium gap + const THIN_THICK_THIN_SMALL_GAP = 'thinThickThinSmallGap'; //A thin-thick-thin line with a small gap + const THREE_D_EMBOSS = 'threeDEmboss'; //A three-staged gradient line, getting darker towards the paragraph + const THREE_D_ENGRAVE = 'threeDEngrave'; //A three-staged gradient like, getting darker away from the paragraph + const TRIPLE = 'triple'; //A triple line + const WAVE = 'wave'; //A wavy line +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/VerticalJc.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/VerticalJc.php new file mode 100644 index 0000000000..2a37de417d --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/VerticalJc.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-2018 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Vertical Alignment Type. + * + * Introduced in ISO/IEC-29500:2008. + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_VerticalJc.html + * @since 0.17.0 + */ +final class VerticalJc extends AbstractEnum +{ + const TOP = 'top'; + const CENTER = 'center'; + const BOTH = 'both'; + const BOTTOM = 'bottom'; +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php index 8edbe80bff..aca6635faa 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Style; -use PhpOffice\Common\Text; +use PhpOffice\PhpWord\Shared\Text; /** * Abstract style class diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php index e609e190ff..1276b5b59a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php @@ -18,6 +18,7 @@ namespace PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\SimpleType\TblWidth; +use PhpOffice\PhpWord\SimpleType\VerticalJc; /** * Table cell style @@ -28,10 +29,20 @@ class Cell extends Border * Vertical alignment constants * * @const string + * @deprecated Use \PhpOffice\PhpWord\SimpleType\VerticalJc::TOP instead */ const VALIGN_TOP = 'top'; + /** + * @deprecated Use \PhpOffice\PhpWord\SimpleType\VerticalJc::CENTER instead + */ const VALIGN_CENTER = 'center'; + /** + * @deprecated Use \PhpOffice\PhpWord\SimpleType\VerticalJc::BOTTOM instead + */ const VALIGN_BOTTOM = 'bottom'; + /** + * @deprecated Use \PhpOffice\PhpWord\SimpleType\VerticalJc::BOTH instead + */ const VALIGN_BOTH = 'both'; //Text direction constants @@ -145,8 +156,8 @@ class Cell extends Border */ public function setVAlign($value = null) { - $enum = array(self::VALIGN_TOP, self::VALIGN_CENTER, self::VALIGN_BOTTOM, self::VALIGN_BOTH); - $this->vAlign = $this->setEnumVal($value, $enum, $this->vAlign); + VerticalJc::validate($value); + $this->vAlign = $this->setEnumVal($value, VerticalJc::values(), $this->vAlign); return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php index 5b02e63631..c02c0af4d8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php @@ -52,6 +52,28 @@ class Chart extends AbstractStyle */ private $colors = array(); + /** + * Chart title + * + * @var string + */ + private $title = null; + + /** + * Chart legend visibility + * + * @var bool + */ + private $showLegend = false; + + /** + * Chart legend Position. + * Possible values are 'r', 't', 'b', 'l', 'tr' + * + * @var string + */ + private $legendPosition = 'r'; + /** * A list of display options for data labels * @@ -97,9 +119,15 @@ class Chart extends AbstractStyle */ private $valueAxisTitle; + /** + * The position for major tick marks + * Possible values are 'in', 'out', 'cross', 'none' + * + * @var string + */ private $majorTickMarkPos = 'none'; - /* + /** * Show labels for axis * * @var bool @@ -213,6 +241,7 @@ class Chart extends AbstractStyle * Set the colors to use in a chart. * * @param array $value a list of colors to use in the chart + * @return self */ public function setColors($value = array()) { @@ -221,6 +250,83 @@ class Chart extends AbstractStyle return $this; } + /** + * Get the chart title + * + * @return string + */ + public function getTitle() + { + return $this->title; + } + + /** + * Set the chart title + * + * @param string $value + * @return self + */ + public function setTitle($value = null) + { + $this->title = $value; + + return $this; + } + + /** + * Get chart legend visibility + * + * @return bool + */ + public function isShowLegend() + { + return $this->showLegend; + } + + /** + * Set chart legend visibility + * + * @param bool $value + * @return self + */ + public function setShowLegend($value = false) + { + $this->showLegend = $value; + + return $this; + } + + /** + * Get chart legend position + * + * @return string + */ + public function getLegendPosition() + { + return $this->legendPosition; + } + + /** + * Set chart legend position. choices: + * "r" - right of chart + * "b" - bottom of chart + * "t" - top of chart + * "l" - left of chart + * "tr" - top right of chart + * + * default: right + * + * @param string $legendPosition + * @return self + */ + public function setLegendPosition($legendPosition = 'r') + { + $enum = array('r', 'b', 't', 'l', 'tr'); + $this->legendPosition = $this->setEnumVal($legendPosition, $enum, $this->legendPosition); + + return $this; + } + /* * Show labels for axis * @@ -264,7 +370,10 @@ class Chart extends AbstractStyle { foreach (array_keys($this->dataLabelOptions) as $option) { if (isset($values[$option])) { - $this->dataLabelOptions[$option] = $this->setBoolVal($values[$option], $this->dataLabelOptions[$option]); + $this->dataLabelOptions[$option] = $this->setBoolVal( + $values[$option], + $this->dataLabelOptions[$option] + ); } } } @@ -394,8 +503,8 @@ class Chart extends AbstractStyle } /** - * set the position for major tick marks - * @param string $position [description] + * Set the position for major tick marks + * @param string $position */ public function setMajorTickPosition($position) { @@ -403,7 +512,7 @@ class Chart extends AbstractStyle $this->majorTickMarkPos = $this->setEnumVal($position, $enum, $this->majorTickMarkPos); } - /* + /** * Show Gridlines for X-Axis * * @return bool diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php index e9f3c9d672..09e6f1a2f3 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php @@ -80,7 +80,7 @@ class Font extends AbstractStyle * * @var array */ - protected $aliases = array('line-height' => 'lineHeight'); + protected $aliases = array('line-height' => 'lineHeight', 'letter-spacing' => 'spacing'); /** * Font style type @@ -122,14 +122,14 @@ class Font extends AbstractStyle * * @var bool */ - private $bold = false; + private $bold; /** * Italic * * @var bool */ - private $italic = false; + private $italic; /** * Undeline @@ -157,14 +157,14 @@ class Font extends AbstractStyle * * @var bool */ - private $strikethrough = false; + private $strikethrough; /** * Double strikethrough * * @var bool */ - private $doubleStrikethrough = false; + private $doubleStrikethrough; /** * Small caps @@ -172,7 +172,7 @@ class Font extends AbstractStyle * @var bool * @see http://www.schemacentral.com/sc/ooxml/e-w_smallCaps-1.html */ - private $smallCaps = false; + private $smallCaps; /** * All caps @@ -180,7 +180,7 @@ class Font extends AbstractStyle * @var bool * @see http://www.schemacentral.com/sc/ooxml/e-w_caps-1.html */ - private $allCaps = false; + private $allCaps; /** * Foreground/highlight @@ -235,7 +235,7 @@ class Font extends AbstractStyle * * @var bool */ - private $rtl = false; + private $rtl; /** * noProof (disables AutoCorrect) @@ -243,7 +243,7 @@ class Font extends AbstractStyle * @var bool * http://www.datypic.com/sc/ooxml/e-w_noProof-1.html */ - private $noProof = false; + private $noProof; /** * Languages @@ -252,6 +252,14 @@ class Font extends AbstractStyle */ private $lang; + /** + * Hidden text + * + * @var bool + * @see http://www.datypic.com/sc/ooxml/e-w_vanish-1.html + */ + private $hidden; + /** * Vertically Raised or Lowered Text * @@ -299,6 +307,7 @@ class Font extends AbstractStyle 'smallCaps' => $this->isSmallCaps(), 'allCaps' => $this->isAllCaps(), 'fgColor' => $this->getFgColor(), + 'hidden' => $this->isHidden(), ), 'spacing' => array( 'scale' => $this->getScale(), @@ -938,6 +947,29 @@ class Font extends AbstractStyle return $this->getParagraph(); } + /** + * Get hidden text + * + * @return bool + */ + public function isHidden() + { + return $this->hidden; + } + + /** + * Set hidden text + * + * @param bool $value + * @return self + */ + public function setHidden($value = true) + { + $this->hidden = $this->setBoolVal($value, $this->hidden); + + return $this; + } + /** * Get position * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php index d7a76f78f3..7b2de51e07 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php @@ -65,6 +65,15 @@ final class Language extends AbstractStyle const PT_BR = 'pt-BR'; const PT_BR_ID = 1046; + const NL_NL = 'nl-NL'; + const NL_NL_ID = 1043; + + const UK_UA = 'uk-UA'; + const UK_UA_ID = 1058; + + const RU_RU = 'ru-RU'; + const RU_RU_ID = 1049; + /** * Language ID, used for RTF document generation * @@ -219,11 +228,15 @@ final class Language extends AbstractStyle */ private function validateLocale($locale) { + if ($locale !== null) { + $locale = str_replace('_', '-', $locale); + } + if (strlen($locale) === 2) { return strtolower($locale) . '-' . strtoupper($locale); } - if ($locale !== null && strstr($locale, '-') === false) { + if ($locale !== null && $locale !== 'zxx' && strstr($locale, '-') === false) { throw new \InvalidArgumentException($locale . ' is not a valid language code'); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php index 306ecff305..4293940fd2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php @@ -139,6 +139,16 @@ class ListItem extends AbstractStyle return $this->numId; } + /** + * Set numbering Id. Same numId means same list + * @param mixed $numInt + */ + public function setNumId($numInt) + { + $this->numId = $numInt; + $this->getListTypeStyle(); + } + /** * Get legacy numbering definition * @@ -148,7 +158,12 @@ class ListItem extends AbstractStyle private function getListTypeStyle() { // Check if legacy style already registered in global Style collection - $numStyle = "PHPWordList{$this->listType}"; + $numStyle = 'PHPWordListType' . $this->listType; + + if ($this->numId) { + $numStyle .= 'NumId' . $this->numId; + } + if (Style::getStyle($numStyle) !== null) { $this->setNumStyle($numStyle); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php index ac58768695..522dea9baf 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Style; -use PhpOffice\Common\Text; use PhpOffice\PhpWord\Exception\InvalidStyleException; +use PhpOffice\PhpWord\Shared\Text; use PhpOffice\PhpWord\SimpleType\Jc; use PhpOffice\PhpWord\SimpleType\TextAlignment; @@ -61,7 +61,7 @@ class Paragraph extends Border * * @var array */ - protected $aliases = array('line-height' => 'lineHeight'); + protected $aliases = array('line-height' => 'lineHeight', 'line-spacing' => 'spacing'); /** * Parent style @@ -85,7 +85,7 @@ class Paragraph extends Border /** * Indentation * - * @var \PhpOffice\PhpWord\Style\Indentation + * @var \PhpOffice\PhpWord\Style\Indentation|null */ private $indentation; @@ -198,9 +198,7 @@ class Paragraph extends Border { $key = Text::removeUnderscorePrefix($key); if ('indent' == $key || 'hanging' == $key) { - $value = $value * 720; - } elseif ('spacing' == $key) { - $value += 240; // because line height of 1 matches 240 twips + $value = $value * 720; // 720 twips is 0.5 inch } return parent::setStyleValue($key, $value); @@ -479,7 +477,7 @@ class Paragraph extends Border /** * Get spacing between lines * - * @return int + * @return int|float */ public function getSpacing() { @@ -489,7 +487,7 @@ class Paragraph extends Border /** * Set spacing between lines * - * @param int $value + * @param int|float $value * @return self */ public function setSpacing($value = null) @@ -547,7 +545,8 @@ class Paragraph extends Border } $this->lineHeight = $lineHeight; - $this->setSpacing($lineHeight * self::LINE_HEIGHT); + $this->setSpacing(($lineHeight - 1) * self::LINE_HEIGHT); + $this->setSpacingLineRule(\PhpOffice\PhpWord\SimpleType\LineSpacingRule::AUTO); return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php index 162e08e0bc..697add7456 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php @@ -17,6 +17,9 @@ namespace PhpOffice\PhpWord\Style; +use PhpOffice\PhpWord\Settings; +use PhpOffice\PhpWord\SimpleType\VerticalJc; + /** * Section settings */ @@ -166,6 +169,14 @@ class Section extends Border */ private $lineNumbering; + /** + * Vertical Text Alignment on Page + * One of \PhpOffice\PhpWord\SimpleType\VerticalJc + * + * @var string + */ + private $vAlign; + /** * Create new instance */ @@ -190,8 +201,11 @@ class Section extends Border * @param string $value * @return self */ - public function setPaperSize($value = 'A4') + public function setPaperSize($value = '') { + if (!$value) { + $value = Settings::getDefaultPaper(); + } if ($this->paper === null) { $this->paper = new Paper(); } @@ -599,4 +613,28 @@ class Section extends Border return $this; } + + /** + * Get vertical alignment + * + * @return string + */ + public function getVAlign() + { + return $this->vAlign; + } + + /** + * Set vertical alignment + * + * @param string $value + * @return self + */ + public function setVAlign($value = null) + { + VerticalJc::validate($value); + $this->vAlign = $value; + + return $this; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php index 0f7bf7dc3b..f777ac671f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php @@ -170,6 +170,14 @@ class Table extends Border */ private $columnWidths; + /** + * Visually Right to Left Table + * + * @see http://www.datypic.com/sc/ooxml/e-w_bidiVisual-1.html + * @var bool + */ + private $bidiVisual = false; + /** * Create new table style * @@ -759,7 +767,7 @@ class Table extends Border /** * Get the columnWidths * - * @return number[] + * @return null|int[] */ public function getColumnWidths() { @@ -775,4 +783,28 @@ class Table extends Border { $this->columnWidths = $value; } + + /** + * Get bidiVisual + * + * @return bool + */ + public function isBidiVisual() + { + return $this->bidiVisual; + } + + /** + * Set bidiVisual + * + * @param bool $bidi + * Set to true to visually present table as Right to Left + * @return self + */ + public function setBidiVisual($bidi) + { + $this->bidiVisual = $bidi; + + return $this; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php index 9cc1371a0b..649fde40c8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php @@ -17,12 +17,13 @@ namespace PhpOffice\PhpWord; -use PhpOffice\Common\Text; use PhpOffice\PhpWord\Escaper\RegExp; use PhpOffice\PhpWord\Escaper\Xml; use PhpOffice\PhpWord\Exception\CopyFileException; use PhpOffice\PhpWord\Exception\CreateTemporaryFileException; use PhpOffice\PhpWord\Exception\Exception; +use PhpOffice\PhpWord\Shared\Text; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Shared\ZipArchive; class TemplateProcessor @@ -48,6 +49,13 @@ class TemplateProcessor */ protected $tempDocumentMainPart; + /** + * Content of settings part (in XML format) of the temporary document + * + * @var string + */ + protected $tempDocumentSettingsPart; + /** * Content of headers (in XML format) of the temporary document * @@ -62,6 +70,27 @@ class TemplateProcessor */ protected $tempDocumentFooters = array(); + /** + * Document relations (in XML format) of the temporary document. + * + * @var string[] + */ + protected $tempDocumentRelations = array(); + + /** + * Document content types (in XML format) of the temporary document. + * + * @var string + */ + protected $tempDocumentContentTypes = ''; + + /** + * new inserted images list + * + * @var string[] + */ + protected $tempDocumentNewImages = array(); + /** * @since 0.12.0 Throws CreateTemporaryFileException and CopyFileException instead of Exception * @@ -75,12 +104,12 @@ class TemplateProcessor // Temporary document filename initialization $this->tempDocumentFilename = tempnam(Settings::getTempDir(), 'PhpWord'); if (false === $this->tempDocumentFilename) { - throw new CreateTemporaryFileException(); + throw new CreateTemporaryFileException(); // @codeCoverageIgnore } // Template file cloning if (false === copy($documentTemplate, $this->tempDocumentFilename)) { - throw new CopyFileException($documentTemplate, $this->tempDocumentFilename); + throw new CopyFileException($documentTemplate, $this->tempDocumentFilename); // @codeCoverageIgnore } // Temporary document content extraction @@ -88,19 +117,47 @@ class TemplateProcessor $this->zipClass->open($this->tempDocumentFilename); $index = 1; while (false !== $this->zipClass->locateName($this->getHeaderName($index))) { - $this->tempDocumentHeaders[$index] = $this->fixBrokenMacros( - $this->zipClass->getFromName($this->getHeaderName($index)) - ); + $this->tempDocumentHeaders[$index] = $this->readPartWithRels($this->getHeaderName($index)); $index++; } $index = 1; while (false !== $this->zipClass->locateName($this->getFooterName($index))) { - $this->tempDocumentFooters[$index] = $this->fixBrokenMacros( - $this->zipClass->getFromName($this->getFooterName($index)) - ); + $this->tempDocumentFooters[$index] = $this->readPartWithRels($this->getFooterName($index)); $index++; } - $this->tempDocumentMainPart = $this->fixBrokenMacros($this->zipClass->getFromName($this->getMainPartName())); + + $this->tempDocumentMainPart = $this->readPartWithRels($this->getMainPartName()); + $this->tempDocumentSettingsPart = $this->readPartWithRels($this->getSettingsPartName()); + $this->tempDocumentContentTypes = $this->zipClass->getFromName($this->getDocumentContentTypesName()); + } + + /** + * Expose zip class + * + * To replace an image: $templateProcessor->zip()->AddFromString("word/media/image1.jpg", file_get_contents($file));<br> + * To read a file: $templateProcessor->zip()->getFromName("word/media/image1.jpg"); + * + * @return \PhpOffice\PhpWord\Shared\ZipArchive + */ + public function zip() + { + return $this->zipClass; + } + + /** + * @param string $fileName + * + * @return string + */ + protected function readPartWithRels($fileName) + { + $relsFileName = $this->getRelationsName($fileName); + $partRelations = $this->zipClass->getFromName($relsFileName); + if ($partRelations !== false) { + $this->tempDocumentRelations[$fileName] = $partRelations; + } + + return $this->fixBrokenMacros($this->zipClass->getFromName($fileName)); } /** @@ -113,7 +170,9 @@ class TemplateProcessor */ protected function transformSingleXml($xml, $xsltProcessor) { - $orignalLibEntityLoader = libxml_disable_entity_loader(true); + if (\PHP_VERSION_ID < 80000) { + $orignalLibEntityLoader = libxml_disable_entity_loader(true); + } $domDocument = new \DOMDocument(); if (false === $domDocument->loadXML($xml)) { throw new Exception('Could not load the given XML document.'); @@ -123,7 +182,9 @@ class TemplateProcessor if (false === $transformedXml) { throw new Exception('Could not transform the given XML document.'); } - libxml_disable_entity_loader($orignalLibEntityLoader); + if (\PHP_VERSION_ID < 80000) { + libxml_disable_entity_loader($orignalLibEntityLoader); + } return $transformedXml; } @@ -140,6 +201,7 @@ class TemplateProcessor foreach ($xml as &$item) { $item = $this->transformSingleXml($item, $xsltProcessor); } + unset($item); } else { $xml = $this->transformSingleXml($xml, $xsltProcessor); } @@ -201,6 +263,51 @@ class TemplateProcessor return $subject; } + /** + * @param string $search + * @param \PhpOffice\PhpWord\Element\AbstractElement $complexType + */ + public function setComplexValue($search, \PhpOffice\PhpWord\Element\AbstractElement $complexType) + { + $elementName = substr(get_class($complexType), strrpos(get_class($complexType), '\\') + 1); + $objectClass = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Element\\' . $elementName; + + $xmlWriter = new XMLWriter(); + /** @var \PhpOffice\PhpWord\Writer\Word2007\Element\AbstractElement $elementWriter */ + $elementWriter = new $objectClass($xmlWriter, $complexType, true); + $elementWriter->write(); + + $where = $this->findContainingXmlBlockForMacro($search, 'w:r'); + + if ($where === false) { + return; + } + + $block = $this->getSlice($where['start'], $where['end']); + $textParts = $this->splitTextIntoTexts($block); + $this->replaceXmlBlock($search, $textParts, 'w:r'); + + $search = static::ensureMacroCompleted($search); + $this->replaceXmlBlock($search, $xmlWriter->getData(), 'w:r'); + } + + /** + * @param string $search + * @param \PhpOffice\PhpWord\Element\AbstractElement $complexType + */ + public function setComplexBlock($search, \PhpOffice\PhpWord\Element\AbstractElement $complexType) + { + $elementName = substr(get_class($complexType), strrpos(get_class($complexType), '\\') + 1); + $objectClass = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Element\\' . $elementName; + + $xmlWriter = new XMLWriter(); + /** @var \PhpOffice\PhpWord\Writer\Word2007\Element\AbstractElement $elementWriter */ + $elementWriter = new $objectClass($xmlWriter, $complexType, false); + $elementWriter->write(); + + $this->replaceXmlBlock($search, $xmlWriter->getData(), 'w:p'); + } + /** * @param mixed $search * @param mixed $replace @@ -210,18 +317,20 @@ class TemplateProcessor { if (is_array($search)) { foreach ($search as &$item) { - $item = self::ensureMacroCompleted($item); + $item = static::ensureMacroCompleted($item); } + unset($item); } else { - $search = self::ensureMacroCompleted($search); + $search = static::ensureMacroCompleted($search); } if (is_array($replace)) { foreach ($replace as &$item) { - $item = self::ensureUtf8Encoded($item); + $item = static::ensureUtf8Encoded($item); } + unset($item); } else { - $replace = self::ensureUtf8Encoded($replace); + $replace = static::ensureUtf8Encoded($replace); } if (Settings::isOutputEscapingEnabled()) { @@ -235,23 +344,371 @@ class TemplateProcessor } /** - * Returns array of all variables in template. + * Set values from a one-dimensional array of "variable => value"-pairs. * - * @return string[] + * @param array $values */ - public function getVariables() + public function setValues(array $values) + { + foreach ($values as $macro => $replace) { + $this->setValue($macro, $replace); + } + } + + /** + * @param string $search + * @param \PhpOffice\PhpWord\Element\AbstractElement $complexType + */ + public function setChart($search, \PhpOffice\PhpWord\Element\AbstractElement $chart) + { + $elementName = substr(get_class($chart), strrpos(get_class($chart), '\\') + 1); + $objectClass = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Element\\' . $elementName; + + // Get the next relation id + $rId = $this->getNextRelationsIndex($this->getMainPartName()); + $chart->setRelationId($rId); + + // Define the chart filename + $filename = "charts/chart{$rId}.xml"; + + // Get the part writer + $writerPart = new \PhpOffice\PhpWord\Writer\Word2007\Part\Chart(); + $writerPart->setElement($chart); + + // ContentTypes.xml + $this->zipClass->addFromString("word/{$filename}", $writerPart->write()); + + // add chart to content type + $xmlRelationsType = "<Override PartName=\"/word/{$filename}\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>"; + $this->tempDocumentContentTypes = str_replace('</Types>', $xmlRelationsType, $this->tempDocumentContentTypes) . '</Types>'; + + // Add the chart to relations + $xmlChartRelation = "<Relationship Id=\"rId{$rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\" Target=\"charts/chart{$rId}.xml\"/>"; + $this->tempDocumentRelations[$this->getMainPartName()] = str_replace('</Relationships>', $xmlChartRelation, $this->tempDocumentRelations[$this->getMainPartName()]) . '</Relationships>'; + + // Write the chart + $xmlWriter = new XMLWriter(); + $elementWriter = new $objectClass($xmlWriter, $chart, true); + $elementWriter->write(); + + // Place it in the template + $this->replaceXmlBlock($search, '<w:p>' . $xmlWriter->getData() . '</w:p>', 'w:p'); + } + + private function getImageArgs($varNameWithArgs) + { + $varElements = explode(':', $varNameWithArgs); + array_shift($varElements); // first element is name of variable => remove it + + $varInlineArgs = array(); + // size format documentation: https://msdn.microsoft.com/en-us/library/documentformat.openxml.vml.shape%28v=office.14%29.aspx?f=255&MSPPError=-2147217396 + foreach ($varElements as $argIdx => $varArg) { + if (strpos($varArg, '=')) { // arg=value + list($argName, $argValue) = explode('=', $varArg, 2); + $argName = strtolower($argName); + if ($argName == 'size') { + list($varInlineArgs['width'], $varInlineArgs['height']) = explode('x', $argValue, 2); + } else { + $varInlineArgs[strtolower($argName)] = $argValue; + } + } elseif (preg_match('/^([0-9]*[a-z%]{0,2}|auto)x([0-9]*[a-z%]{0,2}|auto)$/i', $varArg)) { // 60x40 + list($varInlineArgs['width'], $varInlineArgs['height']) = explode('x', $varArg, 2); + } else { // :60:40:f + switch ($argIdx) { + case 0: + $varInlineArgs['width'] = $varArg; + break; + case 1: + $varInlineArgs['height'] = $varArg; + break; + case 2: + $varInlineArgs['ratio'] = $varArg; + break; + } + } + } + + return $varInlineArgs; + } + + private function chooseImageDimension($baseValue, $inlineValue, $defaultValue) + { + $value = $baseValue; + if (is_null($value) && isset($inlineValue)) { + $value = $inlineValue; + } + if (!preg_match('/^([0-9]*(cm|mm|in|pt|pc|px|%|em|ex|)|auto)$/i', $value)) { + $value = null; + } + if (is_null($value)) { + $value = $defaultValue; + } + if (is_numeric($value)) { + $value .= 'px'; + } + + return $value; + } + + private function fixImageWidthHeightRatio(&$width, &$height, $actualWidth, $actualHeight) + { + $imageRatio = $actualWidth / $actualHeight; + + if (($width === '') && ($height === '')) { // defined size are empty + $width = $actualWidth . 'px'; + $height = $actualHeight . 'px'; + } elseif ($width === '') { // defined width is empty + $heightFloat = (float) $height; + $widthFloat = $heightFloat * $imageRatio; + $matches = array(); + preg_match("/\d([a-z%]+)$/", $height, $matches); + $width = $widthFloat . $matches[1]; + } elseif ($height === '') { // defined height is empty + $widthFloat = (float) $width; + $heightFloat = $widthFloat / $imageRatio; + $matches = array(); + preg_match("/\d([a-z%]+)$/", $width, $matches); + $height = $heightFloat . $matches[1]; + } else { // we have defined size, but we need also check it aspect ratio + $widthMatches = array(); + preg_match("/\d([a-z%]+)$/", $width, $widthMatches); + $heightMatches = array(); + preg_match("/\d([a-z%]+)$/", $height, $heightMatches); + // try to fix only if dimensions are same + if ($widthMatches[1] == $heightMatches[1]) { + $dimention = $widthMatches[1]; + $widthFloat = (float) $width; + $heightFloat = (float) $height; + $definedRatio = $widthFloat / $heightFloat; + + if ($imageRatio > $definedRatio) { // image wider than defined box + $height = ($widthFloat / $imageRatio) . $dimention; + } elseif ($imageRatio < $definedRatio) { // image higher than defined box + $width = ($heightFloat * $imageRatio) . $dimention; + } + } + } + } + + private function prepareImageAttrs($replaceImage, $varInlineArgs) + { + // get image path and size + $width = null; + $height = null; + $ratio = null; + + // a closure can be passed as replacement value which after resolving, can contain the replacement info for the image + // use case: only when a image if found, the replacement tags can be generated + if (is_callable($replaceImage)) { + $replaceImage = $replaceImage(); + } + + if (is_array($replaceImage) && isset($replaceImage['path'])) { + $imgPath = $replaceImage['path']; + if (isset($replaceImage['width'])) { + $width = $replaceImage['width']; + } + if (isset($replaceImage['height'])) { + $height = $replaceImage['height']; + } + if (isset($replaceImage['ratio'])) { + $ratio = $replaceImage['ratio']; + } + } else { + $imgPath = $replaceImage; + } + + $width = $this->chooseImageDimension($width, isset($varInlineArgs['width']) ? $varInlineArgs['width'] : null, 115); + $height = $this->chooseImageDimension($height, isset($varInlineArgs['height']) ? $varInlineArgs['height'] : null, 70); + + $imageData = @getimagesize($imgPath); + if (!is_array($imageData)) { + throw new Exception(sprintf('Invalid image: %s', $imgPath)); + } + list($actualWidth, $actualHeight, $imageType) = $imageData; + + // fix aspect ratio (by default) + if (is_null($ratio) && isset($varInlineArgs['ratio'])) { + $ratio = $varInlineArgs['ratio']; + } + if (is_null($ratio) || !in_array(strtolower($ratio), array('', '-', 'f', 'false'))) { + $this->fixImageWidthHeightRatio($width, $height, $actualWidth, $actualHeight); + } + + $imageAttrs = array( + 'src' => $imgPath, + 'mime' => image_type_to_mime_type($imageType), + 'width' => $width, + 'height' => $height, + ); + + return $imageAttrs; + } + + private function addImageToRelations($partFileName, $rid, $imgPath, $imageMimeType) + { + // define templates + $typeTpl = '<Override PartName="/word/media/{IMG}" ContentType="image/{EXT}"/>'; + $relationTpl = '<Relationship Id="{RID}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/{IMG}"/>'; + $newRelationsTpl = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' . "\n" . '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>'; + $newRelationsTypeTpl = '<Override PartName="/{RELS}" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>'; + $extTransform = array( + 'image/jpeg' => 'jpeg', + 'image/png' => 'png', + 'image/bmp' => 'bmp', + 'image/gif' => 'gif', + ); + + // get image embed name + if (isset($this->tempDocumentNewImages[$imgPath])) { + $imgName = $this->tempDocumentNewImages[$imgPath]; + } else { + // transform extension + if (isset($extTransform[$imageMimeType])) { + $imgExt = $extTransform[$imageMimeType]; + } else { + throw new Exception("Unsupported image type $imageMimeType"); + } + + // add image to document + $imgName = 'image_' . $rid . '_' . pathinfo($partFileName, PATHINFO_FILENAME) . '.' . $imgExt; + $this->zipClass->pclzipAddFile($imgPath, 'word/media/' . $imgName); + $this->tempDocumentNewImages[$imgPath] = $imgName; + + // setup type for image + $xmlImageType = str_replace(array('{IMG}', '{EXT}'), array($imgName, $imgExt), $typeTpl); + $this->tempDocumentContentTypes = str_replace('</Types>', $xmlImageType, $this->tempDocumentContentTypes) . '</Types>'; + } + + $xmlImageRelation = str_replace(array('{RID}', '{IMG}'), array($rid, $imgName), $relationTpl); + + if (!isset($this->tempDocumentRelations[$partFileName])) { + // create new relations file + $this->tempDocumentRelations[$partFileName] = $newRelationsTpl; + // and add it to content types + $xmlRelationsType = str_replace('{RELS}', $this->getRelationsName($partFileName), $newRelationsTypeTpl); + $this->tempDocumentContentTypes = str_replace('</Types>', $xmlRelationsType, $this->tempDocumentContentTypes) . '</Types>'; + } + + // add image to relations + $this->tempDocumentRelations[$partFileName] = str_replace('</Relationships>', $xmlImageRelation, $this->tempDocumentRelations[$partFileName]) . '</Relationships>'; + } + + /** + * @param mixed $search + * @param mixed $replace Path to image, or array("path" => xx, "width" => yy, "height" => zz) + * @param int $limit + */ + public function setImageValue($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT) + { + // prepare $search_replace + if (!is_array($search)) { + $search = array($search); + } + + $replacesList = array(); + if (!is_array($replace) || isset($replace['path'])) { + $replacesList[] = $replace; + } else { + $replacesList = array_values($replace); + } + + $searchReplace = array(); + foreach ($search as $searchIdx => $searchString) { + $searchReplace[$searchString] = isset($replacesList[$searchIdx]) ? $replacesList[$searchIdx] : $replacesList[0]; + } + + // collect document parts + $searchParts = array( + $this->getMainPartName() => &$this->tempDocumentMainPart, + ); + foreach (array_keys($this->tempDocumentHeaders) as $headerIndex) { + $searchParts[$this->getHeaderName($headerIndex)] = &$this->tempDocumentHeaders[$headerIndex]; + } + foreach (array_keys($this->tempDocumentFooters) as $headerIndex) { + $searchParts[$this->getFooterName($headerIndex)] = &$this->tempDocumentFooters[$headerIndex]; + } + + // define templates + // result can be verified via "Open XML SDK 2.5 Productivity Tool" (http://www.microsoft.com/en-us/download/details.aspx?id=30425) + $imgTpl = '<w:pict><v:shape type="#_x0000_t75" style="width:{WIDTH};height:{HEIGHT}" stroked="f"><v:imagedata r:id="{RID}" o:title=""/></v:shape></w:pict>'; + + $i = 0; + foreach ($searchParts as $partFileName => &$partContent) { + $partVariables = $this->getVariablesForPart($partContent); + + foreach ($searchReplace as $searchString => $replaceImage) { + $varsToReplace = array_filter($partVariables, function ($partVar) use ($searchString) { + return ($partVar == $searchString) || preg_match('/^' . preg_quote($searchString) . ':/', $partVar); + }); + + foreach ($varsToReplace as $varNameWithArgs) { + $varInlineArgs = $this->getImageArgs($varNameWithArgs); + $preparedImageAttrs = $this->prepareImageAttrs($replaceImage, $varInlineArgs); + $imgPath = $preparedImageAttrs['src']; + + // get image index + $imgIndex = $this->getNextRelationsIndex($partFileName); + $rid = 'rId' . $imgIndex; + + // replace preparations + $this->addImageToRelations($partFileName, $rid, $imgPath, $preparedImageAttrs['mime']); + $xmlImage = str_replace(array('{RID}', '{WIDTH}', '{HEIGHT}'), array($rid, $preparedImageAttrs['width'], $preparedImageAttrs['height']), $imgTpl); + + // replace variable + $varNameWithArgsFixed = static::ensureMacroCompleted($varNameWithArgs); + $matches = array(); + if (preg_match('/(<[^<]+>)([^<]*)(' . preg_quote($varNameWithArgsFixed) . ')([^>]*)(<[^>]+>)/Uu', $partContent, $matches)) { + $wholeTag = $matches[0]; + array_shift($matches); + list($openTag, $prefix, , $postfix, $closeTag) = $matches; + $replaceXml = $openTag . $prefix . $closeTag . $xmlImage . $openTag . $postfix . $closeTag; + // replace on each iteration, because in one tag we can have 2+ inline variables => before proceed next variable we need to change $partContent + $partContent = $this->setValueForPart($wholeTag, $replaceXml, $partContent, $limit); + } + + if (++$i >= $limit) { + break; + } + } + } + } + } + + /** + * Returns count of all variables in template. + * + * @return array + */ + public function getVariableCount() { $variables = $this->getVariablesForPart($this->tempDocumentMainPart); foreach ($this->tempDocumentHeaders as $headerXML) { - $variables = array_merge($variables, $this->getVariablesForPart($headerXML)); + $variables = array_merge( + $variables, + $this->getVariablesForPart($headerXML) + ); } foreach ($this->tempDocumentFooters as $footerXML) { - $variables = array_merge($variables, $this->getVariablesForPart($footerXML)); + $variables = array_merge( + $variables, + $this->getVariablesForPart($footerXML) + ); } - return array_unique($variables); + return array_count_values($variables); + } + + /** + * Returns array of all variables in template. + * + * @return string[] + */ + public function getVariables() + { + return array_keys($this->getVariableCount()); } /** @@ -264,9 +721,7 @@ class TemplateProcessor */ public function cloneRow($search, $numberOfClones) { - if ('${' !== substr($search, 0, 2) && '}' !== substr($search, -1)) { - $search = '${' . $search . '}'; - } + $search = static::ensureMacroCompleted($search); $tagPos = strpos($this->tempDocumentMainPart, $search); if (!$tagPos) { @@ -293,7 +748,7 @@ class TemplateProcessor // If tmpXmlRow doesn't contain continue, this row is no longer part of the spanned row. $tmpXmlRow = $this->getSlice($extraRowStart, $extraRowEnd); if (!preg_match('#<w:vMerge/>#', $tmpXmlRow) && - !preg_match('#<w:vMerge w:val="continue" />#', $tmpXmlRow)) { + !preg_match('#<w:vMerge w:val="continue"\s*/>#', $tmpXmlRow)) { break; } // This row was a spanned row, update $rowEnd and search for the next row. @@ -303,37 +758,62 @@ class TemplateProcessor } $result = $this->getSlice(0, $rowStart); - for ($i = 1; $i <= $numberOfClones; $i++) { - $result .= preg_replace('/\$\{(.*?)\}/', '\${\\1#' . $i . '}', $xmlRow); - } + $result .= implode($this->indexClonedVariables($numberOfClones, $xmlRow)); $result .= $this->getSlice($rowEnd); $this->tempDocumentMainPart = $result; } + /** + * Clones a table row and populates it's values from a two-dimensional array in a template document. + * + * @param string $search + * @param array $values + */ + public function cloneRowAndSetValues($search, $values) + { + $this->cloneRow($search, count($values)); + + foreach ($values as $rowKey => $rowData) { + $rowNumber = $rowKey + 1; + foreach ($rowData as $macro => $replace) { + $this->setValue($macro . '#' . $rowNumber, $replace); + } + } + } + /** * Clone a block. * * @param string $blockname - * @param int $clones + * @param int $clones How many time the block should be cloned * @param bool $replace + * @param bool $indexVariables If true, any variables inside the block will be indexed (postfixed with #1, #2, ...) + * @param array $variableReplacements Array containing replacements for macros found inside the block to clone * * @return string|null */ - public function cloneBlock($blockname, $clones = 1, $replace = true) + public function cloneBlock($blockname, $clones = 1, $replace = true, $indexVariables = false, $variableReplacements = null) { $xmlBlock = null; + $matches = array(); preg_match( - '/(<\?xml.*)(<w:p.*>\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is', + '/(.*((?s)<w:p\b(?:(?!<w:p\b).)*?\${' . $blockname . '}<\/w:.*?p>))(.*)((?s)<w:p\b(?:(?!<w:p\b).)[^$]*?\${\/' . $blockname . '}<\/w:.*?p>)/is', $this->tempDocumentMainPart, $matches ); if (isset($matches[3])) { $xmlBlock = $matches[3]; - $cloned = array(); - for ($i = 1; $i <= $clones; $i++) { - $cloned[] = $xmlBlock; + if ($indexVariables) { + $cloned = $this->indexClonedVariables($clones, $xmlBlock); + } elseif ($variableReplacements !== null && is_array($variableReplacements)) { + $cloned = $this->replaceClonedVariables($variableReplacements, $xmlBlock); + } else { + $cloned = array(); + for ($i = 1; $i <= $clones; $i++) { + $cloned[] = $xmlBlock; + } } if ($replace) { @@ -356,6 +836,7 @@ class TemplateProcessor */ public function replaceBlock($blockname, $replacement) { + $matches = array(); preg_match( '/(<\?xml.*)(<w:p.*>\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is', $this->tempDocumentMainPart, @@ -381,6 +862,22 @@ class TemplateProcessor $this->replaceBlock($blockname, ''); } + /** + * Automatically Recalculate Fields on Open + * + * @param bool $update + */ + public function setUpdateFields($update = true) + { + $string = $update ? 'true' : 'false'; + $matches = array(); + if (preg_match('/<w:updateFields w:val=\"(true|false|1|0|on|off)\"\/>/', $this->tempDocumentSettingsPart, $matches)) { + $this->tempDocumentSettingsPart = str_replace($matches[0], '<w:updateFields w:val="' . $string . '"/>', $this->tempDocumentSettingsPart); + } else { + $this->tempDocumentSettingsPart = str_replace('</w:settings>', '<w:updateFields w:val="' . $string . '"/></w:settings>', $this->tempDocumentSettingsPart); + } + } + /** * Saves the result document. * @@ -391,23 +888,39 @@ class TemplateProcessor public function save() { foreach ($this->tempDocumentHeaders as $index => $xml) { - $this->zipClass->addFromString($this->getHeaderName($index), $xml); + $this->savePartWithRels($this->getHeaderName($index), $xml); } - $this->zipClass->addFromString($this->getMainPartName(), $this->tempDocumentMainPart); + $this->savePartWithRels($this->getMainPartName(), $this->tempDocumentMainPart); + $this->savePartWithRels($this->getSettingsPartName(), $this->tempDocumentSettingsPart); foreach ($this->tempDocumentFooters as $index => $xml) { - $this->zipClass->addFromString($this->getFooterName($index), $xml); + $this->savePartWithRels($this->getFooterName($index), $xml); } + $this->zipClass->addFromString($this->getDocumentContentTypesName(), $this->tempDocumentContentTypes); + // Close zip file if (false === $this->zipClass->close()) { - throw new Exception('Could not close zip file.'); + throw new Exception('Could not close zip file.'); // @codeCoverageIgnore } return $this->tempDocumentFilename; } + /** + * @param string $fileName + * @param string $xml + */ + protected function savePartWithRels($fileName, $xml) + { + $this->zipClass->addFromString($fileName, $xml); + if (isset($this->tempDocumentRelations[$fileName])) { + $relsFileName = $this->getRelationsName($fileName); + $this->zipClass->addFromString($relsFileName, $this->tempDocumentRelations[$fileName]); + } + } + /** * Saves the result document to the user defined file. * @@ -443,17 +956,13 @@ class TemplateProcessor */ protected function fixBrokenMacros($documentPart) { - $fixedDocumentPart = $documentPart; - - $fixedDocumentPart = preg_replace_callback( - '|\$[^{]*\{[^}]*\}|U', + return preg_replace_callback( + '/\$(?:\{|[^{$]*\>\{)[^}$]*\}/U', function ($match) { return strip_tags($match[0]); }, - $fixedDocumentPart + $documentPart ); - - return $fixedDocumentPart; } /** @@ -486,6 +995,7 @@ class TemplateProcessor */ protected function getVariablesForPart($documentPartXML) { + $matches = array(); preg_match_all('/\$\{(.*?)}/i', $documentPartXML, $matches); return $matches[1]; @@ -504,11 +1014,30 @@ class TemplateProcessor } /** + * Usually, the name of main part document will be 'document.xml'. However, some .docx files (possibly those from Office 365, experienced also on documents from Word Online created from blank templates) have file 'document22.xml' in their zip archive instead of 'document.xml'. This method searches content types file to correctly determine the file name. + * * @return string */ protected function getMainPartName() { - return 'word/document.xml'; + $contentTypes = $this->zipClass->getFromName('[Content_Types].xml'); + + $pattern = '~PartName="\/(word\/document.*?\.xml)" ContentType="application\/vnd\.openxmlformats-officedocument\.wordprocessingml\.document\.main\+xml"~'; + + $matches = array(); + preg_match($pattern, $contentTypes, $matches); + + return array_key_exists(1, $matches) ? $matches[1] : 'word/document.xml'; + } + + /** + * The name of the file containing the Settings part + * + * @return string + */ + protected function getSettingsPartName() + { + return 'word/settings.xml'; } /** @@ -523,6 +1052,35 @@ class TemplateProcessor return sprintf('word/footer%d.xml', $index); } + /** + * Get the name of the relations file for document part. + * + * @param string $documentPartName + * + * @return string + */ + protected function getRelationsName($documentPartName) + { + return 'word/_rels/' . pathinfo($documentPartName, PATHINFO_BASENAME) . '.rels'; + } + + protected function getNextRelationsIndex($documentPartName) + { + if (isset($this->tempDocumentRelations[$documentPartName])) { + return substr_count($this->tempDocumentRelations[$documentPartName], '<Relationship'); + } + + return 1; + } + + /** + * @return string + */ + protected function getDocumentContentTypesName() + { + return '[Content_Types].xml'; + } + /** * Find the start position of the nearest table row before $offset. * @@ -574,4 +1132,182 @@ class TemplateProcessor return substr($this->tempDocumentMainPart, $startPosition, ($endPosition - $startPosition)); } + + /** + * Replaces variable names in cloned + * rows/blocks with indexed names + * + * @param int $count + * @param string $xmlBlock + * + * @return string + */ + protected function indexClonedVariables($count, $xmlBlock) + { + $results = array(); + for ($i = 1; $i <= $count; $i++) { + $results[] = preg_replace('/\$\{([^:]*?)(:.*?)?\}/', '\${\1#' . $i . '\2}', $xmlBlock); + } + + return $results; + } + + /** + * Raplaces variables with values from array, array keys are the variable names + * + * @param array $variableReplacements + * @param string $xmlBlock + * + * @return string[] + */ + protected function replaceClonedVariables($variableReplacements, $xmlBlock) + { + $results = array(); + foreach ($variableReplacements as $replacementArray) { + $localXmlBlock = $xmlBlock; + foreach ($replacementArray as $search => $replacement) { + $localXmlBlock = $this->setValueForPart(self::ensureMacroCompleted($search), $replacement, $localXmlBlock, self::MAXIMUM_REPLACEMENTS_DEFAULT); + } + $results[] = $localXmlBlock; + } + + return $results; + } + + /** + * Replace an XML block surrounding a macro with a new block + * + * @param string $macro Name of macro + * @param string $block New block content + * @param string $blockType XML tag type of block + * @return \PhpOffice\PhpWord\TemplateProcessor Fluent interface + */ + public function replaceXmlBlock($macro, $block, $blockType = 'w:p') + { + $where = $this->findContainingXmlBlockForMacro($macro, $blockType); + if (is_array($where)) { + $this->tempDocumentMainPart = $this->getSlice(0, $where['start']) . $block . $this->getSlice($where['end']); + } + + return $this; + } + + /** + * Find start and end of XML block containing the given macro + * e.g. <w:p>...${macro}...</w:p> + * + * Note that only the first instance of the macro will be found + * + * @param string $macro Name of macro + * @param string $blockType XML tag for block + * @return bool|int[] FALSE if not found, otherwise array with start and end + */ + protected function findContainingXmlBlockForMacro($macro, $blockType = 'w:p') + { + $macroPos = $this->findMacro($macro); + if (0 > $macroPos) { + return false; + } + $start = $this->findXmlBlockStart($macroPos, $blockType); + if (0 > $start) { + return false; + } + $end = $this->findXmlBlockEnd($start, $blockType); + //if not found or if resulting string does not contain the macro we are searching for + if (0 > $end || strstr($this->getSlice($start, $end), $macro) === false) { + return false; + } + + return array('start' => $start, 'end' => $end); + } + + /** + * Find the position of (the start of) a macro + * + * Returns -1 if not found, otherwise position of opening $ + * + * Note that only the first instance of the macro will be found + * + * @param string $search Macro name + * @param int $offset Offset from which to start searching + * @return int -1 if macro not found + */ + protected function findMacro($search, $offset = 0) + { + $search = static::ensureMacroCompleted($search); + $pos = strpos($this->tempDocumentMainPart, $search, $offset); + + return ($pos === false) ? -1 : $pos; + } + + /** + * Find the start position of the nearest XML block start before $offset + * + * @param int $offset Search position + * @param string $blockType XML Block tag + * @return int -1 if block start not found + */ + protected function findXmlBlockStart($offset, $blockType) + { + $reverseOffset = (strlen($this->tempDocumentMainPart) - $offset) * -1; + // first try XML tag with attributes + $blockStart = strrpos($this->tempDocumentMainPart, '<' . $blockType . ' ', $reverseOffset); + // if not found, or if found but contains the XML tag without attribute + if (false === $blockStart || strrpos($this->getSlice($blockStart, $offset), '<' . $blockType . '>')) { + // also try XML tag without attributes + $blockStart = strrpos($this->tempDocumentMainPart, '<' . $blockType . '>', $reverseOffset); + } + + return ($blockStart === false) ? -1 : $blockStart; + } + + /** + * Find the nearest block end position after $offset + * + * @param int $offset Search position + * @param string $blockType XML Block tag + * @return int -1 if block end not found + */ + protected function findXmlBlockEnd($offset, $blockType) + { + $blockEndStart = strpos($this->tempDocumentMainPart, '</' . $blockType . '>', $offset); + // return position of end of tag if found, otherwise -1 + + return ($blockEndStart === false) ? -1 : $blockEndStart + 3 + strlen($blockType); + } + + /** + * Splits a w:r/w:t into a list of w:r where each ${macro} is in a separate w:r + * + * @param string $text + * @return string + */ + protected function splitTextIntoTexts($text) + { + if (!$this->textNeedsSplitting($text)) { + return $text; + } + $matches = array(); + if (preg_match('/(<w:rPr.*<\/w:rPr>)/i', $text, $matches)) { + $extractedStyle = $matches[0]; + } else { + $extractedStyle = ''; + } + + $unformattedText = preg_replace('/>\s+</', '><', $text); + $result = str_replace(array('${', '}'), array('</w:t></w:r><w:r>' . $extractedStyle . '<w:t xml:space="preserve">${', '}</w:t></w:r><w:r>' . $extractedStyle . '<w:t xml:space="preserve">'), $unformattedText); + + return str_replace(array('<w:r>' . $extractedStyle . '<w:t xml:space="preserve"></w:t></w:r>', '<w:r><w:t xml:space="preserve"></w:t></w:r>', '<w:t>'), array('', '', '<w:t xml:space="preserve">'), $result); + } + + /** + * Returns true if string contains a macro that is not in it's own w:r + * + * @param string $text + * @return bool + */ + protected function textNeedsSplitting($text) + { + return preg_match('/[^>]\${|}[^<]/i', $text) == 1; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php index 7e0d511a55..2c1ad29460 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php @@ -220,7 +220,7 @@ abstract class AbstractWriter implements WriterInterface // Temporary file $this->originalFilename = $filename; - if (strtolower($filename) == 'php://output' || strtolower($filename) == 'php://stdout') { + if (strpos(strtolower($filename), 'php://') === 0) { $filename = tempnam(Settings::getTempDir(), 'PhpWord'); if (false === $filename) { $filename = $this->originalFilename; // @codeCoverageIgnore 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 dc5ccfaadc..30d1ccaa4c 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 @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Writer\HTML\Element; +use Laminas\Escaper\Escaper; use PhpOffice\PhpWord\Element\AbstractElement as Element; use PhpOffice\PhpWord\Writer\AbstractWriter; -use Zend\Escaper\Escaper; /** * Abstract HTML element writer @@ -50,7 +50,7 @@ abstract class AbstractElement protected $withoutP = false; /** - * @var \Zend\Escaper\Escaper|\PhpOffice\PhpWord\Escaper\AbstractEscaper + * @var \Laminas\Escaper\Escaper|\PhpOffice\PhpWord\Escaper\AbstractEscaper */ protected $escaper; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItemRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItemRun.php new file mode 100644 index 0000000000..a4d7e46073 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItemRun.php @@ -0,0 +1,43 @@ +<?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-2018 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Writer\HTML\Element; + +/** + * ListItem element HTML writer + * + * @since 0.10.0 + */ +class ListItemRun extends TextRun +{ + /** + * Write list item + * + * @return string + */ + public function write() + { + if (!$this->element instanceof \PhpOffice\PhpWord\Element\ListItemRun) { + return ''; + } + + $writer = new Container($this->parentWriter, $this->element); + $content = $writer->write() . PHP_EOL; + + return $content; + } +} 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 844066f49e..059574a272 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 @@ -39,7 +39,8 @@ class Table extends AbstractElement $rows = $this->element->getRows(); $rowCount = count($rows); if ($rowCount > 0) { - $content .= '<table>' . PHP_EOL; + $content .= '<table' . self::getTableStyle($this->element->getStyle()) . '>' . PHP_EOL; + for ($i = 0; $i < $rowCount; $i++) { /** @var $row \PhpOffice\PhpWord\Element\Row Type hint */ $rowStyle = $rows[$i]->getStyle(); @@ -50,6 +51,15 @@ class Table extends AbstractElement $rowCellCount = count($rowCells); for ($j = 0; $j < $rowCellCount; $j++) { $cellStyle = $rowCells[$j]->getStyle(); + $cellBgColor = $cellStyle->getBgColor(); + $cellBgColor === 'auto' && $cellBgColor = null; // auto cannot be parsed to hexadecimal number + $cellFgColor = null; + if ($cellBgColor) { + $red = hexdec(substr($cellBgColor, 0, 2)); + $green = hexdec(substr($cellBgColor, 2, 2)); + $blue = hexdec(substr($cellBgColor, 4, 2)); + $cellFgColor = (($red * 0.299 + $green * 0.587 + $blue * 0.114) > 186) ? null : 'ffffff'; + } $cellColSpan = $cellStyle->getGridSpan(); $cellRowSpan = 1; $cellVMerge = $cellStyle->getVMerge(); @@ -73,7 +83,9 @@ class Table extends AbstractElement $cellTag = $tblHeader ? 'th' : 'td'; $cellColSpanAttr = (is_numeric($cellColSpan) && ($cellColSpan > 1) ? " colspan=\"{$cellColSpan}\"" : ''); $cellRowSpanAttr = ($cellRowSpan > 1 ? " rowspan=\"{$cellRowSpan}\"" : ''); - $content .= "<{$cellTag}{$cellColSpanAttr}{$cellRowSpanAttr}>" . PHP_EOL; + $cellBgColorAttr = (is_null($cellBgColor) ? '' : " bgcolor=\"#{$cellBgColor}\""); + $cellFgColorAttr = (is_null($cellFgColor) ? '' : " color=\"#{$cellFgColor}\""); + $content .= "<{$cellTag}{$cellColSpanAttr}{$cellRowSpanAttr}{$cellBgColorAttr}{$cellFgColorAttr}>" . PHP_EOL; $writer = new Container($this->parentWriter, $rowCells[$j]); $content .= $writer->write(); if ($cellRowSpan > 1) { @@ -102,4 +114,29 @@ class Table extends AbstractElement return $content; } + + /** + * Translates Table style in CSS equivalent + * + * @param string|\PhpOffice\PhpWord\Style\Table|null $tableStyle + * @return string + */ + private function getTableStyle($tableStyle = null) + { + if ($tableStyle == null) { + return ''; + } + if (is_string($tableStyle)) { + $style = ' class="' . $tableStyle; + } else { + $style = ' style="'; + if ($tableStyle->getLayout() == \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED) { + $style .= 'table-layout: fixed;'; + } elseif ($tableStyle->getLayout() == \PhpOffice\PhpWord\Style\Table::LAYOUT_AUTO) { + $style .= 'table-layout: auto;'; + } + } + + return $style . '"'; + } } 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 7307ce0c17..04ed61f57d 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 @@ -45,7 +45,7 @@ class Title extends AbstractElement $text = $this->escaper->escapeHtml($text); } } elseif ($text instanceof \PhpOffice\PhpWord\Element\AbstractContainer) { - $writer = new Container($this->parentWriter, $this->element); + $writer = new Container($this->parentWriter, $text); $text = $writer->write(); } 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 2d86f399b0..97c763759a 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 @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Writer\HTML\Part; +use Laminas\Escaper\Escaper; use PhpOffice\PhpWord\Exception\Exception; use PhpOffice\PhpWord\Writer\AbstractWriter; -use Zend\Escaper\Escaper; /** * @since 0.11.0 @@ -32,7 +32,7 @@ abstract class AbstractPart private $parentWriter; /** - * @var \Zend\Escaper\Escaper + * @var \Laminas\Escaper\Escaper */ protected $escaper; 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 1aeaa347f9..75c98b9bdc 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 @@ -60,6 +60,7 @@ class Font extends AbstractStyle $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'); + $css['display'] = $this->getValueIf($style->isHidden(), 'none'); $spacing = $style->getSpacing(); $css['letter-spacing'] = $this->getValueIf(!is_null($spacing), ($spacing / 20) . 'pt'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Field.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Field.php new file mode 100644 index 0000000000..f7a74c1d66 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Field.php @@ -0,0 +1,81 @@ +<?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-2018 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ +// Not fully implemented +// - supports only PAGE and NUMPAGES +// - supports only default formats and options +// - supports style only if specified by name +// - spaces before and after field may be dropped + +namespace PhpOffice\PhpWord\Writer\ODText\Element; + +/** + * Field element writer + * + * @since 0.11.0 + */ +class Field extends Text +{ + /** + * Write field element. + */ + public function write() + { + $element = $this->getElement(); + if (!$element instanceof \PhpOffice\PhpWord\Element\Field) { + return; + } + + $type = strtolower($element->getType()); + switch ($type) { + case 'date': + case 'page': + case 'numpages': + $this->writeDefault($element, $type); + break; + } + } + + private function writeDefault(\PhpOffice\PhpWord\Element\Field $element, $type) + { + $xmlWriter = $this->getXmlWriter(); + + $xmlWriter->startElement('text:span'); + if (method_exists($element, 'getFontStyle')) { + $fstyle = $element->getFontStyle(); + if (is_string($fstyle)) { + $xmlWriter->writeAttribute('text:style-name', $fstyle); + } + } + switch ($type) { + case 'date': + $xmlWriter->startElement('text:date'); + $xmlWriter->writeAttribute('text:fixed', 'false'); + $xmlWriter->endElement(); + break; + case 'page': + $xmlWriter->startElement('text:page-number'); + $xmlWriter->writeAttribute('text:fixed', 'false'); + $xmlWriter->endElement(); + break; + case 'numpages': + $xmlWriter->startElement('text:page-count'); + $xmlWriter->endElement(); + break; + } + $xmlWriter->endElement(); // text:span + } +} 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 add45e1044..57aa546a4e 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 @@ -44,7 +44,7 @@ class Image extends AbstractElement $height = Converter::pixelToCm($style->getHeight()); $xmlWriter->startElement('text:p'); - $xmlWriter->writeAttribute('text:style-name', 'Standard'); + $xmlWriter->writeAttribute('text:style-name', 'IM' . $mediaIndex); $xmlWriter->startElement('draw:frame'); $xmlWriter->writeAttribute('draw:style-name', 'fr' . $mediaIndex); 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 d6fec50777..23c9804b2d 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 @@ -41,7 +41,7 @@ class Link extends AbstractElement $xmlWriter->startElement('text:a'); $xmlWriter->writeAttribute('xlink:type', 'simple'); - $xmlWriter->writeAttribute('xlink:href', $element->getSource()); + $xmlWriter->writeAttribute('xlink:href', ($element->isInternal() ? '#' : '') . $element->getSource()); $this->writeText($element->getText()); $xmlWriter->endElement(); // text:a 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 index ecf4760740..8e4f46950c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/PageBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/PageBreak.php @@ -30,7 +30,7 @@ class PageBreak extends AbstractElement $xmlWriter = $this->getXmlWriter(); $xmlWriter->startElement('text:p'); - $xmlWriter->writeAttribute('text:style-name', 'P1'); + $xmlWriter->writeAttribute('text:style-name', 'PB'); $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 088330ae5f..adcf8ab4e3 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 @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Writer\ODText\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Row as RowElement; use PhpOffice\PhpWord\Element\Table as TableElement; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Table element writer @@ -60,7 +60,7 @@ class Table extends AbstractElement /** * Write column. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Table $element */ private function writeColumns(XMLWriter $xmlWriter, TableElement $element) @@ -77,7 +77,7 @@ class Table extends AbstractElement /** * Write row. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Row $row */ private function writeRow(XMLWriter $xmlWriter, RowElement $row) 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 7dcd28a013..464d277739 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 @@ -42,12 +42,12 @@ class Text extends AbstractElement // @todo Commented for TextRun. Should really checkout this value // $fStyleIsObject = ($fontStyle instanceof Font) ? true : false; - $fStyleIsObject = false; + //$fStyleIsObject = false; - 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'); - } + //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'); + //} if (!$this->withoutP) { $xmlWriter->startElement('text:p'); // text:p @@ -59,18 +59,26 @@ class Text extends AbstractElement } else { if (empty($fontStyle)) { if (empty($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', 'P1'); + if (!$this->withoutP) { + $xmlWriter->writeAttribute('text:style-name', 'Normal'); + } } elseif (is_string($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); + if (!$this->withoutP) { + $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); + } } $this->writeChangeInsertion(true, $element->getTrackChange()); - $this->writeText($element->getText()); + $this->replaceTabs($element->getText(), $xmlWriter); $this->writeChangeInsertion(false, $element->getTrackChange()); } else { if (empty($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', 'Standard'); + if (!$this->withoutP) { + $xmlWriter->writeAttribute('text:style-name', 'Normal'); + } } elseif (is_string($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); + if (!$this->withoutP) { + $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); + } } // text:span $xmlWriter->startElement('text:span'); @@ -78,7 +86,7 @@ class Text extends AbstractElement $xmlWriter->writeAttribute('text:style-name', $fontStyle); } $this->writeChangeInsertion(true, $element->getTrackChange()); - $this->writeText($element->getText()); + $this->replaceTabs($element->getText(), $xmlWriter); $this->writeChangeInsertion(false, $element->getTrackChange()); $xmlWriter->endElement(); } @@ -88,6 +96,34 @@ class Text extends AbstractElement } } + private function replacetabs($text, $xmlWriter) + { + if (preg_match('/^ +/', $text, $matches)) { + $num = strlen($matches[0]); + $xmlWriter->startElement('text:s'); + $xmlWriter->writeAttributeIf($num > 1, 'text:c', "$num"); + $xmlWriter->endElement(); + $text = preg_replace('/^ +/', '', $text); + } + preg_match_all('/([\\s\\S]*?)(\\t| +| ?$)/', $text, $matches, PREG_SET_ORDER); + foreach ($matches as $match) { + $this->writeText($match[1]); + if ($match[2] === '') { + break; + } elseif ($match[2] === "\t") { + $xmlWriter->writeElement('text:tab'); + } elseif ($match[2] === ' ') { + $xmlWriter->writeElement('text:s'); + break; + } else { + $num = strlen($match[2]); + $xmlWriter->startElement('text:s'); + $xmlWriter->writeAttributeIf($num > 1, 'text:c', "$num"); + $xmlWriter->endElement(); + } + } + } + private function writeChangeInsertion($start = true, TrackChange $trackChange = null) { if ($trackChange == null || $trackChange->getChangeType() != TrackChange::INSERTED) { 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 78e5a8adae..9a00577302 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 @@ -22,7 +22,7 @@ namespace PhpOffice\PhpWord\Writer\ODText\Element; * * @since 0.10.0 */ -class TextRun extends AbstractElement +class TextRun extends Text { /** * Write element @@ -33,6 +33,12 @@ class TextRun extends AbstractElement $element = $this->getElement(); $xmlWriter->startElement('text:p'); + /** @scrutinizer ignore-call */ + $pStyle = $element->getParagraphStyle(); + if (!is_string($pStyle)) { + $pStyle = 'Normal'; + } + $xmlWriter->writeAttribute('text:style-name', $pStyle); $containerWriter = new Container($xmlWriter, $element); $containerWriter->write(); 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 8b9440ab8c..98ddbbf445 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 @@ -36,7 +36,22 @@ class Title extends AbstractElement } $xmlWriter->startElement('text:h'); - $xmlWriter->writeAttribute('text:outline-level', $element->getDepth()); + $hdname = 'HD'; + $sect = $element->getParent(); + if ($sect instanceof \PhpOffice\PhpWord\Element\Section) { + if (self::compareToFirstElement($element, $sect->getElements())) { + $hdname = 'HE'; + } + } + $depth = $element->getDepth(); + $xmlWriter->writeAttribute('text:style-name', "$hdname$depth"); + $xmlWriter->writeAttribute('text:outline-level', $depth); + $xmlWriter->startElement('text:span'); + if ($depth > 0) { + $xmlWriter->writeAttribute('text:style-name', 'Heading_' . $depth); + } else { + $xmlWriter->writeAttribute('text:style-name', 'Title'); + } $text = $element->getText(); if (is_string($text)) { $this->writeText($text); @@ -44,6 +59,21 @@ class Title extends AbstractElement $containerWriter = new Container($xmlWriter, $text); $containerWriter->write(); } + $xmlWriter->endElement(); // text:span $xmlWriter->endElement(); // text:h } + + /** + * Test if element is same as first element in array + * + * @param \PhpOffice\PhpWord\Element\AbstractElement $elem + * + * @param \PhpOffice\PhpWord\Element\AbstractElement[] $elemarray + * + * @return bool + */ + private static function compareToFirstElement($elem, $elemarray) + { + return $elem === $elemarray[0]; + } } 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 f2844de6f0..4a7ace78ca 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\ODText\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Settings; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Writer\Word2007\Part\AbstractPart as Word2007AbstractPart; @@ -36,7 +36,7 @@ abstract class AbstractPart extends Word2007AbstractPart /** * Write common root attributes. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ protected function writeCommonRootAttributes(XMLWriter $xmlWriter) { @@ -72,7 +72,7 @@ abstract class AbstractPart extends Word2007AbstractPart /** * Write font faces declaration. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ 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 99ee93536e..b6a1c95e65 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 @@ -17,14 +17,15 @@ namespace PhpOffice\PhpWord\Writer\ODText\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\AbstractContainer; +use PhpOffice\PhpWord\Element\Field; use PhpOffice\PhpWord\Element\Image; use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\Element\Text; use PhpOffice\PhpWord\Element\TextRun; use PhpOffice\PhpWord\Element\TrackChange; use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Style\Paragraph; @@ -46,6 +47,7 @@ class Content extends AbstractPart * @var array */ private $autoStyles = array('Section' => array(), 'Image' => array(), 'Table' => array()); + private $imageParagraphStyles = array(); /** * Write part @@ -128,6 +130,9 @@ class Content extends AbstractPart $xmlWriter->startElement('text:section'); $xmlWriter->writeAttribute('text:name', $name); $xmlWriter->writeAttribute('text:style-name', $name); + $xmlWriter->startElement('text:p'); + $xmlWriter->writeAttribute('text:style-name', 'SB' . $section->getSectionId()); + $xmlWriter->endElement(); $containerWriter = new Container($xmlWriter, $section); $containerWriter->write(); $xmlWriter->endElement(); // text:section @@ -146,7 +151,7 @@ class Content extends AbstractPart * * @since 0.11.0 * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writeAutoStyles(XMLWriter $xmlWriter) { @@ -168,34 +173,65 @@ class Content extends AbstractPart /** * Write automatic styles. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writeTextStyles(XMLWriter $xmlWriter) { $styles = Style::getStyles(); $paragraphStyleCount = 0; - if (count($styles) > 0) { - foreach ($styles as $style) { - if ($style->isAuto() === true) { - $styleClass = str_replace('\\Style\\', '\\Writer\\ODText\\Style\\', get_class($style)); - if (class_exists($styleClass)) { - /** @var \PhpOffice\PhpWord\Writer\ODText\Style\AbstractStyle $styleWriter Type hint */ - $styleWriter = new $styleClass($xmlWriter, $style); - $styleWriter->write(); - } - if ($style instanceof Paragraph) { - $paragraphStyleCount++; - } - } - } - if ($paragraphStyleCount == 0) { + + $style = new Paragraph(); + $style->setStyleName('PB'); + $style->setAuto(); + $styleWriter = new ParagraphStyleWriter($xmlWriter, $style); + $styleWriter->write(); + + $sects = $this->getParentWriter()->getPhpWord()->getSections(); + $countsects = count($sects); + for ($i = 0; $i < $countsects; ++$i) { + $iplus1 = $i + 1; + $style = new Paragraph(); + $style->setStyleName("SB$iplus1"); + $style->setAuto(); + $pnstart = $sects[$i]->getStyle()->getPageNumberingStart(); + $style->setNumLevel($pnstart); + $styleWriter = new ParagraphStyleWriter($xmlWriter, $style); + $styleWriter->write(); + } + + foreach ($styles as $style) { + $sty = $style->getStyleName(); + if (substr($sty, 0, 8) === 'Heading_') { $style = new Paragraph(); - $style->setStyleName('P1'); + $style->setStyleName('HD' . substr($sty, 8)); + $style->setAuto(); + $styleWriter = new ParagraphStyleWriter($xmlWriter, $style); + $styleWriter->write(); + $style = new Paragraph(); + $style->setStyleName('HE' . substr($sty, 8)); $style->setAuto(); $styleWriter = new ParagraphStyleWriter($xmlWriter, $style); $styleWriter->write(); } } + + foreach ($styles as $style) { + if ($style->isAuto() === true) { + $styleClass = str_replace('\\Style\\', '\\Writer\\ODText\\Style\\', get_class($style)); + if (class_exists($styleClass)) { + /** @var \PhpOffice\PhpWord\Writer\ODText\Style\AbstractStyle $styleWriter Type hint */ + $styleWriter = new $styleClass($xmlWriter, $style); + $styleWriter->write(); + } + if ($style instanceof Paragraph) { + $paragraphStyleCount++; + } + } + } + foreach ($this->imageParagraphStyles as $style) { + $styleWriter = new \PhpOffice\PhpWord\Writer\ODText\Style\Paragraph($xmlWriter, $style); + $styleWriter->write(); + } } /** @@ -231,20 +267,29 @@ class Content extends AbstractPart $elements = $container->getElements(); foreach ($elements as $element) { if ($element instanceof TextRun) { + $this->getElementStyleTextRun($element, $paragraphStyleCount); $this->getContainerStyle($element, $paragraphStyleCount, $fontStyleCount); } elseif ($element instanceof Text) { $this->getElementStyle($element, $paragraphStyleCount, $fontStyleCount); + } elseif ($element instanceof Field) { + $this->getElementStyleField($element, $fontStyleCount); } elseif ($element instanceof Image) { $style = $element->getStyle(); $style->setStyleName('fr' . $element->getMediaIndex()); $this->autoStyles['Image'][] = $style; + $sty = new \PhpOffice\PhpWord\Style\Paragraph(); + $sty->setStyleName('IM' . $element->getMediaIndex()); + $sty->setAuto(); + $sty->setAlignment($style->getAlignment()); + $this->imageParagraphStyles[] = $sty; } elseif ($element instanceof Table) { /** @var \PhpOffice\PhpWord\Style\Table $style */ $style = $element->getStyle(); + if (is_string($style)) { + $style = Style::getStyle($style); + } if ($style === null) { $style = new TableStyle(); - } elseif (is_string($style)) { - $style = Style::getStyle($style); } $style->setStyleName($element->getElementId()); $style->setColumnWidths($element->findFirstDefinedCellWidths()); @@ -260,7 +305,7 @@ class Content extends AbstractPart * @param int $paragraphStyleCount * @param int $fontStyleCount */ - private function getElementStyle(&$element, &$paragraphStyleCount, &$fontStyleCount) + private function getElementStyle($element, &$paragraphStyleCount, &$fontStyleCount) { $fontStyle = $element->getFontStyle(); $paragraphStyle = $element->getParagraphStyle(); @@ -268,16 +313,91 @@ class Content extends AbstractPart if ($fontStyle instanceof Font) { // Font - $fontStyleCount++; - $style = $phpWord->addFontStyle("T{$fontStyleCount}", $fontStyle); + $name = $fontStyle->getStyleName(); + if (!$name) { + $fontStyleCount++; + $style = $phpWord->addFontStyle("T{$fontStyleCount}", $fontStyle, null); + $style->setAuto(); + $style->setParagraph(null); + $element->setFontStyle("T{$fontStyleCount}"); + } else { + $element->setFontStyle($name); + } + } + if ($paragraphStyle instanceof Paragraph) { + // Paragraph + $name = $paragraphStyle->getStyleName(); + if (!$name) { + $paragraphStyleCount++; + $style = $phpWord->addParagraphStyle("P{$paragraphStyleCount}", $paragraphStyle); + $style->setAuto(); + $element->setParagraphStyle("P{$paragraphStyleCount}"); + } else { + $element->setParagraphStyle($name); + } + } elseif ($paragraphStyle) { + $paragraphStyleCount++; + $parstylename = "P$paragraphStyleCount" . "_$paragraphStyle"; + $style = $phpWord->addParagraphStyle($parstylename, $paragraphStyle); $style->setAuto(); - $element->setFontStyle("T{$fontStyleCount}"); - } elseif ($paragraphStyle instanceof Paragraph) { + $element->setParagraphStyle($parstylename); + } + } + + /** + * Get font style of individual field element + * + * @param \PhpOffice\PhpWord\Element\Field $element + * @param int $paragraphStyleCount + * @param int $fontStyleCount + */ + private function getElementStyleField($element, &$fontStyleCount) + { + $fontStyle = $element->getFontStyle(); + $phpWord = $this->getParentWriter()->getPhpWord(); + + if ($fontStyle instanceof Font) { + $name = $fontStyle->getStyleName(); + if (!$name) { + $fontStyleCount++; + $style = $phpWord->addFontStyle("T{$fontStyleCount}", $fontStyle, null); + $style->setAuto(); + $style->setParagraph(null); + $element->setFontStyle("T{$fontStyleCount}"); + } else { + $element->setFontStyle($name); + } + } + } + + /** + * Get style of individual element + * + * @param \PhpOffice\PhpWord\Element\TextRun $element + * @param int $paragraphStyleCount + */ + private function getElementStyleTextRun($element, &$paragraphStyleCount) + { + $paragraphStyle = $element->getParagraphStyle(); + $phpWord = $this->getParentWriter()->getPhpWord(); + + if ($paragraphStyle instanceof Paragraph) { // Paragraph + $name = $paragraphStyle->getStyleName(); + if (!$name) { + $paragraphStyleCount++; + $style = $phpWord->addParagraphStyle("P{$paragraphStyleCount}", $paragraphStyle); + $style->setAuto(); + $element->setParagraphStyle("P{$paragraphStyleCount}"); + } else { + $element->setParagraphStyle($name); + } + } elseif ($paragraphStyle) { $paragraphStyleCount++; - $style = $phpWord->addParagraphStyle("P{$paragraphStyleCount}", array()); + $parstylename = "P$paragraphStyleCount" . "_$paragraphStyle"; + $style = $phpWord->addParagraphStyle($parstylename, $paragraphStyle); $style->setAuto(); - $element->setParagraphStyle("P{$paragraphStyleCount}"); + $element->setParagraphStyle($parstylename); } } 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 f38ad01d56..8f3f1fb969 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\ODText\Part; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * ODText meta part writer: meta.xml @@ -86,7 +86,7 @@ class Meta extends AbstractPart /** * Write individual property * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $property * @param string $value * 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 e7635e9854..befd23a2ac 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 @@ -17,8 +17,9 @@ namespace PhpOffice\PhpWord\Writer\ODText\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Settings; +use PhpOffice\PhpWord\Shared\Converter; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style; /** @@ -65,7 +66,7 @@ class Styles extends AbstractPart /** * Write default styles. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writeDefault(XMLWriter $xmlWriter) { @@ -86,6 +87,9 @@ class Styles extends AbstractPart $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'); + if ($this->getParentWriter()->getPhpWord()->getSettings()->hasHideGrammaticalErrors()) { + $latinLang = $asianLang = $complexLang = array('zxx', 'none'); + } // Font $xmlWriter->startElement('style:text-properties'); @@ -114,7 +118,7 @@ class Styles extends AbstractPart /** * Write named styles. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writeNamed(XMLWriter $xmlWriter) { @@ -134,24 +138,74 @@ class Styles extends AbstractPart } /** - * Write page layout styles. + * Convert int in twips to inches/cm then to string and append unit * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param int|float $twips + * @param float $factor + * return string + */ + private static function cvttwiptostr($twips, $factor = 1.0) + { + $ins = (string) ($twips * $factor / Converter::INCH_TO_TWIP) . 'in'; + $cms = (string) ($twips * $factor * Converter::INCH_TO_CM / Converter::INCH_TO_TWIP) . 'cm'; + + return (strlen($ins) < strlen($cms)) ? $ins : $cms; + } + + /** + * call writePageLayoutIndiv to write page layout styles for each page + * + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writePageLayout(XMLWriter $xmlWriter) { + $sections = $this->getParentWriter()->getPhpWord()->getSections(); + $countsects = count($sections); + for ($i = 0; $i < $countsects; ++$i) { + $this->writePageLayoutIndiv($xmlWriter, $sections[$i], $i + 1); + } + } + + /** + * Write page layout styles. + * + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Element\Section $section + * @param int $sectionNbr + */ + private function writePageLayoutIndiv(XMLWriter $xmlWriter, $section, $sectionNbr) + { + $sty = $section->getStyle(); + if (count($section->getHeaders()) > 0) { + $topfactor = 0.5; + } else { + $topfactor = 1.0; + } + if (count($section->getFooters()) > 0) { + $botfactor = 0.5; + } else { + $botfactor = 1.0; + } + $orient = $sty->getOrientation(); + $pwidth = self::cvttwiptostr($sty->getPageSizeW()); + $pheight = self::cvttwiptostr($sty->getPageSizeH()); + $mtop = self::cvttwiptostr($sty->getMarginTop(), $topfactor); + $mbottom = self::cvttwiptostr($sty->getMarginBottom(), $botfactor); + $mleft = self::cvttwiptostr($sty->getMarginRight()); + $mright = self::cvttwiptostr($sty->getMarginLeft()); + $xmlWriter->startElement('style:page-layout'); - $xmlWriter->writeAttribute('style:name', 'Mpm1'); + $xmlWriter->writeAttribute('style:name', "Mpm$sectionNbr"); $xmlWriter->startElement('style:page-layout-properties'); - $xmlWriter->writeAttribute('fo:page-width', '21.001cm'); - $xmlWriter->writeAttribute('fo:page-height', '29.7cm'); + $xmlWriter->writeAttribute('fo:page-width', $pwidth); + $xmlWriter->writeAttribute('fo:page-height', $pheight); $xmlWriter->writeAttribute('style:num-format', '1'); - $xmlWriter->writeAttribute('style:print-orientation', 'portrait'); - $xmlWriter->writeAttribute('fo:margin-top', '2.501cm'); - $xmlWriter->writeAttribute('fo:margin-bottom', '2cm'); - $xmlWriter->writeAttribute('fo:margin-left', '2.501cm'); - $xmlWriter->writeAttribute('fo:margin-right', '2.501cm'); + $xmlWriter->writeAttribute('style:print-orientation', $orient); + $xmlWriter->writeAttribute('fo:margin-top', $mtop); + $xmlWriter->writeAttribute('fo:margin-bottom', $mbottom); + $xmlWriter->writeAttribute('fo:margin-left', $mleft); + $xmlWriter->writeAttribute('fo:margin-right', $mright); $xmlWriter->writeAttribute('style:writing-mode', 'lr-tb'); $xmlWriter->writeAttribute('style:layout-grid-color', '#c0c0c0'); $xmlWriter->writeAttribute('style:layout-grid-lines', '25199'); @@ -176,9 +230,23 @@ class Styles extends AbstractPart $xmlWriter->endElement(); // style:page-layout-properties $xmlWriter->startElement('style:header-style'); + if ($topfactor < 1.0) { + $xmlWriter->startElement('style:header-footer-properties'); + $xmlWriter->writeAttribute('fo:min-height', $mtop); + $xmlWriter->writeAttribute('fo:margin-bottom', $mtop); + $xmlWriter->writeAttribute('style:dynamic-spacing', 'true'); + $xmlWriter->endElement(); // style:header-footer-properties + } $xmlWriter->endElement(); // style:header-style $xmlWriter->startElement('style:footer-style'); + if ($botfactor < 1.0) { + $xmlWriter->startElement('style:header-footer-properties'); + $xmlWriter->writeAttribute('fo:min-height', $mbottom); + $xmlWriter->writeAttribute('fo:margin-top', $mbottom); + $xmlWriter->writeAttribute('style:dynamic-spacing', 'true'); + $xmlWriter->endElement(); // style:header-footer-properties + } $xmlWriter->endElement(); // style:footer-style $xmlWriter->endElement(); // style:page-layout @@ -187,17 +255,50 @@ class Styles extends AbstractPart /** * Write master style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writeMaster(XMLWriter $xmlWriter) { $xmlWriter->startElement('office:master-styles'); - $xmlWriter->startElement('style:master-page'); - $xmlWriter->writeAttribute('style:name', 'Standard'); - $xmlWriter->writeAttribute('style:page-layout-name', 'Mpm1'); - $xmlWriter->endElement(); // style:master-page - + $sections = $this->getParentWriter()->getPhpWord()->getSections(); + $countsects = count($sections); + for ($i = 0; $i < $countsects; ++$i) { + $iplus1 = $i + 1; + $xmlWriter->startElement('style:master-page'); + $xmlWriter->writeAttribute('style:name', "Standard$iplus1"); + $xmlWriter->writeAttribute('style:page-layout-name', "Mpm$iplus1"); + // Multiple headers and footers probably not supported, + // and, even if they are, I'm not sure how, + // so quit after generating one. + foreach ($sections[$i]->getHeaders() as $hdr) { + $xmlWriter->startElement('style:header'); + foreach ($hdr->getElements() as $elem) { + $cl1 = get_class($elem); + $cl2 = str_replace('\\Element\\', '\\Writer\\ODText\\Element\\', $cl1); + if (class_exists($cl2)) { + $wtr = new $cl2($xmlWriter, $elem); + $wtr->write(); + } + } + $xmlWriter->endElement(); // style:header + break; + } + foreach ($sections[$i]->getFooters() as $hdr) { + $xmlWriter->startElement('style:footer'); + foreach ($hdr->getElements() as $elem) { + $cl1 = get_class($elem); + $cl2 = str_replace('\\Element\\', '\\Writer\\ODText\\Element\\', $cl1); + if (class_exists($cl2)) { + $wtr = new $cl2($xmlWriter, $elem); + $wtr->write(); + } + } + $xmlWriter->endElement(); // style:footer + break; + } + $xmlWriter->endElement(); // style:master-page + } $xmlWriter->endElement(); // office:master-styles } } 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 7c7d20ddd2..ae9c417e9d 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 @@ -35,6 +35,14 @@ class Font extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); + $stylep = (method_exists($style, 'getParagraph')) ? $style->getParagraph() : null; + if ($stylep instanceof \PhpOffice\PhpWord\Style\Paragraph) { + $temp1 = clone $stylep; + $temp1->setStyleName($style->getStyleName()); + $temp2 = new \PhpOffice\PhpWord\Writer\ODText\Style\Paragraph($xmlWriter, $temp1); + $temp2->write(); + } + $xmlWriter->startElement('style:style'); $xmlWriter->writeAttribute('style:name', $style->getStyleName()); $xmlWriter->writeAttribute('style:family', 'text'); @@ -53,7 +61,7 @@ class Font extends AbstractStyle // Color $color = $style->getColor(); - $xmlWriter->writeAttributeIf($color != '', 'fo:color', '#' . $color); + $xmlWriter->writeAttributeIf($color != '', 'fo:color', '#' . \PhpOffice\PhpWord\Shared\Converter::stringToRgb($color)); // Bold & italic $xmlWriter->writeAttributeIf($style->isBold(), 'fo:font-weight', 'bold'); @@ -75,10 +83,22 @@ class Font extends AbstractStyle $xmlWriter->writeAttributeIf($style->isSmallCaps(), 'fo:font-variant', 'small-caps'); $xmlWriter->writeAttributeIf($style->isAllCaps(), 'fo:text-transform', 'uppercase'); + //Hidden text + $xmlWriter->writeAttributeIf($style->isHidden(), 'text:display', 'none'); + // Superscript/subscript $xmlWriter->writeAttributeIf($style->isSuperScript(), 'style:text-position', 'super'); $xmlWriter->writeAttributeIf($style->isSubScript(), 'style:text-position', 'sub'); + if ($style->isNoProof()) { + $xmlWriter->writeAttribute('fo:language', 'zxx'); + $xmlWriter->writeAttribute('style:language-asian', 'zxx'); + $xmlWriter->writeAttribute('style:language-complex', 'zxx'); + $xmlWriter->writeAttribute('fo:country', 'none'); + $xmlWriter->writeAttribute('style:country-asian', 'none'); + $xmlWriter->writeAttribute('style:country-complex', 'none'); + } + // @todo Foreground-Color // @todo Background color 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 223d02f047..9d38de86c5 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 @@ -17,6 +17,8 @@ namespace PhpOffice\PhpWord\Writer\ODText\Style; +use PhpOffice\PhpWord\Shared\Converter; + /** * Font style writer * @@ -35,27 +37,119 @@ class Paragraph extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $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); + $marginTop = $style->getSpaceBefore(); + $marginBottom = $style->getSpaceAfter(); $xmlWriter->startElement('style:style'); + + $styleName = $style->getStyleName(); + $styleAuto = false; + $mpm = ''; + $psm = ''; + $pagestart = -1; + $breakafter = $breakbefore = $breakauto = false; + if ($style->isAuto()) { + if (substr($styleName, 0, 2) === 'PB') { + $styleAuto = true; + $breakafter = true; + } elseif (substr($styleName, 0, 2) === 'SB') { + $styleAuto = true; + $mpm = 'Standard' . substr($styleName, 2); + $psn = $style->getNumLevel(); + $pagestart = $psn; + } elseif (substr($styleName, 0, 2) === 'HD') { + $styleAuto = true; + $psm = 'Heading_' . substr($styleName, 2); + $stylep = \PhpOffice\PhpWord\Style::getStyle($psm); + if ($stylep instanceof \PhpOffice\PhpWord\Style\Font) { + if (method_exists($stylep, 'getParagraph')) { + $stylep = $stylep->getParagraph(); + } + } + if ($stylep instanceof \PhpOffice\PhpWord\Style\Paragraph) { + if ($stylep->hasPageBreakBefore()) { + $breakbefore = true; + } + } + } elseif (substr($styleName, 0, 2) === 'HE') { + $styleAuto = true; + $psm = 'Heading_' . substr($styleName, 2); + $breakauto = true; + } else { + $styleAuto = true; + $psm = 'Normal'; + if (preg_match('/^P\\d+_(\\w+)$/', $styleName, $matches)) { + $psm = $matches[1]; + } + } + } + $xmlWriter->writeAttribute('style:name', $style->getStyleName()); $xmlWriter->writeAttribute('style:family', 'paragraph'); - if ($style->isAuto()) { - $xmlWriter->writeAttribute('style:parent-style-name', 'Standard'); - $xmlWriter->writeAttribute('style:master-page-name', 'Standard'); + if ($styleAuto) { + $xmlWriter->writeAttributeIf($psm !== '', 'style:parent-style-name', $psm); + $xmlWriter->writeAttributeIf($mpm !== '', 'style:master-page-name', $mpm); } $xmlWriter->startElement('style:paragraph-properties'); - if ($style->isAuto()) { - $xmlWriter->writeAttribute('style:page-number', 'auto'); - } else { - $xmlWriter->writeAttribute('fo:margin-top', $marginTop . 'cm'); - $xmlWriter->writeAttribute('fo:margin-bottom', $marginBottom . 'cm'); - $xmlWriter->writeAttribute('fo:text-align', $style->getAlignment()); + if ($styleAuto) { + if ($breakafter) { + $xmlWriter->writeAttribute('fo:break-after', 'page'); + $xmlWriter->writeAttribute('fo:margin-top', '0cm'); + $xmlWriter->writeAttribute('fo:margin-bottom', '0cm'); + } elseif ($breakbefore) { + $xmlWriter->writeAttribute('fo:break-before', 'page'); + } elseif ($breakauto) { + $xmlWriter->writeAttribute('fo:break-before', 'auto'); + } + if ($pagestart > 0) { + $xmlWriter->writeAttribute('style:page-number', $pagestart); + } + } + if (!$breakafter && !$breakbefore && !$breakauto) { + $twipToPoint = Converter::INCH_TO_TWIP / Converter::INCH_TO_POINT; // 20 + $xmlWriter->writeAttributeIf($marginTop !== null, 'fo:margin-top', ($marginTop / $twipToPoint) . 'pt'); + $xmlWriter->writeAttributeIf($marginBottom !== null, 'fo:margin-bottom', ($marginBottom / $twipToPoint) . 'pt'); } + $temp = $style->getAlignment(); + $xmlWriter->writeAttributeIf($temp !== '', 'fo:text-align', $temp); + $temp = $style->getLineHeight(); + $xmlWriter->writeAttributeIf($temp !== null, 'fo:line-height', ((string) ($temp * 100) . '%')); + $xmlWriter->writeAttributeIf($style->hasPageBreakBefore() === true, 'fo:break-before', 'page'); + + $tabs = $style->getTabs(); + if ($tabs !== null && count($tabs) > 0) { + $xmlWriter->startElement('style:tab-stops'); + foreach ($tabs as $tab) { + $xmlWriter->startElement('style:tab-stop'); + $xmlWriter->writeAttribute('style:type', $tab->getType()); + $xmlWriter->writeAttribute('style:position', (string) ($tab->getPosition() / Converter::INCH_TO_TWIP) . 'in'); + $xmlWriter->endElement(); + } + $xmlWriter->endElement(); + } + + //Right to left + $xmlWriter->writeAttributeIf($style->isBidi(), 'style:writing-mode', 'rl-tb'); + + //Indentation + $indent = $style->getIndentation(); + //if ($indent instanceof \PhpOffice\PhpWord\Style\Indentation) { + if (!empty($indent)) { + $marg = $indent->getLeft(); + $xmlWriter->writeAttributeIf($marg !== null, 'fo:margin-left', (string) ($marg / Converter::INCH_TO_TWIP) . 'in'); + $marg = $indent->getRight(); + $xmlWriter->writeAttributeIf($marg !== null, 'fo:margin-right', (string) ($marg / Converter::INCH_TO_TWIP) . 'in'); + } + $xmlWriter->endElement(); //style:paragraph-properties + if ($styleAuto && substr($styleName, 0, 2) === 'SB') { + $xmlWriter->startElement('style:text-properties'); + $xmlWriter->writeAttribute('text:display', 'none'); + $xmlWriter->endElement(); + } + $xmlWriter->endElement(); //style:style } } 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 5ddee25a3c..646f2e44ca 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 @@ -43,11 +43,12 @@ class Table extends AbstractStyle //$xmlWriter->writeAttribute('style:width', 'table'); $xmlWriter->writeAttribute('style:rel-width', 100); $xmlWriter->writeAttribute('table:align', 'center'); + $xmlWriter->writeAttributeIf($style->isBidiVisual(), 'style:writing-mode', 'rl-tb'); $xmlWriter->endElement(); // style:table-properties $xmlWriter->endElement(); // style:style $cellWidths = $style->getColumnWidths(); - $countCellWidths = count($cellWidths); + $countCellWidths = $cellWidths === null ? 0 : count($cellWidths); for ($i = 0; $i < $countCellWidths; $i++) { $width = $cellWidths[$i]; 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 5fa8f75dbb..53eea81588 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php @@ -35,6 +35,16 @@ class DomPDF extends AbstractRenderer implements WriterInterface */ protected $includeFile = null; + /** + * Gets the implementation of external PDF library that should be used. + * + * @return Dompdf implementation + */ + protected function createExternalWriterInstance() + { + return new DompdfLib(); + } + /** * Save PhpWord to file. * @@ -49,7 +59,7 @@ class DomPDF extends AbstractRenderer implements WriterInterface $orientation = 'portrait'; // Create PDF - $pdf = new DompdfLib(); + $pdf = $this->createExternalWriterInstance(); $pdf->setPaper(strtolower($paperSize), $orientation); $pdf->loadHtml(str_replace(PHP_EOL, '', $this->getContent())); $pdf->render(); 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 e63f5dfd68..464f156ce5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php @@ -44,6 +44,18 @@ class MPDF extends AbstractRenderer implements WriterInterface parent::__construct($phpWord); } + /** + * Gets the implementation of external PDF library that should be used. + * + * @return Mpdf implementation + */ + protected function createExternalWriterInstance() + { + $mPdfClass = $this->getMPdfClassName(); + + return new $mPdfClass(); + } + /** * Save PhpWord to file. * @@ -58,8 +70,7 @@ class MPDF extends AbstractRenderer implements WriterInterface $orientation = strtoupper('portrait'); // Create PDF - $mPdfClass = $this->getMPdfClassName(); - $pdf = new $mPdfClass(); + $pdf = $this->createExternalWriterInstance(); $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 badab0460e..3abbbf069d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/TCPDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/TCPDF.php @@ -36,6 +36,20 @@ class TCPDF extends AbstractRenderer implements WriterInterface */ protected $includeFile = 'tcpdf.php'; + /** + * Gets the implementation of external PDF library that should be used. + * + * @param string $orientation Page orientation + * @param string $unit Unit measure + * @param string $paperSize Paper size + * + * @return \TCPDF implementation + */ + protected function createExternalWriterInstance($orientation, $unit, $paperSize) + { + return new \TCPDF($orientation, $unit, $paperSize); + } + /** * Save PhpWord to file. * @@ -50,7 +64,7 @@ class TCPDF extends AbstractRenderer implements WriterInterface $orientation = 'P'; // Create PDF - $pdf = new \TCPDF($orientation, 'pt', $paperSize); + $pdf = $this->createExternalWriterInstance($orientation, 'pt', $paperSize); $pdf->setFontSubsetting(false); $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); 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 cf1aa391c5..fa1058bdb0 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 @@ -17,10 +17,10 @@ namespace PhpOffice\PhpWord\Writer\RTF\Element; -use PhpOffice\Common\Text as CommonText; use PhpOffice\PhpWord\Element\AbstractElement as Element; use PhpOffice\PhpWord\Escaper\Rtf; use PhpOffice\PhpWord\Settings; +use PhpOffice\PhpWord\Shared\Text as SharedText; use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Style\Font as FontStyle; use PhpOffice\PhpWord\Style\Paragraph as ParagraphStyle; @@ -41,14 +41,14 @@ abstract class AbstractElement extends HTMLAbstractElement * * @var \PhpOffice\PhpWord\Style\Font */ - private $fontStyle; + protected $fontStyle; /** * Paragraph style * * @var \PhpOffice\PhpWord\Style\Paragraph */ - private $paragraphStyle; + protected $paragraphStyle; public function __construct(AbstractWriter $parentWriter, Element $element, $withoutP = false) { @@ -126,7 +126,7 @@ abstract class AbstractElement extends HTMLAbstractElement return $this->escaper->escape($text); } - return CommonText::toUnicode($text); // todo: replace with `return $text;` later. + return SharedText::toUnicode($text); // todo: replace with `return $text;` later. } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Field.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Field.php new file mode 100644 index 0000000000..e958e9deb1 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Field.php @@ -0,0 +1,80 @@ +<?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 2019 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Writer\RTF\Element; + +/** + * Field element writer + * + * Note: for now, only date, page and numpages fields are implemented for RTF. + */ +class Field extends Text +{ + /** + * Write field element. + */ + public function write() + { + $element = $this->element; + if (!$element instanceof \PhpOffice\PhpWord\Element\Field) { + return; + } + + $this->getStyles(); + + $content = ''; + $content .= $this->writeOpening(); + $content .= '{'; + $content .= $this->writeFontStyle(); + + $methodName = 'write' . ucfirst(strtolower($element->getType())); + if (!method_exists($this, $methodName)) { + // Unsupported field + $content .= ''; + } else { + $content .= '\\field{\\*\\fldinst '; + $content .= $this->$methodName($element); + $content .= '}{\\fldrslt}'; + } + $content .= '}'; + $content .= $this->writeClosing(); + + return $content; + } + + protected function writePage() + { + return 'PAGE'; + } + + protected function writeNumpages() + { + return 'NUMPAGES'; + } + + protected function writeDate(\PhpOffice\PhpWord\Element\Field $element) + { + $content = ''; + $content .= 'DATE'; + $properties = $element->getProperties(); + if (isset($properties['dateformat'])) { + $content .= ' \\\\@ "' . $properties['dateformat'] . '"'; + } + + return $content; + } +} 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 8154aa7cf5..63c3e6a31f 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 @@ -58,6 +58,7 @@ class Table extends AbstractElement $content .= $this->writeRow($rows[$i]); $content .= '\row' . PHP_EOL; } + $content .= '\pard' . PHP_EOL; } return $content; 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 bfd161f08a..e2865d827e 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 @@ -32,6 +32,7 @@ class TextRun extends AbstractElement public function write() { $writer = new Container($this->parentWriter, $this->element); + $this->getStyles(); $content = ''; $content .= $this->writeOpening(); 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 a9940ca99a..77ebff1769 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 @@ -24,4 +24,69 @@ namespace PhpOffice\PhpWord\Writer\RTF\Element; */ class Title extends Text { + protected function getStyles() + { + /** @var \PhpOffice\PhpWord\Element\Title $element Type hint */ + $element = $this->element; + $style = $element->getStyle(); + $style = str_replace('Heading', 'Heading_', $style); + $style = \PhpOffice\PhpWord\Style::getStyle($style); + if ($style instanceof \PhpOffice\PhpWord\Style\Font) { + $this->fontStyle = $style; + $pstyle = $style->getParagraph(); + if ($pstyle instanceof \PhpOffice\PhpWord\Style\Paragraph && $pstyle->hasPageBreakBefore()) { + $sect = $element->getParent(); + if ($sect instanceof \PhpOffice\PhpWord\Element\Section) { + $elems = $sect->getElements(); + if ($elems[0] === $element) { + $pstyle = clone $pstyle; + $pstyle->setPageBreakBefore(false); + } + } + } + $this->paragraphStyle = $pstyle; + } + } + + /** + * Write element + * + * @return string + */ + public function write() + { + /** @var \PhpOffice\PhpWord\Element\Title $element Type hint */ + $element = $this->element; + $elementClass = str_replace('\\Writer\\RTF', '', get_class($this)); + if (!$element instanceof $elementClass || !is_string($element->getText())) { + return ''; + } + + $this->getStyles(); + + $content = ''; + + $content .= $this->writeOpening(); + $endout = ''; + $style = $element->getStyle(); + if (is_string($style)) { + $style = str_replace('Heading', '', $style); + if (is_numeric($style)) { + $style = (int) $style - 1; + if ($style >= 0 && $style <= 8) { + $content .= '{\\outlinelevel' . $style; + $endout = '}'; + } + } + } + + $content .= '{'; + $content .= $this->writeFontStyle(); + $content .= $this->writeText($element->getText()); + $content .= '}'; + $content .= $this->writeClosing(); + $content .= $endout; + + return $content; + } } 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 d4bfadb4c5..14d900944e 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 @@ -17,6 +17,7 @@ namespace PhpOffice\PhpWord\Writer\RTF\Part; +use PhpOffice\PhpWord\Element\Footer; use PhpOffice\PhpWord\Settings; use PhpOffice\PhpWord\Writer\RTF\Element\Container; use PhpOffice\PhpWord\Writer\RTF\Style\Section as SectionStyleWriter; @@ -105,11 +106,36 @@ class Document extends AbstractPart $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 + if ($docSettings->hasEvenAndOddHeaders()) { + $content .= '\\facingp'; + } $content .= PHP_EOL; return $content; } + /** + * Write titlepg directive if any "f" headers or footers + * + * @param \PhpOffice\PhpWord\Element\Section $section + * @return string + */ + private static function writeTitlepg($section) + { + foreach ($section->getHeaders() as $header) { + if ($header->getType() === Footer::FIRST) { + return '\\titlepg' . PHP_EOL; + } + } + foreach ($section->getFooters() as $header) { + if ($header->getType() === Footer::FIRST) { + return '\\titlepg' . PHP_EOL; + } + } + + return ''; + } + /** * Write sections * @@ -120,10 +146,53 @@ class Document extends AbstractPart $content = ''; $sections = $this->getParentWriter()->getPhpWord()->getSections(); + $evenOdd = $this->getParentWriter()->getPhpWord()->getSettings()->hasEvenAndOddHeaders(); foreach ($sections as $section) { $styleWriter = new SectionStyleWriter($section->getStyle()); $styleWriter->setParentWriter($this->getParentWriter()); $content .= $styleWriter->write(); + $content .= self::writeTitlepg($section); + + foreach ($section->getHeaders() as $header) { + $type = $header->getType(); + if ($evenOdd || $type !== FOOTER::EVEN) { + $content .= '{\\header'; + if ($type === Footer::FIRST) { + $content .= 'f'; + } elseif ($evenOdd) { + $content .= ($type === FOOTER::EVEN) ? 'l' : 'r'; + } + foreach ($header->getElements() as $element) { + $cl = get_class($element); + $cl2 = str_replace('Element', 'Writer\\RTF\\Element', $cl); + if (class_exists($cl2)) { + $elementWriter = new $cl2($this->getParentWriter(), $element); + $content .= $elementWriter->write(); + } + } + $content .= '}' . PHP_EOL; + } + } + foreach ($section->getFooters() as $footer) { + $type = $footer->getType(); + if ($evenOdd || $type !== FOOTER::EVEN) { + $content .= '{\\footer'; + if ($type === Footer::FIRST) { + $content .= 'f'; + } elseif ($evenOdd) { + $content .= ($type === FOOTER::EVEN) ? 'l' : 'r'; + } + foreach ($footer->getElements() as $element) { + $cl = get_class($element); + $cl2 = str_replace('Element', 'Writer\\RTF\\Element', $cl); + if (class_exists($cl2)) { + $elementWriter = new $cl2($this->getParentWriter(), $element); + $content .= $elementWriter->write(); + } + } + $content .= '}' . PHP_EOL; + } + } $elementWriter = new Container($this->getParentWriter(), $section); $content .= $elementWriter->write(); 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 08dcf01810..db97c28d00 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 @@ -92,7 +92,7 @@ class Border extends AbstractStyle $content .= '\pgbrdr' . substr($side, 0, 1); $content .= '\brdrs'; // Single-thickness border; @todo Get other type of border - $content .= '\brdrw' . $width; // Width + $content .= '\brdrw' . round($width); // Width $content .= '\brdrcf' . $colorIndex; // Color $content .= '\brsp480'; // Space in twips between borders and the paragraph (24pt, following OOXML) $content .= ' '; 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 8c729425d1..34f6c1afae 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 @@ -49,11 +49,12 @@ class Font extends AbstractStyle } $content = ''; + $content .= $this->getValueIf($style->isRTL(), '\rtlch'); $content .= '\cf' . $this->colorIndex; $content .= '\f' . $this->nameIndex; $size = $style->getSize(); - $content .= $this->getValueIf(is_numeric($size), '\fs' . ($size * 2)); + $content .= $this->getValueIf(is_numeric($size), '\fs' . round($size * 2)); $content .= $this->getValueIf($style->isBold(), '\b'); $content .= $this->getValueIf($style->isItalic(), '\i'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Indentation.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Indentation.php index dd52230ee8..50e8ad9940 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Indentation.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Indentation.php @@ -36,9 +36,9 @@ class Indentation extends AbstractStyle return ''; } - $content = '\fi' . $style->getFirstLine(); - $content .= '\li' . $style->getLeft(); - $content .= '\ri' . $style->getRight(); + $content = '\fi' . round($style->getFirstLine()); + $content .= '\li' . round($style->getLeft()); + $content .= '\ri' . round($style->getRight()); return $content . ' '; } 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 cb50a31b02..9f8cf9dff0 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 @@ -65,8 +65,16 @@ class Paragraph extends AbstractStyle $content .= $alignments[$style->getAlignment()]; } $content .= $this->writeIndentation($style->getIndentation()); - $content .= $this->getValueIf($spaceBefore !== null, '\sb' . $spaceBefore); - $content .= $this->getValueIf($spaceAfter !== null, '\sa' . $spaceAfter); + $content .= $this->getValueIf($spaceBefore !== null, '\sb' . round($spaceBefore)); + $content .= $this->getValueIf($spaceAfter !== null, '\sa' . round($spaceAfter)); + $lineHeight = $style->getLineHeight(); + if ($lineHeight) { + $lineHeightAdjusted = (int) ($lineHeight * 240); + $content .= "\\sl$lineHeightAdjusted\\slmult1"; + } + if ($style->hasPageBreakBefore()) { + $content .= '\\page'; + } $styles = $style->getStyleValues(); $content .= $this->writeTabs($styles['tabs']); 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 5c34fa8683..c680194763 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 @@ -43,16 +43,17 @@ class Section extends AbstractStyle $content .= '\sectd '; // Size & margin - $content .= $this->getValueIf($style->getPageSizeW() !== null, '\pgwsxn' . $style->getPageSizeW()); - $content .= $this->getValueIf($style->getPageSizeH() !== null, '\pghsxn' . $style->getPageSizeH()); + $content .= $this->getValueIf($style->getPageSizeW() !== null, '\pgwsxn' . round($style->getPageSizeW())); + $content .= $this->getValueIf($style->getPageSizeH() !== null, '\pghsxn' . round($style->getPageSizeH())); $content .= ' '; - $content .= $this->getValueIf($style->getMarginTop() !== null, '\margtsxn' . $style->getMarginTop()); - $content .= $this->getValueIf($style->getMarginRight() !== null, '\margrsxn' . $style->getMarginRight()); - $content .= $this->getValueIf($style->getMarginBottom() !== null, '\margbsxn' . $style->getMarginBottom()); - $content .= $this->getValueIf($style->getMarginLeft() !== null, '\marglsxn' . $style->getMarginLeft()); - $content .= $this->getValueIf($style->getHeaderHeight() !== null, '\headery' . $style->getHeaderHeight()); - $content .= $this->getValueIf($style->getFooterHeight() !== null, '\footery' . $style->getFooterHeight()); - $content .= $this->getValueIf($style->getGutter() !== null, '\guttersxn' . $style->getGutter()); + $content .= $this->getValueIf($style->getMarginTop() !== null, '\margtsxn' . round($style->getMarginTop())); + $content .= $this->getValueIf($style->getMarginRight() !== null, '\margrsxn' . round($style->getMarginRight())); + $content .= $this->getValueIf($style->getMarginBottom() !== null, '\margbsxn' . round($style->getMarginBottom())); + $content .= $this->getValueIf($style->getMarginLeft() !== null, '\marglsxn' . round($style->getMarginLeft())); + $content .= $this->getValueIf($style->getHeaderHeight() !== null, '\headery' . round($style->getHeaderHeight())); + $content .= $this->getValueIf($style->getFooterHeight() !== null, '\footery' . round($style->getFooterHeight())); + $content .= $this->getValueIf($style->getGutter() !== null, '\guttersxn' . round($style->getGutter())); + $content .= $this->getValueIf($style->getPageNumberingStart() !== null, '\pgnstarts' . $style->getPageNumberingStart() . '\pgnrestart'); $content .= ' '; // Borders diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Tab.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Tab.php index fe1f9363eb..a21b13d39d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Tab.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Tab.php @@ -42,7 +42,7 @@ class Tab extends AbstractStyle if (isset($tabs[$style->getType()])) { $content .= $tabs[$style->getType()]; } - $content .= '\tx' . $style->getPosition(); + $content .= '\tx' . round($style->getPosition()); return $content; } 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 63f45a761f..ee0fb2f901 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 @@ -17,10 +17,10 @@ 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; +use PhpOffice\PhpWord\Shared\Text as SharedText; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Abstract element writer @@ -32,7 +32,7 @@ abstract class AbstractElement /** * XML writer * - * @var \PhpOffice\Common\XMLWriter + * @var \PhpOffice\PhpWord\Shared\XMLWriter */ private $xmlWriter; @@ -58,7 +58,7 @@ abstract class AbstractElement /** * Create new instance * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\AbstractElement $element * @param bool $withoutP */ @@ -72,7 +72,7 @@ abstract class AbstractElement /** * Get XML Writer * - * @return \PhpOffice\Common\XMLWriter + * @return \PhpOffice\PhpWord\Shared\XMLWriter */ protected function getXmlWriter() { @@ -207,7 +207,7 @@ abstract class AbstractElement */ protected function getText($text) { - return CommonText::controlCharacterPHP2OOXML($text); + return SharedText::controlCharacterPHP2OOXML($text); } /** 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 892da051ad..0a39403d67 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 @@ -17,10 +17,10 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\AbstractContainer as ContainerElement; use PhpOffice\PhpWord\Element\AbstractElement as Element; use PhpOffice\PhpWord\Element\TextBreak as TextBreakElement; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Container element writer (section, textrun, header, footnote, cell, etc.) @@ -71,7 +71,7 @@ class Container extends AbstractElement /** * Write individual element * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\AbstractElement $element * @param bool $withoutP * @return string 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 e79dd24a90..b800fbddc3 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 @@ -65,6 +65,7 @@ class Field extends Text $instruction .= $this->buildPropertiesAndOptions($element); } $xmlWriter->startElement('w:r'); + $this->writeFontStyle(); $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text($instruction); 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 b59cf58f89..7206386431 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\FormField as FormFieldElement; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * FormField element writer @@ -105,7 +105,7 @@ class FormField extends Text * Write textinput. * * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFTextInput.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\FormField $element */ private function writeTextInput(XMLWriter $xmlWriter, FormFieldElement $element) @@ -121,7 +121,7 @@ class FormField extends Text * Write checkbox. * * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFCheckBox.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\FormField $element */ private function writeCheckBox(XMLWriter $xmlWriter, FormFieldElement $element) @@ -144,7 +144,7 @@ class FormField extends Text * Write dropdown. * * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFDDList.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\FormField $element */ private function writeDropDown(XMLWriter $xmlWriter, FormFieldElement $element) 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 3614ec184f..f136ba0b6c 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Image as ImageElement; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style\Font as FontStyle; use PhpOffice\PhpWord\Style\Frame as FrameStyle; use PhpOffice\PhpWord\Writer\Word2007\Style\Font as FontStyleWriter; @@ -103,7 +103,9 @@ class Image extends AbstractElement $style->setPositioning('absolute'); $styleWriter = new ImageStyleWriter($xmlWriter, $style); - $xmlWriter->startElement('w:p'); + if (!$this->withoutP) { + $xmlWriter->startElement('w:p'); + } $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); $xmlWriter->startElement('v:shape'); @@ -118,6 +120,8 @@ class Image extends AbstractElement $xmlWriter->endElement(); // v:shape $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r - $xmlWriter->endElement(); // w:p + if (!$this->withoutP) { + $xmlWriter->endElement(); // w:p + } } } 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 765d2ee0f9..fda2b078c8 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 @@ -17,6 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; +use PhpOffice\PhpWord\Element\ListItemRun as ListItemRunElement; use PhpOffice\PhpWord\Writer\Word2007\Style\Paragraph as ParagraphStyleWriter; /** @@ -31,34 +32,56 @@ class ListItemRun extends AbstractElement */ public function write() { - $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); - if (!$element instanceof \PhpOffice\PhpWord\Element\ListItemRun) { + + if (!$element instanceof ListItemRunElement) { return; } + $this->writeParagraph($element); + } + + private function writeParagraph(ListItemRunElement $element) + { + $xmlWriter = $this->getXmlWriter(); $xmlWriter->startElement('w:p'); + $this->writeParagraphProperties($element); + + $containerWriter = new Container($xmlWriter, $element); + $containerWriter->write(); + + $xmlWriter->endElement(); // w:p + } + + private function writeParagraphProperties(ListItemRunElement $element) + { + $xmlWriter = $this->getXmlWriter(); $xmlWriter->startElement('w:pPr'); - $paragraphStyle = $element->getParagraphStyle(); - $styleWriter = new ParagraphStyleWriter($xmlWriter, $paragraphStyle); + + $styleWriter = new ParagraphStyleWriter($xmlWriter, $element->getParagraphStyle()); $styleWriter->setIsInline(true); + $styleWriter->setWithoutPPR(true); $styleWriter->write(); - $xmlWriter->startElement('w:numPr'); - $xmlWriter->startElement('w:ilvl'); - $xmlWriter->writeAttribute('w:val', $element->getDepth()); - $xmlWriter->endElement(); // w:ilvl - $xmlWriter->startElement('w:numId'); - $xmlWriter->writeAttribute('w:val', $element->getStyle()->getNumId()); - $xmlWriter->endElement(); // w:numId - $xmlWriter->endElement(); // w:numPr + $this->writeParagraphPropertiesNumbering($element); $xmlWriter->endElement(); // w:pPr + } - $containerWriter = new Container($xmlWriter, $element); - $containerWriter->write(); + private function writeParagraphPropertiesNumbering(ListItemRunElement $element) + { + $xmlWriter = $this->getXmlWriter(); + $xmlWriter->startElement('w:numPr'); - $xmlWriter->endElement(); // w:p + $xmlWriter->writeElementBlock('w:ilvl', array( + 'w:val' => $element->getDepth(), + )); + + $xmlWriter->writeElementBlock('w:numId', array( + 'w:val' => $element->getStyle()->getNumId(), + )); + + $xmlWriter->endElement(); // w:numPr } } 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 21020a0f9e..e496424253 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\SDT as SDTElement; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Structured document tag element writer @@ -73,11 +73,23 @@ class SDT extends Text $this->endElementP(); // w:p } + /** + * Write text. + * + * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtText.html + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter + */ + private function writePlainText(XMLWriter $xmlWriter) + { + $xmlWriter->startElement('w:text'); + $xmlWriter->endElement(); // w:text + } + /** * Write combo box. * * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtComboBox.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\SDT $element */ private function writeComboBox(XMLWriter $xmlWriter, SDTElement $element) @@ -96,7 +108,7 @@ class SDT extends Text * Write drop down list. * * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtDropDownList.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\SDT $element */ private function writeDropDownList(XMLWriter $xmlWriter, SDTElement $element) @@ -108,7 +120,7 @@ class SDT extends Text * Write date. * * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtDate.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\SDT $element */ 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 250d5c1d0d..ef30c48436 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Shape as ShapeElement; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style\Shape as ShapeStyle; use PhpOffice\PhpWord\Writer\Word2007\Style\Shape as ShapeStyleWriter; @@ -77,7 +77,7 @@ class Shape extends AbstractElement /** * Write arc. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style */ private function writeArc(XMLWriter $xmlWriter, ShapeStyle $style) @@ -91,7 +91,7 @@ class Shape extends AbstractElement /** * Write curve. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style */ private function writeCurve(XMLWriter $xmlWriter, ShapeStyle $style) @@ -106,7 +106,7 @@ class Shape extends AbstractElement /** * Write line. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style */ private function writeLine(XMLWriter $xmlWriter, ShapeStyle $style) @@ -120,7 +120,7 @@ class Shape extends AbstractElement /** * Write polyline. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style */ private function writePolyline(XMLWriter $xmlWriter, ShapeStyle $style) @@ -131,7 +131,7 @@ class Shape extends AbstractElement /** * Write rectangle. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style */ 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 94437cbf0d..3dac76fb4d 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\TOC as TOCElement; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Writer\Word2007\Style\Font as FontStyleWriter; use PhpOffice\PhpWord\Writer\Word2007\Style\Paragraph as ParagraphStyleWriter; @@ -64,7 +64,7 @@ class TOC extends AbstractElement /** * Write title * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element * @param \PhpOffice\PhpWord\Element\Title $title * @param bool $writeFieldMark @@ -132,7 +132,7 @@ class TOC extends AbstractElement /** * Write style * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element * @param int $indent */ @@ -178,7 +178,7 @@ class TOC extends AbstractElement /** * Write TOC Field. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element */ 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 c365b028ab..25a44fb11a 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 @@ -17,10 +17,10 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Cell as CellElement; use PhpOffice\PhpWord\Element\Row as RowElement; use PhpOffice\PhpWord\Element\Table as TableElement; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style\Cell as CellStyle; use PhpOffice\PhpWord\Style\Row as RowStyle; use PhpOffice\PhpWord\Writer\Word2007\Style\Cell as CellStyleWriter; @@ -71,7 +71,7 @@ class Table extends AbstractElement /** * Write column. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Table $element */ private function writeColumns(XMLWriter $xmlWriter, TableElement $element) @@ -93,7 +93,7 @@ class Table extends AbstractElement /** * Write row. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Row $row */ private function writeRow(XMLWriter $xmlWriter, RowElement $row) @@ -119,7 +119,7 @@ class Table extends AbstractElement /** * Write cell. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Cell $cell */ private function writeCell(XMLWriter $xmlWriter, CellElement $cell) 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 ce4e41cbd4..4bee5c542a 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 @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Exception\Exception; use PhpOffice\PhpWord\Settings; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Writer\AbstractWriter; /** @@ -73,7 +73,7 @@ abstract class AbstractPart /** * Get XML Writer * - * @return \PhpOffice\Common\XMLWriter + * @return \PhpOffice\PhpWord\Shared\XMLWriter */ protected function getXmlWriter() { 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 5a3ef27678..e3b56eaa81 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Chart as ChartElement; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Word2007 chart part writer: word/charts/chartx.xml @@ -99,14 +99,12 @@ class Chart extends AbstractPart * Write chart * * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_Chart.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writeChart(XMLWriter $xmlWriter) { $xmlWriter->startElement('c:chart'); - $xmlWriter->writeElementBlock('c:autoTitleDeleted', 'val', 1); - $this->writePlotArea($xmlWriter); $xmlWriter->endElement(); // c:chart @@ -123,7 +121,7 @@ class Chart extends AbstractPart * @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 + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter */ private function writePlotArea(XMLWriter $xmlWriter) { @@ -131,6 +129,35 @@ class Chart extends AbstractPart $style = $this->element->getStyle(); $this->options = $this->types[$type]; + $title = $style->getTitle(); + $showLegend = $style->isShowLegend(); + $legendPosition = $style->getLegendPosition(); + + //Chart title + if ($title) { + $xmlWriter->startElement('c:title'); + $xmlWriter->startElement('c:tx'); + $xmlWriter->startElement('c:rich'); + $xmlWriter->writeRaw(' + <a:bodyPr/> + <a:lstStyle/> + <a:p> + <a:pPr> + <a:defRPr/></a:pPr><a:r><a:rPr/><a:t>' . $title . '</a:t></a:r> + <a:endParaRPr/> + </a:p>'); + $xmlWriter->endElement(); // c:rich + $xmlWriter->endElement(); // c:tx + $xmlWriter->endElement(); // c:title + } else { + $xmlWriter->writeElementBlock('c:autoTitleDeleted', 'val', 1); + } + + //Chart legend + if ($showLegend) { + $xmlWriter->writeRaw('<c:legend><c:legendPos val="' . $legendPosition . '"/></c:legend>'); + } + $xmlWriter->startElement('c:plotArea'); $xmlWriter->writeElement('c:layout'); @@ -183,7 +210,7 @@ class Chart extends AbstractPart /** * Write series. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param bool $scatter */ private function writeSeries(XMLWriter $xmlWriter, $scatter = false) @@ -193,6 +220,7 @@ class Chart extends AbstractPart $colors = $style->getColors(); $index = 0; + $colorIndex = 0; foreach ($series as $seriesItem) { $categories = $seriesItem['categories']; $values = $seriesItem['values']; @@ -239,23 +267,21 @@ class Chart extends AbstractPart $this->writeSeriesItem($xmlWriter, 'cat', $categories); $this->writeSeriesItem($xmlWriter, 'val', $values); - // setting the chart colors was taken from https://github.com/PHPOffice/PHPWord/issues/494 - if (is_array($colors) && count($colors)) { - // This is a workaround to make each series in a stack chart use a different color - if ($this->options['type'] == 'bar' && stristr($this->options['grouping'], 'stacked')) { - array_shift($colors); - } - $colorIndex = 0; - foreach ($colors as $color) { + // check that there are colors + if (is_array($colors) && count($colors) > 0) { + // assign a color to each value + $valueIndex = 0; + for ($i = 0; $i < count($values); $i++) { + // check that there are still enought colors $xmlWriter->startElement('c:dPt'); - $xmlWriter->writeElementBlock('c:idx', 'val', $colorIndex); + $xmlWriter->writeElementBlock('c:idx', 'val', $valueIndex); $xmlWriter->startElement('c:spPr'); $xmlWriter->startElement('a:solidFill'); - $xmlWriter->writeElementBlock('a:srgbClr', 'val', $color); + $xmlWriter->writeElementBlock('a:srgbClr', 'val', $colors[$colorIndex++ % count($colors)]); $xmlWriter->endElement(); // a:solidFill $xmlWriter->endElement(); // c:spPr $xmlWriter->endElement(); // c:dPt - $colorIndex++; + $valueIndex++; } } } @@ -268,7 +294,7 @@ class Chart extends AbstractPart /** * Write series items. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $type * @param array $values */ @@ -309,7 +335,7 @@ class Chart extends AbstractPart * Write axis * * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_CatAx.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $type */ private function writeAxis(XMLWriter $xmlWriter, $type) @@ -374,7 +400,7 @@ class Chart extends AbstractPart * Write shape * * @see http://www.datypic.com/sc/ooxml/t-a_CT_ShapeProperties.html - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param bool $line */ 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 index 33c9f59e6a..5b867324cb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Comments.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Comments.php @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Comment; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Writer\Word2007\Element\Container; /** @@ -70,7 +70,7 @@ class Comments extends AbstractPart /** * Write comment item. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Comment $comment */ protected function writeComment(XMLWriter $xmlWriter, Comment $comment) 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 28a2d29449..14fc585334 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Word2007 contenttypes part writer: [Content_Types].xml @@ -80,7 +80,7 @@ class ContentTypes extends AbstractPart /** * Write content types element * - * @param \PhpOffice\Common\XMLWriter $xmlWriter XML Writer + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter XML Writer * @param array $parts * @param bool $isDefault */ 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 986b498570..d2ab836b7e 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Section; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Writer\Word2007\Element\Container; use PhpOffice\PhpWord\Writer\Word2007\Style\Section as SectionStyleWriter; @@ -80,7 +80,7 @@ class Document extends AbstractPart /** * Write begin section. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Section $section */ private function writeSection(XMLWriter $xmlWriter, Section $section) @@ -95,7 +95,7 @@ class Document extends AbstractPart /** * Write end section. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Section $section */ private function writeSectionSettings(XMLWriter $xmlWriter, Section $section) @@ -126,27 +126,27 @@ class Document extends AbstractPart $xmlWriter->endElement(); } - //footnote properties - if ($section->getFootnotePropoperties() !== null) { + // Footnote properties + if ($section->getFootnoteProperties() !== null) { $xmlWriter->startElement('w:footnotePr'); - if ($section->getFootnotePropoperties()->getPos() != null) { + if ($section->getFootnoteProperties()->getPos() != null) { $xmlWriter->startElement('w:pos'); - $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getPos()); + $xmlWriter->writeAttribute('w:val', $section->getFootnoteProperties()->getPos()); $xmlWriter->endElement(); } - if ($section->getFootnotePropoperties()->getNumFmt() != null) { + if ($section->getFootnoteProperties()->getNumFmt() != null) { $xmlWriter->startElement('w:numFmt'); - $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getNumFmt()); + $xmlWriter->writeAttribute('w:val', $section->getFootnoteProperties()->getNumFmt()); $xmlWriter->endElement(); } - if ($section->getFootnotePropoperties()->getNumStart() != null) { + if ($section->getFootnoteProperties()->getNumStart() != null) { $xmlWriter->startElement('w:numStart'); - $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getNumStart()); + $xmlWriter->writeAttribute('w:val', $section->getFootnoteProperties()->getNumStart()); $xmlWriter->endElement(); } - if ($section->getFootnotePropoperties()->getNumRestart() != null) { + if ($section->getFootnoteProperties()->getNumRestart() != null) { $xmlWriter->startElement('w:numRestart'); - $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getNumRestart()); + $xmlWriter->writeAttribute('w:val', $section->getFootnoteProperties()->getNumRestart()); $xmlWriter->endElement(); } $xmlWriter->endElement(); 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 59bf183096..58c2e9b170 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\Footnote; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Writer\Word2007\Element\Container; use PhpOffice\PhpWord\Writer\Word2007\Style\Paragraph as ParagraphStyleWriter; @@ -135,7 +135,7 @@ class Footnotes extends AbstractPart /** * Write note item. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Footnote|\PhpOffice\PhpWord\Element\Endnote $element */ protected function writeNote(XMLWriter $xmlWriter, $element) 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 61e5cc2341..1b4f01a647 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Style\Numbering as NumberingStyle; use PhpOffice\PhpWord\Style\NumberingLevel; @@ -97,7 +97,7 @@ class Numbering extends AbstractPart /** * Write level. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level */ private function writeLevel(XMLWriter $xmlWriter, NumberingLevel $level) @@ -137,7 +137,7 @@ class Numbering extends AbstractPart * * @since 0.11.0 * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level * @todo Use paragraph style writer */ @@ -169,7 +169,7 @@ class Numbering extends AbstractPart * * @since 0.11.0 * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level * @todo Use font style writer */ 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 661a4fa862..70f632f7f3 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Exception\Exception; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Word2007 main relationship writer: _rels/.rels @@ -49,7 +49,7 @@ class Rels extends AbstractPart /** * Write relationships. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param array $xmlRels * @param array $mediaRels * @param int $relId @@ -76,7 +76,7 @@ class Rels extends AbstractPart /** * Write media relationships. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param int $relId * @param array $mediaRel */ @@ -101,7 +101,7 @@ class Rels extends AbstractPart * Format: * <Relationship Id="rId..." Type="http://..." Target="....xml" TargetMode="..." /> * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param int $relId Relationship ID * @param string $type Relationship type * @param string $target Relationship target 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 b764642a6a..4dd8b8bedf 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 @@ -17,9 +17,9 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\Microsoft\PasswordEncoder; use PhpOffice\PhpWord\ComplexType\ProofState; use PhpOffice\PhpWord\ComplexType\TrackChangesView; +use PhpOffice\PhpWord\Shared\Microsoft\PasswordEncoder; use PhpOffice\PhpWord\Style\Language; /** @@ -69,7 +69,7 @@ class Settings extends AbstractPart /** * Write indivual setting, recursive to any child settings. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $settingKey * @param array|string $settingValue */ 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 d05338c77d..4d8f60c23a 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Style\Font as FontStyle; use PhpOffice\PhpWord\Style\Paragraph as ParagraphStyle; @@ -76,7 +76,7 @@ class Styles extends AbstractPart /** * Write default font and other default styles. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\AbstractStyle[] $styles */ private function writeDefaultStyles(XMLWriter $xmlWriter, $styles) @@ -161,7 +161,7 @@ class Styles extends AbstractPart /** * Write font style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $styleName * @param \PhpOffice\PhpWord\Style\Font $style */ @@ -229,7 +229,7 @@ class Styles extends AbstractPart /** * Write paragraph style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $styleName * @param \PhpOffice\PhpWord\Style\Paragraph $style */ @@ -261,7 +261,7 @@ class Styles extends AbstractPart /** * Write table style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $styleName * @param \PhpOffice\PhpWord\Style\Table $style */ 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 3236cead0b..3624a7bef2 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 @@ -17,8 +17,8 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Style; -use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Settings; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Style writer @@ -30,7 +30,7 @@ abstract class AbstractStyle /** * XML writer * - * @var \PhpOffice\Common\XMLWriter + * @var \PhpOffice\PhpWord\Shared\XMLWriter */ private $xmlWriter; @@ -49,7 +49,7 @@ abstract class AbstractStyle /** * Create new instance. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string|\PhpOffice\PhpWord\Style\AbstractStyle $style */ public function __construct(XMLWriter $xmlWriter, $style = null) @@ -61,7 +61,7 @@ abstract class AbstractStyle /** * Get XML Writer * - * @return \PhpOffice\Common\XMLWriter + * @return \PhpOffice\PhpWord\Shared\XMLWriter */ protected function getXmlWriter() { @@ -96,7 +96,7 @@ abstract class AbstractStyle ); $unit = Settings::getMeasurementUnit(); $factor = 1; - if (in_array($unit, $factors) && $value != $default) { + if (array_key_exists($unit, $factors) && $value != $default) { $factor = $factors[$unit]; } @@ -106,7 +106,7 @@ abstract class AbstractStyle /** * Write child style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $name * @param mixed $value */ @@ -121,6 +121,21 @@ abstract class AbstractStyle } } + /** + * Writes boolean as 0 or 1 + * + * @param bool $value + * @return null|string + */ + protected function writeOnOf($value = null) + { + if ($value === null) { + return null; + } + + return $value ? '1' : '0'; + } + /** * Assemble style array into style string * 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 58282d1558..2f2218fa57 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 @@ -44,6 +44,10 @@ class Font extends AbstractStyle $xmlWriter->startElement('w:rStyle'); $xmlWriter->writeAttribute('w:val', $this->style); $xmlWriter->endElement(); + $style = \PhpOffice\PhpWord\Style::getStyle($this->style); + if ($style instanceof \PhpOffice\PhpWord\Style\Font) { + $xmlWriter->writeElementIf($style->isRTL(), 'w:rtl'); + } $xmlWriter->endElement(); } else { $this->writeStyle(); @@ -107,18 +111,21 @@ class Font extends AbstractStyle $xmlWriter->writeElementIf($size !== null, 'w:szCs', 'w:val', $size * 2); // 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'); + $xmlWriter->writeElementIf($style->isBold() !== null, 'w:b', 'w:val', $this->writeOnOf($style->isBold())); + $xmlWriter->writeElementIf($style->isBold() !== null, 'w:bCs', 'w:val', $this->writeOnOf($style->isBold())); + $xmlWriter->writeElementIf($style->isItalic() !== null, 'w:i', 'w:val', $this->writeOnOf($style->isItalic())); + $xmlWriter->writeElementIf($style->isItalic() !== null, 'w:iCs', 'w:val', $this->writeOnOf($style->isItalic())); // Strikethrough, double strikethrough - $xmlWriter->writeElementIf($style->isStrikethrough(), 'w:strike'); - $xmlWriter->writeElementIf($style->isDoubleStrikethrough(), 'w:dstrike'); + $xmlWriter->writeElementIf($style->isStrikethrough() !== null, 'w:strike', 'w:val', $this->writeOnOf($style->isStrikethrough())); + $xmlWriter->writeElementIf($style->isDoubleStrikethrough() !== null, 'w:dstrike', 'w:val', $this->writeOnOf($style->isDoubleStrikethrough())); // Small caps, all caps - $xmlWriter->writeElementIf($style->isSmallCaps(), 'w:smallCaps'); - $xmlWriter->writeElementIf($style->isAllCaps(), 'w:caps'); + $xmlWriter->writeElementIf($style->isSmallCaps() !== null, 'w:smallCaps', 'w:val', $this->writeOnOf($style->isSmallCaps())); + $xmlWriter->writeElementIf($style->isAllCaps() !== null, 'w:caps', 'w:val', $this->writeOnOf($style->isAllCaps())); + + //Hidden text + $xmlWriter->writeElementIf($style->isHidden(), 'w:vanish', 'w:val', $this->writeOnOf($style->isHidden())); // Underline $xmlWriter->writeElementIf($style->getUnderline() != 'none', 'w:u', 'w:val', $style->getUnderline()); @@ -136,7 +143,7 @@ class Font extends AbstractStyle $xmlWriter->writeElementIf($style->getKerning() !== null, 'w:kern', 'w:val', $style->getKerning() * 2); // noProof - $xmlWriter->writeElementIf($style->isNoProof() !== false, 'w:noProof'); + $xmlWriter->writeElementIf($style->isNoProof() !== null, 'w:noProof', 'w:val', $this->writeOnOf($style->isNoProof())); // Background-Color $shading = $style->getShading(); 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 ea5abf780a..782bce5219 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Style; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style\Frame as FrameStyle; use PhpOffice\PhpWord\Writer\Word2007\Element\ParagraphAlignment; @@ -61,6 +61,7 @@ class Frame extends AbstractStyle 'hPos' => 'mso-position-horizontal', 'vPos' => 'mso-position-vertical', 'hPosRelTo' => 'mso-position-horizontal-relative', + 'vPosRelTo' => 'mso-position-vertical-relative', ); $posStyles = $this->getStyles($style, $properties); @@ -107,7 +108,7 @@ class Frame extends AbstractStyle /** * Write wrap. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Frame $style * @param string $wrap */ 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 f5c4b0153b..a992956359 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Style; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; /** * Margin border style writer @@ -78,7 +78,7 @@ class MarginBorder extends AbstractStyle /** * Write side. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $side * @param int $width * @param string $color 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 6761608608..8d113216cd 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Style; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Style\Paragraph as ParagraphStyle; use PhpOffice\PhpWord\Writer\Word2007\Element\ParagraphAlignment; @@ -132,6 +132,7 @@ class Paragraph extends AbstractStyle $styleWriter = new MarginBorder($xmlWriter); $styleWriter->setSizes($style->getBorderSize()); + $styleWriter->setStyles($style->getBorderStyle()); $styleWriter->setColors($style->getBorderColor()); $styleWriter->write(); @@ -146,7 +147,7 @@ class Paragraph extends AbstractStyle /** * Write tabs. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Tab[] $tabs */ private function writeTabs(XMLWriter $xmlWriter, $tabs) @@ -164,7 +165,7 @@ class Paragraph extends AbstractStyle /** * Write numbering. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param array $numbering */ private function writeNumbering(XMLWriter $xmlWriter, $numbering) 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 af77396de1..1122b6ff76 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 @@ -48,6 +48,10 @@ class Section extends AbstractStyle $xmlWriter->writeAttribute('w:h', $style->getPageSizeH()); $xmlWriter->endElement(); // w:pgSz + // Vertical alignment + $vAlign = $style->getVAlign(); + $xmlWriter->writeElementIf(!is_null($vAlign), 'w:vAlign', 'w:val', $vAlign); + // Margins $margins = array( 'w:top' => array('getMarginTop', SectionStyle::DEFAULT_MARGIN), 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 0185cbcc7a..fdfb89ab87 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 @@ -44,6 +44,10 @@ class Spacing extends AbstractStyle $xmlWriter->writeAttributeIf(!is_null($after), 'w:after', $this->convertTwip($after)); $line = $style->getLine(); + //if linerule is auto, the spacing is supposed to include the height of the line itself, which is 240 twips + if (null !== $line && 'auto' === $style->getLineRule()) { + $line += \PhpOffice\PhpWord\Style\Paragraph::LINE_HEIGHT; + } $xmlWriter->writeAttributeIf(!is_null($line), 'w:line', $line); $xmlWriter->writeAttributeIf(!is_null($line), 'w:lineRule', $style->getLineRule()); 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 7f49be7c38..eb040e019e 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 @@ -17,7 +17,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Style; -use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Shared\XMLWriter; use PhpOffice\PhpWord\SimpleType\TblWidth; use PhpOffice\PhpWord\Style\Table as TableStyle; use PhpOffice\PhpWord\Writer\Word2007\Element\TableAlignment; @@ -59,7 +59,7 @@ class Table extends AbstractStyle /** * Write full style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style */ private function writeStyle(XMLWriter $xmlWriter, TableStyle $style) @@ -86,6 +86,9 @@ class Table extends AbstractStyle $styleWriter = new TablePosition($xmlWriter, $style->getPosition()); $styleWriter->write(); + //Right to left + $xmlWriter->writeElementIf($style->isBidiVisual() !== null, 'w:bidiVisual', 'w:val', $this->writeOnOf($style->isBidiVisual())); + $this->writeMargin($xmlWriter, $style); $this->writeBorder($xmlWriter, $style); @@ -103,7 +106,7 @@ class Table extends AbstractStyle /** * Enable/Disable automatic resizing of the table * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $layout autofit / fixed */ private function writeLayout(XMLWriter $xmlWriter, $layout) @@ -116,7 +119,7 @@ class Table extends AbstractStyle /** * Write margin. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style */ private function writeMargin(XMLWriter $xmlWriter, TableStyle $style) @@ -135,7 +138,7 @@ class Table extends AbstractStyle /** * Write border. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style */ private function writeBorder(XMLWriter $xmlWriter, TableStyle $style) @@ -155,7 +158,7 @@ class Table extends AbstractStyle /** * Writes a table width * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param string $elementName * @param string $unit * @param int|float $width @@ -174,7 +177,7 @@ class Table extends AbstractStyle /** * Write row style. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style */ private function writeFirstRow(XMLWriter $xmlWriter, TableStyle $style) @@ -193,7 +196,7 @@ class Table extends AbstractStyle /** * Write shading. * - * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style */ private function writeShading(XMLWriter $xmlWriter, TableStyle $style) diff --git a/civicrm/vendor/symfony/config/Definition/ArrayNode.php b/civicrm/vendor/symfony/config/Definition/ArrayNode.php index 83bab205ec..59a0af8794 100644 --- a/civicrm/vendor/symfony/config/Definition/ArrayNode.php +++ b/civicrm/vendor/symfony/config/Definition/ArrayNode.php @@ -235,7 +235,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface } if ($child->isDeprecated()) { - @trigger_error($child->getDeprecationMessage($name, $this->getPath()), E_USER_DEPRECATED); + @trigger_error($child->getDeprecationMessage($name, $this->getPath()), \E_USER_DEPRECATED); } try { diff --git a/civicrm/vendor/symfony/config/Definition/BaseNode.php b/civicrm/vendor/symfony/config/Definition/BaseNode.php index 1f6ef7f834..10bcb49c8b 100644 --- a/civicrm/vendor/symfony/config/Definition/BaseNode.php +++ b/civicrm/vendor/symfony/config/Definition/BaseNode.php @@ -335,7 +335,7 @@ abstract class BaseNode implements NodeInterface } catch (Exception $e) { throw $e; } catch (\Exception $e) { - throw new InvalidConfigurationException(sprintf('Invalid configuration for path "%s": '.$e->getMessage(), $this->getPath()), $e->getCode(), $e); + throw new InvalidConfigurationException(sprintf('Invalid configuration for path "%s": ', $this->getPath()).$e->getMessage(), $e->getCode(), $e); } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php index 29d1e154fc..da4ebf6273 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php @@ -413,7 +413,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition } if (false === $this->allowEmptyValue) { - @trigger_error(sprintf('Using %s::cannotBeEmpty() at path "%s" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.', __CLASS__, $node->getPath()), E_USER_DEPRECATED); + @trigger_error(sprintf('Using %s::cannotBeEmpty() at path "%s" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.', __CLASS__, $node->getPath()), \E_USER_DEPRECATED); } if (true === $this->atLeastOne) { @@ -476,7 +476,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition } if (false === $this->allowEmptyValue) { - @trigger_error(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s". In 4.0 it will throw an exception.', $path), E_USER_DEPRECATED); + @trigger_error(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s". In 4.0 it will throw an exception.', $path), \E_USER_DEPRECATED); } if (true === $this->atLeastOne) { diff --git a/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php index 744f15fd81..7f8639908d 100644 --- a/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php +++ b/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php @@ -193,7 +193,7 @@ class XmlReferenceDumper $commentDepth = $depth + 4 + \strlen($attrName) + 2; $commentLines = explode("\n", $comment); $multiline = (\count($commentLines) > 1); - $comment = implode(PHP_EOL.str_repeat(' ', $commentDepth), $commentLines); + $comment = implode(\PHP_EOL.str_repeat(' ', $commentDepth), $commentLines); if ($multiline) { $this->writeLine('<!--', $depth); @@ -267,7 +267,7 @@ class XmlReferenceDumper $indent = \strlen($text) + $indent; $format = '%'.$indent.'s'; - $this->reference .= sprintf($format, $text).PHP_EOL; + $this->reference .= sprintf($format, $text).\PHP_EOL; } /** diff --git a/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php b/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php index 128bf7e28c..30df15be8b 100644 --- a/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php +++ b/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Config\DependencyInjection; -@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use tagged iterator arguments instead.', ConfigCachePass::class), E_USER_DEPRECATED); +@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use tagged iterator arguments instead.', ConfigCachePass::class), \E_USER_DEPRECATED); use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; diff --git a/civicrm/vendor/symfony/config/FileLocator.php b/civicrm/vendor/symfony/config/FileLocator.php index c125ba0b13..5f315ba72e 100644 --- a/civicrm/vendor/symfony/config/FileLocator.php +++ b/civicrm/vendor/symfony/config/FileLocator.php @@ -88,7 +88,7 @@ class FileLocator implements FileLocatorInterface && ':' === $file[1] && ('\\' === $file[2] || '/' === $file[2]) ) - || null !== parse_url($file, PHP_URL_SCHEME) + || null !== parse_url($file, \PHP_URL_SCHEME) ) { return true; } diff --git a/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php b/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php index fc0259f418..f58d2a6df5 100644 --- a/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php +++ b/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php @@ -190,12 +190,17 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ 'args' => [$class], ]; - if (false === $i = array_search($autoloadFrame, $trace, true)) { + if (\PHP_VERSION_ID >= 80000 && isset($trace[1])) { + $callerFrame = $trace[1]; + $i = 2; + } elseif (false !== $i = array_search($autoloadFrame, $trace, true)) { + $callerFrame = $trace[++$i]; + } else { throw $e; } - if (isset($trace[++$i]['function']) && !isset($trace[$i]['class'])) { - switch ($trace[$i]['function']) { + if (isset($callerFrame['function']) && !isset($callerFrame['class'])) { + switch ($callerFrame['function']) { case 'get_class_methods': case 'get_class_vars': case 'get_parent_class': @@ -214,8 +219,8 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ } $props = [ - 'file' => isset($trace[$i]['file']) ? $trace[$i]['file'] : null, - 'line' => isset($trace[$i]['line']) ? $trace[$i]['line'] : null, + 'file' => isset($callerFrame['file']) ? $callerFrame['file'] : null, + 'line' => isset($callerFrame['line']) ? $callerFrame['line'] : null, 'trace' => \array_slice($trace, 1 + $i), ]; diff --git a/civicrm/vendor/symfony/config/Resource/GlobResource.php b/civicrm/vendor/symfony/config/Resource/GlobResource.php index 13d2ee7d70..1aa3bcf693 100644 --- a/civicrm/vendor/symfony/config/Resource/GlobResource.php +++ b/civicrm/vendor/symfony/config/Resource/GlobResource.php @@ -100,7 +100,7 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, } if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/') && (\defined('GLOB_BRACE') || false === strpos($this->pattern, '{'))) { - $paths = glob($this->prefix.$this->pattern, GLOB_NOSORT | (\defined('GLOB_BRACE') ? GLOB_BRACE : 0)); + $paths = glob($this->prefix.$this->pattern, \GLOB_NOSORT | (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0)); sort($paths); foreach ($paths as $path) { if ($this->recursive && is_dir($path)) { diff --git a/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php b/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php index 4c8f89cd3f..79b21fbf4c 100644 --- a/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php +++ b/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php @@ -139,7 +139,11 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali $defaults = $class->getDefaultProperties(); foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED) as $p) { - yield $p->getDocComment().$p; + yield $p->getDocComment(); + yield $p->isDefault() ? '<default>' : ''; + yield $p->isPublic() ? 'public' : 'protected'; + yield $p->isStatic() ? 'static' : ''; + yield '$'.$p->name; yield print_r(isset($defaults[$p->name]) && !\is_object($defaults[$p->name]) ? $defaults[$p->name] : null, true); } } @@ -173,6 +177,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali if (!$parametersWithUndefinedConstants) { yield preg_replace('/^ @@.*/m', '', $m); } else { + $t = \PHP_VERSION_ID >= 70000 ? $m->getReturnType() : ''; $stack = [ $m->getDocComment(), $m->getName(), @@ -183,15 +188,16 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali $m->isPrivate(), $m->isProtected(), $m->returnsReference(), - \PHP_VERSION_ID >= 70000 && $m->hasReturnType() ? (\PHP_VERSION_ID >= 70100 ? $m->getReturnType()->getName() : (string) $m->getReturnType()) : '', + $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t, ]; foreach ($m->getParameters() as $p) { if (!isset($parametersWithUndefinedConstants[$p->name])) { $stack[] = (string) $p; } else { + $t = \PHP_VERSION_ID >= 70000 ? $p->getType() : ''; $stack[] = $p->isOptional(); - $stack[] = \PHP_VERSION_ID >= 70000 && $p->hasType() ? (\PHP_VERSION_ID >= 70100 ? $p->getType()->getName() : (string) $p->getType()) : ''; + $stack[] = $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t; $stack[] = $p->isPassedByReference(); $stack[] = \PHP_VERSION_ID >= 50600 ? $p->isVariadic() : ''; $stack[] = $p->getName(); diff --git a/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php b/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php index 092b95bf01..0538f3f442 100644 --- a/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php +++ b/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php @@ -137,7 +137,7 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface } } - if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN)) { + if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) { @opcache_invalidate($this->file, true); } } diff --git a/civicrm/vendor/symfony/config/Util/XmlUtils.php b/civicrm/vendor/symfony/config/Util/XmlUtils.php index c925f315e5..d833c428ef 100644 --- a/civicrm/vendor/symfony/config/Util/XmlUtils.php +++ b/civicrm/vendor/symfony/config/Util/XmlUtils.php @@ -51,13 +51,17 @@ class XmlUtils } $internalErrors = libxml_use_internal_errors(true); - $disableEntities = libxml_disable_entity_loader(true); + if (\LIBXML_VERSION < 20900) { + $disableEntities = libxml_disable_entity_loader(true); + } libxml_clear_errors(); $dom = new \DOMDocument(); $dom->validateOnParse = true; - if (!$dom->loadXML($content, LIBXML_NONET | (\defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0))) { - libxml_disable_entity_loader($disableEntities); + if (!$dom->loadXML($content, \LIBXML_NONET | (\defined('LIBXML_COMPACT') ? \LIBXML_COMPACT : 0))) { + if (\LIBXML_VERSION < 20900) { + libxml_disable_entity_loader($disableEntities); + } throw new XmlParsingException(implode("\n", static::getXmlErrors($internalErrors))); } @@ -65,10 +69,12 @@ class XmlUtils $dom->normalizeDocument(); libxml_use_internal_errors($internalErrors); - libxml_disable_entity_loader($disableEntities); + if (\LIBXML_VERSION < 20900) { + libxml_disable_entity_loader($disableEntities); + } foreach ($dom->childNodes as $child) { - if (XML_DOCUMENT_TYPE_NODE === $child->nodeType) { + if (\XML_DOCUMENT_TYPE_NODE === $child->nodeType) { throw new XmlParsingException('Document types are not allowed.'); } } @@ -261,7 +267,7 @@ class XmlUtils $errors = []; foreach (libxml_get_errors() as $error) { $errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)', - LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR', + \LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR', $error->code, trim($error->message), $error->file ?: 'n/a', diff --git a/civicrm/vendor/symfony/config/composer.json b/civicrm/vendor/symfony/config/composer.json index c04294dd4c..5088bdd832 100644 --- a/civicrm/vendor/symfony/config/composer.json +++ b/civicrm/vendor/symfony/config/composer.json @@ -39,10 +39,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php index 27969e7067..863bab4731 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php @@ -126,14 +126,14 @@ abstract class AbstractRecursivePass implements CompilerPassInterface throw new RuntimeException(sprintf('Invalid service "%s": class "%s" does not exist.', $this->currentId, $class)); } } catch (\ReflectionException $e) { - throw new RuntimeException(sprintf('Invalid service "%s": '.lcfirst($e->getMessage()), $this->currentId)); + throw new RuntimeException(sprintf('Invalid service "%s": ', $this->currentId).lcfirst($e->getMessage())); } if (!$r = $r->getConstructor()) { if ($required) { throw new RuntimeException(sprintf('Invalid service "%s": class%s has no constructor.', $this->currentId, sprintf($class !== $this->currentId ? ' "%s"' : '', $class))); } } elseif (!$r->isPublic()) { - throw new RuntimeException(sprintf('Invalid service "%s": %s must be public.', $this->currentId, sprintf($class !== $this->currentId ? 'constructor of class "%s"' : 'its constructor', $class))); + throw new RuntimeException(sprintf('Invalid service "%s": ', $this->currentId).sprintf($class !== $this->currentId ? 'constructor of class "%s"' : 'its constructor', $class).' must be public.'); } return $r; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php index 9a4c74d359..6a755025e2 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php @@ -11,7 +11,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; -@trigger_error('The '.__NAMESPACE__.'\AutowireExceptionPass class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the DefinitionErrorExceptionPass class instead.', E_USER_DEPRECATED); +@trigger_error('The '.__NAMESPACE__.'\AutowireExceptionPass class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the DefinitionErrorExceptionPass class instead.', \E_USER_DEPRECATED); use Symfony\Component\DependencyInjection\ContainerBuilder; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php index 91b279c77a..b1dae2a4f4 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php @@ -52,7 +52,7 @@ class AutowirePass extends AbstractRecursivePass */ public function getAutowiringExceptions() { - @trigger_error('Calling AutowirePass::getAutowiringExceptions() is deprecated since Symfony 3.4 and will be removed in 4.0. Use Definition::getErrors() instead.', E_USER_DEPRECATED); + @trigger_error('Calling AutowirePass::getAutowiringExceptions() is deprecated since Symfony 3.4 and will be removed in 4.0. Use Definition::getErrors() instead.', \E_USER_DEPRECATED); return $this->autowiringExceptions; } @@ -85,7 +85,7 @@ class AutowirePass extends AbstractRecursivePass */ public static function createResourceForClass(\ReflectionClass $reflectionClass) { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.', E_USER_DEPRECATED); + @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.', \E_USER_DEPRECATED); $metadata = []; @@ -304,7 +304,7 @@ class AutowirePass extends AbstractRecursivePass $message .= sprintf(' You should %s the "%s" service to "%s" instead.', isset($this->types[$this->types[$type]]) ? 'alias' : 'rename (or alias)', $this->types[$type], $type); } - @trigger_error($message, E_USER_DEPRECATED); + @trigger_error($message, \E_USER_DEPRECATED); return new TypedReference($this->types[$type], $type); } @@ -444,7 +444,7 @@ class AutowirePass extends AbstractRecursivePass $this->currentId = $currentId; } - @trigger_error(sprintf('Relying on service auto-registration for type "%s" is deprecated since Symfony 3.4 and won\'t be supported in 4.0. Create a service named "%s" instead.', $type, $type), E_USER_DEPRECATED); + @trigger_error(sprintf('Relying on service auto-registration for type "%s" is deprecated since Symfony 3.4 and won\'t be supported in 4.0. Create a service named "%s" instead.', $type, $type), \E_USER_DEPRECATED); $this->container->log($this, sprintf('Type "%s" has been auto-registered for service "%s".', $type, $this->currentId)); @@ -525,7 +525,16 @@ class AutowirePass extends AbstractRecursivePass $methodArgumentsMetadata = []; foreach ($method->getParameters() as $parameter) { try { - $class = $parameter->getClass(); + if (method_exists($parameter, 'getType')) { + $type = $parameter->getType(); + if ($type && !$type->isBuiltin()) { + $class = new \ReflectionClass($type instanceof \ReflectionNamedType ? $type->getName() : (string) $type); + } else { + $class = null; + } + } else { + $class = $parameter->getClass(); + } } catch (\ReflectionException $e) { // type-hint is against a non-existent class $class = false; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php b/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php index c5f698b012..0eb9d03664 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php @@ -62,7 +62,7 @@ class Compiler public function getLoggingFormatter() { if (null === $this->loggingFormatter) { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), \E_USER_DEPRECATED); $this->loggingFormatter = new LoggingFormatter(); } @@ -84,7 +84,7 @@ class Compiler if (__CLASS__ !== static::class) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName()) { - @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), \E_USER_DEPRECATED); } } @@ -103,7 +103,7 @@ class Compiler */ public function addLogMessage($string) { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), \E_USER_DEPRECATED); $this->log[] = $string; } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php index bbd857e154..bf5f91578f 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php @@ -26,7 +26,7 @@ class DecoratorServicePass implements CompilerPassInterface public function process(ContainerBuilder $container) { $definitions = new \SplPriorityQueue(); - $order = PHP_INT_MAX; + $order = \PHP_INT_MAX; foreach ($container->getDefinitions() as $id => $definition) { if (!$decorated = $definition->getDecoratedService()) { diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php index d688fb59fd..67575c03f3 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php @@ -27,7 +27,7 @@ class FactoryReturnTypePass implements CompilerPassInterface public function __construct(ResolveClassPass $resolveClassPass = null) { if (null === $resolveClassPass) { - @trigger_error('The '.__CLASS__.' class is deprecated since Symfony 3.3 and will be removed in 4.0.', E_USER_DEPRECATED); + @trigger_error('The '.__CLASS__.' class is deprecated since Symfony 3.3 and will be removed in 4.0.', \E_USER_DEPRECATED); } $this->resolveClassPass = $resolveClassPass; } @@ -93,7 +93,7 @@ class FactoryReturnTypePass implements CompilerPassInterface $returnType = $m->getReturnType(); if (null !== $returnType && !$returnType->isBuiltin()) { - $returnType = $returnType instanceof \ReflectionNamedType ? $returnType->getName() : $returnType->__toString(); + $returnType = $returnType instanceof \ReflectionNamedType ? $returnType->getName() : (string) $returnType; if (null !== $class) { $declaringClass = $m->getDeclaringClass()->getName(); if ('self' === strtolower($returnType)) { @@ -104,7 +104,7 @@ class FactoryReturnTypePass implements CompilerPassInterface } if (null !== $returnType && (!isset($resolveClassPassChanges[$id]) || $returnType !== $resolveClassPassChanges[$id])) { - @trigger_error(sprintf('Relying on its factory\'s return-type to define the class of service "%s" is deprecated since Symfony 3.3 and won\'t work in 4.0. Set the "class" attribute to "%s" on the service definition instead.', $id, $returnType), E_USER_DEPRECATED); + @trigger_error(sprintf('Relying on its factory\'s return-type to define the class of service "%s" is deprecated since Symfony 3.3 and won\'t work in 4.0. Set the "class" attribute to "%s" on the service definition instead.', $id, $returnType), \E_USER_DEPRECATED); } $definition->setClass($returnType); } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php index 326ee19323..9d8a02e7bd 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php @@ -45,7 +45,7 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass implements Repe */ public function getInlinedServiceIds() { - @trigger_error('Calling InlineServiceDefinitionsPass::getInlinedServiceIds() is deprecated since Symfony 3.4 and will be removed in 4.0.', E_USER_DEPRECATED); + @trigger_error('Calling InlineServiceDefinitionsPass::getInlinedServiceIds() is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED); return $this->inlinedServiceIds; } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php b/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php index b058d26238..0d91f00f7e 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php @@ -11,7 +11,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; -@trigger_error('The '.__NAMESPACE__.'\LoggingFormatter class is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', E_USER_DEPRECATED); +@trigger_error('The '.__NAMESPACE__.'\LoggingFormatter class is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', \E_USER_DEPRECATED); /** * Used to format logging messages during the compilation. diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php b/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php index e470cdec2d..d95b21988c 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php @@ -126,7 +126,7 @@ class PassConfig if (__CLASS__ !== static::class) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName()) { - @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), \E_USER_DEPRECATED); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php index d48eff2214..79fca8d5ec 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php @@ -11,7 +11,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; -@trigger_error('The '.__NAMESPACE__.'\ResolveDefinitionTemplatesPass class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the ResolveChildDefinitionsPass class instead.', E_USER_DEPRECATED); +@trigger_error('The '.__NAMESPACE__.'\ResolveDefinitionTemplatesPass class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the ResolveChildDefinitionsPass class instead.', \E_USER_DEPRECATED); class_exists(ResolveChildDefinitionsPass::class); diff --git a/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php b/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php index 0c3d8f5758..68c1e3f6a2 100644 --- a/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php +++ b/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php @@ -11,7 +11,7 @@ namespace Symfony\Component\DependencyInjection\Config; -@trigger_error('The '.__NAMESPACE__.'\AutowireServiceResource class is deprecated since Symfony 3.3 and will be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.', E_USER_DEPRECATED); +@trigger_error('The '.__NAMESPACE__.'\AutowireServiceResource class is deprecated since Symfony 3.3 and will be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.', \E_USER_DEPRECATED); use Symfony\Component\Config\Resource\SelfCheckingResourceInterface; use Symfony\Component\DependencyInjection\Compiler\AutowirePass; diff --git a/civicrm/vendor/symfony/dependency-injection/Container.php b/civicrm/vendor/symfony/dependency-injection/Container.php index b9f44b0bf9..e9d53023d9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Container.php +++ b/civicrm/vendor/symfony/dependency-injection/Container.php @@ -104,7 +104,7 @@ class Container implements ResettableContainerInterface */ public function isFrozen() { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), \E_USER_DEPRECATED); return $this->parameterBag instanceof FrozenParameterBag; } @@ -184,16 +184,16 @@ class Container implements ResettableContainerInterface if (!isset($this->privates[$id]) && !isset($this->getRemovedIds()[$id])) { // no-op } elseif (null === $service) { - @trigger_error(sprintf('The "%s" service is private, unsetting it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service is private, unsetting it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); unset($this->privates[$id]); } else { - @trigger_error(sprintf('The "%s" service is private, replacing it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service is private, replacing it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); } } elseif (isset($this->services[$id])) { if (null === $service) { - @trigger_error(sprintf('The "%s" service is already initialized, unsetting it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service is already initialized, unsetting it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), \E_USER_DEPRECATED); } else { - @trigger_error(sprintf('The "%s" service is already initialized, replacing it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service is already initialized, replacing it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), \E_USER_DEPRECATED); } } @@ -221,7 +221,7 @@ class Container implements ResettableContainerInterface { for ($i = 2;;) { if (isset($this->privates[$id])) { - @trigger_error(sprintf('The "%s" service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); } if (isset($this->aliases[$id])) { $id = $this->aliases[$id]; @@ -245,7 +245,7 @@ class Container implements ResettableContainerInterface // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) if (!$this->methodMap && !$this instanceof ContainerBuilder && __CLASS__ !== static::class && method_exists($this, 'get'.strtr($id, $this->underscoreMap).'Service')) { - @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', E_USER_DEPRECATED); + @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); return true; } @@ -279,7 +279,7 @@ class Container implements ResettableContainerInterface // calling $this->normalizeId($id) unless necessary. for ($i = 2;;) { if (isset($this->privates[$id])) { - @trigger_error(sprintf('The "%s" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead.', $id), \E_USER_DEPRECATED); } if (isset($this->aliases[$id])) { $id = $this->aliases[$id]; @@ -311,7 +311,7 @@ class Container implements ResettableContainerInterface } elseif (!$this->methodMap && !$this instanceof ContainerBuilder && __CLASS__ !== static::class && method_exists($this, $method = 'get'.strtr($id, $this->underscoreMap).'Service')) { // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) - @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', E_USER_DEPRECATED); + @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->{$method}(); } @@ -361,7 +361,7 @@ class Container implements ResettableContainerInterface $id = $this->normalizeId($id); if (isset($this->privates[$id])) { - @trigger_error(sprintf('Checking for the initialization of the "%s" private service is deprecated since Symfony 3.4 and won\'t be supported anymore in Symfony 4.0.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('Checking for the initialization of the "%s" private service is deprecated since Symfony 3.4 and won\'t be supported anymore in Symfony 4.0.', $id), \E_USER_DEPRECATED); } if (isset($this->aliases[$id])) { @@ -395,7 +395,7 @@ class Container implements ResettableContainerInterface if (!$this->methodMap && !$this instanceof ContainerBuilder && __CLASS__ !== static::class) { // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) - @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', E_USER_DEPRECATED); + @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); foreach (get_class_methods($this) as $method) { if (preg_match('/^get(.+)Service$/', $method, $match)) { @@ -511,7 +511,7 @@ class Container implements ResettableContainerInterface if (isset($this->normalizedIds[$normalizedId = strtolower($id)])) { $normalizedId = $this->normalizedIds[$normalizedId]; if ($id !== $normalizedId) { - @trigger_error(sprintf('Service identifiers will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.3.', $id, $normalizedId), E_USER_DEPRECATED); + @trigger_error(sprintf('Service identifiers will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.3.', $id, $normalizedId), \E_USER_DEPRECATED); } } else { $normalizedId = $this->normalizedIds[$normalizedId] = $id; diff --git a/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php b/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php index 7c9860b4dc..97617cb04e 100644 --- a/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php +++ b/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php @@ -334,7 +334,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function addClassResource(\ReflectionClass $class) { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the addObjectResource() or the getReflectionClass() method instead.', E_USER_DEPRECATED); + @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the addObjectResource() or the getReflectionClass() method instead.', \E_USER_DEPRECATED); return $this->addObjectResource($class->name); } @@ -477,7 +477,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface if (__CLASS__ !== static::class) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName()) { - @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), \E_USER_DEPRECATED); } } @@ -582,7 +582,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface public function get($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) { if ($this->isCompiled() && isset($this->removedIds[$id = $this->normalizeId($id)])) { - @trigger_error(sprintf('Fetching the "%s" private service or alias is deprecated since Symfony 3.4 and will fail in 4.0. Make it public instead.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('Fetching the "%s" private service or alias is deprecated since Symfony 3.4 and will fail in 4.0. Make it public instead.', $id), \E_USER_DEPRECATED); } return $this->doGet($id, $invalidBehavior); @@ -768,7 +768,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface if (__CLASS__ !== static::class) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName() && (1 > $r->getNumberOfParameters() || 'resolveEnvPlaceholders' !== $r->getParameters()[0]->name)) { - @trigger_error(sprintf('The %s::compile() method expects a first "$resolveEnvPlaceholders" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s::compile() method expects a first "$resolveEnvPlaceholders" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), \E_USER_DEPRECATED); } } $resolveEnvPlaceholders = false; @@ -1124,7 +1124,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } if ($definition->isDeprecated()) { - @trigger_error($definition->getDeprecationMessage($id), E_USER_DEPRECATED); + @trigger_error($definition->getDeprecationMessage($id), \E_USER_DEPRECATED); } if ($tryProxy && $definition->isLazy() && !$tryProxy = !($proxy = $this->proxyInstantiator) || $proxy instanceof RealServiceInstantiator) { @@ -1167,19 +1167,19 @@ class ContainerBuilder extends Container implements TaggedContainerInterface $r = new \ReflectionClass($factory[0]); if (0 < strpos($r->getDocComment(), "\n * @deprecated ")) { - @trigger_error(sprintf('The "%s" service relies on the deprecated "%s" factory class. It should either be deprecated or its factory upgraded.', $id, $r->name), E_USER_DEPRECATED); + @trigger_error(sprintf('The "%s" service relies on the deprecated "%s" factory class. It should either be deprecated or its factory upgraded.', $id, $r->name), \E_USER_DEPRECATED); } } } else { $r = new \ReflectionClass($class = $parameterBag->resolveValue($definition->getClass())); - $service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments); + $service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs(array_values($arguments)); // don't trigger deprecations for internal uses // @deprecated since version 3.3, to be removed in 4.0 along with the deprecated class - $deprecationWhitelist = ['event_dispatcher' => ContainerAwareEventDispatcher::class]; + $deprecationAllowlist = ['event_dispatcher' => ContainerAwareEventDispatcher::class]; - if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ") && (!isset($deprecationWhitelist[$id]) || $deprecationWhitelist[$id] !== $class)) { - @trigger_error(sprintf('The "%s" service relies on the deprecated "%s" class. It should either be deprecated or its implementation upgraded.', $id, $r->name), E_USER_DEPRECATED); + if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ") && (!isset($deprecationAllowlist[$id]) || $deprecationAllowlist[$id] !== $class)) { + @trigger_error(sprintf('The "%s" service relies on the deprecated "%s" class. It should either be deprecated or its implementation upgraded.', $id, $r->name), \E_USER_DEPRECATED); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Definition.php b/civicrm/vendor/symfony/dependency-injection/Definition.php index c7d2049484..c3a94f5c3c 100644 --- a/civicrm/vendor/symfony/dependency-injection/Definition.php +++ b/civicrm/vendor/symfony/dependency-injection/Definition.php @@ -814,7 +814,7 @@ class Definition */ public function setAutowiringTypes(array $types) { - @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED); + @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', \E_USER_DEPRECATED); $this->autowiringTypes = []; @@ -861,7 +861,7 @@ class Definition public function getAutowiringTypes(/*$triggerDeprecation = true*/) { if (1 > \func_num_args() || func_get_arg(0)) { - @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED); + @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', \E_USER_DEPRECATED); } return array_keys($this->autowiringTypes); @@ -878,7 +878,7 @@ class Definition */ public function addAutowiringType($type) { - @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED); + @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), \E_USER_DEPRECATED); $this->autowiringTypes[$type] = true; @@ -896,7 +896,7 @@ class Definition */ public function removeAutowiringType($type) { - @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED); + @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), \E_USER_DEPRECATED); unset($this->autowiringTypes[$type]); @@ -914,7 +914,7 @@ class Definition */ public function hasAutowiringType($type) { - @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED); + @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), \E_USER_DEPRECATED); return isset($this->autowiringTypes[$type]); } diff --git a/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php b/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php index 99af39e89d..4753c2aa93 100644 --- a/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php +++ b/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php @@ -11,7 +11,7 @@ namespace Symfony\Component\DependencyInjection; -@trigger_error('The '.__NAMESPACE__.'\DefinitionDecorator class is deprecated since Symfony 3.3 and will be removed in 4.0. Use the Symfony\Component\DependencyInjection\ChildDefinition class instead.', E_USER_DEPRECATED); +@trigger_error('The '.__NAMESPACE__.'\DefinitionDecorator class is deprecated since Symfony 3.3 and will be removed in 4.0. Use the Symfony\Component\DependencyInjection\ChildDefinition class instead.', \E_USER_DEPRECATED); class_exists(ChildDefinition::class); diff --git a/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php b/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php index 3bfa0c3188..8605d755b3 100644 --- a/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php +++ b/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php @@ -82,7 +82,7 @@ class PhpDumper extends Dumper public function __construct(ContainerBuilder $container) { if (!$container->isCompiled()) { - @trigger_error('Dumping an uncompiled ContainerBuilder is deprecated since Symfony 3.3 and will not be supported anymore in 4.0. Compile the container beforehand.', E_USER_DEPRECATED); + @trigger_error('Dumping an uncompiled ContainerBuilder is deprecated since Symfony 3.3 and will not be supported anymore in 4.0. Compile the container beforehand.', \E_USER_DEPRECATED); } parent::__construct($container); @@ -191,7 +191,7 @@ class PhpDumper extends Dumper $regex = preg_quote(\DIRECTORY_SEPARATOR.$dir[$i], '#').$regex; } while (0 < --$i); - $this->targetDirRegex = '#'.preg_quote($dir[0], '#').$regex.'#'; + $this->targetDirRegex = '#(^|file://|[:;, \|\r\n])'.preg_quote($dir[0], '#').$regex.'#'; } } @@ -374,6 +374,9 @@ EOF; return; } $file = $r->getFileName(); + if (') : eval()\'d code' === substr($file, -17)) { + $file = substr($file, 0, strrpos($file, '(', -17)); + } if (!$file || $this->doExport($file) === $exportedFile = $this->export($file)) { return; } @@ -1992,12 +1995,13 @@ EOF; private function export($value) { - if (null !== $this->targetDirRegex && \is_string($value) && preg_match($this->targetDirRegex, $value, $matches, PREG_OFFSET_CAPTURE)) { - $prefix = $matches[0][1] ? $this->doExport(substr($value, 0, $matches[0][1]), true).'.' : ''; + if (null !== $this->targetDirRegex && \is_string($value) && preg_match($this->targetDirRegex, $value, $matches, \PREG_OFFSET_CAPTURE)) { $suffix = $matches[0][1] + \strlen($matches[0][0]); + $matches[0][1] += \strlen($matches[1][0]); + $prefix = $matches[0][1] ? $this->doExport(substr($value, 0, $matches[0][1]), true).'.' : ''; $suffix = isset($value[$suffix]) ? '.'.$this->doExport(substr($value, $suffix), true) : ''; $dirname = $this->asFiles ? '$this->containerDir' : '__DIR__'; - $offset = 1 + $this->targetDirMaxMatches - \count($matches); + $offset = 2 + $this->targetDirMaxMatches - \count($matches); if ($this->asFiles || 0 < $offset) { $dirname = sprintf('$this->targetDirs[%d]', $offset); diff --git a/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php b/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php index 3410103764..065673dc19 100644 --- a/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php +++ b/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php @@ -124,8 +124,8 @@ class EnvVarProcessor implements EnvVarProcessorInterface if ('json' === $prefix) { $env = json_decode($env, true); - if (JSON_ERROR_NONE !== json_last_error()) { - throw new RuntimeException(sprintf('Invalid JSON in env var "%s": '.json_last_error_msg(), $name)); + if (\JSON_ERROR_NONE !== json_last_error()) { + throw new RuntimeException(sprintf('Invalid JSON in env var "%s": ', $name).json_last_error_msg()); } if (!\is_array($env)) { diff --git a/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php b/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php index cb19c729c1..bfa65f56f0 100644 --- a/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php +++ b/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php @@ -39,26 +39,36 @@ class ProxyHelper if (!$type) { return null; } - if (!\is_string($type)) { - $name = $type instanceof \ReflectionNamedType ? $type->getName() : $type->__toString(); - if ($type->isBuiltin()) { - return $noBuiltin ? null : $name; + $types = []; + + foreach ($type instanceof \ReflectionUnionType ? $type->getTypes() : [$type] as $type) { + $name = $type instanceof \ReflectionNamedType ? $type->getName() : (string) $type; + + if (!\is_string($type) && $type->isBuiltin()) { + if (!$noBuiltin) { + $types[] = $name; + } + continue; } - } - $lcName = strtolower($name); - $prefix = $noBuiltin ? '' : '\\'; - if ('self' !== $lcName && 'parent' !== $lcName) { - return $prefix.$name; - } - if (!$r instanceof \ReflectionMethod) { - return null; - } - if ('self' === $lcName) { - return $prefix.$r->getDeclaringClass()->name; + $lcName = strtolower($name); + $prefix = $noBuiltin ? '' : '\\'; + + if ('self' !== $lcName && 'parent' !== $lcName) { + $types[] = '' !== $prefix ? $prefix.$name : $name; + continue; + } + if (!$r instanceof \ReflectionMethod) { + continue; + } + if ('self' === $lcName) { + $types[] = $prefix.$r->getDeclaringClass()->name; + } else { + $types[] = ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null; + } } - return ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null; + return $types ? implode('|', $types) : null; } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php index 307a3eefbb..6c07c67345 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php @@ -37,7 +37,7 @@ class IniFileLoader extends FileLoader } // real raw parsing - $result = parse_ini_file($path, true, INI_SCANNER_RAW); + $result = parse_ini_file($path, true, \INI_SCANNER_RAW); if (isset($result['parameters']) && \is_array($result['parameters'])) { foreach ($result['parameters'] as $key => $value) { @@ -55,7 +55,7 @@ class IniFileLoader extends FileLoader return false; } - if (null === $type && 'ini' === pathinfo($resource, PATHINFO_EXTENSION)) { + if (null === $type && 'ini' === pathinfo($resource, \PATHINFO_EXTENSION)) { return true; } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php index ff8df43f84..ddb671ff26 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php @@ -57,7 +57,7 @@ class PhpFileLoader extends FileLoader return false; } - if (null === $type && 'php' === pathinfo($resource, PATHINFO_EXTENSION)) { + if (null === $type && 'php' === pathinfo($resource, \PATHINFO_EXTENSION)) { return true; } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php index 6ccb66a421..0ff54ee66e 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php @@ -76,7 +76,7 @@ class XmlFileLoader extends FileLoader return false; } - if (null === $type && 'xml' === pathinfo($resource, PATHINFO_EXTENSION)) { + if (null === $type && 'xml' === pathinfo($resource, \PATHINFO_EXTENSION)) { return true; } @@ -378,7 +378,7 @@ class XmlFileLoader extends FileLoader try { $dom = XmlUtils::loadFile($file, [$this, 'validateSchema']); } catch (\InvalidArgumentException $e) { - throw new InvalidArgumentException(sprintf('Unable to parse file "%s": "%s".', $file, $e->getMessage()), $e->getCode(), $e); + throw new InvalidArgumentException(sprintf('Unable to parse file "%s": ', $file).$e->getMessage(), $e->getCode(), $e); } $this->validateExtensions($dom, $file); @@ -423,7 +423,7 @@ class XmlFileLoader extends FileLoader // anonymous services "in the wild" if (false !== $nodes = $xpath->query('//container:services/container:service[not(@id)]')) { foreach ($nodes as $node) { - @trigger_error(sprintf('Top-level anonymous services are deprecated since Symfony 3.4, the "id" attribute will be required in version 4.0 in %s at line %d.', $file, $node->getLineNo()), E_USER_DEPRECATED); + @trigger_error(sprintf('Top-level anonymous services are deprecated since Symfony 3.4, the "id" attribute will be required in version 4.0 in %s at line %d.', $file, $node->getLineNo()), \E_USER_DEPRECATED); // give it a unique name $id = sprintf('%d_%s', ++$count, preg_replace('/^.*\\\\/', '', $node->getAttribute('class')).$suffix); @@ -492,7 +492,7 @@ class XmlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="service" has no or empty "id" attribute in "%s".', $name, $file)); } if ($arg->hasAttribute('strict')) { - @trigger_error(sprintf('The "strict" attribute used when referencing the "%s" service is deprecated since Symfony 3.3 and will be removed in 4.0.', $arg->getAttribute('id')), E_USER_DEPRECATED); + @trigger_error(sprintf('The "strict" attribute used when referencing the "%s" service is deprecated since Symfony 3.3 and will be removed in 4.0.', $arg->getAttribute('id')), \E_USER_DEPRECATED); } $arguments[$key] = new Reference($arg->getAttribute('id'), $invalidBehavior); @@ -620,9 +620,13 @@ $imports EOF ; - $disableEntities = libxml_disable_entity_loader(false); - $valid = @$dom->schemaValidateSource($source); - libxml_disable_entity_loader($disableEntities); + if (\LIBXML_VERSION < 20900) { + $disableEntities = libxml_disable_entity_loader(false); + $valid = @$dom->schemaValidateSource($source); + libxml_disable_entity_loader($disableEntities); + } else { + $valid = @$dom->schemaValidateSource($source); + } foreach ($tmpfiles as $tmpfile) { @unlink($tmpfile); @@ -640,13 +644,13 @@ EOF { foreach ($alias->attributes as $name => $node) { if (!\in_array($name, ['alias', 'id', 'public'])) { - @trigger_error(sprintf('Using the attribute "%s" is deprecated for the service "%s" which is defined as an alias in "%s". Allowed attributes for service aliases are "alias", "id" and "public". The XmlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $name, $alias->getAttribute('id'), $file), E_USER_DEPRECATED); + @trigger_error(sprintf('Using the attribute "%s" is deprecated for the service "%s" which is defined as an alias in "%s". Allowed attributes for service aliases are "alias", "id" and "public". The XmlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $name, $alias->getAttribute('id'), $file), \E_USER_DEPRECATED); } } foreach ($alias->childNodes as $child) { if ($child instanceof \DOMElement && self::NS === $child->namespaceURI) { - @trigger_error(sprintf('Using the element "%s" is deprecated for the service "%s" which is defined as an alias in "%s". The XmlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported elements.', $child->localName, $alias->getAttribute('id'), $file), E_USER_DEPRECATED); + @trigger_error(sprintf('Using the element "%s" is deprecated for the service "%s" which is defined as an alias in "%s". The XmlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported elements.', $child->localName, $alias->getAttribute('id'), $file), \E_USER_DEPRECATED); } } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php index bc0c55e94d..e598bc4ce4 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php @@ -160,7 +160,7 @@ class YamlFileLoader extends FileLoader return false; } - if (null === $type && \in_array(pathinfo($resource, PATHINFO_EXTENSION), ['yaml', 'yml'], true)) { + if (null === $type && \in_array(pathinfo($resource, \PATHINFO_EXTENSION), ['yaml', 'yml'], true)) { return true; } @@ -328,7 +328,7 @@ class YamlFileLoader extends FileLoader private function parseDefinition($id, $service, $file, array $defaults) { if (preg_match('/^_[a-zA-Z0-9_]*$/', $id)) { - @trigger_error(sprintf('Service names that start with an underscore are deprecated since Symfony 3.3 and will be reserved in 4.0. Rename the "%s" service or define it in XML instead.', $id), E_USER_DEPRECATED); + @trigger_error(sprintf('Service names that start with an underscore are deprecated since Symfony 3.3 and will be reserved in 4.0. Rename the "%s" service or define it in XML instead.', $id), \E_USER_DEPRECATED); } if (\is_string($service) && 0 === strpos($service, '@')) { $this->container->setAlias($id, $alias = new Alias(substr($service, 1))); @@ -363,7 +363,7 @@ class YamlFileLoader extends FileLoader foreach ($service as $key => $value) { if (!\in_array($key, ['alias', 'public'])) { - @trigger_error(sprintf('The configuration key "%s" is unsupported for the service "%s" which is defined as an alias in "%s". Allowed configuration keys for service aliases are "alias" and "public". The YamlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $key, $id, $file), E_USER_DEPRECATED); + @trigger_error(sprintf('The configuration key "%s" is unsupported for the service "%s" which is defined as an alias in "%s". Allowed configuration keys for service aliases are "alias" and "public". The YamlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $key, $id, $file), \E_USER_DEPRECATED); } } @@ -652,7 +652,7 @@ class YamlFileLoader extends FileLoader } $prevErrorHandler = set_error_handler(function ($level, $message, $script, $line) use ($file, &$prevErrorHandler) { - $message = E_USER_DEPRECATED === $level ? preg_replace('/ on line \d+/', ' in "'.$file.'"$0', $message) : $message; + $message = \E_USER_DEPRECATED === $level ? preg_replace('/ on line \d+/', ' in "'.$file.'"$0', $message) : $message; return $prevErrorHandler ? $prevErrorHandler($level, $message, $script, $line) : false; }); @@ -660,7 +660,7 @@ class YamlFileLoader extends FileLoader try { $configuration = $this->yamlParser->parseFile($file, Yaml::PARSE_CONSTANT | Yaml::PARSE_CUSTOM_TAGS); } catch (ParseException $e) { - throw new InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML: '.$e->getMessage(), $file), 0, $e); + throw new InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML: ', $file).$e->getMessage(), 0, $e); } finally { restore_error_handler(); } @@ -787,7 +787,7 @@ class YamlFileLoader extends FileLoader } if ('=' === substr($value, -1)) { - @trigger_error(sprintf('The "=" suffix that used to disable strict references in Symfony 2.x is deprecated since Symfony 3.3 and will be unsupported in 4.0. Remove it in "%s".', $value), E_USER_DEPRECATED); + @trigger_error(sprintf('The "=" suffix that used to disable strict references in Symfony 2.x is deprecated since Symfony 3.3 and will be unsupported in 4.0. Remove it in "%s".', $value), \E_USER_DEPRECATED); $value = substr($value, 0, -1); } @@ -840,7 +840,7 @@ class YamlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('The configuration key "%s" is unsupported for definition "%s" in "%s". Allowed configuration keys are "%s".', $key, $id, $file, implode('", "', $keywords))); } - @trigger_error(sprintf('The configuration key "%s" is unsupported for service definition "%s" in "%s". Allowed configuration keys are "%s". The YamlFileLoader object will raise an exception instead in Symfony 4.0 when detecting an unsupported service configuration key.', $key, $id, $file, implode('", "', $keywords)), E_USER_DEPRECATED); + @trigger_error(sprintf('The configuration key "%s" is unsupported for service definition "%s" in "%s". Allowed configuration keys are "%s". The YamlFileLoader object will raise an exception instead in Symfony 4.0 when detecting an unsupported service configuration key.', $key, $id, $file, implode('", "', $keywords)), \E_USER_DEPRECATED); } } } diff --git a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php index 539d56616d..24dc8035fe 100644 --- a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php +++ b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php @@ -296,7 +296,7 @@ class ParameterBag implements ParameterBagInterface if (isset($this->normalizedNames[$normalizedName = strtolower($name)])) { $normalizedName = $this->normalizedNames[$normalizedName]; if ((string) $name !== $normalizedName) { - @trigger_error(sprintf('Parameter names will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.4.', $name, $normalizedName), E_USER_DEPRECATED); + @trigger_error(sprintf('Parameter names will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.4.', $name, $normalizedName), \E_USER_DEPRECATED); } } else { $normalizedName = $this->normalizedNames[$normalizedName] = (string) $name; diff --git a/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php b/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php index a4f5bf9945..80be44ebaa 100644 --- a/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php +++ b/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php @@ -90,7 +90,7 @@ class ServiceLocator implements PsrContainerInterface return sprintf('The service "%s" has a dependency on a non-existent service "%s". This locator %s', end($this->loading), $id, $this->formatAlternatives()); } - $class = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, 3); + $class = debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT | \DEBUG_BACKTRACE_IGNORE_ARGS, 3); $class = isset($class[2]['object']) ? \get_class($class[2]['object']) : null; $externalId = $this->externalId ?: $class; diff --git a/civicrm/vendor/symfony/dependency-injection/composer.json b/civicrm/vendor/symfony/dependency-injection/composer.json index 6eaa3fd089..eee41ce022 100644 --- a/civicrm/vendor/symfony/dependency-injection/composer.json +++ b/civicrm/vendor/symfony/dependency-injection/composer.json @@ -46,10 +46,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php b/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php index 8f53a9d06a..cbb9b12a6a 100644 --- a/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php +++ b/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php @@ -47,7 +47,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher $class = get_parent_class($class); } if (__CLASS__ !== $class) { - @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), \E_USER_DEPRECATED); } } @@ -65,7 +65,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher */ public function addListenerService($eventName, $callback, $priority = 0) { - @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), \E_USER_DEPRECATED); if (!\is_array($callback) || 2 !== \count($callback)) { throw new \InvalidArgumentException('Expected an ["service", "method"] argument.'); @@ -147,7 +147,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher */ public function addSubscriberService($serviceId, $class) { - @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), \E_USER_DEPRECATED); foreach ($class::getSubscribedEvents() as $eventName => $params) { if (\is_string($params)) { @@ -164,7 +164,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher public function getContainer() { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 as its class will be removed in 4.0. Inject the container or the services you need in your listeners/subscribers instead.', E_USER_DEPRECATED); + @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 as its class will be removed in 4.0. Inject the container or the services you need in your listeners/subscribers instead.', \E_USER_DEPRECATED); return $this->container; } diff --git a/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php b/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php index 824f21599c..741590b1bf 100644 --- a/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php +++ b/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php @@ -40,6 +40,9 @@ interface EventSubscriberInterface * * ['eventName' => ['methodName', $priority]] * * ['eventName' => [['methodName1', $priority], ['methodName2']]] * + * The code must not depend on runtime state as it will only be called at compile time. + * All logic depending on runtime state must be put into the individual methods handling the events. + * * @return array The event names to listen to */ public static function getSubscribedEvents(); diff --git a/civicrm/vendor/symfony/event-dispatcher/composer.json b/civicrm/vendor/symfony/event-dispatcher/composer.json index 75b881b917..408022f6bf 100644 --- a/civicrm/vendor/symfony/event-dispatcher/composer.json +++ b/civicrm/vendor/symfony/event-dispatcher/composer.json @@ -22,6 +22,7 @@ "symfony/dependency-injection": "~3.3|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/config": "~2.8|~3.0|~4.0", + "symfony/debug": "~3.4|~4.4", "symfony/stopwatch": "~2.8|~3.0|~4.0", "psr/log": "~1.0" }, @@ -38,10 +39,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/symfony/filesystem/Filesystem.php b/civicrm/vendor/symfony/filesystem/Filesystem.php index a8701533cb..96b2e96009 100644 --- a/civicrm/vendor/symfony/filesystem/Filesystem.php +++ b/civicrm/vendor/symfony/filesystem/Filesystem.php @@ -47,7 +47,7 @@ class Filesystem $this->mkdir(\dirname($targetFile)); $doCopy = true; - if (!$overwriteNewerFiles && null === parse_url($originFile, PHP_URL_HOST) && is_file($targetFile)) { + if (!$overwriteNewerFiles && null === parse_url($originFile, \PHP_URL_HOST) && is_file($targetFile)) { $doCopy = filemtime($originFile) > filemtime($targetFile); } @@ -101,7 +101,7 @@ class Filesystem if (!is_dir($dir)) { // The directory was not created by a concurrent process. Let's throw an exception with a developer friendly error message if we have one if (self::$lastError) { - throw new IOException(sprintf('Failed to create "%s": '.self::$lastError, $dir), 0, null, $dir); + throw new IOException(sprintf('Failed to create "%s": ', $dir).self::$lastError, 0, null, $dir); } throw new IOException(sprintf('Failed to create "%s".', $dir), 0, null, $dir); } @@ -118,7 +118,7 @@ class Filesystem */ public function exists($files) { - $maxPathLength = PHP_MAXPATHLEN - 2; + $maxPathLength = \PHP_MAXPATHLEN - 2; foreach ($this->toIterable($files) as $file) { if (\strlen($file) > $maxPathLength) { @@ -171,16 +171,16 @@ class Filesystem if (is_link($file)) { // See https://bugs.php.net/52176 if (!(self::box('unlink', $file) || '\\' !== \DIRECTORY_SEPARATOR || self::box('rmdir', $file)) && file_exists($file)) { - throw new IOException(sprintf('Failed to remove symlink "%s": '.self::$lastError, $file)); + throw new IOException(sprintf('Failed to remove symlink "%s": ', $file).self::$lastError); } } elseif (is_dir($file)) { $this->remove(new \FilesystemIterator($file, \FilesystemIterator::CURRENT_AS_PATHNAME | \FilesystemIterator::SKIP_DOTS)); if (!self::box('rmdir', $file) && file_exists($file)) { - throw new IOException(sprintf('Failed to remove directory "%s": '.self::$lastError, $file)); + throw new IOException(sprintf('Failed to remove directory "%s": ', $file).self::$lastError); } - } elseif (!self::box('unlink', $file) && file_exists($file)) { - throw new IOException(sprintf('Failed to remove file "%s": '.self::$lastError, $file)); + } elseif (!self::box('unlink', $file) && (false !== strpos(self::$lastError, 'Permission denied') || file_exists($file))) { + throw new IOException(sprintf('Failed to remove file "%s": ', $file).self::$lastError); } } } @@ -198,7 +198,7 @@ class Filesystem public function chmod($files, $mode, $umask = 0000, $recursive = false) { foreach ($this->toIterable($files) as $file) { - if (true !== @chmod($file, $mode & ~$umask)) { + if ((\PHP_VERSION_ID < 80000 || \is_int($mode)) && true !== @chmod($file, $mode & ~$umask)) { throw new IOException(sprintf('Failed to chmod file "%s".', $file), 0, null, $file); } if ($recursive && is_dir($file) && !is_link($file)) { @@ -301,7 +301,7 @@ class Filesystem */ private function isReadable($filename) { - $maxPathLength = PHP_MAXPATHLEN - 2; + $maxPathLength = \PHP_MAXPATHLEN - 2; if (\strlen($filename) > $maxPathLength) { throw new IOException(sprintf('Could not check if file is readable because path length exceeds %d characters.', $maxPathLength), 0, null, $filename); @@ -446,7 +446,7 @@ class Filesystem public function makePathRelative($endPath, $startPath) { if (!$this->isAbsolutePath($endPath) || !$this->isAbsolutePath($startPath)) { - @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED); } // Normalize separators on Windows @@ -455,28 +455,19 @@ class Filesystem $startPath = str_replace('\\', '/', $startPath); } - $stripDriveLetter = function ($path) { - if (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) { - return substr($path, 2); - } - - return $path; + $splitDriveLetter = function ($path) { + return (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) + ? [substr($path, 2), strtoupper($path[0])] + : [$path, null]; }; - $endPath = $stripDriveLetter($endPath); - $startPath = $stripDriveLetter($startPath); - - // Split the paths into arrays - $startPathArr = explode('/', trim($startPath, '/')); - $endPathArr = explode('/', trim($endPath, '/')); - - $normalizePathArray = function ($pathSegments, $absolute) { + $splitPath = function ($path, $absolute) { $result = []; - foreach ($pathSegments as $segment) { + foreach (explode('/', trim($path, '/')) as $segment) { if ('..' === $segment && ($absolute || \count($result))) { array_pop($result); - } elseif ('.' !== $segment) { + } elseif ('.' !== $segment && '' !== $segment) { $result[] = $segment; } } @@ -484,8 +475,16 @@ class Filesystem return $result; }; - $startPathArr = $normalizePathArray($startPathArr, static::isAbsolutePath($startPath)); - $endPathArr = $normalizePathArray($endPathArr, static::isAbsolutePath($endPath)); + list($endPath, $endDriveLetter) = $splitDriveLetter($endPath); + list($startPath, $startDriveLetter) = $splitDriveLetter($startPath); + + $startPathArr = $splitPath($startPath, static::isAbsolutePath($startPath)); + $endPathArr = $splitPath($endPath, static::isAbsolutePath($endPath)); + + if ($endDriveLetter && $startDriveLetter && $endDriveLetter != $startDriveLetter) { + // End path is on another drive, so no relative path exists + return $endDriveLetter.':/'.($endPathArr ? implode('/', $endPathArr).'/' : ''); + } // Find for which directory the common path stops $index = 0; @@ -600,13 +599,13 @@ class Filesystem */ public function isAbsolutePath($file) { - return strspn($file, '/\\', 0, 1) + return '' !== (string) $file && (strspn($file, '/\\', 0, 1) || (\strlen($file) > 3 && ctype_alpha($file[0]) && ':' === $file[1] && strspn($file, '/\\', 2, 1) ) - || null !== parse_url($file, PHP_URL_SCHEME) - ; + || null !== parse_url($file, \PHP_URL_SCHEME) + ); } /** @@ -714,7 +713,7 @@ class Filesystem throw new IOException(sprintf('Unable to write to the "%s" directory.', $dir), 0, null, $dir); } - if (false === @file_put_contents($filename, $content, FILE_APPEND)) { + if (false === @file_put_contents($filename, $content, \FILE_APPEND)) { throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename); } } diff --git a/civicrm/vendor/symfony/filesystem/LockHandler.php b/civicrm/vendor/symfony/filesystem/LockHandler.php index 8e0eb74121..2aacfa719b 100644 --- a/civicrm/vendor/symfony/filesystem/LockHandler.php +++ b/civicrm/vendor/symfony/filesystem/LockHandler.php @@ -15,7 +15,7 @@ use Symfony\Component\Filesystem\Exception\IOException; use Symfony\Component\Lock\Store\FlockStore; use Symfony\Component\Lock\Store\SemaphoreStore; -@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), E_USER_DEPRECATED); +@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), \E_USER_DEPRECATED); /** * LockHandler class provides a simple abstraction to lock anything by means of @@ -97,7 +97,7 @@ class LockHandler // On Windows, even if PHP doc says the contrary, LOCK_NB works, see // https://bugs.php.net/54129 - if (!flock($this->handle, LOCK_EX | ($blocking ? 0 : LOCK_NB))) { + if (!flock($this->handle, \LOCK_EX | ($blocking ? 0 : \LOCK_NB))) { fclose($this->handle); $this->handle = null; @@ -113,7 +113,7 @@ class LockHandler public function release() { if ($this->handle) { - flock($this->handle, LOCK_UN | LOCK_NB); + flock($this->handle, \LOCK_UN | \LOCK_NB); fclose($this->handle); $this->handle = null; } diff --git a/civicrm/vendor/symfony/filesystem/composer.json b/civicrm/vendor/symfony/filesystem/composer.json index 0fc8043cc0..ee48b0b238 100644 --- a/civicrm/vendor/symfony/filesystem/composer.json +++ b/civicrm/vendor/symfony/filesystem/composer.json @@ -25,10 +25,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/symfony/finder/Finder.php b/civicrm/vendor/symfony/finder/Finder.php index 33a76cc976..186cb32298 100644 --- a/civicrm/vendor/symfony/finder/Finder.php +++ b/civicrm/vendor/symfony/finder/Finder.php @@ -541,7 +541,7 @@ class Finder implements \IteratorAggregate, \Countable foreach ((array) $dirs as $dir) { if (is_dir($dir)) { $resolvedDirs[] = $this->normalizeDir($dir); - } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? GLOB_BRACE : 0) | GLOB_ONLYDIR | GLOB_NOSORT)) { + } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { sort($glob); $resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob)); } else { @@ -616,7 +616,7 @@ class Finder implements \IteratorAggregate, \Countable } /** - * Check if the any results were found. + * Check if any results were found. * * @return bool */ @@ -658,7 +658,7 @@ class Finder implements \IteratorAggregate, \Countable } $minDepth = 0; - $maxDepth = PHP_INT_MAX; + $maxDepth = \PHP_INT_MAX; foreach ($this->depths as $comparator) { switch ($comparator->getOperator()) { @@ -693,7 +693,7 @@ class Finder implements \IteratorAggregate, \Countable $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); - if ($minDepth > 0 || $maxDepth < PHP_INT_MAX) { + if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); } diff --git a/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php index ce9d3aa73a..d9bbeb48f1 100644 --- a/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -25,10 +25,10 @@ class DepthRangeFilterIterator extends FilterIterator * @param int $minDepth The min depth * @param int $maxDepth The max depth */ - public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = PHP_INT_MAX) + public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = \PHP_INT_MAX) { $this->minDepth = $minDepth; - $iterator->setMaxDepth(PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); + $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); parent::__construct($iterator); } diff --git a/civicrm/vendor/symfony/finder/composer.json b/civicrm/vendor/symfony/finder/composer.json index de19826f73..b0895524be 100644 --- a/civicrm/vendor/symfony/finder/composer.json +++ b/civicrm/vendor/symfony/finder/composer.json @@ -24,10 +24,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/symfony/process/ExecutableFinder.php b/civicrm/vendor/symfony/process/ExecutableFinder.php index cb4345e7bb..ff68ed3319 100644 --- a/civicrm/vendor/symfony/process/ExecutableFinder.php +++ b/civicrm/vendor/symfony/process/ExecutableFinder.php @@ -51,7 +51,7 @@ class ExecutableFinder public function find($name, $default = null, array $extraDirs = []) { if (ini_get('open_basedir')) { - $searchPath = array_merge(explode(PATH_SEPARATOR, ini_get('open_basedir')), $extraDirs); + $searchPath = array_merge(explode(\PATH_SEPARATOR, ini_get('open_basedir')), $extraDirs); $dirs = []; foreach ($searchPath as $path) { // Silencing against https://bugs.php.net/69240 @@ -65,7 +65,7 @@ class ExecutableFinder } } else { $dirs = array_merge( - explode(PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')), + explode(\PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')), $extraDirs ); } @@ -73,7 +73,7 @@ class ExecutableFinder $suffixes = ['']; if ('\\' === \DIRECTORY_SEPARATOR) { $pathExt = getenv('PATHEXT'); - $suffixes = array_merge($pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes, $suffixes); + $suffixes = array_merge($pathExt ? explode(\PATH_SEPARATOR, $pathExt) : $this->suffixes, $suffixes); } foreach ($suffixes as $suffix) { foreach ($dirs as $dir) { diff --git a/civicrm/vendor/symfony/process/PhpExecutableFinder.php b/civicrm/vendor/symfony/process/PhpExecutableFinder.php index a97aa12cbf..b9a8015655 100644 --- a/civicrm/vendor/symfony/process/PhpExecutableFinder.php +++ b/civicrm/vendor/symfony/process/PhpExecutableFinder.php @@ -40,12 +40,12 @@ class PhpExecutableFinder // HHVM support if (\defined('HHVM_VERSION')) { - return (getenv('PHP_BINARY') ?: PHP_BINARY).$args; + return (getenv('PHP_BINARY') ?: \PHP_BINARY).$args; } // PHP_BINARY return the current sapi executable - if (PHP_BINARY && \in_array(\PHP_SAPI, ['cli', 'cli-server', 'phpdbg'], true)) { - return PHP_BINARY.$args; + if (\PHP_BINARY && \in_array(\PHP_SAPI, ['cli', 'cli-server', 'phpdbg'], true)) { + return \PHP_BINARY.$args; } if ($php = getenv('PHP_PATH')) { @@ -62,11 +62,11 @@ class PhpExecutableFinder } } - if (@is_executable($php = PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php'))) { + if (@is_executable($php = \PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php'))) { return $php; } - $dirs = [PHP_BINDIR]; + $dirs = [\PHP_BINDIR]; if ('\\' === \DIRECTORY_SEPARATOR) { $dirs[] = 'C:\xampp\php\\'; } diff --git a/civicrm/vendor/symfony/process/PhpProcess.php b/civicrm/vendor/symfony/process/PhpProcess.php index f0c47b285a..a29c0db287 100644 --- a/civicrm/vendor/symfony/process/PhpProcess.php +++ b/civicrm/vendor/symfony/process/PhpProcess.php @@ -47,7 +47,7 @@ class PhpProcess extends Process $script = null; } if (null !== $options) { - @trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), E_USER_DEPRECATED); + @trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), \E_USER_DEPRECATED); } parent::__construct($php, $cwd, $env, $script, $timeout, $options); diff --git a/civicrm/vendor/symfony/process/Pipes/UnixPipes.php b/civicrm/vendor/symfony/process/Pipes/UnixPipes.php index 1ebf2138a5..5784a315bd 100644 --- a/civicrm/vendor/symfony/process/Pipes/UnixPipes.php +++ b/civicrm/vendor/symfony/process/Pipes/UnixPipes.php @@ -118,7 +118,7 @@ class UnixPipes extends AbstractPipes $read[$type = array_search($pipe, $this->pipes, true)] = ''; do { - $data = fread($pipe, self::CHUNK_SIZE); + $data = @fread($pipe, self::CHUNK_SIZE); $read[$type] .= $data; } while (isset($data[0]) && ($close || isset($data[self::CHUNK_SIZE - 1]))); diff --git a/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php b/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php index 302b0509a8..36ea57e5bc 100644 --- a/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php +++ b/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php @@ -56,20 +56,23 @@ class WindowsPipes extends AbstractPipes $file = sprintf('%s\\sf_proc_%02X.%s', $tmpDir, $i, $name); if (!$h = fopen($file.'.lock', 'w')) { + if (file_exists($file.'.lock')) { + continue 2; + } restore_error_handler(); throw new RuntimeException('A temporary file could not be opened to write the process output: '.$lastError); } - if (!flock($h, LOCK_EX | LOCK_NB)) { + if (!flock($h, \LOCK_EX | \LOCK_NB)) { continue 2; } if (isset($this->lockHandles[$pipe])) { - flock($this->lockHandles[$pipe], LOCK_UN); + flock($this->lockHandles[$pipe], \LOCK_UN); fclose($this->lockHandles[$pipe]); } $this->lockHandles[$pipe] = $h; if (!fclose(fopen($file, 'w')) || !$h = fopen($file, 'r')) { - flock($this->lockHandles[$pipe], LOCK_UN); + flock($this->lockHandles[$pipe], \LOCK_UN); fclose($this->lockHandles[$pipe]); unset($this->lockHandles[$pipe]); continue 2; @@ -149,7 +152,7 @@ class WindowsPipes extends AbstractPipes if ($close) { ftruncate($fileHandle, 0); fclose($fileHandle); - flock($this->lockHandles[$type], LOCK_UN); + flock($this->lockHandles[$type], \LOCK_UN); fclose($this->lockHandles[$type]); unset($this->fileHandles[$type], $this->lockHandles[$type]); } @@ -183,7 +186,7 @@ class WindowsPipes extends AbstractPipes foreach ($this->fileHandles as $type => $handle) { ftruncate($handle, 0); fclose($handle); - flock($this->lockHandles[$type], LOCK_UN); + flock($this->lockHandles[$type], \LOCK_UN); fclose($this->lockHandles[$type]); } $this->fileHandles = $this->lockHandles = []; diff --git a/civicrm/vendor/symfony/process/Process.php b/civicrm/vendor/symfony/process/Process.php index 68d52512ed..91ce2c4987 100644 --- a/civicrm/vendor/symfony/process/Process.php +++ b/civicrm/vendor/symfony/process/Process.php @@ -167,7 +167,7 @@ class Process implements \IteratorAggregate $this->pty = false; $this->enhanceSigchildCompatibility = '\\' !== \DIRECTORY_SEPARATOR && $this->isSigchildEnabled(); if (null !== $options) { - @trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), E_USER_DEPRECATED); + @trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), \E_USER_DEPRECATED); $this->options = array_replace($this->options, $options); } } @@ -268,7 +268,7 @@ class Process implements \IteratorAggregate if (__CLASS__ !== static::class) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName() && (2 > $r->getNumberOfParameters() || 'env' !== $r->getParameters()[1]->name)) { - @trigger_error(sprintf('The %s::start() method expects a second "$env" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s::start() method expects a second "$env" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), \E_USER_DEPRECATED); } } $env = null; @@ -302,7 +302,7 @@ class Process implements \IteratorAggregate if (null !== $env && $inheritEnv) { $env += $this->getDefaultEnv(); } elseif (null !== $env) { - @trigger_error('Not inheriting environment variables is deprecated since Symfony 3.3 and will always happen in 4.0. Set "Process::inheritEnvironmentVariables()" to true instead.', E_USER_DEPRECATED); + @trigger_error('Not inheriting environment variables is deprecated since Symfony 3.3 and will always happen in 4.0. Set "Process::inheritEnvironmentVariables()" to true instead.', \E_USER_DEPRECATED); } else { $env = $this->getDefaultEnv(); } @@ -333,7 +333,7 @@ class Process implements \IteratorAggregate } if (!is_dir($this->cwd)) { - @trigger_error('The provided cwd does not exist. Command is currently ran against getcwd(). This behavior is deprecated since Symfony 3.4 and will be removed in 4.0.', E_USER_DEPRECATED); + @trigger_error('The provided cwd does not exist. Command is currently ran against getcwd(). This behavior is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED); } $this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options); @@ -906,7 +906,7 @@ class Process implements \IteratorAggregate { $this->lastOutputTime = microtime(true); - fseek($this->stdout, 0, SEEK_END); + fseek($this->stdout, 0, \SEEK_END); fwrite($this->stdout, $line); fseek($this->stdout, $this->incrementalOutputOffset); } @@ -922,7 +922,7 @@ class Process implements \IteratorAggregate { $this->lastOutputTime = microtime(true); - fseek($this->stderr, 0, SEEK_END); + fseek($this->stderr, 0, \SEEK_END); fwrite($this->stderr, $line); fseek($this->stderr, $this->incrementalErrorOutputOffset); } @@ -1185,7 +1185,7 @@ class Process implements \IteratorAggregate */ public function getOptions() { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED); return $this->options; } @@ -1201,7 +1201,7 @@ class Process implements \IteratorAggregate */ public function setOptions(array $options) { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED); $this->options = $options; @@ -1219,7 +1219,7 @@ class Process implements \IteratorAggregate */ public function getEnhanceWindowsCompatibility() { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Enhanced Windows compatibility will always be enabled.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Enhanced Windows compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); return $this->enhanceWindowsCompatibility; } @@ -1235,7 +1235,7 @@ class Process implements \IteratorAggregate */ public function setEnhanceWindowsCompatibility($enhance) { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Enhanced Windows compatibility will always be enabled.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Enhanced Windows compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); $this->enhanceWindowsCompatibility = (bool) $enhance; @@ -1251,7 +1251,7 @@ class Process implements \IteratorAggregate */ public function getEnhanceSigchildCompatibility() { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); return $this->enhanceSigchildCompatibility; } @@ -1271,7 +1271,7 @@ class Process implements \IteratorAggregate */ public function setEnhanceSigchildCompatibility($enhance) { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); $this->enhanceSigchildCompatibility = (bool) $enhance; @@ -1288,7 +1288,7 @@ class Process implements \IteratorAggregate public function inheritEnvironmentVariables($inheritEnv = true) { if (!$inheritEnv) { - @trigger_error('Not inheriting environment variables is deprecated since Symfony 3.3 and will always happen in 4.0. Set "Process::inheritEnvironmentVariables()" to true instead.', E_USER_DEPRECATED); + @trigger_error('Not inheriting environment variables is deprecated since Symfony 3.3 and will always happen in 4.0. Set "Process::inheritEnvironmentVariables()" to true instead.', \E_USER_DEPRECATED); } $this->inheritEnv = (bool) $inheritEnv; @@ -1305,7 +1305,7 @@ class Process implements \IteratorAggregate */ public function areEnvironmentVariablesInherited() { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Environment variables will always be inherited.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Environment variables will always be inherited.', __METHOD__), \E_USER_DEPRECATED); return $this->inheritEnv; } @@ -1452,7 +1452,7 @@ class Process implements \IteratorAggregate } ob_start(); - phpinfo(INFO_GENERAL); + phpinfo(\INFO_GENERAL); return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild'); } diff --git a/civicrm/vendor/symfony/process/ProcessBuilder.php b/civicrm/vendor/symfony/process/ProcessBuilder.php index 69d13c3f1b..6a8e1ef83d 100644 --- a/civicrm/vendor/symfony/process/ProcessBuilder.php +++ b/civicrm/vendor/symfony/process/ProcessBuilder.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Process; -@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the Process class instead.', ProcessBuilder::class), E_USER_DEPRECATED); +@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the Process class instead.', ProcessBuilder::class), \E_USER_DEPRECATED); use Symfony\Component\Process\Exception\InvalidArgumentException; use Symfony\Component\Process\Exception\LogicException; diff --git a/civicrm/vendor/symfony/process/ProcessUtils.php b/civicrm/vendor/symfony/process/ProcessUtils.php index 74f2d8654a..1c02768845 100644 --- a/civicrm/vendor/symfony/process/ProcessUtils.php +++ b/civicrm/vendor/symfony/process/ProcessUtils.php @@ -40,7 +40,7 @@ class ProcessUtils */ public static function escapeArgument($argument) { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use a command line array or give env vars to the Process::start/run() method instead.', E_USER_DEPRECATED); + @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use a command line array or give env vars to the Process::start/run() method instead.', \E_USER_DEPRECATED); //Fix for PHP bug #43784 escapeshellarg removes % from given string //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows @@ -53,7 +53,7 @@ class ProcessUtils $escapedArgument = ''; $quote = false; - foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { + foreach (preg_split('/(")/', $argument, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE) as $part) { if ('"' === $part) { $escapedArgument .= '\\"'; } elseif (self::isSurroundedBy($part, '%')) { diff --git a/civicrm/vendor/symfony/process/composer.json b/civicrm/vendor/symfony/process/composer.json index b8867db368..f88f521410 100644 --- a/civicrm/vendor/symfony/process/composer.json +++ b/civicrm/vendor/symfony/process/composer.json @@ -24,10 +24,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/symfony/var-dumper/Caster/AmqpCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/AmqpCaster.php index 19bdc29525..dc7a6414fc 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/AmqpCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/AmqpCaster.php @@ -21,27 +21,27 @@ use Symfony\Component\VarDumper\Cloner\Stub; class AmqpCaster { private static $flags = [ - AMQP_DURABLE => 'AMQP_DURABLE', - AMQP_PASSIVE => 'AMQP_PASSIVE', - AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE', - AMQP_AUTODELETE => 'AMQP_AUTODELETE', - AMQP_INTERNAL => 'AMQP_INTERNAL', - AMQP_NOLOCAL => 'AMQP_NOLOCAL', - AMQP_AUTOACK => 'AMQP_AUTOACK', - AMQP_IFEMPTY => 'AMQP_IFEMPTY', - AMQP_IFUNUSED => 'AMQP_IFUNUSED', - AMQP_MANDATORY => 'AMQP_MANDATORY', - AMQP_IMMEDIATE => 'AMQP_IMMEDIATE', - AMQP_MULTIPLE => 'AMQP_MULTIPLE', - AMQP_NOWAIT => 'AMQP_NOWAIT', - AMQP_REQUEUE => 'AMQP_REQUEUE', + \AMQP_DURABLE => 'AMQP_DURABLE', + \AMQP_PASSIVE => 'AMQP_PASSIVE', + \AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE', + \AMQP_AUTODELETE => 'AMQP_AUTODELETE', + \AMQP_INTERNAL => 'AMQP_INTERNAL', + \AMQP_NOLOCAL => 'AMQP_NOLOCAL', + \AMQP_AUTOACK => 'AMQP_AUTOACK', + \AMQP_IFEMPTY => 'AMQP_IFEMPTY', + \AMQP_IFUNUSED => 'AMQP_IFUNUSED', + \AMQP_MANDATORY => 'AMQP_MANDATORY', + \AMQP_IMMEDIATE => 'AMQP_IMMEDIATE', + \AMQP_MULTIPLE => 'AMQP_MULTIPLE', + \AMQP_NOWAIT => 'AMQP_NOWAIT', + \AMQP_REQUEUE => 'AMQP_REQUEUE', ]; private static $exchangeTypes = [ - AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT', - AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT', - AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC', - AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS', + \AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT', + \AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT', + \AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC', + \AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS', ]; public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, $isNested) diff --git a/civicrm/vendor/symfony/var-dumper/Caster/Caster.php b/civicrm/vendor/symfony/var-dumper/Caster/Caster.php index a78410f2f7..a6ebc25bdd 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/Caster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/Caster.php @@ -49,7 +49,7 @@ class Caster public static function castObject($obj, $class, $hasDebugInfo = false, $debugClass = null) { if ($class instanceof \ReflectionClass) { - @trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.', __METHOD__), \E_USER_DEPRECATED); $hasDebugInfo = $class->hasMethod('__debugInfo'); $class = $class->name; } diff --git a/civicrm/vendor/symfony/var-dumper/Caster/DOMCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/DOMCaster.php index 65151b4f4f..fef3d432a7 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/DOMCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/DOMCaster.php @@ -21,44 +21,44 @@ use Symfony\Component\VarDumper\Cloner\Stub; class DOMCaster { private static $errorCodes = [ - DOM_PHP_ERR => 'DOM_PHP_ERR', - DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR', - DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR', - DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR', - DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR', - DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR', - DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR', - DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR', - DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR', - DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR', - DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR', - DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR', - DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR', - DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR', - DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR', - DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR', - DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR', + \DOM_PHP_ERR => 'DOM_PHP_ERR', + \DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR', + \DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR', + \DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR', + \DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR', + \DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR', + \DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR', + \DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR', + \DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR', + \DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR', + \DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR', + \DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR', + \DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR', + \DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR', + \DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR', + \DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR', + \DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR', ]; private static $nodeTypes = [ - XML_ELEMENT_NODE => 'XML_ELEMENT_NODE', - XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE', - XML_TEXT_NODE => 'XML_TEXT_NODE', - XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE', - XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE', - XML_ENTITY_NODE => 'XML_ENTITY_NODE', - XML_PI_NODE => 'XML_PI_NODE', - XML_COMMENT_NODE => 'XML_COMMENT_NODE', - XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE', - XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE', - XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE', - XML_NOTATION_NODE => 'XML_NOTATION_NODE', - XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE', - XML_DTD_NODE => 'XML_DTD_NODE', - XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE', - XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE', - XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE', - XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', + \XML_ELEMENT_NODE => 'XML_ELEMENT_NODE', + \XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE', + \XML_TEXT_NODE => 'XML_TEXT_NODE', + \XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE', + \XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE', + \XML_ENTITY_NODE => 'XML_ENTITY_NODE', + \XML_PI_NODE => 'XML_PI_NODE', + \XML_COMMENT_NODE => 'XML_COMMENT_NODE', + \XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE', + \XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE', + \XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE', + \XML_NOTATION_NODE => 'XML_NOTATION_NODE', + \XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE', + \XML_DTD_NODE => 'XML_DTD_NODE', + \XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE', + \XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE', + \XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE', + \XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', ]; public static function castException(\DOMException $e, array $a, Stub $stub, $isNested) diff --git a/civicrm/vendor/symfony/var-dumper/Caster/ExceptionCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/ExceptionCaster.php index e0acbe39df..62b57402f8 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/ExceptionCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/ExceptionCaster.php @@ -25,21 +25,21 @@ class ExceptionCaster public static $srcContext = 1; public static $traceArgs = true; public static $errorTypes = [ - E_DEPRECATED => 'E_DEPRECATED', - E_USER_DEPRECATED => 'E_USER_DEPRECATED', - E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', - E_ERROR => 'E_ERROR', - E_WARNING => 'E_WARNING', - E_PARSE => 'E_PARSE', - E_NOTICE => 'E_NOTICE', - E_CORE_ERROR => 'E_CORE_ERROR', - E_CORE_WARNING => 'E_CORE_WARNING', - E_COMPILE_ERROR => 'E_COMPILE_ERROR', - E_COMPILE_WARNING => 'E_COMPILE_WARNING', - E_USER_ERROR => 'E_USER_ERROR', - E_USER_WARNING => 'E_USER_WARNING', - E_USER_NOTICE => 'E_USER_NOTICE', - E_STRICT => 'E_STRICT', + \E_DEPRECATED => 'E_DEPRECATED', + \E_USER_DEPRECATED => 'E_USER_DEPRECATED', + \E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', + \E_ERROR => 'E_ERROR', + \E_WARNING => 'E_WARNING', + \E_PARSE => 'E_PARSE', + \E_NOTICE => 'E_NOTICE', + \E_CORE_ERROR => 'E_CORE_ERROR', + \E_CORE_WARNING => 'E_CORE_WARNING', + \E_COMPILE_ERROR => 'E_COMPILE_ERROR', + \E_COMPILE_WARNING => 'E_COMPILE_WARNING', + \E_USER_ERROR => 'E_USER_ERROR', + \E_USER_WARNING => 'E_USER_WARNING', + \E_USER_NOTICE => 'E_USER_NOTICE', + \E_STRICT => 'E_STRICT', ]; private static $framesCache = []; diff --git a/civicrm/vendor/symfony/var-dumper/Caster/MongoCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/MongoCaster.php index 3b8fb338e5..98f1b8e25d 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/MongoCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/MongoCaster.php @@ -13,7 +13,7 @@ namespace Symfony\Component\VarDumper\Caster; use Symfony\Component\VarDumper\Cloner\Stub; -@trigger_error('The '.__NAMESPACE__.'\MongoCaster class is deprecated since Symfony 3.4 and will be removed in 4.0.', E_USER_DEPRECATED); +@trigger_error('The '.__NAMESPACE__.'\MongoCaster class is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED); /** * Casts classes from the MongoDb extension to array representation. diff --git a/civicrm/vendor/symfony/var-dumper/Caster/PgSqlCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/PgSqlCaster.php index cd6bf5b5fe..fe1f0cc8d9 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/PgSqlCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/PgSqlCaster.php @@ -34,37 +34,37 @@ class PgSqlCaster ]; private static $transactionStatus = [ - PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE', - PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE', - PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS', - PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR', - PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN', + \PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE', + \PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE', + \PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS', + \PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR', + \PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN', ]; private static $resultStatus = [ - PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY', - PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK', - PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK', - PGSQL_COPY_OUT => 'PGSQL_COPY_OUT', - PGSQL_COPY_IN => 'PGSQL_COPY_IN', - PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE', - PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR', - PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR', + \PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY', + \PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK', + \PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK', + \PGSQL_COPY_OUT => 'PGSQL_COPY_OUT', + \PGSQL_COPY_IN => 'PGSQL_COPY_IN', + \PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE', + \PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR', + \PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR', ]; private static $diagCodes = [ - 'severity' => PGSQL_DIAG_SEVERITY, - 'sqlstate' => PGSQL_DIAG_SQLSTATE, - 'message' => PGSQL_DIAG_MESSAGE_PRIMARY, - 'detail' => PGSQL_DIAG_MESSAGE_DETAIL, - 'hint' => PGSQL_DIAG_MESSAGE_HINT, - 'statement position' => PGSQL_DIAG_STATEMENT_POSITION, - 'internal position' => PGSQL_DIAG_INTERNAL_POSITION, - 'internal query' => PGSQL_DIAG_INTERNAL_QUERY, - 'context' => PGSQL_DIAG_CONTEXT, - 'file' => PGSQL_DIAG_SOURCE_FILE, - 'line' => PGSQL_DIAG_SOURCE_LINE, - 'function' => PGSQL_DIAG_SOURCE_FUNCTION, + 'severity' => \PGSQL_DIAG_SEVERITY, + 'sqlstate' => \PGSQL_DIAG_SQLSTATE, + 'message' => \PGSQL_DIAG_MESSAGE_PRIMARY, + 'detail' => \PGSQL_DIAG_MESSAGE_DETAIL, + 'hint' => \PGSQL_DIAG_MESSAGE_HINT, + 'statement position' => \PGSQL_DIAG_STATEMENT_POSITION, + 'internal position' => \PGSQL_DIAG_INTERNAL_POSITION, + 'internal query' => \PGSQL_DIAG_INTERNAL_QUERY, + 'context' => \PGSQL_DIAG_CONTEXT, + 'file' => \PGSQL_DIAG_SOURCE_FILE, + 'line' => \PGSQL_DIAG_SOURCE_LINE, + 'function' => \PGSQL_DIAG_SOURCE_FUNCTION, ]; public static function castLargeObject($lo, array $a, Stub $stub, $isNested) @@ -77,7 +77,7 @@ class PgSqlCaster public static function castLink($link, array $a, Stub $stub, $isNested) { $a['status'] = pg_connection_status($link); - $a['status'] = new ConstStub(PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']); + $a['status'] = new ConstStub(\PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']); $a['busy'] = pg_connection_busy($link); $a['transaction'] = pg_transaction_status($link); @@ -113,7 +113,7 @@ class PgSqlCaster if (isset(self::$resultStatus[$a['status']])) { $a['status'] = new ConstStub(self::$resultStatus[$a['status']], $a['status']); } - $a['command-completion tag'] = pg_result_status($result, PGSQL_STATUS_STRING); + $a['command-completion tag'] = pg_result_status($result, \PGSQL_STATUS_STRING); if (-1 === $a['num rows']) { foreach (self::$diagCodes as $k => $v) { diff --git a/civicrm/vendor/symfony/var-dumper/Caster/ReflectionCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/ReflectionCaster.php index 31de78e961..f19886172a 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/ReflectionCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/ReflectionCaster.php @@ -114,7 +114,7 @@ class ReflectionCaster 'file' => $c->getExecutingFile(), 'line' => $c->getExecutingLine(), ]; - if ($trace = $c->getTrace(DEBUG_BACKTRACE_IGNORE_ARGS)) { + if ($trace = $c->getTrace(\DEBUG_BACKTRACE_IGNORE_ARGS)) { $function = new \ReflectionGenerator($c->getExecutingGenerator()); array_unshift($trace, [ 'function' => 'yield', diff --git a/civicrm/vendor/symfony/var-dumper/Caster/SplCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/SplCaster.php index 53df3de239..360a1a416e 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/SplCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/SplCaster.php @@ -92,10 +92,32 @@ class SplCaster unset($a["\0SplFileInfo\0fileName"]); unset($a["\0SplFileInfo\0pathName"]); - if (false === $c->getPathname()) { - $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state'; + if (\PHP_VERSION_ID < 80000) { + if (false === $c->getPathname()) { + $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state'; - return $a; + return $a; + } + } else { + try { + $c->isReadable(); + } catch (\RuntimeException $e) { + if ('Object not initialized' !== $e->getMessage()) { + throw $e; + } + + $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state'; + + return $a; + } catch (\Error $e) { + if ('Object not initialized' !== $e->getMessage()) { + throw $e; + } + + $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state'; + + return $a; + } } foreach ($map as $key => $accessor) { diff --git a/civicrm/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php b/civicrm/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php index 117138c784..99c1486483 100644 --- a/civicrm/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php +++ b/civicrm/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php @@ -21,28 +21,28 @@ use Symfony\Component\VarDumper\Cloner\Stub; class XmlResourceCaster { private static $xmlErrors = [ - XML_ERROR_NONE => 'XML_ERROR_NONE', - XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY', - XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX', - XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS', - XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN', - XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN', - XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR', - XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH', - XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE', - XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT', - XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF', - XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY', - XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF', - XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY', - XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF', - XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF', - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF', - XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI', - XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING', - XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING', - XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION', - XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING', + \XML_ERROR_NONE => 'XML_ERROR_NONE', + \XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY', + \XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX', + \XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS', + \XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN', + \XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN', + \XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR', + \XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH', + \XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE', + \XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT', + \XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF', + \XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY', + \XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF', + \XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY', + \XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF', + \XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF', + \XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF', + \XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI', + \XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING', + \XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING', + \XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION', + \XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING', ]; public static function castXml($h, array $a, Stub $stub, $isNested) diff --git a/civicrm/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/civicrm/vendor/symfony/var-dumper/Cloner/AbstractCloner.php index 2e1af1d776..76b55b478b 100644 --- a/civicrm/vendor/symfony/var-dumper/Cloner/AbstractCloner.php +++ b/civicrm/vendor/symfony/var-dumper/Cloner/AbstractCloner.php @@ -218,7 +218,7 @@ abstract class AbstractCloner implements ClonerInterface public function cloneVar($var, $filter = 0) { $this->prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) { - if (E_RECOVERABLE_ERROR === $type || E_USER_ERROR === $type) { + if (\E_RECOVERABLE_ERROR === $type || \E_USER_ERROR === $type) { // Cloner never dies throw new \ErrorException($msg, 0, $type, $file, $line); } diff --git a/civicrm/vendor/symfony/var-dumper/Cloner/Data.php b/civicrm/vendor/symfony/var-dumper/Cloner/Data.php index 42742d852d..3973720794 100644 --- a/civicrm/vendor/symfony/var-dumper/Cloner/Data.php +++ b/civicrm/vendor/symfony/var-dumper/Cloner/Data.php @@ -306,7 +306,7 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate } } elseif (Stub::TYPE_REF === $item->type) { if ($item->handle) { - if (!isset($refs[$r = $item->handle - (PHP_INT_MAX >> 1)])) { + if (!isset($refs[$r = $item->handle - (\PHP_INT_MAX >> 1)])) { $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0]; } else { $firstSeen = false; diff --git a/civicrm/vendor/symfony/var-dumper/Cloner/VarCloner.php b/civicrm/vendor/symfony/var-dumper/Cloner/VarCloner.php index e69e44407c..8c4221220e 100644 --- a/civicrm/vendor/symfony/var-dumper/Cloner/VarCloner.php +++ b/civicrm/vendor/symfony/var-dumper/Cloner/VarCloner.php @@ -247,7 +247,7 @@ class VarCloner extends AbstractCloner $stub->position = $len++; } elseif ($pos < $maxItems) { if ($maxItems < $pos += \count($a)) { - $a = \array_slice($a, 0, $maxItems - $pos); + $a = \array_slice($a, 0, $maxItems - $pos, true); if ($stub->cut >= 0) { $stub->cut += $pos - $maxItems; } @@ -317,7 +317,7 @@ class VarCloner extends AbstractCloner } else { // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below $obFuncs = ['ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush']; - foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) { + foreach (debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) { if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) { $frame['line'] = 0; break; diff --git a/civicrm/vendor/symfony/var-dumper/Dumper/AbstractDumper.php b/civicrm/vendor/symfony/var-dumper/Dumper/AbstractDumper.php index 87195bb6a1..5ea6294f3d 100644 --- a/civicrm/vendor/symfony/var-dumper/Dumper/AbstractDumper.php +++ b/civicrm/vendor/symfony/var-dumper/Dumper/AbstractDumper.php @@ -126,8 +126,8 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface $this->decimalPoint = localeconv(); $this->decimalPoint = $this->decimalPoint['decimal_point']; - if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(LC_NUMERIC, 0) : null) { - setlocale(LC_NUMERIC, 'C'); + if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(\LC_NUMERIC, 0) : null) { + setlocale(\LC_NUMERIC, 'C'); } if ($returnDump = true === $output) { @@ -151,7 +151,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface $this->setOutput($prevOutput); } if ($locale) { - setlocale(LC_NUMERIC, $locale); + setlocale(\LC_NUMERIC, $locale); } } diff --git a/civicrm/vendor/symfony/var-dumper/Dumper/CliDumper.php b/civicrm/vendor/symfony/var-dumper/Dumper/CliDumper.php index 76737a499f..4c48ab7cc8 100644 --- a/civicrm/vendor/symfony/var-dumper/Dumper/CliDumper.php +++ b/civicrm/vendor/symfony/var-dumper/Dumper/CliDumper.php @@ -131,8 +131,8 @@ class CliDumper extends AbstractDumper $style = 'num'; switch (true) { - case INF === $value: $value = 'INF'; break; - case -INF === $value: $value = '-INF'; break; + case \INF === $value: $value = 'INF'; break; + case -\INF === $value: $value = '-INF'; break; case is_nan($value): $value = 'NAN'; break; default: $value = (string) $value; diff --git a/civicrm/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/civicrm/vendor/symfony/var-dumper/Dumper/HtmlDumper.php index b2f6ee7012..ccbdc96f23 100644 --- a/civicrm/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +++ b/civicrm/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -128,7 +128,7 @@ class HtmlDumper extends CliDumper return $this->dumpHeader; } - $line = str_replace('{$options}', json_encode($this->displayOptions, JSON_FORCE_OBJECT), <<<'EOHTML' + $line = str_replace('{$options}', json_encode($this->displayOptions, \JSON_FORCE_OBJECT), <<<'EOHTML' <script> Sfdump = window.Sfdump || (function (doc) { @@ -871,7 +871,7 @@ EOHTML if (-1 === $depth) { $args = ['"'.$this->dumpId.'"']; if ($this->extraDisplayOptions) { - $args[] = json_encode($this->extraDisplayOptions, JSON_FORCE_OBJECT); + $args[] = json_encode($this->extraDisplayOptions, \JSON_FORCE_OBJECT); } // Replace is for BC $this->line .= sprintf(str_replace('"%s"', '%s', $this->dumpSuffix), implode(', ', $args)); @@ -900,5 +900,5 @@ EOHTML function esc($str) { - return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); + return htmlspecialchars($str, \ENT_QUOTES, 'UTF-8'); } diff --git a/civicrm/vendor/symfony/var-dumper/composer.json b/civicrm/vendor/symfony/var-dumper/composer.json index d31e0b495a..9f2352ee25 100644 --- a/civicrm/vendor/symfony/var-dumper/composer.json +++ b/civicrm/vendor/symfony/var-dumper/composer.json @@ -38,10 +38,5 @@ "/Tests/" ] }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - } + "minimum-stability": "dev" } diff --git a/civicrm/vendor/tecnickcom/tcpdf/.gitignore b/civicrm/vendor/tecnickcom/tcpdf/.gitignore index 723ef36f4e..ecd820615b 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/.gitignore +++ b/civicrm/vendor/tecnickcom/tcpdf/.gitignore @@ -1 +1,3 @@ -.idea \ No newline at end of file +.idea +.phpdoc +*.bak diff --git a/civicrm/vendor/tecnickcom/tcpdf/VERSION b/civicrm/vendor/tecnickcom/tcpdf/VERSION index b98d1d3fa7..4c77920fd2 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/VERSION +++ b/civicrm/vendor/tecnickcom/tcpdf/VERSION @@ -1 +1 @@ -6.3.5 +6.4.1 diff --git a/civicrm/vendor/tecnickcom/tcpdf/composer.json b/civicrm/vendor/tecnickcom/tcpdf/composer.json index 9f1cc67194..5711937cc4 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/composer.json +++ b/civicrm/vendor/tecnickcom/tcpdf/composer.json @@ -1,6 +1,6 @@ { "name": "tecnickcom/tcpdf", - "version": "6.3.5", + "version": "6.4.1", "homepage": "http://www.tcpdf.org/", "type": "library", "description": "TCPDF is a PHP class for generating PDF documents and barcodes.", diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php index 9a58a21f67..65381dc8db 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php @@ -740,6 +740,7 @@ class PDF417 { * @protected */ protected function getErrorCorrectionLevel($ecl, $numcw) { + $maxecl = 8; // starting error level // check for automatic levels if (($ecl < 0) OR ($ecl > 8)) { if ($numcw < 41) { @@ -755,7 +756,6 @@ class PDF417 { } } // get maximum correction level - $maxecl = 8; // starting error level $maxerrsize = (928 - $numcw); // available codewords for error while ($maxecl > 0) { $errsize = (2 << $ecl); diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/qrcode.php b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/qrcode.php index 7ef2759fd6..a9a21246f5 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/qrcode.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/qrcode.php @@ -1386,6 +1386,7 @@ class QRcode { $p += 2; } $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); + $run = $p; return $run; } @@ -1455,7 +1456,7 @@ class QRcode { break; } case QR_MODE_KJ: { - if ($hint == QR_MODE_KJ) { + if ($this->hint == QR_MODE_KJ) { $length = $this->eatKanji(); } else { $length = $this->eat8(); diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php index 27fb7afd19..f9fc3fcb72 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php @@ -449,7 +449,7 @@ class TCPDF_COLORS { } if (!in_array($color, self::$jscolor)) { // default transparent color - $color = $jscolor[0]; + $color = self::$jscolor[0]; } return 'color.'.$color; } diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php index 218fb6df1e..bd1cc77510 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php @@ -557,6 +557,7 @@ class TCPDF_FONTS { $numGlyphs = TCPDF_STATIC::_getUSHORT($font, $offset); // ---------- get CIDToGIDMap ---------- $ctg = array(); + $c = 0; foreach ($encodingTables as $enctable) { // get only specified Platform ID and Encoding ID if (($enctable['platformID'] == $platid) AND ($enctable['encodingID'] == $encid)) { @@ -956,6 +957,7 @@ class TCPDF_FONTS { // sfnt version must be 0x00010000 for TrueType version 1.0. return $font; } + $c = 0; $offset += 4; // get number of tables $numTables = TCPDF_STATIC::_getUSHORT($font, $offset); @@ -1883,7 +1885,7 @@ class TCPDF_FONTS { * Converts UTF-8 character to integer value.<br> * Uses the getUniord() method if the value is not cached. * @param $uch (string) character string to process. - * @return integer Unicode value + * @return int Unicode value * @public static */ public static function uniord($uch) { @@ -1922,7 +1924,7 @@ class TCPDF_FONTS { * --------------------------------------------------------------------- * </pre> * @param $uch (string) character string to process. - * @return integer Unicode value + * @return int Unicode value * @author Nicola Asuni * @public static */ @@ -1995,7 +1997,7 @@ class TCPDF_FONTS { * @author Nicola Asuni * @public static */ - public static function UTF8StringToArray($str, $isunicode=true, &$currentfont) { + public static function UTF8StringToArray($str, $isunicode, &$currentfont) { if ($isunicode) { // requires PCRE unicode support turned on $chars = TCPDF_STATIC::pregSplit('//','u', $str, -1, PREG_SPLIT_NO_EMPTY); @@ -2021,7 +2023,7 @@ class TCPDF_FONTS { * @since 3.2.000 (2008-06-23) * @public static */ - public static function UTF8ToLatin1($str, $isunicode=true, &$currentfont) { + public static function UTF8ToLatin1($str, $isunicode, &$currentfont) { $unicode = self::UTF8StringToArray($str, $isunicode, $currentfont); // array containing UTF-8 unicode values return self::UTF8ArrToLatin1($unicode); } @@ -2037,7 +2039,7 @@ class TCPDF_FONTS { * @since 1.53.0.TC005 (2005-01-05) * @public static */ - public static function UTF8ToUTF16BE($str, $setbom=false, $isunicode=true, &$currentfont) { + public static function UTF8ToUTF16BE($str, $setbom, $isunicode, &$currentfont) { if (!$isunicode) { return $str; // string is not in unicode } @@ -2057,7 +2059,7 @@ class TCPDF_FONTS { * @since 2.1.000 (2008-01-08) * @public static */ - public static function utf8StrRev($str, $setbom=false, $forcertl=false, $isunicode=true, &$currentfont) { + public static function utf8StrRev($str, $setbom, $forcertl, $isunicode, &$currentfont) { return self::utf8StrArrRev(self::UTF8StringToArray($str, $isunicode, $currentfont), $str, $setbom, $forcertl, $isunicode, $currentfont); } @@ -2074,7 +2076,7 @@ class TCPDF_FONTS { * @since 4.9.000 (2010-03-27) * @public static */ - public static function utf8StrArrRev($arr, $str='', $setbom=false, $forcertl=false, $isunicode=true, &$currentfont) { + public static function utf8StrArrRev($arr, $str, $setbom, $forcertl, $isunicode, &$currentfont) { return self::arrUTF8ToUTF16BE(self::utf8Bidi($arr, $str, $forcertl, $isunicode, $currentfont), $setbom); } @@ -2090,7 +2092,7 @@ class TCPDF_FONTS { * @since 2.4.000 (2008-03-06) * @public static */ - public static function utf8Bidi($ta, $str='', $forcertl=false, $isunicode=true, &$currentfont) { + public static function utf8Bidi($ta, $str, $forcertl, $isunicode, &$currentfont) { // paragraph embedding level $pel = 0; // max level diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php index 5e504f2101..a3d61b8fe8 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php @@ -77,10 +77,7 @@ class TCPDF_IMAGES { } } if (empty($type)) { - $fileinfo = pathinfo($imgfile); - if (isset($fileinfo['extension']) AND (!TCPDF_STATIC::empty_string($fileinfo['extension']))) { - $type = strtolower(trim($fileinfo['extension'])); - } + $type = strtolower(trim(pathinfo(parse_url($imgfile, PHP_URL_PATH), PATHINFO_EXTENSION))); } if ($type == 'jpg') { $type = 'jpeg'; diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php index 0139dbe9be..f712acd258 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php @@ -276,7 +276,7 @@ class TCPDF_STATIC { /** * Determine whether a string is empty. * @param $str (string) string to be checked - * @return boolean true if string is empty + * @return bool true if string is empty * @since 4.5.044 (2009-04-16) * @public static */ @@ -1136,7 +1136,7 @@ class TCPDF_STATIC { * @see setHtmlVSpace() * @public static */ - public static function fixHTMLCode($html, $default_css='', $tagvs='', $tidy_options='', &$tagvspaces) { + public static function fixHTMLCode($html, $default_css, $tagvs, $tidy_options, &$tagvspaces) { // configure parameters for HTML Tidy if ($tidy_options === '') { $tidy_options = array ( @@ -1440,6 +1440,10 @@ class TCPDF_STATIC { */ public static function intToRoman($number) { $roman = ''; + if ($number >= 4000) { + // do not represent numbers above 4000 in Roman numerals + return strval($number); + } while ($number >= 1000) { $roman .= 'M'; $number -= 1000; @@ -1842,6 +1846,10 @@ class TCPDF_STATIC { curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file'); + curl_setopt($crs, CURLOPT_MAXREDIRS, 5); + if (defined('CURLOPT_PROTOCOLS')) { + curl_setopt($crs, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS); + } curl_exec($crs); $code = curl_getinfo($crs, CURLINFO_HTTP_CODE); curl_close($crs); @@ -1859,7 +1867,7 @@ class TCPDF_STATIC { public static function encodeUrlQuery($url) { $urlData = parse_url($url); if (isset($urlData['query']) && $urlData['query']) { - $urlQueryData = []; + $urlQueryData = array(); parse_str(urldecode($urlData['query']), $urlQueryData); $updatedUrl = $urlData['scheme'] . '://' . $urlData['host'] . $urlData['path'] . '?' . http_build_query($urlQueryData); } else { @@ -1973,6 +1981,10 @@ class TCPDF_STATIC { curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file'); + curl_setopt($crs, CURLOPT_MAXREDIRS, 5); + if (defined('CURLOPT_PROTOCOLS')) { + curl_setopt($crs, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS); + } $ret = curl_exec($crs); curl_close($crs); if ($ret !== false) { @@ -2507,7 +2519,7 @@ class TCPDF_STATIC { * @since 5.0.010 (2010-05-17) * @public static */ - public static function setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points=false, $k, $pagedim=array()) { + public static function setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points, $k, $pagedim=array()) { if (!isset($pagedim[$page])) { // initialize array $pagedim[$page] = array(); diff --git a/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php b/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php index 8b7d812236..7a6cb50f02 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php +++ b/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php @@ -773,13 +773,6 @@ class TCPDF { */ protected $encoding = 'UTF-8'; - /** - * PHP internal encoding. - * @protected - * @since 1.53.0.TC016 - */ - protected $internal_encoding; - /** * Boolean flag to indicate if the document language is Right-To-Left. * @protected @@ -1832,6 +1825,23 @@ class TCPDF { */ protected $gdgammacache = array(); + /** + * Cache array for file content + * @protected + * @var array + * @sinde 6.3.5 (2020-09-28) + */ + protected $fileContentCache = array(); + + /** + * Whether to allow local file path in image html tags, when prefixed with file:// + * + * @var bool + * @protected + * @since 6.4 (2020-07-23) + */ + protected $allowLocalFiles = false; + //------------------------------------------------------------ // METHODS //------------------------------------------------------------ @@ -1840,8 +1850,6 @@ class TCPDF { * This is the class constructor. * It allows to set up the page format, the orientation and the measure unit used in all the methods (except for the font sizes). * - * IMPORTANT: Please note that this method sets the mb_internal_encoding to ASCII, so if you are using the mbstring module functions with TCPDF you need to correctly set/unset the mb_internal_encoding when needed. - * * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul><li>P or Portrait (default)</li><li>L or Landscape</li><li>'' (empty string) for automatic orientation</li></ul> * @param $unit (string) User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). @@ -1853,11 +1861,6 @@ class TCPDF { * @see getPageSizeFromFormat(), setPageFormat() */ public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false, $pdfa=false) { - /* Set internal character encoding to ASCII */ - if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) { - $this->internal_encoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } // set file ID for trailer $serformat = (is_array($format) ? json_encode($format) : $format); $this->file_id = md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding)); @@ -2728,7 +2731,7 @@ class TCPDF { /** * Adjust the internal Cell padding array to take account of the line width. * @param $brd (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @return array of adjustments + * @return void|array of adjustments * @public * @since 5.9.000 (2010-10-03) */ @@ -2744,7 +2747,11 @@ class TCPDF { $newbrd[$brd[$i]] = true; } $brd = $newbrd; - } elseif (($brd === 1) OR ($brd === true) OR (is_numeric($brd) AND (intval($brd) > 0))) { + } elseif ( + ($brd === 1) + || ($brd === true) + || (is_numeric($brd) && ((int)$brd > 0)) + ) { $brd = array('LRTB' => true); } if (!is_array($brd)) { @@ -2762,7 +2769,7 @@ class TCPDF { // process borders foreach ($brd as $border => $style) { $line_width = $this->LineWidth; - if (is_array($style) AND isset($style['width'])) { + if (is_array($style) && isset($style['width'])) { // get border width $line_width = $style['width']; } @@ -2783,20 +2790,43 @@ class TCPDF { } } // correct internal cell padding if required to avoid overlap between text and lines - if ((strpos($border,'T') !== false) AND ($this->cell_padding['T'] < $adj)) { + if ( + is_numeric($this->cell_padding['T']) + && ($this->cell_padding['T'] < $adj) + && (strpos($border, 'T') !== false) + ) { $this->cell_padding['T'] = $adj; } - if ((strpos($border,'R') !== false) AND ($this->cell_padding['R'] < $adj)) { + if ( + is_numeric($this->cell_padding['R']) + && ($this->cell_padding['R'] < $adj) + && (strpos($border, 'R') !== false) + ) { $this->cell_padding['R'] = $adj; } - if ((strpos($border,'B') !== false) AND ($this->cell_padding['B'] < $adj)) { + if ( + is_numeric($this->cell_padding['B']) + && ($this->cell_padding['B'] < $adj) + && (strpos($border, 'B') !== false) + ) { $this->cell_padding['B'] = $adj; } - if ((strpos($border,'L') !== false) AND ($this->cell_padding['L'] < $adj)) { + if ( + is_numeric($this->cell_padding['L']) + && ($this->cell_padding['L'] < $adj) + && (strpos($border, 'L') !== false) + ) { $this->cell_padding['L'] = $adj; } + } - return array('T' => ($this->cell_padding['T'] - $cp['T']), 'R' => ($this->cell_padding['R'] - $cp['R']), 'B' => ($this->cell_padding['B'] - $cp['B']), 'L' => ($this->cell_padding['L'] - $cp['L'])); + + return array( + 'T' => ($this->cell_padding['T'] - $cp['T']), + 'R' => ($this->cell_padding['R'] - $cp['R']), + 'B' => ($this->cell_padding['B'] - $cp['B']), + 'L' => ($this->cell_padding['L'] - $cp['L']), + ); } /** @@ -2935,6 +2965,18 @@ class TCPDF { $this->creator = $creator; } + /** + * Whether to allow local file path in image html tags, when prefixed with file:// + * + * @param $allowLocalFiles bool true, when local files should be allowed. Otherwise false. + * @public + * @since 6.4 + */ + public function SetAllowLocalFiles($allowLocalFiles) { + $this->allowLocalFiles = (bool) $allowLocalFiles; + } + + /** * Throw an exception or print an error message and die if the K_TCPDF_PARSER_THROW_EXCEPTION_ERROR constant is set to true. * @param $msg (string) The error message @@ -4863,7 +4905,7 @@ class TCPDF { } reset($this->embeddedfiles); foreach ($this->embeddedfiles as $filename => $filedata) { - $data = TCPDF_STATIC::fileGetContents($filedata['file']); + $data = $this->getCachedFileContents($filedata['file']); if ($data !== FALSE) { $rawsize = strlen($data); if ($rawsize > 0) { @@ -6489,7 +6531,7 @@ class TCPDF { // *** very slow *** $l = $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl, $this->isunicode, $this->CurrentFont)); } else { - $l += $this->GetCharWidth($c); + $l += $this->GetCharWidth($c, ($i+1 < $nb)); } if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) >= $wmax))) { if (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) { @@ -6866,6 +6908,12 @@ class TCPDF { list($x, $y) = $this->checkPageRegions($h, $x, $y); $exurl = ''; // external streams $imsize = FALSE; + + // Make sure the file variable is not empty or null because accessing $file[0] later + // results in error when running PHP 7.4 + if (empty($file)) { + return false; + } // check if we are passing an image as file or string if ($file[0] === '@') { // image from string @@ -6877,18 +6925,14 @@ class TCPDF { $exurl = $file; } // check if file exist and it is valid - if (!@TCPDF_STATIC::file_exists($file)) { + if (!@$this->fileExists($file)) { return false; } - if (($imsize = @getimagesize($file)) === FALSE) { - if (in_array($file, $this->imagekeys)) { - // get existing image data - $info = $this->getImageBuffer($file); - $imsize = array($info['w'], $info['h']); - } elseif (strpos($file, '__tcpdf_'.$this->file_id.'_img') === FALSE) { - $imgdata = TCPDF_STATIC::fileGetContents($file); - } - } + if (false !== $info = $this->getImageBuffer($file)) { + $imsize = array($info['w'], $info['h']); + } elseif (($imsize = @getimagesize($file)) === FALSE && strpos($file, '__tcpdf_'.$this->file_id.'_img') === FALSE){ + $imgdata = $this->getCachedFileContents($file); + } } if (!empty($imgdata)) { // copy image to cache @@ -7093,7 +7137,7 @@ class TCPDF { $svgimg = substr($file, 1); } else { // get SVG file content - $svgimg = TCPDF_STATIC::fileGetContents($file); + $svgimg = $this->getCachedFileContents($file); } if ($svgimg !== FALSE) { // get width and height @@ -7178,7 +7222,7 @@ class TCPDF { } else { $ximg = $x; } - + if ($ismask OR $hidden) { // image is not displayed return $info['i']; @@ -7767,14 +7811,10 @@ class TCPDF { * @since 4.5.016 (2009-02-24) */ public function _destroy($destroyall=false, $preserve_objcopy=false) { - // restore internal encoding - if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) { - mb_internal_encoding($this->internal_encoding); - } if (isset(self::$cleaned_ids[$this->file_id])) { $destroyall = false; } - if ($destroyall AND !$preserve_objcopy) { + if ($destroyall AND !$preserve_objcopy && isset($this->file_id)) { self::$cleaned_ids[$this->file_id] = true; // remove all temporary files if ($handle = @opendir(K_PATH_CACHE)) { @@ -7787,7 +7827,7 @@ class TCPDF { } if (isset($this->imagekeys)) { foreach($this->imagekeys as $file) { - if (strpos($file, K_PATH_CACHE) === 0) { + if (strpos($file, K_PATH_CACHE) === 0 && TCPDF_STATIC::file_exists($file)) { @unlink($file); } } @@ -7795,7 +7835,6 @@ class TCPDF { } $preserve = array( 'file_id', - 'internal_encoding', 'state', 'bufferlen', 'buffer', @@ -14909,7 +14948,7 @@ class TCPDF { if ($file[0] === '@') { // image from string $data = substr($file, 1); } else { // EPS/AI file - $data = TCPDF_STATIC::fileGetContents($file); + $data = $this->getCachedFileContents($file); } if ($data === FALSE) { $this->Error('EPS file not found: '.$file); @@ -15511,7 +15550,7 @@ class TCPDF { $this->y = $y + $vpadding + $barh; $cellpadding = $this->cell_padding; $this->SetCellPadding(0); - $this->Cell($txtwidth, '', $label, 0, 0, 'C', false, '', $style['stretchtext'], false, 'T', 'T'); + $this->Cell($txtwidth, 0, $label, 0, 0, 'C', false, '', $style['stretchtext'], false, 'T', 'T'); $this->cell_padding = $cellpadding; } // restore original direction @@ -16328,7 +16367,7 @@ class TCPDF { $type = array(); if (preg_match('/href[\s]*=[\s]*"([^"]*)"/', $link, $type) > 0) { // read CSS data file - $cssdata = TCPDF_STATIC::fileGetContents(trim($type[1])); + $cssdata = $this->getCachedFileContents(trim($type[1])); if (($cssdata !== FALSE) AND (strlen($cssdata) > 0)) { $css = array_merge($css, TCPDF_STATIC::extractCSSproperties($cssdata)); } @@ -16354,7 +16393,7 @@ class TCPDF { // create a special tag to contain the CSS array (used for table content) $csstagarray = '<cssarray>'.htmlentities(json_encode($css)).'</cssarray>'; // remove head and style blocks - $html = preg_replace('/<head([^\>]*)>(.*?)<\/head>/siU', '', $html); + $html = preg_replace('/<head([^\>]*)>(.*)?<\/head>/siU', '', $html); $html = preg_replace('/<style([^\>]*)>([^\<]*)<\/style>/isU', '', $html); // define block tags $blocktags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table','tr','td'); @@ -16549,7 +16588,11 @@ class TCPDF { $dom[($dom[$key]['parent'])]['content'] = str_replace('</thead>', '', $dom[($dom[$key]['parent'])]['content']); } // store header rows on a new table - if (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['thead'] === true)) { + if ( + ($dom[$key]['value'] === 'tr') + && !empty($dom[($dom[$key]['parent'])]['thead']) + && ($dom[($dom[$key]['parent'])]['thead'] === true) + ) { if (TCPDF_STATIC::empty_string($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])) { $dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] = $csstagarray.$a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']]; } @@ -16979,10 +17022,20 @@ class TCPDF { // rows on thead block are printed as a separate table } else { $dom[$key]['thead'] = false; + $parent = $dom[$key]['parent']; + + if (!isset($dom[$parent]['rows'])) { + $dom[$parent]['rows'] = 0; + } // store the number of rows on table element - ++$dom[($dom[$key]['parent'])]['rows']; + ++$dom[$parent]['rows']; + + if (!isset($dom[$parent]['trids'])) { + $dom[$parent]['trids'] = array(); + } + // store the TR elements IDs on table element - array_push($dom[($dom[$key]['parent'])]['trids'], $key); + array_push($dom[$parent]['trids'], $key); } } if (($dom[$key]['value'] == 'th') OR ($dom[$key]['value'] == 'td')) { @@ -18865,7 +18918,18 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: } $prevlinewidth = $this->GetLineWidth(); $this->SetLineWidth($hrHeight); - $this->Line($x, $y, $x + $hrWidth, $y); + + $lineStyle = array( + 'color' => $tag['fgcolor'], + 'cap' => $tag['style']['cap'], + 'join' => $tag['style']['join'], + 'dash' => $tag['style']['dash'], + 'phase' => $tag['style']['phase'], + ); + + $lineStyle = array_filter($lineStyle); + + $this->Line($x, $y, $x + $hrWidth, $y, $lineStyle); $this->SetLineWidth($prevlinewidth); $this->addHTMLVertSpace(max($hbc, ($hrHeight / 2)), 0, $cell, !isset($dom[($key + 1)])); break; @@ -18885,7 +18949,11 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: // data stream $imgsrc = '@'.base64_decode(substr($imgsrc, 1)); $type = ''; - } else { + } elseif ( $this->allowLocalFiles && substr($imgsrc, 0, 7) === 'file://') { + // get image type from a local file path + $imgsrc = substr($imgsrc, 7); + $type = TCPDF_IMAGES::getImageFileType($imgsrc); + } else { if (($imgsrc[0] === '/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT'] != '/')) { // fix image path $findroot = strpos($imgsrc, $_SERVER['DOCUMENT_ROOT']); @@ -19807,7 +19875,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: } } if (!$in_table_head) { // we are not inside a thead section - $this->cell_padding = $table_el['old_cell_padding']; + $this->cell_padding = isset($table_el['old_cell_padding']) ? $table_el['old_cell_padding'] : null; // reset row height $this->resetLastH(); if (($this->page == ($this->numpages - 1)) AND ($this->pageopen[$this->numpages])) { @@ -21717,6 +21785,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: public function commitTransaction() { if (isset($this->objcopy)) { $this->objcopy->_destroy(true, true); + /* The unique file_id should not be used during cleanup again */ + $this->objcopy->file_id = NULL; unset($this->objcopy); } } @@ -21730,14 +21800,22 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: */ public function rollbackTransaction($self=false) { if (isset($this->objcopy)) { + $objcopy = $this->objcopy; $this->_destroy(true, true); if ($self) { - $objvars = get_object_vars($this->objcopy); + $objvars = get_object_vars($objcopy); foreach ($objvars as $key => $value) { $this->$key = $value; } + $objcopy->_destroy(true, true); + /* The unique file_id should not be used during cleanup again */ + $objcopy->file_id = NULL; + unset($objcopy); + return $this; } - return $this->objcopy; + /* The unique file_id should not be used during cleanup again */ + $this->file_id = NULL; + return $objcopy; } return $this; } @@ -22776,7 +22854,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: $svgdata = substr($file, 1); } else { // SVG file $this->svgdir = dirname($file); - $svgdata = TCPDF_STATIC::fileGetContents($file); + $svgdata = $this->getCachedFileContents($file); } if ($svgdata === FALSE) { $this->Error('SVG file not found: '.$file); @@ -22986,22 +23064,26 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: $f = ($this->h - $oy) * $this->k * (1 - $svgscale_y); $this->_out(sprintf('%F %F %F %F %F %F cm', $svgscale_x, 0, 0, $svgscale_y, ($e + $svgoffset_x), ($f + $svgoffset_y))); // creates a new XML parser to be used by the other XML functions - $this->parser = xml_parser_create('UTF-8'); + $parser = xml_parser_create('UTF-8'); // the following function allows to use parser inside object - xml_set_object($this->parser, $this); + xml_set_object($parser, $this); // disable case-folding for this XML parser - xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); + xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); // sets the element handler functions for the XML parser - xml_set_element_handler($this->parser, 'startSVGElementHandler', 'endSVGElementHandler'); + xml_set_element_handler($parser, 'startSVGElementHandler', 'endSVGElementHandler'); // sets the character data handler function for the XML parser - xml_set_character_data_handler($this->parser, 'segSVGContentHandler'); + xml_set_character_data_handler($parser, 'segSVGContentHandler'); // start parsing an XML document - if (!xml_parse($this->parser, $svgdata)) { - $error_message = sprintf('SVG Error: %s at line %d', xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)); + if (!xml_parse($parser, $svgdata)) { + $error_message = sprintf('SVG Error: %s at line %d', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)); $this->Error($error_message); } // free this XML parser - xml_parser_free($this->parser); + xml_parser_free($parser); + + // >= PHP 7.0.0 "explicitly unset the reference to parser to avoid memory leaks" + unset($parser); + // restore previous graphic state $this->_out($this->epsmarker.'Q'); // restore graphic vars @@ -23418,6 +23500,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: } $paths = array(); $d = preg_replace('/([0-9ACHLMQSTVZ])([\-\+])/si', '\\1 \\2', $d); + $d = preg_replace('/(\.[0-9]+)(\.)/s', '\\1 \\2', $d); preg_match_all('/([ACHLMQSTVZ])[\s]*([^ACHLMQSTVZ\"]*)/si', $d, $paths, PREG_SET_ORDER); $x = 0; $y = 0; @@ -24571,6 +24654,33 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: // --- END SVG METHODS ----------------------------------------------------- + /** + * Keeps files in memory, so it doesn't need to downloaded everytime in a loop + * @param string $file + * @return string + */ + protected function getCachedFileContents($file) + { + if (!isset($this->fileContentCache[$file])) { + $this->fileContentCache[$file] = TCPDF_STATIC::fileGetContents($file); + } + return $this->fileContentCache[$file]; + } + + /** + * Avoid multiple calls to an external server to see if a file exists + * @param string $file + * @return bool + */ + protected function fileExists($file) + { + if (isset($this->fileContentCache[$file]) || false !== $this->getImageBuffer($file)) { + return true; + } + + return TCPDF_STATIC::file_exists($file); + } + } // END OF TCPDF CLASS //============================================================+ diff --git a/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php b/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php index 78bfc5b5bf..2b94afca7b 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php +++ b/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php @@ -938,7 +938,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $seq[$j]; + $w = (float)$seq[$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -1271,7 +1271,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $seq[$j]; + $w = (float)$seq[$j]; $bararray['bcode'][] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; } @@ -1856,7 +1856,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $seq[$j]; + $w = (float)$seq[$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -1947,7 +1947,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $seq[$j]; + $w = (float)$seq[$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; diff --git a/civicrm/vendor/zendframework/zend-escaper/.coveralls.yml b/civicrm/vendor/zendframework/zend-escaper/.coveralls.yml deleted file mode 100644 index 53bda829c8..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/.coveralls.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage_clover: clover.xml -json_path: coveralls-upload.json -src_dir: src diff --git a/civicrm/vendor/zendframework/zend-escaper/CONTRIBUTING.md b/civicrm/vendor/zendframework/zend-escaper/CONTRIBUTING.md deleted file mode 100644 index 2b58aca399..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/CONTRIBUTING.md +++ /dev/null @@ -1,229 +0,0 @@ -# CONTRIBUTING - -## RESOURCES - -If you wish to contribute to Zend Framework, please be sure to -read/subscribe to the following resources: - - - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards) - - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide) - - ZF Contributor's mailing list: - Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html - Subscribe: zf-contributors-subscribe@lists.zend.com - - ZF Contributor's IRC channel: - #zftalk.dev on Freenode.net - -If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-escaper/issues/new). - -## Reporting Potential Security Issues - -If you have encountered a potential security vulnerability, please **DO NOT** report it on the public -issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead. -We will work with you to verify the vulnerability and patch it as soon as possible. - -When reporting issues, please provide the following information: - -- Component(s) affected -- A description indicating how to reproduce the issue -- A summary of the security vulnerability and impact - -We request that you contact us via the email address above and give the project -contributors a chance to resolve the vulnerability and issue a new release prior -to any public exposure; this helps protect users and provides them with a chance -to upgrade and/or update in order to protect their applications. - -For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc). - -## RUNNING TESTS - -> ### Note: testing versions prior to 2.4 -> -> This component originates with Zend Framework 2. During the lifetime of ZF2, -> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no -> changes were necessary. However, due to the migration, tests may not run on -> versions < 2.4. As such, you may need to change the PHPUnit dependency if -> attempting a fix on such a version. - -To run tests: - -- Clone the repository: - - ```console - $ git clone git@github.com:zendframework/zend-escaper.git - $ cd - ``` - -- Install dependencies via composer: - - ```console - $ curl -sS https://getcomposer.org/installer | php -- - $ ./composer.phar install - ``` - - If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/ - -- Run the tests via `phpunit` and the provided PHPUnit config, like in this example: - - ```console - $ ./vendor/bin/phpunit - ``` - -You can turn on conditional tests with the phpunit.xml file. -To do so: - - - Copy `phpunit.xml.dist` file to `phpunit.xml` - - Edit `phpunit.xml` to enable any specific functionality you - want to test, as well as to provide test values to utilize. - -## Running Coding Standards Checks - -This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding -standards checks, and provides configuration for our selected checks. -`php-cs-fixer` is installed by default via Composer. - -To run checks only: - -```console -$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs -``` - -To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run` -flag: - -```console -$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs -``` - -If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure -they pass, and make sure you add and commit the changes after verification. - -## Recommended Workflow for Contributions - -Your first step is to establish a public repository from which we can -pull your work into the master repository. We recommend using -[GitHub](https://github.com), as that is where the component is already hosted. - -1. Setup a [GitHub account](http://github.com/), if you haven't yet -2. Fork the repository (http://github.com/zendframework/zend-escaper) -3. Clone the canonical repository locally and enter it. - - ```console - $ git clone git://github.com:zendframework/zend-escaper.git - $ cd zend-escaper - ``` - -4. Add a remote to your fork; substitute your GitHub username in the command - below. - - ```console - $ git remote add {username} git@github.com:{username}/zend-escaper.git - $ git fetch {username} - ``` - -### Keeping Up-to-Date - -Periodically, you should update your fork or personal repository to -match the canonical ZF repository. Assuming you have setup your local repository -per the instructions above, you can do the following: - - -```console -$ git checkout master -$ git fetch origin -$ git rebase origin/master -# OPTIONALLY, to keep your remote up-to-date - -$ git push {username} master:master -``` - -If you're tracking other branches -- for example, the "develop" branch, where -new feature development occurs -- you'll want to do the same operations for that -branch; simply substitute "develop" for "master". - -### Working on a patch - -We recommend you do each new feature or bugfix in a new branch. This simplifies -the task of code review as well as the task of merging your changes into the -canonical repository. - -A typical workflow will then consist of the following: - -1. Create a new local branch based off either your master or develop branch. -2. Switch to your new local branch. (This step can be combined with the - previous step with the use of `git checkout -b`.) -3. Do some work, commit, repeat as necessary. -4. Push the local branch to your remote repository. -5. Send a pull request. - -The mechanics of this process are actually quite trivial. Below, we will -create a branch for fixing an issue in the tracker. - -```console -$ git checkout -b hotfix/9295 -Switched to a new branch 'hotfix/9295' -``` - -... do some work ... - - -```console -$ git commit -``` - -... write your log message ... - - -```console -$ git push {username} hotfix/9295:hotfix/9295 -Counting objects: 38, done. -Delta compression using up to 2 threads. -Compression objects: 100% (18/18), done. -Writing objects: 100% (20/20), 8.19KiB, done. -Total 20 (delta 12), reused 0 (delta 0) -To ssh://git@github.com/{username}/zend-escaper.git - b5583aa..4f51698 HEAD -> master -``` - -To send a pull request, you have two options. - -If using GitHub, you can do the pull request from there. Navigate to -your repository, select the branch you just created, and then select the -"Pull Request" button in the upper right. Select the user/organization -"zendframework" as the recipient. - -If using your own repository - or even if using GitHub - you can use `git -format-patch` to create a patchset for us to apply; in fact, this is -**recommended** for security-related patches. If you use `format-patch`, please -send the patches as attachments to: - -- zf-devteam@zend.com for patches without security implications -- zf-security@zend.com for security patches - -#### What branch to issue the pull request against? - -Which branch should you issue a pull request against? - -- For fixes against the stable release, issue the pull request against the - "master" branch. -- For new features, or fixes that introduce new elements to the public API (such - as new public methods or properties), issue the pull request against the - "develop" branch. - -### Branch Cleanup - -As you might imagine, if you are a frequent contributor, you'll start to -get a ton of branches both locally and on your remote. - -Once you know that your changes have been accepted to the master -repository, we suggest doing some cleanup of these branches. - -- Local branch cleanup - - ```console - $ git branch -d <branchname> - ``` - -- Remote branch removal - - ```console - $ git push {username} :<branchname> - ``` diff --git a/civicrm/vendor/zendframework/zend-escaper/README.md b/civicrm/vendor/zendframework/zend-escaper/README.md deleted file mode 100644 index dd96215ec7..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# zend-escaper - -The OWASP Top 10 web security risks study lists Cross-Site Scripting (XSS) in -second place. PHP’s sole functionality against XSS is limited to two functions -of which one is commonly misapplied. Thus, the `Zend\Escaper` component was written. -It offers developers a way to escape output and defend from XSS and related -vulnerabilities by introducing contextual escaping based on peer-reviewed rules. - - -- File issues at https://github.com/zendframework/zend-escaper/issues -- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-escaper diff --git a/civicrm/vendor/zendframework/zend-escaper/composer.json b/civicrm/vendor/zendframework/zend-escaper/composer.json deleted file mode 100644 index c8fd375076..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/composer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "zendframework/zend-escaper", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "escaper" - ], - "homepage": "https://github.com/zendframework/zend-escaper", - "autoload": { - "psr-4": { - "Zend\\Escaper\\": "src/" - } - }, - "require": { - "php": ">=5.3.23" - }, - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "autoload-dev": { - "psr-4": { - "ZendTest\\Escaper\\": "test/" - } - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "satooshi/php-coveralls": "dev-master", - "phpunit/PHPUnit": "~4.0" - } -} \ No newline at end of file diff --git a/civicrm/vendor/zendframework/zend-escaper/phpunit.xml.dist b/civicrm/vendor/zendframework/zend-escaper/phpunit.xml.dist deleted file mode 100644 index c887b361eb..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/phpunit.xml.dist +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" - bootstrap="./test/bootstrap.php" - colors="true"> - <testsuites> - <testsuite name="zend-escaper Test Suite"> - <directory>./test/</directory> - </testsuite> - </testsuites> - - <groups> - <exclude> - <group>disable</group> - </exclude> - </groups> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - - <php> - <ini name="date.timezone" value="UTC"/> - - <!-- OB_ENABLED should be enabled for some tests to check if all - functionality works as expected. Such tests include those for - Zend\Soap and Zend\Session, which require that headers not be sent - in order to work. --> - <const name="TESTS_ZEND_OB_ENABLED" value="false" /> - - - </php> -</phpunit> diff --git a/civicrm/vendor/zendframework/zend-escaper/phpunit.xml.travis b/civicrm/vendor/zendframework/zend-escaper/phpunit.xml.travis deleted file mode 100644 index c887b361eb..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/phpunit.xml.travis +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" - bootstrap="./test/bootstrap.php" - colors="true"> - <testsuites> - <testsuite name="zend-escaper Test Suite"> - <directory>./test/</directory> - </testsuite> - </testsuites> - - <groups> - <exclude> - <group>disable</group> - </exclude> - </groups> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">./src</directory> - </whitelist> - </filter> - - <php> - <ini name="date.timezone" value="UTC"/> - - <!-- OB_ENABLED should be enabled for some tests to check if all - functionality works as expected. Such tests include those for - Zend\Soap and Zend\Session, which require that headers not be sent - in order to work. --> - <const name="TESTS_ZEND_OB_ENABLED" value="false" /> - - - </php> -</phpunit> diff --git a/civicrm/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php deleted file mode 100644 index 7174796a32..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Escaper\Exception; - -interface ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php deleted file mode 100644 index 0ad3f7313d..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Escaper\Exception; - -/** - * Invalid argument exception - */ -class InvalidArgumentException extends \InvalidArgumentException implements - ExceptionInterface -{ -} diff --git a/civicrm/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php b/civicrm/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php deleted file mode 100644 index d626123af2..0000000000 --- a/civicrm/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace Zend\Escaper\Exception; - -/** - * Invalid argument exception - */ -class RuntimeException extends \RuntimeException implements - ExceptionInterface -{ -} diff --git a/civicrm/xml/schema/ACL/EntityRole.xml b/civicrm/xml/schema/ACL/ACLEntityRole.xml similarity index 93% rename from civicrm/xml/schema/ACL/EntityRole.xml rename to civicrm/xml/schema/ACL/ACLEntityRole.xml index 8679d27fc8..836ab90561 100644 --- a/civicrm/xml/schema/ACL/EntityRole.xml +++ b/civicrm/xml/schema/ACL/ACLEntityRole.xml @@ -2,7 +2,7 @@ <table> <base>CRM/ACL</base> - <class>EntityRole</class> + <class>ACLEntityRole</class> <name>civicrm_acl_entity_role</name> <comment>Join table for Contacts and Groups to ACL Roles</comment> <add>1.6</add> @@ -35,6 +35,9 @@ <type>varchar</type> <length>64</length> <required>true</required> + <pseudoconstant> + <callback>CRM_ACL_BAO_ACLEntityRole::entityTables</callback> + </pseudoconstant> <comment>Table of the object joined to the ACL Role (Contact or Group)</comment> <add>1.6</add> </field> diff --git a/civicrm/xml/schema/ACL/files.xml b/civicrm/xml/schema/ACL/files.xml index 2c156ee04c..a7255e9c70 100644 --- a/civicrm/xml/schema/ACL/files.xml +++ b/civicrm/xml/schema/ACL/files.xml @@ -4,6 +4,6 @@ <xi:include href="ACL.xml" parse="xml" /> <xi:include href="Cache.xml" parse="xml" /> -<xi:include href="EntityRole.xml" parse="xml" /> +<xi:include href="ACLEntityRole.xml" parse="xml" /> </tables> diff --git a/civicrm/xml/schema/Contact/Relationship.xml b/civicrm/xml/schema/Contact/Relationship.xml index 8eb0f66c8f..9b8e55b313 100644 --- a/civicrm/xml/schema/Contact/Relationship.xml +++ b/civicrm/xml/schema/Contact/Relationship.xml @@ -8,6 +8,11 @@ <add>1.1</add> <log>true</log> <icon>fa-handshake-o</icon> + <paths> + <view>civicrm/contact/view/rel?action=view&reset=1&cid=[contact_id_a]&id=[id]</view> + <delete>civicrm/contact/view/rel?action=delete&reset=1&cid=[contact_id_a]&id=[id]</delete> + </paths> + <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Contact/RelationshipCache.xml b/civicrm/xml/schema/Contact/RelationshipCache.xml index e24998f55e..0487942ed4 100644 --- a/civicrm/xml/schema/Contact/RelationshipCache.xml +++ b/civicrm/xml/schema/Contact/RelationshipCache.xml @@ -9,6 +9,12 @@ <log>false</log> <icon>fa-handshake-o</icon> <title>Related Contact</title> + <paths> + <view>civicrm/contact/view/rel?action=view&reset=1&cid=[near_contact_id]&id=[relationship_id]</view> + <update>civicrm/contact/view/rel?action=update&reset=1&cid=[near_contact_id]&id=[relationship_id]&rtype=[orientation]</update> + <delete>civicrm/contact/view/rel?action=delete&reset=1&cid=[near_contact_id]&id=[relationship_id]</delete> + </paths> + <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Contact/SavedSearch.xml b/civicrm/xml/schema/Contact/SavedSearch.xml index a06a794ab1..1be44e62ff 100644 --- a/civicrm/xml/schema/Contact/SavedSearch.xml +++ b/civicrm/xml/schema/Contact/SavedSearch.xml @@ -144,6 +144,7 @@ <html> <label>Created By</label> </html> + <readonly>true</readonly> <add>5.36</add> </field> <foreignKey> @@ -185,6 +186,7 @@ <comment>When the search was created.</comment> <required>true</required> <default>CURRENT_TIMESTAMP</default> + <readonly>true</readonly> <add>5.36</add> </field> <field> diff --git a/civicrm/xml/schema/Core/CustomField.xml b/civicrm/xml/schema/Core/CustomField.xml index 7a5ac56d95..71e1862850 100644 --- a/civicrm/xml/schema/Core/CustomField.xml +++ b/civicrm/xml/schema/Core/CustomField.xml @@ -52,7 +52,7 @@ <type>varchar</type> <title>Custom Field Name</title> <length>64</length> - <comment>Variable name/programmatic handle for this group.</comment> + <comment>Variable name/programmatic handle for this field.</comment> <add>3.3</add> </field> <field> diff --git a/civicrm/xml/schema/Core/CustomGroup.xml b/civicrm/xml/schema/Core/CustomGroup.xml index 727da9205c..5fec960339 100644 --- a/civicrm/xml/schema/Core/CustomGroup.xml +++ b/civicrm/xml/schema/Core/CustomGroup.xml @@ -147,6 +147,7 @@ <html> <label>Table Name</label> </html> + <readonly>true</readonly> <add>2.0</add> </field> <field> diff --git a/civicrm/xml/schema/Core/Translation.xml b/civicrm/xml/schema/Core/Translation.xml new file mode 100644 index 0000000000..51152be0c0 --- /dev/null +++ b/civicrm/xml/schema/Core/Translation.xml @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <add>5.39</add> + <base>CRM/Core</base> + <class>Translation</class> + <name>civicrm_translation</name> + <title>Translated String</title> + <titlePlural>Translated Strings</titlePlural> + <comment>Each string record is an alternate translation of some displayable string in the database.</comment> + <log>true</log> + + <field> + <add>5.39</add> + <name>id</name> + <title>Translated String ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique String ID</comment> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <add>5.39</add> + <name>entity_table</name> + <title>Translated Entity</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <pseudoconstant> + <callback>CRM_Core_BAO_Translation::getEntityTables</callback> + </pseudoconstant> + <comment>Table where referenced item is stored</comment> + </field> + + <field> + <add>5.39</add> + <name>entity_field</name> + <title>Translated Field</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <pseudoconstant> + <callback>CRM_Core_BAO_Translation::getEntityFields</callback> + </pseudoconstant> + <comment>Field where referenced item is stored</comment> + </field> + + <field> + <add>5.39</add> + <name>entity_id</name> + <title>Translated Entity ID</title> + <type>int</type> + <length>64</length> + <required>true</required> + <comment>ID of the relevant entity.</comment> + </field> + + <field> + <add>5.39</add> + <name>language</name> + <title>Language</title> + <type>varchar</type> + <length>5</length> + <required>true</required> + <comment>Relevant language</comment> + <html> + <type>Select</type> + </html> + <pseudoconstant> + <optionGroupName>languages</optionGroupName> + <keyColumn>name</keyColumn> + <optionEditPath>civicrm/admin/options/languages</optionEditPath> + </pseudoconstant> + </field> + + <field> + <add>5.39</add> + <name>status_id</name> + <type>tinyint</type> + <title>Status</title> + <length>3</length> + <default>1</default> + <required>true</required> + <pseudoconstant> + <callback>CRM_Core_BAO_Translation::getStatuses</callback> + </pseudoconstant> + <comment>Specify whether the string is active, draft, etc</comment> + </field> + + <field> + <add>5.39</add> + <title>Translated String</title> + <name>string</name> + <type>longtext</type> + <required>true</required> + <comment>Translated string</comment> + </field> + + <dynamicForeignKey> + <add>5.39</add> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + </dynamicForeignKey> + + <index> + <add>5.39</add> + <!-- Expected queries: + "Admin UI: I'm editing a record. Show me all relevant translations." + "Public UI: I'm browsing a list of records. Show this page-worth of records in my preferred language." + --> + <name>index_entity_lang</name> + <!-- Prediction: In a large DB with many events/contribution-pages/groups/mailings/etc, entity ID will have best selectivity. --> + <!-- Prediction: Over diverse set of deployments, the selectivity of 'table' and 'language' will be similar. --> + <fieldName>entity_id</fieldName> + <fieldName>entity_table</fieldName> + <fieldName>language</fieldName> + </index> +</table> diff --git a/civicrm/xml/schema/Core/files.xml b/civicrm/xml/schema/Core/files.xml index 51a0ba7ebe..05ae0fac88 100644 --- a/civicrm/xml/schema/Core/files.xml +++ b/civicrm/xml/schema/Core/files.xml @@ -37,6 +37,7 @@ <xi:include href="StateProvince.xml" parse="xml" /> <xi:include href="SystemLog.xml" parse="xml" /> <xi:include href="Tag.xml" parse="xml" /> + <xi:include href="Translation.xml" parse="xml" /> <xi:include href="UFGroup.xml" parse="xml" /> <xi:include href="UFField.xml" parse="xml" /> <xi:include href="UFMatch.xml" parse="xml" /> diff --git a/civicrm/xml/schema/Dedupe/Exception.xml b/civicrm/xml/schema/Dedupe/DedupeException.xml similarity index 97% rename from civicrm/xml/schema/Dedupe/Exception.xml rename to civicrm/xml/schema/Dedupe/DedupeException.xml index 088ae2d467..4108023124 100644 --- a/civicrm/xml/schema/Dedupe/Exception.xml +++ b/civicrm/xml/schema/Dedupe/DedupeException.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" ?> <table> <base>CRM/Dedupe</base> - <class>Exception</class> + <class>DedupeException</class> <name>civicrm_dedupe_exception</name> <comment>Dedupe exceptions</comment> <add>3.3</add> diff --git a/civicrm/xml/schema/Dedupe/Rule.xml b/civicrm/xml/schema/Dedupe/DedupeRule.xml similarity index 98% rename from civicrm/xml/schema/Dedupe/Rule.xml rename to civicrm/xml/schema/Dedupe/DedupeRule.xml index 0b1649796a..396714df40 100644 --- a/civicrm/xml/schema/Dedupe/Rule.xml +++ b/civicrm/xml/schema/Dedupe/DedupeRule.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" ?> <table> <base>CRM/Dedupe</base> - <class>Rule</class> + <class>DedupeRule</class> <name>civicrm_dedupe_rule</name> <comment>Dedupe rules for use by rule groups</comment> <add>1.8</add> diff --git a/civicrm/xml/schema/Dedupe/RuleGroup.xml b/civicrm/xml/schema/Dedupe/DedupeRuleGroup.xml similarity index 98% rename from civicrm/xml/schema/Dedupe/RuleGroup.xml rename to civicrm/xml/schema/Dedupe/DedupeRuleGroup.xml index 26fe7e63f8..1a8722da33 100644 --- a/civicrm/xml/schema/Dedupe/RuleGroup.xml +++ b/civicrm/xml/schema/Dedupe/DedupeRuleGroup.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" ?> <table> <base>CRM/Dedupe</base> - <class>RuleGroup</class> + <class>DedupeRuleGroup</class> <name>civicrm_dedupe_rule_group</name> <comment>Dedupe rule groups</comment> <add>1.8</add> diff --git a/civicrm/xml/schema/Dedupe/files.xml b/civicrm/xml/schema/Dedupe/files.xml index 7321e4ce9a..1e0dd1de39 100644 --- a/civicrm/xml/schema/Dedupe/files.xml +++ b/civicrm/xml/schema/Dedupe/files.xml @@ -2,7 +2,7 @@ <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" /> +<xi:include href="DedupeRuleGroup.xml" parse="xml" /> +<xi:include href="DedupeRule.xml" parse="xml" /> +<xi:include href="DedupeException.xml" parse="xml" /> </tables> diff --git a/civicrm/xml/schema/Financial/FinancialItem.xml b/civicrm/xml/schema/Financial/FinancialItem.xml index 8e1f5a7454..f7790e49ed 100644 --- a/civicrm/xml/schema/Financial/FinancialItem.xml +++ b/civicrm/xml/schema/Financial/FinancialItem.xml @@ -139,7 +139,10 @@ <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> + <pseudoconstant> + <callback>CRM_Financial_BAO_FinancialItem::entityTables</callback> + </pseudoconstant> + <comment>May contain civicrm_line_item, civicrm_financial_trxn etc</comment> <add>4.3</add> </field> <field> diff --git a/civicrm/xml/schema/Price/LineItem.xml b/civicrm/xml/schema/Price/LineItem.xml index 6b2733e717..4e0f795bec 100644 --- a/civicrm/xml/schema/Price/LineItem.xml +++ b/civicrm/xml/schema/Price/LineItem.xml @@ -28,7 +28,10 @@ <type>varchar</type> <length>64</length> <required>true</required> - <comment>table which has the transaction</comment> + <pseudoconstant> + <callback>CRM_Price_BAO_LineItem::entityTables</callback> + </pseudoconstant> + <comment>May contain civicrm_contribution, civicrm_participant or civicrm_membership</comment> <add>1.7</add> </field> <field> @@ -225,4 +228,3 @@ </html> </field> </table> - diff --git a/civicrm/xml/templates/dao.tpl b/civicrm/xml/templates/dao.tpl index 916a2da590..86b7a544cc 100644 --- a/civicrm/xml/templates/dao.tpl +++ b/civicrm/xml/templates/dao.tpl @@ -89,7 +89,7 @@ class {$table.className} extends CRM_Core_DAO {ldelim} -{if $table.foreignKey || $table.dynamicForeignKey} +{if !empty($table.foreignKey) || !empty($table.dynamicForeignKey)} /** * Returns foreign keys and entity references. * @@ -99,13 +99,16 @@ class {$table.className} extends CRM_Core_DAO {ldelim} public static function getReferenceColumns() {ldelim} if (!isset(Civi::$statics[__CLASS__]['links'])) {ldelim} Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); +{if isset($table.foreignKey)} {foreach from=$table.foreignKey item=foreign} Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), '{$foreign.name}', '{$foreign.table}', '{$foreign.key}'); {/foreach} - +{/if} +{if isset($table.dynamicForeignKey)} {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} +{/if} CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); {rdelim} return Civi::$statics[__CLASS__]['links']; @@ -139,19 +142,19 @@ class {$table.className} extends CRM_Core_DAO {ldelim} {if $field.required} 'required' => {$field.required|strtoupper}, {/if} {* field.required *} -{if $field.length} +{if isset($field.length)} 'maxlength' => {$field.length}, {/if} {* field.length *} -{if $field.precision} +{if isset($field.precision)} 'precision' => array({$field.precision}), {/if} -{if $field.size} +{if isset($field.size)} 'size' => {$field.size}, {/if} {* field.size *} -{if $field.rows} +{if isset($field.rows)} 'rows' => {$field.rows}, {/if} {* field.rows *} -{if $field.cols} +{if isset($field.cols)} 'cols' => {$field.cols}, {/if} {* field.cols *} @@ -181,9 +184,9 @@ class {$table.className} extends CRM_Core_DAO {ldelim} 'entity' => '{$table.entity}', 'bao' => '{$table.bao}', 'localizable' => {if $field.localizable}1{else}0{/if}, - {if $field.localize_context}'localize_context' => '{$field.localize_context}',{/if} + {if isset($field.localize_context)}'localize_context' => '{$field.localize_context}',{/if} -{if $field.FKClassName} +{if isset($field.FKClassName)} 'FKClassName' => '{$field.FKClassName}', {/if} {if !empty($field.component)} @@ -261,7 +264,7 @@ class {$table.className} extends CRM_Core_DAO {ldelim} */ 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 isset($table.foreignKey)}{foreach from=$table.foreignKey item=foreign} {if $foreign.import}'{$foreign.className}',{/if} {/foreach}{/if} )); @@ -277,7 +280,7 @@ class {$table.className} extends CRM_Core_DAO {ldelim} */ 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 isset($table.foreignKey)}{foreach from=$table.foreignKey item=foreign} {if $foreign.export}'{$foreign.className}',{/if} {/foreach}{/if} )); diff --git a/civicrm/xml/templates/drop.tpl b/civicrm/xml/templates/drop.tpl index bd0aba72cd..9c53998656 100644 --- a/civicrm/xml/templates/drop.tpl +++ b/civicrm/xml/templates/drop.tpl @@ -1,4 +1,4 @@ --- +--------------------------------------------------------------------+ +{*suppress license if within a file that already has the license*}{if !isset($no_license) or !$no_license}-- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | -- | This work is published under the GNU AGPLv3 license with some | @@ -8,10 +8,11 @@ -- -- Generated from {$smarty.template} -- {$generated} --- +--{/if} -- /******************************************************* -- * --- * Clean up the existing tables +-- * Clean up the existing tables{if isset($no_license) and $no_license} - this section generated from {$smarty.template} +{/if} -- * -- *******************************************************/ diff --git a/civicrm/xml/templates/message_templates/case_activity_html.tpl b/civicrm/xml/templates/message_templates/case_activity_html.tpl index d430b2c724..c770e03878 100644 --- a/civicrm/xml/templates/message_templates/case_activity_html.tpl +++ b/civicrm/xml/templates/message_templates/case_activity_html.tpl @@ -27,7 +27,7 @@ {ts}Activity Summary{/ts} - {$activityTypeName} </th> </tr> - {if $isCaseActivity} + {if !empty($isCaseActivity)} <tr> <td {$labelStyle}> {ts}Your Case Role(s){/ts} @@ -61,7 +61,7 @@ {foreach from=$activity.fields item=field} <tr> <td {$labelStyle}> - {$field.label}{if $field.category}({$field.category}){/if} + {$field.label}{if !empty($field.category)}({$field.category}){/if} </td> <td {$valueStyle}> {if $field.type eq 'Date'} diff --git a/civicrm/xml/templates/message_templates/case_activity_subject.tpl b/civicrm/xml/templates/message_templates/case_activity_subject.tpl index bad8753838..32a57304bb 100644 --- a/civicrm/xml/templates/message_templates/case_activity_subject.tpl +++ b/civicrm/xml/templates/message_templates/case_activity_subject.tpl @@ -1 +1 @@ -{if $idHash}[case #{$idHash}]{/if} {$activitySubject} +{if !empty($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 index 0bfa04a85b..715dbd3740 100644 --- a/civicrm/xml/templates/message_templates/case_activity_text.tpl +++ b/civicrm/xml/templates/message_templates/case_activity_text.tpl @@ -1,7 +1,7 @@ =========================================================== {ts}Activity Summary{/ts} - {$activityTypeName} =========================================================== -{if $isCaseActivity} +{if !empty($isCaseActivity)} {ts}Your Case Role(s){/ts} : {$contact.role} {if $manageCaseURL} {ts}Manage Case{/ts} : {$manageCaseURL} @@ -17,9 +17,9 @@ {foreach from=$activity.fields item=field} {if $field.type eq 'Date'} -{$field.label}{if $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} +{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} {else} -{$field.label}{if $field.category}({$field.category}){/if} : {$field.value} +{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value} {/if} {/foreach} diff --git a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl index cd5733cc6a..0ee9691750 100644 --- a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl @@ -60,7 +60,7 @@ </tr> <tr> <td><font size="1" align="right"> {$country}</font></td> - <td><font size="1" align="right">{$source}</font></td> + <td><font size="1" align="right">{if !empty($source)}{$source}{/if}</font></td> <td valign="top" style="white-space: nowrap"><font size="1" align="right">{if $domain_email}{$domain_email}{/if}</font> </td> </tr> <tr> @@ -75,7 +75,7 @@ <th style="text-align:left;font-weight:bold;width:100%"><font size="1">{ts}Description{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Quantity{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{$taxTerm}</font></th> + <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{if isset($taxTerm)}{$taxTerm}{/if}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=taxpricevalue} @@ -97,9 +97,9 @@ <td style="text-align:right;"><font size="1">{$value.qty}</font></td> <td style="text-align:right;"><font size="1">{$value.unit_price|crmMoney:$currency}</font></td> {if $value.tax_amount != ''} - <td style="text-align:right;"><font size="1">{$value.tax_rate}%</font></td> + <td style="text-align:right;"><font size="1">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td> {else} - <td style="text-align:right;"><font size="1">{ts 1=$taxTerm}-{/ts}</font></td> + <td style="text-align:right;"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td> {/if} <td style="text-align:right;"><font size="1">{$value.subTotal|crmMoney:$currency}</font></td> </tr> @@ -109,18 +109,20 @@ <td style="text-align:right;"><font size="1">{ts}Sub Total{/ts}</font></td> <td style="text-align:right;"><font size="1">{$subTotal|crmMoney:$currency}</font></td> </tr> + {if !empty($dataArray)} {foreach from=$dataArray item=value key=priceset} <tr> <td colspan="3"></td> {if $priceset} - <td style="text-align:right;white-space: nowrap"><font size="1">{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td> + <td style="text-align:right;white-space: nowrap"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td> <td style="text-align:right"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> {elseif $priceset == 0} - <td style="text-align:right;white-space: nowrap"><font size="1">{ts 1=$taxTerm}TOTAL %1{/ts}</font></td> + <td style="text-align:right;white-space: nowrap"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td> <td style="text-align:right"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> + {/if} </tr> - {/if} {/foreach} + {/if} <tr> <td colspan="3"></td> <td style="text-align:right;white-space: nowrap"><b><font size="1">{ts 1=$currency}TOTAL %1{/ts}</font></b></td> @@ -301,7 +303,7 @@ <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">{if isset($taxTerm)}{$taxTerm}{/if}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=pricevalue} @@ -326,9 +328,9 @@ <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> + <td style="padding-left:28px;text-align:right;"><font size="1">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td> {else} - <td style="padding-left:28px;text-align:right"><font size="1">{ts 1=$taxTerm}No %1{/ts}</font></td> + <td style="padding-left:28px;text-align:right"><font size="1">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td> {/if} <td style="padding-left:28px;text-align:right;"><font size="1">{$value.subTotal|crmMoney:$currency}</font></td> </tr> @@ -339,18 +341,20 @@ <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> + {if !empty($dataArray)} {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">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</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">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td> <td style="padding-left:28px;text-align:right;"><font size="1" align="right">{$value|crmMoney:$currency}</font> </td> + {/if} </tr> - {/if} {/foreach} + {/if} <tr> <td colspan="3"></td> <td colspan="2"><hr></hr></td> diff --git a/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl index 4f7b8819f3..03a0fbb5b9 100644 --- a/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl @@ -22,7 +22,7 @@ <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $formValues.receipt_text} + {if !empty($formValues.receipt_text)} <p>{$formValues.receipt_text|htmlize}</p> {else} <p>{ts}Below you will find a receipt for this contribution.{/ts}</p> @@ -46,15 +46,17 @@ </td> </tr> <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$formValues.contributionType_name} - </td> + {if !empty($formValues.contributionType_name)} + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$formValues.contributionType_name} + </td> + {/if} </tr> - {if $lineItem and !$is_quick_config} + {if !empty($lineItem) and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -63,7 +65,7 @@ <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <th>{ts}Subtotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -81,11 +83,11 @@ <td> {$line.unit_price|crmMoney:$currency} </td> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <td> {$line.unit_price*$line.qty|crmMoney:$currency} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -107,7 +109,7 @@ </tr> {/foreach} {/if} - {if $getTaxDetails && $dataArray} + {if !empty($getTaxDetails) && !empty($dataArray)} <tr> <td {$labelStyle}> {ts} Amount before Tax : {/ts} @@ -120,10 +122,10 @@ {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0 || $value != ''} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -150,7 +152,7 @@ </td> </tr> - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date Received{/ts} @@ -172,7 +174,7 @@ </tr> {/if} - {if $formValues.paidBy and !$formValues.hidden_CreditCard} + {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -181,7 +183,7 @@ {$formValues.paidBy} </td> </tr> - {if $formValues.check_number} + {if !empty($formValues.check_number)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -193,7 +195,7 @@ {/if} {/if} - {if $formValues.trxn_id} + {if !empty($formValues.trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction ID{/ts} @@ -204,7 +206,7 @@ </tr> {/if} - {if $ccContribution} + {if !empty($ccContribution)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -230,7 +232,7 @@ </tr> {/if} - {if $softCreditTypes and $softCredits} + {if !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} <tr> <th {$headerStyle}> @@ -250,7 +252,7 @@ {/foreach} {/if} - {if $customGroup} + {if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} <tr> <th {$headerStyle}> @@ -270,7 +272,7 @@ {/foreach} {/if} - {if $formValues.product_name} + {if !empty($formValues.product_name)} <tr> <th {$headerStyle}> {ts}Premium Information{/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 index 50e0cd4e37..8776aa8772 100644 --- a/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl @@ -1,6 +1,6 @@ {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $formValues.receipt_text} +{if !empty($formValues.receipt_text)} {$formValues.receipt_text} {else}{ts}Below you will find a receipt for this contribution.{/ts}{/if} @@ -9,35 +9,37 @@ =========================================================== {ts}Contributor{/ts}: {contact.display_name} +{if !empty($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_qty}{ts}Qty{/ts}{/capture} {capture assign=ts_each}{ts}Each{/ts}{/capture} -{if $getTaxDetails} +{if !empty($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"} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($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"} +{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 !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($getTaxDetails) && !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}% : {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency} {/if} {/foreach} {/if} @@ -46,23 +48,23 @@ {ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency} {/if} {ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency} -{if $receive_date} +{if !empty($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} +{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)} {ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} +{if !empty($formValues.check_number)} {ts}Check Number{/ts}: {$formValues.check_number} {/if} {/if} -{if $formValues.trxn_id} +{if !empty($formValues.trxn_id)} {ts}Transaction ID{/ts}: {$formValues.trxn_id} {/if} -{if $ccContribution} +{if !empty($ccContribution)} =========================================================== {ts}Billing Name and Address{/ts} @@ -78,7 +80,7 @@ {$credit_card_number} {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} {/if} -{if $customGroup} +{if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} =========================================================== {$customName} @@ -89,7 +91,7 @@ {/foreach} {/if} -{if $softCreditTypes and $softCredits} +{if !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} =========================================================== {$softCreditType} @@ -100,7 +102,7 @@ {/foreach} {/if} -{if $formValues.product_name} +{if !empty($formValues.product_name)} =========================================================== {ts}Premium Information{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl index fd9c0b8e84..51ae892849 100644 --- a/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl @@ -22,12 +22,12 @@ <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $receipt_text} + {if !empty($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 *} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -44,7 +44,7 @@ </th> </tr> - {if $lineItem and $priceSetID and !$is_quick_config} + {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> @@ -54,7 +54,7 @@ <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}Subtotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -72,11 +72,11 @@ <td> {$line.unit_price|crmMoney:$currency} </td> - {if $getTaxDetails} + {if !empty($getTaxDetails)} <td> {$line.unit_price*$line.qty|crmMoney:$currency} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -97,7 +97,7 @@ </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} <tr> <td {$labelStyle}> {ts} Amount before Tax : {/ts} @@ -110,17 +110,17 @@ {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax{/ts} @@ -141,7 +141,7 @@ {else} - {if $totalTaxAmount} + {if !empty($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -156,7 +156,7 @@ {ts}Amount{/ts} </td> <td {$valueStyle}> - {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if} + {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if} </td> </tr> @@ -165,7 +165,7 @@ {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date{/ts} @@ -176,7 +176,7 @@ </tr> {/if} - {if $is_monetary and $trxn_id} + {if !empty($is_monetary) and !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -187,7 +187,7 @@ </tr> {/if} - {if $is_recur} + {if !empty($is_recur)} <tr> <td colspan="2" {$labelStyle}> {ts}This is a recurring contribution.{/ts} @@ -228,7 +228,7 @@ </td> </tr> {/foreach} - {elseif $softCreditTypes and $softCredits} + {elseif !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} <tr> <th {$headerStyle}> @@ -248,7 +248,7 @@ {/foreach} {/if} - {if $pcpBlock} + {if !empty($pcpBlock)} <tr> <th {$headerStyle}> {ts}Personal Campaign Page{/ts} @@ -284,7 +284,7 @@ {/if} {/if} - {if $onBehalfProfile} + {if !empty($onBehalfProfile)} <tr> <th {$headerStyle}> {$onBehalfProfile_grouptitle} @@ -302,7 +302,7 @@ {/foreach} {/if} - {if $isShare} + {if !empty($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} @@ -311,7 +311,7 @@ </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -324,7 +324,7 @@ {$email} </td> </tr> - {elseif $email} + {elseif !empty($email)} <tr> <th {$headerStyle}> {ts}Registered Email{/ts} @@ -337,7 +337,7 @@ </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -352,7 +352,7 @@ </tr> {/if} - {if $selectPremium} + {if !empty($selectPremium)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -403,20 +403,20 @@ </td> </tr> {/if} - {if $contact_email OR $contact_phone} + {if !empty($contact_email) OR !empty($contact_phone)} <tr> <td colspan="2" {$valueStyle}> <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} + {if !empty($contact_email)} <p>{$contact_email}</p> {/if} - {if $contact_phone} + {if !empty($contact_phone)} <p>{$contact_phone}</p> {/if} </td> </tr> {/if} - {if $is_deductible AND $price} + {if !empty($is_deductible) AND !empty($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> @@ -425,14 +425,14 @@ {/if} {/if} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -445,14 +445,14 @@ {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} diff --git a/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl index 4c86a366c7..87d01e7120 100644 --- a/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl @@ -1,11 +1,11 @@ {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $receipt_text} +{if !empty($receipt_text)} {$receipt_text} {/if} {if $is_pay_later} =========================================================== -{$pay_later_receipt} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} =========================================================== {/if} @@ -14,55 +14,55 @@ {ts}Contribution Information{/ts} =========================================================== -{if $lineItem and $priceSetID and !$is_quick_config} +{if $lineItem and $priceSetID and empty($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} +{if !empty($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"} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($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} +{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if} {/if} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Date{/ts}: {$receive_date|crmDate} {/if} -{if $is_monetary and $trxn_id} +{if !empty($is_monetary) and !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $is_recur} +{if !empty($is_recur)} {ts}This is a recurring contribution.{/ts} {if $cancelSubscriptionUrl} @@ -94,7 +94,7 @@ {foreach from=$honoreeProfile item=value key=label} {$label}: {$value} {/foreach} -{elseif $softCreditTypes and $softCredits} +{elseif !empty($softCreditTypes) and !empty($softCredits)} {foreach from=$softCreditTypes item=softCreditType key=n} =========================================================== {$softCreditType} @@ -104,7 +104,7 @@ {/foreach} {/foreach} {/if} -{if $pcpBlock} +{if !empty($pcpBlock)} =========================================================== {ts}Personal Campaign Page{/ts} @@ -116,7 +116,7 @@ {if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} {/if} -{if $onBehalfProfile} +{if !empty($onBehalfProfile)} =========================================================== {ts}On Behalf Of{/ts} @@ -126,7 +126,7 @@ {/foreach} {/if} -{if $billingName} +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -135,14 +135,14 @@ {$address} {$email} -{elseif $email} +{elseif !empty($email)} =========================================================== {ts}Registered Email{/ts} =========================================================== {$email} {/if} {* End billingName or Email*} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -153,7 +153,7 @@ {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} {/if} -{if $selectPremium } +{if !empty($selectPremium )} =========================================================== {ts}Premium Information{/ts} @@ -171,42 +171,42 @@ {if $end_date} {ts}End Date{/ts}: {$end_date|crmDate} {/if} -{if $contact_email OR $contact_phone} +{if !empty($contact_email) OR !empty($contact_phone)} {ts}For information about this premium, contact:{/ts} -{if $contact_email} +{if !empty($contact_email)} {$contact_email} {/if} -{if $contact_phone} +{if !empty($contact_phone)} {$contact_phone} {/if} {/if} -{if $is_deductible AND $price} +{if !empty($is_deductible) AND !empty($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} +{if !empty($customPre)} =========================================================== {$customPre_grouptitle} =========================================================== {foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} =========================================================== {$customPost_grouptitle} =========================================================== {foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl index 876a478e01..3f4b816c74 100644 --- a/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl @@ -23,22 +23,22 @@ <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} <p>{$event.confirm_email_text|htmlize}</p> {/if} - {if $isOnWaitlist} + {if !empty($isOnWaitlist)} <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} + {if !empty($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} + {elseif !empty($isRequireApproval)} <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} + {if !empty($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 *} + {elseif !empty($is_pay_later)} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -58,7 +58,7 @@ </td> </tr> - {if $event.participant_role neq 'Attendee' and $defaultRole} + {if !empty($event.participant_role) and $event.participant_role neq 'Attendee' and !empty($defaultRole)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -69,7 +69,7 @@ </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -77,7 +77,7 @@ </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -113,7 +113,7 @@ {/foreach} {/if} - {if $event.is_public} + {if !empty($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} @@ -136,18 +136,18 @@ {/if} - {if $event.is_monetary} + {if !empty($event.is_monetary)} <tr> <th {$headerStyle}> - {$event.fee_label} + {if !empty($event.fee_label)}{$event.fee_label}{/if} </th> </tr> - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} {if $value neq 'skip'} - {if $isPrimary} + {if !empty($isPrimary)} {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} <tr> <td colspan="2" {$labelStyle}> @@ -163,13 +163,13 @@ <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($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} + {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if} </tr> {foreach from=$value item=line} <tr> @@ -182,11 +182,11 @@ <td> {$line.unit_price|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -201,7 +201,7 @@ <td> {$line.line_total+$line.tax_amount|crmMoney} </td> - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <td> {$line.participant_count} </td> @@ -213,7 +213,8 @@ </tr> {/if} {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($totalAmount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -222,13 +223,14 @@ {$totalAmount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -236,7 +238,7 @@ {/if} {/if} - {if $amount && !$lineItem} + {if !empty($amount) && !$lineItem} {foreach from=$amount item=amnt key=level} <tr> <td colspan="2" {$valueStyle}> @@ -245,7 +247,7 @@ </tr> {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -255,20 +257,20 @@ </td> </tr> {/if} - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td {$labelStyle}> - {if $balanceAmount} + {if isset($balanceAmount)} {ts}Total Paid{/ts} {else} {ts}Total Amount{/ts} {/if} </td> <td {$valueStyle}> - {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} + {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} </td> </tr> - {if $balanceAmount} + {if isset($balanceAmount)} <tr> <td {$labelStyle}> {ts}Balance{/ts} @@ -278,7 +280,7 @@ </td> </tr> {/if} - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <tr> <td {$labelStyle}> {ts}Total Participants{/ts}</td> @@ -300,10 +302,10 @@ </td> </tr> {/if} - {if $is_pay_later} + {if !empty($is_pay_later)} <tr> <td colspan="2" {$labelStyle}> - {$pay_later_receipt} + {if isset($pay_later_receipt)}{$pay_later_receipt}{/if} </td> </tr> {/if} @@ -319,7 +321,7 @@ </tr> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Transaction Date{/ts} @@ -330,7 +332,7 @@ </tr> {/if} - {if $financialTypeName} + {if !empty($financialTypeName)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -341,7 +343,7 @@ </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -352,7 +354,7 @@ </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -363,7 +365,7 @@ </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -374,7 +376,7 @@ </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -388,7 +390,7 @@ </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -407,14 +409,14 @@ {/if} {* End of conditional section for Paid events *} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -427,14 +429,14 @@ {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -447,7 +449,7 @@ {/foreach} {/if} - {if $customProfile} + {if !empty($customProfile)} {foreach from=$customProfile item=value key=customName} <tr> <th {$headerStyle}> @@ -480,7 +482,7 @@ {/foreach} {/if} - {if $customGroup} + {if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} <tr> <th {$headerStyle}> diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl index e128670c91..c5c1741a81 100644 --- a/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl @@ -1,58 +1,58 @@ {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} {$event.confirm_email_text} {/if} -{if $isOnWaitlist} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($isOnWaitlist)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}You have been added to the WAIT LIST for this event.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} +{elseif !empty($isRequireApproval)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Your registration has been submitted.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{elseif $is_pay_later} +{elseif !empty($is_pay_later)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {/if} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Event Information and Location{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($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} +{if !empty($event.participant_role) and $event.participant_role neq 'Attendee' and empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -66,88 +66,90 @@ {ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} {/if} -{if $event.is_public} +{if !empty($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 !empty($email)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Registered Email{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$email} {/if} -{if $event.is_monetary} {* This section for Paid events only.*} +{if !empty($event.is_monetary)} {* This section for Paid events only.*} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($event.fee_label)}{$event.fee_label}{/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{if $lineItem}{foreach from=$lineItem item=value key=priceset} +{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset} {if $value neq 'skip'} -{if $isPrimary} +{if !empty($isPrimary)} {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} {ts 1=$priceset+1}Participant %1{/ts} {/if} {/if} ----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +---------------------------------------------------------{if !empty($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} +{if !empty($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} +{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if !empty($dataArray)} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:"%10s"}{/if} +----------------------------------------------------------{if !empty($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"} +{if !empty($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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:"%10s"}{/if} {/foreach} {/if} {/foreach} -{if $dataArray} +{if !empty($dataArray)} +{if isset($totalAmount) and isset($totalTaxAmount)} {ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} +{/if} {foreach from=$dataArray item=value key=priceset} {if $priceset || $priceset == 0} -{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} {/if} -{if $amount && !$lineItem} +{if !empty($amount) && !$lineItem} {foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{if $isPrimary} +{if !empty($isPrimary)} -{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} +{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} -{if $balanceAmount} +{if !empty($balanceAmount)} {ts}Balance{/ts}: {$balanceAmount|crmMoney} {/if} -{if $pricesetFieldsCount } +{if !empty($pricesetFieldsCount) } {assign var="count" value= 0} {foreach from=$lineItem item=pcount} {assign var="lineItemCount" value=0} @@ -165,12 +167,12 @@ {ts}Total Participants{/ts}: {$count} {/if} -{if $is_pay_later } +{if !empty($is_pay_later) } -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {/if} @@ -180,35 +182,35 @@ {if $receive_date} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $financialTypeName} +{if !empty($financialTypeName)} {ts}Financial Type{/ts}: {$financialTypeName} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} -{if $billingName} +{if !empty($billingName)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts}Billing Name and Address{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$billingName} {$address} {/if} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$credit_card_type} {$credit_card_number} @@ -217,53 +219,53 @@ {/if} {/if} {* End of conditional section for Paid events *} -{if $customPre} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($customPre)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customPre_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$customPre item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$value} {/if} {/foreach} {/if} -{if $customPost} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($customPost)} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customPost_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$customPost item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$value} {/if} {/foreach} {/if} -{if $customProfile} +{if !empty($customProfile)} {foreach from=$customProfile item=value key=customName} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {ts 1=$customName+1}Participant Information - Participant %1{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$value item=val key=field} {if $field eq 'additionalCustomPre' or $field eq 'additionalCustomPost' } {if $field eq 'additionalCustomPre' } -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {$additionalCustomPre_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {else} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {$additionalCustomPost_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if} {/if} {foreach from=$val item=v key=f} @@ -273,12 +275,12 @@ {/foreach} {/foreach} {/if} -{if $customGroup} +{if !empty($customGroup)} {foreach from=$customGroup item=value key=customName} -=========================================================={if $pricesetFieldsCount }===================={/if} +=========================================================={if !empty($pricesetFieldsCount) }===================={/if} {$customName} -=========================================================={if $pricesetFieldsCount }===================={/if} +=========================================================={if !empty($pricesetFieldsCount) }===================={/if} {foreach from=$value item=v key=n} {$n}: {$v} diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl index ef73f07f4c..07b9e71a4c 100644 --- a/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl @@ -27,7 +27,7 @@ <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} <p>{$event.confirm_email_text|htmlize}</p> {else} @@ -38,18 +38,18 @@ {/if} <p> - {if $isOnWaitlist} + {if !empty($isOnWaitlist)} <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} + {if !empty($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} + {elseif !empty($isRequireApproval)} <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} + {if !empty($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 *} + {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -91,7 +91,7 @@ </tr> {/if} - {if $event.participant_role neq 'Attendee' and $defaultRole} + {if !empty($event.participant_role) and $event.participant_role neq 'Attendee' and !empty($defaultRole)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -102,7 +102,7 @@ </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -110,7 +110,7 @@ </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} @@ -146,7 +146,7 @@ {/foreach} {/if} - {if $event.is_public} + {if !empty($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} @@ -155,7 +155,7 @@ </tr> {/if} - {if $event.is_share} + {if !empty($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} @@ -163,7 +163,7 @@ </td> </tr> {/if} - {if $payer.name} + {if !empty($payer.name)} <tr> <th {$headerStyle}> {ts}You were registered by:{/ts} @@ -175,22 +175,22 @@ </td> </tr> {/if} - {if $event.is_monetary and not $isRequireApproval} + {if !empty($event.is_monetary) and empty($isRequireApproval)} <tr> <th {$headerStyle}> - {$event.fee_label} + {if !empty($event.fee_label)}{$event.fee_label}{/if} </th> </tr> - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} {if $value neq 'skip'} - {if $isPrimary} + {if !empty($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} + {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if} </td> </tr> {/if} @@ -202,13 +202,13 @@ <th>{ts}Item{/ts}</th> <th>{ts}Qty{/ts}</th> <th>{ts}Each{/ts}</th> - {if $dataArray} + {if !empty($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} + {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if} </tr> {foreach from=$value item=line} <tr> @@ -221,11 +221,11 @@ <td {$tdStyle}> {$line.unit_price|crmMoney:$currency} </td> - {if $dataArray} + {if !empty($dataArray)} <td {$tdStyle}> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td {$tdStyle}> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -240,10 +240,10 @@ <td {$tdStyle}> {$line.line_total+$line.tax_amount|crmMoney:$currency} </td> - {if $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if} + {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if} </tr> {/foreach} - {if $individual} + {if !empty($individual)} <tr {$participantTotal}> <td colspan=3>{ts}Participant Total{/ts}</td> <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td> @@ -256,7 +256,8 @@ </tr> {/if} {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($totalAmount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts} Amount Before Tax: {/ts} @@ -265,13 +266,14 @@ {$totalAmount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -279,7 +281,7 @@ {/if} {/if} - {if $amounts && !$lineItem} + {if !empty($amounts) && empty($lineItem)} {foreach from=$amounts item=amnt key=level} <tr> <td colspan="2" {$valueStyle}> @@ -289,7 +291,7 @@ {/foreach} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -299,16 +301,16 @@ </td> </tr> {/if} - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td {$labelStyle}> {ts}Total Amount{/ts} </td> <td {$valueStyle}> - {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} + {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} </td> </tr> - {if $pricesetFieldsCount } + {if !empty($pricesetFieldsCount) } <tr> <td {$labelStyle}> {ts}Total Participants{/ts}</td> @@ -341,7 +343,7 @@ </tr> {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Transaction Date{/ts} @@ -352,7 +354,7 @@ </tr> {/if} - {if $financialTypeName} + {if !empty($financialTypeName)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -363,7 +365,7 @@ </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -374,7 +376,7 @@ </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -385,7 +387,7 @@ </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -396,7 +398,7 @@ </tr> {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -410,7 +412,7 @@ </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -430,11 +432,11 @@ {/if} {* End of conditional section for Paid events *} -{if $customPre} +{if !empty($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} + {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}>{$customName}</td> <td {$valueStyle}>{$customValue}</td> @@ -444,11 +446,11 @@ {/foreach} {/if} -{if $customPost} +{if !empty($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} + {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} <tr> <td {$labelStyle}>{$customName}</td> <td {$valueStyle}>{$customValue}</td> @@ -458,7 +460,7 @@ {/foreach} {/if} -{if $customProfile} +{if !empty($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} @@ -475,10 +477,10 @@ {/if} </table> - {if $event.allow_selfcancelxfer } + {if !empty($event.allow_selfcancelxfer) } <tr> <td colspan="2" {$valueStyle}> - {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br /> + {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($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> diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl index 7bb2730637..da1dab7259 100644 --- a/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl +++ b/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl @@ -1 +1 @@ -{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $isRequireApproval}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} +{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl index adca08ff5f..610b9b274a 100644 --- a/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl @@ -1,54 +1,54 @@ {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))} {$event.confirm_email_text} {else} {ts}Thank you for your registration.{/ts} {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts} - {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if} + {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This 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} +{if !empty($isOnWaitlist)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}You have been added to the WAIT LIST for this event.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} +{elseif !empty($isRequireApproval)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Your registration has been submitted.{/ts} -{if $isPrimary} +{if !empty($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} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} +{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {/if} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Event Information and Location{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($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} +{if !empty($conference_sessions)} {ts}Your schedule:{/ts} @@ -66,15 +66,15 @@ {/foreach} {/if} -{if $event.participant_role neq 'Attendee' and $defaultRole} +{if !empty($event.participant_role) and $event.participant_role neq 'Attendee' and !empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} @@ -88,82 +88,84 @@ {ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} {/if} -{if $event.is_public} +{if !empty($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} +{if !empty($payer.name)} You were registered by: {$payer.name} {/if} -{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*} +{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty ($event.fee_label)}{$event.fee_label}{/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{if $lineItem}{foreach from=$lineItem item=value key=priceset} +{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset} {if $value neq 'skip'} -{if $isPrimary} +{if !empty($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} +-----------------------------------------------------------{if !empty($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} +{if !empty($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} +{if !empty($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 !empty($dataArray)} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:"%10s"}{/if} +-----------------------------------------------------------{if !empty($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"} +{if !empty($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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:"%10s"}{/if} {/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 !empty($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} +{if !empty($dataArray)} +{if isset($totalAmount) and isset($totalTaxAmount)} {ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} +{/if} {foreach from=$dataArray item=value key=priceset} {if $priceset || $priceset == 0} -{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} {/if} -{if $amounts && !$lineItem} +{if !empty($amounts) && empty($lineItem)} {foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label} {/foreach} {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{if $isPrimary } +{if !empty($isPrimary) } -{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} +{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if} -{if $pricesetFieldsCount } +{if !empty($pricesetFieldsCount) } {assign var="count" value= 0} {foreach from=$lineItem item=pcount} {assign var="lineItemCount" value=0} @@ -184,39 +186,39 @@ You were registered by: {$payer.name} {if $register_date} {ts}Registration Date{/ts}: {$register_date|crmDate} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $financialTypeName} +{if !empty($financialTypeName)} {ts}Financial Type{/ts}: {$financialTypeName} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} -{if $billingName} +{if !empty($billingName)} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Billing Name and Address{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$billingName} {$address} {/if} -{if $credit_card_type} -==========================================================={if $pricesetFieldsCount }===================={/if} +{if !empty($credit_card_type)} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts}Credit Card Information{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$credit_card_type} {$credit_card_number} @@ -225,49 +227,49 @@ You were registered by: {$payer.name} {/if} {/if} {* End of conditional section for Paid events *} -{if $customPre} +{if !empty($customPre)} {foreach from=$customPre item=customPr key=i} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$customPre_grouptitle.$i} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$customPr item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} {foreach from=$customPost item=customPos key=j} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {$customPost_grouptitle.$j} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$customPos item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/foreach} {/if} -{if $customProfile} +{if !empty($customProfile)} {foreach from=$customProfile.profile item=eachParticipant key=participantID} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {ts 1=$participantID+2}Participant Information - Participant %1{/ts} -==========================================================={if $pricesetFieldsCount }===================={/if} +==========================================================={if !empty($pricesetFieldsCount)}===================={/if} {foreach from=$eachParticipant item=eachProfile key=pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if} {$customProfile.title.$pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} +----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if} {foreach from=$eachProfile item=val key=field} {foreach from=$val item=v key=f} @@ -278,8 +280,8 @@ You were registered by: {$payer.name} {/foreach} {/if} -{if $event.allow_selfcancelxfer } -{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if} +{if !empty($event.allow_selfcancelxfer) } +{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($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 index 0228056581..9cce5dc6a4 100644 --- a/civicrm/xml/templates/message_templates/event_registration_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/event_registration_receipt_html.tpl @@ -16,15 +16,15 @@ </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. + This is being sent to you as a {if !empty($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> + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {/if} - <p>Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($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} @@ -62,7 +62,7 @@ </tr> </table> {/if} -{if $source} +{if !empty($source)} <p> </p> {$source} {/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 index 8a58ea90c0..907c074586 100644 --- a/civicrm/xml/templates/message_templates/event_registration_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/event_registration_receipt_text.tpl @@ -3,14 +3,14 @@ {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. + This is being sent to you as a {if !empty($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 isset($pay_later_receipt)}{$pay_later_receipt}{/if} {/if} - Your order number is #{$transaction_id}. {if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + Your order number is #{$transaction_id}. {if !empty($line_items) && empty($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} @@ -27,7 +27,7 @@ {$email} {/if} -{if $source} +{if !empty($source)} {$source} {/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 index 3cc8fe6f4c..c40dd6eac8 100644 --- a/civicrm/xml/templates/message_templates/membership_offline_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/membership_offline_receipt_html.tpl @@ -24,9 +24,9 @@ <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $formValues.receipt_text_signup} + {if !empty($formValues.receipt_text_signup)} <p>{$formValues.receipt_text_signup|htmlize}</p> - {elseif $formValues.receipt_text_renewal} + {elseif !empty($formValues.receipt_text_renewal)} <p>{$formValues.receipt_text_renewal|htmlize}</p> {else} <p>{ts}Thank you for this contribution.{/ts}</p> @@ -36,7 +36,7 @@ <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if !$lineItem} + {if empty($lineItem)} <tr> <th {$headerStyle}> {ts}Membership Information{/ts} @@ -51,8 +51,8 @@ </td> </tr> {/if} - {if ! $cancelled} - {if !$lineItem} + {if empty($cancelled)} + {if empty($lineItem)} <tr> <td {$labelStyle}> {ts}Membership Start Date{/ts} @@ -76,7 +76,7 @@ {ts}Membership Fee{/ts} </th> </tr> - {if $formValues.contributionType_name} + {if !empty($formValues.contributionType_name)} <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -87,7 +87,7 @@ </tr> {/if} - {if $lineItem} + {if !empty($lineItem)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -95,7 +95,7 @@ <tr> <th>{ts}Item{/ts}</th> <th>{ts}Fee{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}SubTotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -113,11 +113,11 @@ <td> {$line.line_total|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -144,7 +144,8 @@ </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} + {if isset($formValues.total_amount) and isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -153,13 +154,14 @@ {$formValues.total_amount-$totalTaxAmount|crmMoney} </td> </tr> + {/if} {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {elseif $priceset == 0} - <td> {ts}No{/ts} {$taxTerm}</td> + <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> @@ -184,7 +186,7 @@ {$formValues.total_amount|crmMoney} </td> </tr> - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date Received{/ts} @@ -194,7 +196,7 @@ </td> </tr> {/if} - {if $formValues.paidBy} + {if !empty($formValues.paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -203,7 +205,7 @@ {$formValues.paidBy} </td> </tr> - {if $formValues.check_number} + {if !empty($formValues.check_number)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -220,12 +222,12 @@ </td> </tr> - {if $isPrimary} + {if !empty($isPrimary)} <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -239,7 +241,7 @@ </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -266,7 +268,7 @@ </tr> {/if} - {if $customValues} + {if !empty($customValues)} <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> diff --git a/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl index 802deb0238..0817ad6bb4 100644 --- a/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl @@ -1,20 +1,20 @@ {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $formValues.receipt_text_signup} +{if !empty($formValues.receipt_text_signup)} {$formValues.receipt_text_signup} -{elseif $formValues.receipt_text_renewal} +{elseif !empty($formValues.receipt_text_renewal)} {$formValues.receipt_text_renewal} {else}{ts}Thank you for this contribution.{/ts}{/if} -{if !$lineItem} +{if empty($lineItem)} =========================================================== {ts}Membership Information{/ts} =========================================================== {ts}Membership Type{/ts}: {$membership_name} {/if} -{if ! $cancelled} -{if !$lineItem} +{if empty($cancelled)} +{if empty($lineItem)} {ts}Membership Start Date{/ts}: {$mem_start_date} {ts}Membership End Date{/ts}: {$mem_end_date} {/if} @@ -24,14 +24,14 @@ {ts}Membership Fee{/ts} =========================================================== -{if $formValues.contributionType_name} +{if !empty($formValues.contributionType_name)} {ts}Financial Type{/ts}: {$formValues.contributionType_name} {/if} -{if $lineItem} +{if !empty($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} +{if !empty($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} @@ -39,22 +39,22 @@ {/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"} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"} %: {$value|crmMoney:$currency} {elseif $priceset == 0} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} @@ -66,20 +66,20 @@ {/if} {ts}Amount{/ts}: {$formValues.total_amount|crmMoney} -{if $receive_date} +{if !empty($receive_date)} {ts}Date Received{/ts}: {$receive_date|truncate:10:''|crmDate} {/if} -{if $formValues.paidBy} +{if !empty($formValues.paidBy)} {ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} +{if !empty($formValues.check_number)} {ts}Check Number{/ts}: {$formValues.check_number} {/if} {/if} {/if} {/if} -{if $isPrimary } -{if $billingName} +{if !empty($isPrimary) } +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -89,7 +89,7 @@ {$address} {/if} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -100,7 +100,7 @@ {/if} {/if} -{if $customValues} +{if !empty($customValues)} =========================================================== {ts}Membership Options{/ts} diff --git a/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl index 3e8073b30d..acb379db19 100644 --- a/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl @@ -22,12 +22,12 @@ <tr> <td> {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}<p>{$greeting},</p>{/if} - {if $receipt_text} + {if !empty($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 *} + <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *} {/if} </td> @@ -79,7 +79,7 @@ </th> </tr> - {if !$useForMember and $membership_amount and $is_quick_config} + {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)} <tr> <td {$labelStyle}> @@ -108,7 +108,7 @@ </tr> {/if} - {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config} + {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> @@ -150,7 +150,7 @@ </tr> {else} - {if $useForMember && $lineItem and !$is_quick_config} + {if $useForMember && $lineItem and empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} <tr> <td colspan="2" {$valueStyle}> @@ -158,7 +158,7 @@ <tr> <th>{ts}Item{/ts}</th> <th>{ts}Fee{/ts}</th> - {if $dataArray} + {if !empty($dataArray)} <th>{ts}SubTotal{/ts}</th> <th>{ts}Tax Rate{/ts}</th> <th>{ts}Tax Amount{/ts}</th> @@ -175,11 +175,11 @@ <td> {$line.line_total|crmMoney} </td> - {if $dataArray} + {if !empty($dataArray)} <td> {$line.unit_price*$line.qty|crmMoney} </td> - {if $line.tax_rate != "" || $line.tax_amount != ""} + {if isset($line.tax_rate) and ($line.tax_rate != "" || $line.tax_amount != "")} <td> {$line.tax_rate|string_format:"%.2f"}% </td> @@ -206,7 +206,7 @@ </td> </tr> {/foreach} - {if $dataArray} + {if !empty($dataArray)} <tr> <td {$labelStyle}> {ts}Amount Before Tax:{/ts} @@ -218,17 +218,17 @@ {foreach from=$dataArray item=value key=priceset} <tr> {if $priceset || $priceset == 0} - <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%</td> <td> {$value|crmMoney:$currency}</td> {else} - <td> {ts}NO{/ts} {$taxTerm}</td> + <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td> <td> {$value|crmMoney:$currency}</td> {/if} </tr> {/foreach} {/if} {/if} - {if $totalTaxAmount} + {if isset($totalTaxAmount)} <tr> <td {$labelStyle}> {ts}Total Tax Amount{/ts} @@ -243,14 +243,14 @@ {ts}Amount{/ts} </td> <td {$valueStyle}> - {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if} + {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if} </td> </tr> {/if} - {elseif $membership_amount} + {elseif isset($membership_amount)} <tr> @@ -270,7 +270,7 @@ {/if} - {if $receive_date} + {if !empty($receive_date)} <tr> <td {$labelStyle}> {ts}Date{/ts} @@ -281,7 +281,7 @@ </tr> {/if} - {if $is_monetary and $trxn_id} + {if !empty($is_monetary) and !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -292,7 +292,7 @@ </tr> {/if} - {if $membership_trx_id} + {if !empty($membership_trx_id)} <tr> <td {$labelStyle}> {ts}Membership Transaction #{/ts} @@ -302,7 +302,7 @@ </td> </tr> {/if} - {if $is_recur} + {if !empty($is_recur)} <tr> <td colspan="2" {$labelStyle}> {ts}This membership will be renewed automatically.{/ts} @@ -338,7 +338,7 @@ {/foreach} {/if} - {if $pcpBlock} + {if !empty($pcpBlock)} <tr> <th {$headerStyle}> {ts}Personal Campaign Page{/ts} @@ -374,7 +374,7 @@ {/if} {/if} - {if $onBehalfProfile} + {if !empty($onBehalfProfile)} <tr> <th {$headerStyle}> {$onBehalfProfile_grouptitle} @@ -392,7 +392,7 @@ {/foreach} {/if} - {if $billingName} + {if !empty($billingName)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -405,7 +405,7 @@ {$email} </td> </tr> - {elseif $email} + {elseif !empty($email)} <tr> <th {$headerStyle}> {ts}Registered Email{/ts} @@ -418,7 +418,7 @@ </tr> {/if} - {if $credit_card_type} + {if !empty($credit_card_type)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -433,7 +433,7 @@ </tr> {/if} - {if $selectPremium} + {if !empty($selectPremium)} <tr> <th {$headerStyle}> {ts}Premium Information{/ts} @@ -484,20 +484,20 @@ </td> </tr> {/if} - {if $contact_email OR $contact_phone} + {if !empty($contact_email) OR !empty($contact_phone)} <tr> <td colspan="2" {$valueStyle}> <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} + {if !empty($contact_email)} <p>{$contact_email}</p> {/if} - {if $contact_phone} + {if !empty($contact_phone)} <p>{$contact_phone}</p> {/if} </td> </tr> {/if} - {if $is_deductible AND $price} + {if !empty($is_deductible) AND !empty($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> @@ -506,14 +506,14 @@ {/if} {/if} - {if $customPre} + {if !empty($customPre)} <tr> <th {$headerStyle}> {$customPre_grouptitle} </th> </tr> {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} @@ -526,14 +526,14 @@ {/foreach} {/if} - {if $customPost} + {if !empty($customPost)} <tr> <th {$headerStyle}> {$customPost_grouptitle} </th> </tr> {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)} <tr> <td {$labelStyle}> {$customName} diff --git a/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl index 3c97b7e000..e85feaeec6 100644 --- a/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl @@ -1,11 +1,11 @@ {assign var="greeting" value="{contact.email_greeting}"}{if $greeting}{$greeting},{/if} -{if $receipt_text} +{if !empty($receipt_text)} {$receipt_text} {/if} {if $is_pay_later} =========================================================== -{$pay_later_receipt} +{if isset($pay_later_receipt)}{$pay_later_receipt}{/if} =========================================================== {/if} @@ -26,14 +26,14 @@ {ts}Membership Fee{/ts} =========================================================== -{if !$useForMember && $membership_amount && $is_quick_config} +{if !$useForMember && isset($membership_amount) && !empty($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} +{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)} {foreach from=$lineItem item=value key=priceset} --------------------------------------------------------- {capture assign=ts_item}{ts}Item{/ts}{/capture} @@ -49,11 +49,11 @@ {ts}Total Amount{/ts}: {$amount|crmMoney} {else} -{if $useForMember && $lineItem && !$is_quick_config} +{if $useForMember && $lineItem && empty($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} +{if !empty($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} @@ -61,35 +61,35 @@ {/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"} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if !empty($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"} +{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 !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if isset($line.tax_rate) and ($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} +{if !empty($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} +{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} {else} -{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency} {/if} {/foreach} {/if} -------------------------------------------------------------------------------------------------- {/if} -{if $totalTaxAmount} +{if isset($totalTaxAmount)} {ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} {/if} -{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if} +{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if} {/if} -{elseif $membership_amount} +{elseif isset($membership_amount)} =========================================================== {ts}Membership Fee{/ts} @@ -97,19 +97,19 @@ {ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} {/if} -{if $receive_date} +{if !empty($receive_date)} {ts}Date{/ts}: {$receive_date|crmDate} {/if} -{if $is_monetary and $trxn_id} +{if !empty($is_monetary) and !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $membership_trx_id} +{if !empty($membership_trx_id)} {ts}Membership Transaction #{/ts}: {$membership_trx_id} {/if} -{if $is_recur} +{if !empty($is_recur)} {ts}This membership will be renewed automatically.{/ts} {if $cancelSubscriptionUrl} @@ -132,7 +132,7 @@ {/foreach} {/if} -{if $pcpBlock} +{if !empty($pcpBlock)} =========================================================== {ts}Personal Campaign Page{/ts} @@ -144,7 +144,7 @@ {if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} {/if} -{if $onBehalfProfile} +{if !empty($onBehalfProfile)} =========================================================== {ts}On Behalf Of{/ts} @@ -154,7 +154,7 @@ {/foreach} {/if} -{if $billingName} +{if !empty($billingName)} =========================================================== {ts}Billing Name and Address{/ts} @@ -163,14 +163,14 @@ {$address} {$email} -{elseif $email} +{elseif !empty($email)} =========================================================== {ts}Registered Email{/ts} =========================================================== {$email} {/if} {* End billingName or email *} -{if $credit_card_type} +{if !empty($credit_card_type)} =========================================================== {ts}Credit Card Information{/ts} @@ -181,7 +181,7 @@ {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} {/if} -{if $selectPremium } +{if !empty($selectPremium)} =========================================================== {ts}Premium Information{/ts} @@ -199,42 +199,42 @@ {if $end_date} {ts}End Date{/ts}: {$end_date|crmDate} {/if} -{if $contact_email OR $contact_phone} +{if !empty($contact_email) OR !empty($contact_phone)} {ts}For information about this premium, contact:{/ts} -{if $contact_email} +{if !empty($contact_email)} {$contact_email} {/if} -{if $contact_phone} +{if !empty($contact_phone)} {$contact_phone} {/if} {/if} -{if $is_deductible AND $price} +{if !empty($is_deductible) AND !empty($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} +{if !empty($customPre)} =========================================================== {$customPre_grouptitle} =========================================================== {foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} {/if} -{if $customPost} +{if !empty($customPost)} =========================================================== {$customPost_grouptitle} =========================================================== {foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)} {$customName}: {$customValue} {/if} {/foreach} 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 index 8a09aef437..f463c1022a 100644 --- a/civicrm/xml/templates/message_templates/payment_or_refund_notification_html.tpl +++ b/civicrm/xml/templates/message_templates/payment_or_refund_notification_html.tpl @@ -71,7 +71,7 @@ </td> </tr> {/if} - {if $trxn_id} + {if !empty($trxn_id)} <tr> <td {$labelStyle}> {ts}Transaction #{/ts} @@ -81,7 +81,7 @@ </td> </tr> {/if} - {if $paidBy} + {if !empty($paidBy)} <tr> <td {$labelStyle}> {ts}Paid By{/ts} @@ -91,7 +91,7 @@ </td> </tr> {/if} - {if $checkNumber} + {if !empty($checkNumber)} <tr> <td {$labelStyle}> {ts}Check Number{/ts} @@ -105,6 +105,7 @@ <tr> <th {$headerStyle}>{ts}Contribution Details{/ts}</th> </tr> + {if isset($totalAmount)} <tr> <td {$labelStyle}> {ts}Total Fee{/ts} @@ -113,6 +114,8 @@ {$totalAmount|crmMoney} </td> </tr> + {/if} + {if isset($totalPaid)} <tr> <td {$labelStyle}> {ts}Total Paid{/ts} @@ -121,6 +124,8 @@ {$totalPaid|crmMoney} </td> </tr> + {/if} + {if isset($amountOwed)} <tr> <td {$labelStyle}> {ts}Balance Owed{/ts} @@ -129,6 +134,7 @@ {$amountOwed|crmMoney} </td> {* This will be zero after final payment. *} </tr> + {/if} </table> </td> @@ -136,7 +142,7 @@ <tr> <td> <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $billingName || $address} + {if !empty($billingName) || !empty($address)} <tr> <th {$headerStyle}> {ts}Billing Name and Address{/ts} @@ -144,12 +150,12 @@ </tr> <tr> <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} + {if !empty($billingName)}{$billingName}{/if}<br /> + {if !empty($address)}{$address|nl2br}{/if} </td> </tr> {/if} - {if $credit_card_number} + {if !empty($credit_card_number)} <tr> <th {$headerStyle}> {ts}Credit Card Information{/ts} @@ -176,7 +182,7 @@ </td> </tr> - {if $event.participant_role} + {if !empty($event.participant_role)} <tr> <td {$labelStyle}> {ts}Participant Role{/ts} @@ -187,7 +193,7 @@ </tr> {/if} - {if $isShowLocation} + {if !empty($isShowLocation)} <tr> <td colspan="2" {$valueStyle}> {$location.address.1.display|nl2br} @@ -195,7 +201,7 @@ </tr> {/if} - {if $location.phone.1.phone || $location.email.1.email} + {if !empty($location.phone.1.phone) || !empty($location.email.1.email)} <tr> <td colspan="2" {$labelStyle}> {ts}Event Contacts:{/ts} 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 index 5529ec39da..3499b2f9f6 100644 --- a/civicrm/xml/templates/message_templates/payment_or_refund_notification_text.tpl +++ b/civicrm/xml/templates/message_templates/payment_or_refund_notification_text.tpl @@ -31,13 +31,13 @@ {if $receive_date} {ts}Transaction Date{/ts}: {$receive_date|crmDate} {/if} -{if $trxn_id} +{if !empty($trxn_id)} {ts}Transaction #{/ts}: {$trxn_id} {/if} -{if $paidBy} +{if !empty($paidBy)} {ts}Paid By{/ts}: {$paidBy} {/if} -{if $checkNumber} +{if !empty($checkNumber)} {ts}Check Number{/ts}: {$checkNumber} {/if} @@ -46,24 +46,33 @@ {ts}Contribution Details{/ts} =============================================================================== +{if isset($totalAmount)} {ts}Total Fee{/ts}: {$totalAmount|crmMoney} +{/if} +{if isset($totalPaid)} {ts}Total Paid{/ts}: {$totalPaid|crmMoney} +{/if} +{if isset($amountOwed)} {ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *} +{/if} -{if $billingName || $address} +{if !empty($billingName) || !empty($address)} =============================================================================== {ts}Billing Name and Address{/ts} =============================================================================== - +{if !empty($billingName)} {$billingName} +{/if} +{if !empty($address)} {$address} {/if} +{/if} -{if $credit_card_number} +{if !empty($credit_card_number)} =========================================================== {ts}Credit Card Information{/ts} @@ -83,15 +92,15 @@ {$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} +{if !empty($event.participant_role)} {ts}Participant Role{/ts}: {$event.participant_role} {/if} -{if $isShowLocation} +{if !empty($isShowLocation)} {$location.address.1.display|strip_tags:false} {/if}{*End of isShowLocation condition*} -{if $location.phone.1.phone || $location.email.1.email} +{if !empty($location.phone.1.phone) || !empty($location.email.1.email)} {ts}Event Contacts:{/ts} {foreach from=$location.phone item=phone} diff --git a/civicrm/xml/templates/schema.tpl b/civicrm/xml/templates/schema.tpl index 980b8a78a5..d3e6189519 100644 --- a/civicrm/xml/templates/schema.tpl +++ b/civicrm/xml/templates/schema.tpl @@ -8,17 +8,17 @@ -- -- Generated from {$smarty.template} -- {$generated} --- {$database.comment} +--{if $database.comment} {$database.comment}{/if} -{include file="drop.tpl"} +{include file="drop.tpl" no_license=TRUE} -- /******************************************************* -- * -- * Create new tables -- * -- *******************************************************/ - {foreach from=$tables item=table} + -- /******************************************************* -- * -- * {$table.name} @@ -28,47 +28,28 @@ {/if} -- * -- *******************************************************/ -CREATE TABLE `{$table.name}` ( -{assign var='first' value=true} - +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} +{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 isset($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 *}{strip} + +{/strip}{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 !empty($table.index)}{foreach from=$table.index item=index}{if !$first}, +{/if}{assign var='first' value=false} + {if isset($index.unique)}UNIQUE {/if}INDEX `{$index.name}`({assign var='firstIndexField' value=true}{foreach from=$index.field item=fieldName}{strip} +{/strip}{if $firstIndexField}{assign var='firstIndexField' value=false}{else}, {/if}{$fieldName}{/foreach}){/foreach}{* table.index *} +{/if}{* table.index *} +{if !empty($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}{strip} + {* table.foreignKey *}{/strip} ) -{/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 *} +{if $mysql eq 'modern' }{$table.attributes_modern}{else}{$table.attributes_simple}{/if}; +{/foreach}{* tables *} diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index 41168302fb..9acc111112 100644 --- a/civicrm/xml/version.xml +++ b/civicrm/xml/version.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="iso-8859-1" ?> <version> - <version_no>5.38.1</version_no> + <version_no>5.39.0</version_no> </version> diff --git a/includes/civicrm.basepage.php b/includes/civicrm.basepage.php index f52e9ef3d9..fcde362188 100644 --- a/includes/civicrm.basepage.php +++ b/includes/civicrm.basepage.php @@ -522,6 +522,9 @@ class CiviCRM_For_WordPress_Basepage { */ public function basepage_render() { + // We no longer need this filter, so remove it. + remove_filter('the_content', [$this, 'basepage_render']); + // Hand back our base page markup. return $this->basepage_markup; diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 49b4a593f8..64151559fc 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -8,6 +8,7 @@ stopOnFailure="false" beStrictAboutTestsThatDoNotTestAnything="false" bootstrap="tests/phpunit/bootstrap.php" + cacheResult="false" > <testsuites> <testsuite name="CiviCRM-WordPress Test Suite"> -- GitLab